青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Sheppard Y

keep thinking keep coding.

top里顯示的cpu百分比計算方式

2016-07-11 日更新
此篇博客已經遷移到新博客,并做行文檢查和優化排版:
http://blog.clawz.me/2013/11/07/13-top-source/


 top看到的cpu信息解釋的不是很清晰,就看下源碼怎么寫的吧。
        程序很簡單,基本都在top.c里。
        load里的cpu詳細信息代碼如下:
 1 smpcpu = cpus_refresh(smpcpu);
 2 
 3 if (CHKw(Curwin, View_CPUSUM)) {
 4         // display just the 1st /proc/stat line
 5         summaryhlp(&smpcpu[Cpu_tot], "Cpu(s):");
 6 else {
 7         int i;
 8         char tmp[SMLBUFSIZ];
 9         // display each cpu's states separately
10         for (i = 0; i < Cpu_tot; i++) {
11                 snprintf(tmp, sizeof(tmp), "Cpu%-3d:", smpcpu[i].id);
12                 summaryhlp(&smpcpu[i], tmp);
13         }
14 }
        
        Cpu_tot為cpu數量。
        cpus_refresh函數里從/proc/stat文件里讀入cpu信息,然后裝入smpcpu里。smpcpu為大小為Cpu_tot+1個CPU_t成員的數組。
        /proc/stat文件的頭幾行為:
cpu %%
cpu0 
%%
cpu1 
%%
        第一行的cpu信息裝入smpcpu[Cpu_tot],之后的cpu0\cpu1\...裝入smpcpu[0]\smpcpu[1\...。
        View_CPUSUM這個由1鍵來控制的那個開關,開關關閉時只顯示smpcpu的Cpu_tot,開關開啟時顯示的是smpcpu的下標0~Cpu_tot-1的成員。即,top的默認在開頭顯示的cpu詳細信息顯示的是/proc/stat的第一行處理后,按下1鍵,顯示的時/proc/stat后續各cpu數據。
        /proc/stat里都是數字,下邊看看top里顯示的百分比怎么算的。
        CPU_t的定義:
 1 // These typedefs attempt to ensure consistent 'ticks' handling
 2 typedef unsigned long long TIC_t;
 3 typedef          long long SIC_t;
 4 
 5 // This structure stores a frame's cpu tics used in history
 6 // calculations.  It exists primarily for SMP support but serves
 7 // all environments.
 8 typedef struct CPU_t {
 9         TIC_t u, n, s, i, w, x, y, z; // as represented in /proc/stat
10         TIC_t u_sav, s_sav, n_sav, i_sav, w_sav, x_sav, y_sav, z_sav; // in the order of our display
11         unsigned id;  // the CPU ID number
12 } CPU_t;
        每次從/proc/stat取的數據稱為一幀的數據,會從到CPU_t結構體的第一行成員里,上次的數據即上一幀的數據就拷到CPU_t的第二排帶_sav后綴的成員里,一一對應。
        summaryhlp函數里計算我們想看的cpu各詳細指標的百分比。只取部分代碼或偽碼做演示:
 1 SIC_t u_frme, s_frme, n_frme, i_frme, w_frme, x_frme, y_frme, z_frme, tot_frme, tz;
 2 float scale;
 3 u_frme = cpu->- cpu->u_sav;
 4 s_frme = cpu->- cpu->s_sav;
 5 
 6 tot_frme = u_frme + s_frme + n_frme + i_frme + w_frme + x_frme + y_frme + z_frme;
 7 if (tot_frme < 1) tot_frme = 1;
 8 scale = 100.0 / (float)tot_frme;
 9 
10 us% = (float)u_frme * scale;
11 sy% = (float)s_frme * scale;
12 
13 cpu->u_sav = cpu->u;
14 cpu->s_sav = cpu->s;
15 
        每個進程占cpu百分比計算:
1 Frame_tscale = 100.0f / ((float)Hertz * (float)et * (Rc.mode_irixps ? 1 : Cpu_tot));
2 float u = (float)p->pcpu * Frame_tscale;
        算的是兩幀之間總時間片數量,各進程占的時間片數量百分比。

posted on 2013-11-07 19:20 Sheppard Y 閱讀(2521) 評論(1)  編輯 收藏 引用 所屬分類: 開源

評論

# re: top里顯示的cpu百分比計算方式 2014-12-11 15:50 idoplay

樓主好,我最近也在看top源代碼,有好多不懂得地方想請教一下。
就是每個進程占用的CPU百分比的計算方法這里,
Frame_tscale = 100.0f / ((float)Hertz * (float)et * (Rc.mode_irixps ? 1 : Cpu_tot));
這個的意思指的是CPU數量?Rc.mode_irixps ? 1 : Cpu_tot,為什么是1 呢?
float u = (float)p->pcpu * Frame_tscale; 這句的意思是指進程占用的單個CPU的百分比嗎。這句后面是if (u > pcpu_max_value) u = pcpu_max_value; 我看pcpu_max_value被定義為99.9,意思是說,進程的cpu占用率超過99.9的時候,就讓它的占用率為99.9 ,難道進程的CPU占用率不能為100%嗎,并且什么情況會超過100%呢?

(float)p->pcpu 這個值是怎么計算出來的?是通過這個函數嗎procs_refresh。跟到這里找到readproc,又跟到proc_t*(*reader)(struct PROCTAB *restrict const, proc_t *restrict const);就找不到了。  回復  更多評論   

<2013年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

導航

統計

留言簿(1)

隨筆分類(77)

隨筆檔案(58)

me

基友

同行

業界前輩

最新隨筆

搜索

積分與排名

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲视频欧美在线| 亚洲免费黄色| 久久亚洲精品中文字幕冲田杏梨 | 欧美国产一区二区三区激情无套| 亚洲欧美中文在线视频| 国产日韩欧美综合在线| 久久精品国产69国产精品亚洲| 日韩午夜精品| 久久九九热re6这里有精品 | 欧美国产1区2区| 欧美日本一区二区高清播放视频| 亚洲天堂网在线观看| 亚洲一区二区3| 狠狠色丁香婷婷综合久久片| 牛人盗摄一区二区三区视频| 欧美日本中文| 欧美一区二视频在线免费观看| 久久狠狠亚洲综合| 一本色道**综合亚洲精品蜜桃冫| 亚洲性感激情| 亚洲国产视频直播| 亚洲天堂视频在线观看| 影音先锋在线一区| 日韩小视频在线观看专区| 国产婷婷色一区二区三区| 欧美高清日韩| 国产欧美日韩视频| 亚洲国产cao| 欧美午夜无遮挡| 你懂的视频一区二区| 国产精品成人一区二区三区夜夜夜| 久久激五月天综合精品| 欧美女人交a| 欧美va天堂在线| 国产欧美高清| 99国产精品国产精品久久| 国产综合精品| 亚洲视频每日更新| 一本久久a久久精品亚洲| 久久久99精品免费观看不卡| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 国产亚洲精品久久久| 亚洲精品免费在线观看| 韩国欧美国产1区| 亚洲愉拍自拍另类高清精品| 亚洲国产一区二区a毛片| 亚洲一区免费看| 亚洲午夜精品一区二区三区他趣| 久久欧美肥婆一二区| 欧美专区在线播放| 国产精品videosex极品| 亚洲日本va午夜在线电影| 亚洲成人影音| 久久精品国产久精国产爱| 欧美一区二区三区免费看| 国产精品av免费在线观看| 亚洲精品国产系列| 亚洲美洲欧洲综合国产一区| 老司机午夜精品视频在线观看| 久久久噜噜噜久久| 国产亚洲一区二区三区| 午夜一区在线| 久久久久久久尹人综合网亚洲| 国产精品美女久久久| 亚洲午夜精品久久久久久浪潮| 一区二区三区四区精品| 欧美精品三级日韩久久| 亚洲精选视频免费看| 中文一区字幕| 国产精品捆绑调教| 欧美成人精品| 欧美日韩精品福利| 亚洲毛片在线看| 亚洲自拍偷拍色片视频| 欧美日韩成人在线| 在线一区亚洲| 久久精品成人一区二区三区| 国产一区观看| 老司机67194精品线观看| 亚洲国产精品一区二区久| 99国产精品私拍| 国产精品国产自产拍高清av| 亚洲综合激情| 美脚丝袜一区二区三区在线观看| 亚洲电影在线观看| 欧美精品一区二区三区很污很色的| 亚洲美女视频网| 欧美中在线观看| 亚洲人屁股眼子交8| 欧美日韩在线一区| 欧美在线不卡| 亚洲国产一区二区三区高清| 亚洲欧美日韩中文视频| 国产一区二区三区高清| 欧美激情日韩| 午夜精品短视频| 亚洲国产欧美日韩精品| 亚洲欧美日韩在线综合| 亚洲国产视频一区| 国产精品久久久久久久久久妞妞 | 欧美激情va永久在线播放| 日韩视频中文字幕| 国产亚洲精品久久飘花| 免费一级欧美片在线观看| 正在播放欧美视频| 能在线观看的日韩av| 亚洲欧美在线磁力| 亚洲国产老妈| 国产日韩欧美一区二区三区四区| 老司机免费视频一区二区三区| 亚洲午夜电影| 亚洲激情av| 蜜桃av一区二区在线观看| 亚洲一二三区在线观看| 亚洲国产精品欧美一二99| 国产精品免费看| 欧美美女操人视频| 葵司免费一区二区三区四区五区| 亚洲免费视频成人| 亚洲精品乱码久久久久久久久 | 亚洲精品你懂的| 美女黄网久久| 久久综合99re88久久爱| 欧美在线free| 午夜精品亚洲一区二区三区嫩草| 亚洲伦理中文字幕| 亚洲高清激情| …久久精品99久久香蕉国产| 国产欧美日韩高清| 国产精品v欧美精品v日韩精品| 欧美国产在线观看| 欧美成人精精品一区二区频| 久久乐国产精品| 久久全球大尺度高清视频| 欧美一区二区三区四区在线| 中日韩午夜理伦电影免费| 亚洲精品日韩在线观看| 亚洲第一在线综合网站| 欧美激情国产高清| 欧美激情在线免费观看| 欧美成人小视频| 亚洲电影在线| 欧美三区美女| 国产精品久久久久久户外露出| 欧美区二区三区| 欧美激情视频网站| 欧美日本韩国一区| 欧美日韩久久久久久| 欧美日韩情趣电影| 欧美午夜精品久久久久免费视| 欧美日韩免费观看中文| 欧美日韩一二区| 国产精品久久久久久久久搜平片 | 欧美激情一区二区三级高清视频| 欧美国产欧美综合| 欧美日韩中文| 国产精品综合网站| 激情综合网址| 91久久综合| 亚洲午夜电影在线观看| 香蕉久久a毛片| 久久久噜噜噜久久狠狠50岁| 欧美成人精品不卡视频在线观看| 亚洲国产cao| 亚洲一区二区三区高清| 久久精品夜夜夜夜久久| 欧美成人三级在线| 国产精品乱码久久久久久| 国产午夜精品久久| 亚洲人成在线播放| 午夜精品久久久久久久男人的天堂| 久久久99爱| 亚洲激情女人| 亚洲欧美日韩一区二区在线 | 在线观看中文字幕不卡| 一级日韩一区在线观看| 欧美在线免费| 亚洲国产成人午夜在线一区 | 亚洲福利视频网站| 亚洲欧美美女| 女人色偷偷aa久久天堂| 国产精品福利片| 亚洲国产mv| 欧美在线视频一区二区| 亚洲国产精品久久久久| 亚洲欧美综合| 欧美视频国产精品| 亚洲高清成人| 久久精品亚洲精品| 亚洲毛片一区| 欧美成人免费视频| 国产一区二区三区无遮挡| 亚洲一区制服诱惑| 欧美激情2020午夜免费观看| 亚洲欧美999| 欧美日韩专区| 一本大道av伊人久久综合| 你懂的国产精品| 久久久久九九九| 国产乱码精品一区二区三区不卡 |