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

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>
            亚洲美女中文字幕| 久久久久久9999| 亚洲精选中文字幕| 激情欧美一区二区三区| 黄色一区二区三区四区| 亚洲国产精品高清久久久| 亚洲精品永久免费| 中文在线不卡| 久久成人资源| 亚洲国产精品嫩草影院| 老司机精品久久| 91久久精品一区| 中国av一区| 久久人体大胆视频| 欧美亚一区二区| 在线精品国产成人综合| 亚洲一区在线看| 麻豆精品网站| 中日韩高清电影网| 免费亚洲电影| 国产一区二区三区在线免费观看| 亚洲国产mv| 欧美在线3区| 91久久精品一区二区别| 亚洲欧美日本视频在线观看| 蜜桃av一区二区在线观看| 国产精品白丝av嫩草影院| 国内久久视频| 亚洲免费一在线| 欧美激情中文字幕在线| 午夜日韩福利| 欧美日韩视频在线观看一区二区三区| 国产喷白浆一区二区三区| 亚洲精品国产精品国自产观看浪潮| 亚洲欧美国产视频| 亚洲区国产区| 久热精品视频在线免费观看| 国产欧美日韩精品a在线观看| 亚洲美女色禁图| 欧美成人精品福利| 久久高清免费观看| 国产精品一卡二| 亚洲调教视频在线观看| 欧美岛国激情| 久久精品最新地址| 国产私拍一区| 欧美中文字幕精品| 亚洲永久精品国产| 欧美性事免费在线观看| 亚洲视频1区2区| 亚洲精品老司机| 欧美国产日本在线| 亚洲欧洲在线看| 欧美电影免费观看高清| 久久久www免费人成黑人精品| 国产欧美日韩三级| 欧美一区二区三区四区在线观看 | 日韩一二三区视频| 欧美伦理一区二区| 91久久午夜| 欧美成人激情视频免费观看| 欧美专区在线观看| 国产欧美日韩精品专区| 久久se精品一区精品二区| 亚洲一区二区在线观看视频| 国产精品久久77777| 亚洲一级片在线观看| 在线午夜精品自拍| 国产精品尤物福利片在线观看| 欧美一级淫片播放口| 午夜欧美理论片| 一区二区亚洲欧洲国产日韩| 麻豆精品视频| 精品成人一区| 亚洲精品国产精品国自产观看| 亚洲欧美日韩综合aⅴ视频| 91久久线看在观草草青青| 麻豆精品传媒视频| 欧美暴力喷水在线| 亚洲五月婷婷| 新狼窝色av性久久久久久| 国产午夜精品麻豆| 免费观看成人鲁鲁鲁鲁鲁视频| 免费日韩av| 亚洲欧美国产三级| 久久精品男女| 亚洲美女在线观看| 亚洲欧美在线免费观看| 伊人精品成人久久综合软件| 最新国产の精品合集bt伙计| 国产精品久久久久一区二区三区 | 欧美黄色视屏| 9l视频自拍蝌蚪9l视频成人| 国产精品看片资源| 欧美大片在线影院| 国产精品视区| 亚洲大片精品永久免费| 国产精品美女久久久久久2018| 久久视频在线免费观看| 欧美激情第三页| 久久久精品五月天| 欧美日韩精品一区| 嫩模写真一区二区三区三州| 欧美视频中文一区二区三区在线观看 | 亚洲桃花岛网站| 亚洲国产1区| 亚洲欧美一区二区原创| 日韩午夜在线| 久久久综合网| 欧美在线观看视频| 欧美三区视频| 亚洲黄色天堂| 欧美日韩国产成人精品| 亚洲午夜电影| 久久高清国产| 午夜久久电影网| 欧美刺激性大交免费视频| 久久久精品999| 国产精品日韩精品| 亚洲精品乱码久久久久久日本蜜臀| 国产一区二区三区四区在线观看| 99视频精品免费观看| 日韩视频国产视频| 久久夜色精品国产| 久久婷婷色综合| 国产欧美精品一区aⅴ影院| 一本色道婷婷久久欧美| 日韩一二在线观看| 欧美高清在线精品一区| 欧美xx69| 亚洲国产精品久久精品怡红院| 欧美在线精品一区| 久久久国产精品一区二区中文 | 亚洲国产成人av在线| 亚洲国产精品va在看黑人| 久久久久国产精品厨房| 久久久久久久久久久成人| 国产欧美一区二区视频| 亚洲欧美日韩一区在线观看| 欧美怡红院视频| 国产伦精品一区二区| 午夜激情一区| 久久综合九色九九| 在线视频国内自拍亚洲视频| 久久青青草综合| 亚洲国产成人午夜在线一区| 亚洲精品欧美精品| 欧美日韩亚洲综合| 亚洲综合成人婷婷小说| 久久久久国产精品一区三寸| 在线观看国产成人av片| 免费成人你懂的| 99re视频这里只有精品| 午夜精品久久久久久99热软件| 国产日韩精品一区| 另类尿喷潮videofree | 亚洲日本成人女熟在线观看| 欧美绝品在线观看成人午夜影视| 亚洲精品国产精品国自产在线| 国产日韩av一区二区| 久久精品欧美日韩| 欧美国产一区二区在线观看| 一本久道久久久| 国产欧美一区二区精品仙草咪| 久久久久久久网站| 国产午夜精品久久久| 中文av字幕一区| 亚洲精品日韩久久| 99精品欧美一区二区三区综合在线 | 久久综合五月| 9l视频自拍蝌蚪9l视频成人 | 午夜精品短视频| 国产综合久久久久影院| 免费不卡在线视频| 在线免费观看日本欧美| 欧美精品一区二区三区在线播放| 亚洲色图自拍| 欧美chengren| 亚洲免费在线观看视频| 尤妮丝一区二区裸体视频| 欧美午夜不卡视频| 久久蜜桃精品| 亚洲欧美另类国产| 亚洲国产精品毛片| 久久精品久久综合| 亚洲一区二区三区高清| 亚洲国产高清在线| 国产日产欧产精品推荐色 | 亚洲电影免费在线| 久久久精品性| 亚洲欧美精品伊人久久| 亚洲日韩成人| 欧美激情免费在线| 久久久欧美一区二区| 欧美日韩午夜剧场| 亚洲欧美怡红院| 欧美gay视频| 久久久久久久久久久久久9999| 日韩亚洲精品视频| 1000精品久久久久久久久|