1. 程式人生 > >cpu使用率分析

cpu使用率分析

各位好!
在近在用RT的時候需要在裡面新增檢視CPU使用率,找到了rt自帶的cpu使用率的歷程,自己對比原始碼分析了一下其實現的思路,如有不對的地方歡迎指正,再次謝謝各位!

RT裡面提供的CPU使用率函式,
首先把cpu_usage_idle_hook函式新增到RT空閒鉤子函式上,通過rt_thread_idle_sethook(cpu_usage_idle_hook); 函式實現,在新增鉤子函式之後只有在進入空閒執行緒的時候才會執行此鉤子函式cpu_usage_idle_hook,
然後在鉤子函式裡面,首先在進入  rt_enter_critical(); (關閉中斷和排程)相當於CPU全速模式,計算total_count  在一個相對時間 rt_tick_get() - tick < CPU_USAGE_CALC_TICK  10個時鐘週期(100ms) 累加的數值, 把這個累加出來的數值作為CPU在100ms 關閉中斷和排程的情況下能夠處理資料的”標準“ ,

這部分原始碼:
  1. if (total_count == 0)
  2.      {
  3.           /* get total count */
  4.           rt_enter_critical();//進入臨界區
  5.           tick = rt_tick_get(); //得到當前系統時鐘節拍
  6.           //10個時鐘週期 100ms
  7.           while(rt_tick_get() - tick < CPU_USAGE_CALC_TICK)
  8.           {
  9.                total_count ++;
  10.                loop = 0;
  11.                while (loop < CPU_USAGE_LOOP)
  12.                     loop ++;
  13.           }
  14.           rt_exit_critical();//離開臨界區
  15.      }
複製程式碼
接著計算 count 資料,這個count 資料每個排程週期都是變化的,根據空閒執行緒被排程的時間,同樣是在10個系統時鐘週期100ms的時間,計算出在不關閉中斷和排程的情況下,count資料能夠累加的資料,通過這個累加的數值反映出空閒執行緒的執行時間,然後通過total_count數值就可以計算出系統在一個相對時間的使用率, 
  1. count = 0;
  2.      tick = rt_tick_get();//得到當前系統時鐘節拍
  3.      //10個時鐘週期 100ms
  4.      while (rt_tick_get() - tick < CPU_USAGE_CALC_TICK)
  5.      {
  6.           count ++;
  7.           loop  = 0;
  8.           while (loop < CPU_USAGE_LOOP)
  9.                loop ++;
  10.      }
複製程式碼
最後根據total_count   和count數值計算cpu使用率
計算公式:
  1. count = total_count - count;
  2. cpu_usage_major = (count * 100) / total_count;
  3. cpu_usage_minor = ((count * 100) % total_count) * 100 / total_count;
複製程式碼
如total_count  = 100;count = 80;

則可以計算出CPU在一個相對時間內佔用率是20%.
主要思路是根據在一個相對時間(100ms)空閒執行緒執行的時間來計算,空閒執行緒執行的時間越長,證明CPU使用率越低,反之亦然。

相關推薦

Intel CPU 漏洞分析

from logs ranch val 兩種方法 prevent 排列 .com org Intel CPU漏洞分析報告 預備知識 存儲分級 由於計算機存儲分級的特性(第一級:寄存器,第二級:高速緩存,第三級:內存,第四級:磁盤),每一級之間的訪問速度差距高達數量級。所以處

jvm記憶體分析cpu耗時分析

一、常用的jvm工具 除了常用的命令列工具,常用的圖形化工具及其特點如下: 二、記憶體分析 使用MAT匯入dump檔案 1、Problem Suspect 最可能的問題列表,MAT的分析相對準確,複雜問題需要開發者進一步定位 2、進一步定位到問題類 在問題物件上(大物件上或者海量相同物件上)

C/C++程式CPU問題分析

轉載地址:http://www.10tiao.com/html/473/201606/2651473094/1.html   程式的CPU問題是另外一類典型的程式效能問題,很多開發人員都受到過程式CPU佔用過高的困擾。本次我們收集了14個CPU類的問題,和大家一起分析下這些問題的種類和原因。另外,對於C/C

伺服器效能指標(二)——CPU利用率分析及問題排查

平常的工作中,在衡量伺服器的效能時,經常會涉及到幾個指標,load、cpu、mem、qps、rt等。每個指標都有其獨特的意義,很多時候在線上出現問題時,往往會伴隨著某些指標的異常。大部分情況下,在問題發生之前,某些指標就會提前有異常顯示。 在上一篇文章中,我們介紹了一個

[協同工作]EHR提取資料員工流失分析

set @year='2015' declare @yearmonth as char(6) declare @currentmonthcount as int --當月(含當月)以前入職到目前還在職人員數量 declare @leavecount as int --當月(含當月)以前入職,當月之後離職人員數

系統級CPU效能分析工具 — Perf

從2.6.31核心開始,Linux核心自帶了一個性能分析工具perf,能夠進行函式級與指令級的熱點查詢。 perf Performance analysis tools for Linux. Performance counters for Linux are a

CPU熱點分析——pprof (gperftools)使用

pprof (gperftools)使用谷歌的工具集,可檢視CPU取樣結果。pprof (google-perftool),用於來分析程式,必須保證程式能正常退出。使用步驟:1.準備工具,先安裝工具包libunwind-1.1.tar.gzgperftools-2.1.tar

Windbg程式除錯系列5-高CPU問題分析

上篇部落格中給大家分享了使用Windbg進行Live Debugging: 本篇中我們繼續,跟大家分享常見的應用程式高CPU使用率問題分析。 先說Windows下CPU使用率這個概念: CPU使用率:在工作管理員的重新整理週期內CPU忙的時間與整個重新整理週期的比值。預設的重新整理週期是1s。 即

cpu使用率分析

各位好! 在近在用RT的時候需要在裡面新增檢視CPU使用率,找到了rt自帶的cpu使用率的歷程,自己對比原始碼分析了一下其實現的思路,如有不對的地方歡迎指正,再次謝謝各位! RT裡面提供的CPU使用率函式, 首先把cpu_usage_idle_hook函式新增到RT空閒鉤子函式上,通過rt_thread_i

Linux per-CPU實現分析

217 static DEFINE_PER_CPU(struct runqueue, runqueues); 11 #define DEFINE_PER_CPU(type, name) 12 __attribute__((__section__(".data.percpu

Docker cpu限制分析

本文測試了,docker容器限制cpu資源使用的幾個配置引數。分別使用top和dstat命令分析了資源佔有情況。 package

CPU效能分析工具原理

轉載請保留以下宣告  作者:趙宗晟  出處:https://www.cnblogs.com/zhao-zongsheng/p/13067733.html 很多軟體都要做效能分析和效能優化。很多語言都會有他的效能分析工具,例如如果優化C++的效能,我們可以用Visual Studio自帶的效能探測器,或者使用

進程分析CPU

發送 能力 分別是 提升 constant 網卡中斷 pen sse 結果 進程分析之CPU 本文轉載自:https://github.com/ColZer/DigAndBu

Linux系統內對高CPU的監控及日誌分析

文件 mos anti sage them 其中 generate ted cpu 使用linux系統時,占用cpu資源過高和,用腳本排查: 1,實時監控,一旦有cpu占用高的進程,程序啟動; 2,再對進程分析,得出對應線程; 3,對對應線程所在的程序日誌文檔進行分析,比如

壓測過程中故障排查之一:高CPU占用問題分析案例

一段 運行 應用 進行 返回 sco close 找到 java 說明: 一個應用占用CPU很高,除了確實是計算密集型應用之外,通常原因都是出現了死循環 以我們最近出現的一個實際故障為例,介紹怎麽定位和解決這類問題。 根據top命令,發現PID為28555的Java進程占

cpu滿問題分析

比較 計算器 printf 性能問題 分析 int 什麽 部署 問題 功能問題,通過日誌,單步調試相對比較好定位。 性能問題,例如線上服務器CPU100%,如何找到相關服務,如何定位問題代碼,更考驗技術人的功底。 做為開發人員,肯定會遇到這類問題,介紹一下分

PostgreSQL CPU滿(100%)性能分析及優化(轉)

mark ike -- 過多 mar 是不是 影響 sas sql日誌 PostgreSQL CPU滿(100%)性能分析及優化 轉自:https://help.aliyun.com/knowledge_detail/43562.html 在數據庫運維當中,

Linux下分析某個進程CPU占用率高的原因

style 開發 技術分享 text nec -s 循環 系統 blog Linux下分析某個進程CPU占用率高的原因 通過top命令找出消耗資源高的線程id,利用strace命令查看該線程所有系統調用 1.top 查到占用cpu高的進程pid 2.查看

AMD Cpu 性能分析

處理 1.5 2.4 best span 需要 div nbsp 系列 未完待續。。。 首先,幾款APU系列的cpu: A8-7410: 一款低功耗的移動版處理器,四核心主頻最高2.5GHz,二級緩存2MB, 圖形核心Radeon R5 內存頻率DDR3-1866

uCOS-Ⅱ源碼分析之uC-CPU文件夾

STM32 uCOS-Ⅱ uC-CPU 此文共連載分析三個uCOS-Ⅱ的三個源碼文件夾:uC-CPU 、uC-LIB 、uCOS-Ⅱ uC-LIB文件夾目錄:ARM-Cortex-M3 / cpu_a.asm