CPU使用率是如何計算的
當(dāng)我們的程序開得多了,CPU的使用率就會上升,那CPU使用率是如何計算的呢?下面就讓學(xué)習(xí)啦小編給大家說一下CPU使用率是如何計算的。
CPU使用率的算法
方法1: 使用CPU的處理能力基準(zhǔn)計算實時CPU占用率
具體描述:
(1) 在RTOS系統(tǒng)啟動前, 使用Tick中斷測試CPU的處理能力基準(zhǔn) CPUPerformanceBase;
(2) 在系統(tǒng)進入運行后, 使用空閑任務(wù)執(zhí)行與測試CPU處理能力基準(zhǔn)完全相同的算法, 得到RTCPUPerformance.
(3) 周期地計算CPU占用率, 并清除RTCPUPerformance的值, 一般每秒鐘計算一次:
RealTime CPU Load = 1 - (RTCPUPerformance/CPUPerformanceBase) * 100%
優(yōu)點:
(1) 實現(xiàn)簡單
(2) 所得到的CPU占用率非常準(zhǔn)確, 誤差只取決于CPUPerformanceBase的測試結(jié)果和整除時的余數(shù), 通常誤差小于
1%
(3) 不占用硬件資源
缺點:
(1) CPU必須一直全速運行, 不能修改CPU主頻, 也不能使CPU進入掉電保護模式
(2) 不能得到系統(tǒng)中每個任務(wù)對CPU占用率的貢獻
(3) 必須有一個空閑任務(wù)才能計算
評價:
這個算法只適用于工控, 電信等對不需要使CPU進入掉電保護模式的領(lǐng)域.
方法2: 在Tick中斷中對RTOS中的任務(wù)進行采樣
具體描述:
(1) 系統(tǒng)進入運行后, 每次Tick中斷發(fā)生時, 采樣一下當(dāng)前正在執(zhí)行的任務(wù), 如果CPU處于HALT態(tài), 累加haltTimes
(2) 周期性地計算CPU占用率, 一般每秒鐘計算一次, 并清除haltTimes:(tickIntFrequance表示Tick中斷的發(fā)生頻率)
RealTime CPU Load = haltTimes / tickIntFrequance
某個任務(wù)對CPU占用率的貢獻 = 一個周期內(nèi)該任務(wù)被采樣到的次數(shù) / tickIntFrequance * 100%
優(yōu)點:
(1) 實現(xiàn)簡單
(2) 支持CPU掉電模式
(3) 可以大致得到每個任務(wù)對CPU占用率的貢獻
缺點:
(1) 誤差取決于Tick的頻率和OS中每個任務(wù)的運行時長, 因此誤差非常大
評價:
這個算法適用于對CPU占用率精度要求不高的消息電子產(chǎn)品.
方法3: 精確計算每個任務(wù)對CPU占用率的貢獻
具體描述:
(1) 除Tick中斷外,另開一個比Tick中斷頻率快若干倍的周期中斷(就叫AUXTimer中斷吧), 這個中斷只對一個計數(shù)器執(zhí)
行一次累加.
(2) 在OS每次執(zhí)行任務(wù)切換時讀取該計數(shù)器的值(AUXTimer), 并保存到TCB中, 比如, 從任務(wù)Task1切換到任務(wù)Task2,
算法如下:
Task1, 換出動作:
task1的結(jié)束運行時間 = AUXTimer的當(dāng)前值
task1的總運行時間 = task1的總運行時間 + task1的結(jié)束運行時間 - task1的開始運行時間
Task2, 換入動作:
task2的開始運行時間 = AUXTimer的當(dāng)前值
(以上算法中沒有考慮數(shù)字回繞, 在工程實現(xiàn)時應(yīng)當(dāng)考慮, 發(fā)生回繞后任務(wù)的結(jié)束運行時間小于任務(wù)的開始運行時間.
(3) 周期性地計算CPU占用率, 一般每秒鐘計算一次, 并清除每個任務(wù)的總運行時間, 下面的公式中, 一個周期內(nèi)的總時
間等于AUXTimer周期除以Tick周期得到的倍數(shù):
某個任務(wù)對CPU占用率的貢獻 = 一個周期內(nèi)該任務(wù)的總運行時間 / 一個周期內(nèi)的總時間
RealTime CPU Load = 所有任務(wù)的CPU占用率之和
對這個方法進行簡單改進, 就可以實現(xiàn)對CPU占用率進行實時測量, 看官自己動動腦筋吧.
優(yōu)點:
(1) 誤差取決于AUXTimer中斷的頻率, 可以非常精確地得到每個任務(wù)對CPU占用率的貢獻
缺點:
(1) 復(fù)雜, 加大了任務(wù)切換時的開銷
(2) 和前兩種算法相比, 這個算法要多占用一個硬件資源
CPU使用率是如何計算的相關(guān)文章:
.
CPU使用率是如何計算的
上一篇:cpu是如何制造出來的
下一篇:cpu使用率高如何降低