TOP CPU佔用率原理及與實時執行緒的衝突

2021-06-22 11:09:30 字數 1312 閱讀 4485

linux下通過top或vmstat檢視系統cpu佔用率,在大多數情況下測得的cpu佔用率是準確的,但在時間精度較高的實時linux系統中,top測量的cpu佔用率可能會不準確,下面結合top原理和實時linux例項分析在實時系統中top的使用情況。

使用者時間(user time)、系統時間(system time)、等待時間(waiting time)、空閒時間(idle time)、nice時間、硬體終端處理時間等

其中主要計算使用者時間、系統時間和空閒時間,基本上這三個時間的百分比之和就是100%。我們知道使用top統計cpu佔用率時,top的重新整理頻率是可以更改的,預設情況下是3s重新整理一次,也可以改為1s、0.1s等,既然top的重新整理頻率可以更改,那麼top的最高重新整理頻率是多少,cpu的佔用率又是怎樣計算的呢?實際使用中,top中的資料是讀取/proc/stat檔案獲得的,/proc/stat檔案被讀取時會自動更新,從而top獲得最新的cpu佔用率情況,但是/proc/stat檔案也有重新整理精度,它的重新整理精度為每個時鐘中斷週期,即/proc/stat檔案中的資料最快可以每個tick更新一次,每個時鐘中斷到來,系統檢視當前cpu正在執行的程序,如果是使用者態程序,kernel_stat資料成員中對應的使用者態記錄資料增加乙個tick,如果是核心態,則對應核心態成員記錄增加,top佔用率的由來就是通過統計當前cpu每個tick執行程序種類得出來的,如使用者時間cpu佔用率=使用者程序tick/總tick。正常情況下,我們知道linux是以時鐘週期為基礎進行程序排程,基本上在乙個時鐘週期中不會發生程序排程,所以用top統計cpu佔用率不會出錯。

但是在rt-linux中,時間顆粒精度不再是tick,有可能比tick更小,這個時候有可能出現一些程序或執行緒,它們的排程更加頻繁,例如在tick=2ms的實時linux中,有乙個以1ms為週期的實時程序,這個時候我們用top統計實時程序所用cpu的cpu佔用率的時候,就有可能得到不準確的結果。如下圖所示,當前cpu執行以1ms為週期的實時程序,紅色表示程序在處理資料,cpu忙,白色表示程序沒有處理資料,cpu空閒。因為實時程序和tick都是週期性的,且實時程序週期小於tick,所以有可能出現下面兩種情況。第一種是啟動實時程序的時刻,恰好時鐘中斷在cpu忙時統計當前cpu占用情況,又因為tick為實時程序週期的整數倍,所以時鐘中斷統計到的永遠都是cpu忙的時刻,這個時候反映在top上的結果就是當前cpu佔用率為100%。而第二種情況,恰好時鐘中斷在cpu空閒時刻統計當前cpu占用情況,得到的結果永遠都是cpu處於空閒狀態,反映在top上時cpu佔用率為0,。由上面的例子可以看出,當linux的始終粒度小於tick的時候,top的統計結果有可能是不準確的。

Vs Qt執行緒減小cpu佔用率

1 執行緒的功能使不停地傳送資料 2 執行緒中採用的是在run 函式中while迴圈 發現while迴圈一直跑著會是cpu佔用率比較高,為減小cpu佔用率,可以在傳送一次資料後usleep一段時間,但是這種做法有一定的缺陷,就是在sleep的這段時間內如果有資料準備好,可以傳送時就不會不及時。改進為...

Linux下如何檢視高CPU佔用率執行緒

在 linux 下 top 工具可以顯示 cpu 的平均利用率 user,nice,system,idle,iowait,irq,softirq,etc.可以顯示每個 cpu 的利用率。但是無法顯示每個執行緒的 cpu 利用率情況,這時就可能出現這種情況,總的 cpu 利用率中 user 或 sys...

Linux下如何檢視高CPU佔用率執行緒

在 linux 下 top 工具可以顯示 cpu 的平均利用率 user,nice,system,idle,iowait,irq,softirq,etc.可以顯示每個 cpu 的利用率。但是無法顯示每個執行緒的 cpu 利用率情況,這時就可能出現這種情況,總的 cpu 利用率中 user 或 sys...