LINUXCPU利用率算法android_第1頁
LINUXCPU利用率算法android_第2頁
LINUXCPU利用率算法android_第3頁
LINUXCPU利用率算法android_第4頁
LINUXCPU利用率算法android_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Linux 平臺 Cpu 使用率的計算proc 文件系統/proc 文件系統是一個偽文件系統,它只存在內存當中,而不占用外存空間。 它以文件系統的方式為內核與進程提供通信的接口。 用戶和應用程序可以通過/proc得到系統的信息,并可以改變內核的某些參數。由于系統的信息,如進程,是動態(tài)改變的,所以用戶或應用程序讀取/proc 目錄中的文件時,proc 文件系統是動態(tài)從系統內核讀出所需信息并提交的。/proc 目錄中有一些以數字命名的目錄,它們是進程目錄。系統中當前運行的每一個進程在/proc 下都對應一個以進程號為目錄名的目錄/proc/pid,它們是讀取進程信息的接口。止匕外,在 Linux2

2、.6.0-test6 以上的版本中/proc/pid 目錄中有一個 task 目錄,/proc/pid/task 目錄中也有一些以該進程所擁有的線程的線程號命名的目錄/proc/pid/task/tid,它們是讀取線程信息的接口。/proc/cpuinfo 文件該文件中存放了有關 cpu 的相關信息(型號,緩存大小等)。zhengangenbuick$cat/proc/cpuinfoprocessor:0vendor_id:GenuineIntelcpufamily:15model:4modelname:Intel(R)Xeon(TM)CPU3.00GHzstepping:10cpuMHz:3

3、001.177cachesize:2048KBphysicalid:0siblings:2coreid:0cpucores:1fdiv_bug:nohlt_bug:nof00f_bug:nocoma_bug:nofpu:yesfpu_exception:yescpuidlevel:5wp:yesflags:fpuvmedepsetscmsrpaemcecx8apicmtrrpgemcacmovpatpse36clflushdtsacpimmXxsrssesse2sshttmpbelmpnimonitords_cplcidxtprbogomips:6004.52說明:以下只解釋對我們計算 Cpu

4、 使用率有用的相關參數。參數解釋processor(0)cpu 的一個物理標識結論 1:可以通過該文件根據 processor 出現的次數統計 cpu 的邏輯個數(包括多核、超線程)。/proc/stat 文件該文件包含了所有 CPU 舌動的信息,該文件中的所有值都是從系統啟動開始累計到當前時刻。不同內核版本中該文件的格式可能不大一致,以下通過實例來說明數據該文件中各字段的含義。實例數據:2.6.24-24 版本上的fjzagfjzag-desktop:-$cat/proc/statcpu38082627275948939081225658189500cpu022880472168554302

5、871061757666100cpu115202154107394636201639423400intr12005322226860110503000473020034194297750501984500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

6、0000ctxt1434984btime1252028243processes8113procs_running1procs_blocked0第一彳:的數值表示的是 CPU 總的使用情況,所以我們只要用第一行的數字計算就可以了。下表解析第一行各數值的含義:參數解析(單位:jiffies)(jiffies 是內核中的一個全局變量,用來記錄自系統啟動一來產生的節(jié)拍數,在 linux 中,一個節(jié)拍大致可理解為操作系統進程調度的最小時間片,不同 linux內核可能值有不同,通常在 1ms 到 10ms 之間)user(38082)從系統啟動開始累計到當前時刻,處于用戶態(tài)的運行時間,不包含 nice 值

7、為負進程。nice(627)從系統啟動開始累計到當前時刻,nice 值為負的進程所占用的 CPU 寸問system(27594)從系統啟動開始累計到當前時刻,處于核心態(tài)的運行時間idle(893908)從系統啟動開始累計到當前時刻,除 IO 等待時間以外的其它等待時間 iowait(12256)從系統啟動開始累計到當前時刻,IO 等待時間(since2.5.41)irq(581)從系統啟動開始累計到當前時刻,硬中斷時間(since2.6.0-test4)softirq(895)從系統啟動開始累計到當前時刻,軟中斷時間(since2.6.0-test4)stealstolen(0)whichis

8、thetimespentinotheroperatingsystemswhenrunninginavirtualizedenvironment(since2.6.11)guest(0)whichisthetimespentrunningavirtualCPUforguestoperatingsystemsunderthecontroloftheLinuxkernel(since2.6.24)結論 2:總的 cpu 時間 totalCpuTime=user+nice+system+idle+iowait+irq+softirq+stealstolen+guest/proc/stat 文件該文件包

9、含了某一進程所有的活動的信息,該文件中的所有值都是從系統啟動開始累計到當前時刻。以下通過實例數據來說明該文件中各字段的含義。zhengangenbuick#cat/proc/6873/stat6873(a.out)R6723687367233481968738388608770004195831002503058826541409024564294967295134512640134513720321557904002097798000000017000說明:以下只解釋對我們計算 Cpu 使用率有用相關參數參數解釋pid=6873 進程號utime=1587 該任務在用戶態(tài)運行的時間,單位為j

10、iffiesstime=41958 該任務在核心態(tài)運行的時間,單位為jiffiescutime=0 所有已死線程在用戶態(tài)運行的時間,單位為 jiffiescstime=0 所有已死在核心態(tài)運行的時間,單位為jiffies結論 3:進程的總 Cpu 時間 processCpuTime=utime+stime+cutime+cstime,該值包括其所有線程的 cpu 時間。/proc/task/stat 文件該文件包含了某一進程所有的活動的信息,該文件中的所有值都是從系統啟動開始累計到當前時刻。該文件的內容格式以及各字段的含義同/proc/stat文件。注意,該文件中的 tid 字段表示的不再是進

11、程號,而是 linux 中的輕量級進程(lwp),即我們通常所說的線程。結論4:線程 Cpu 時間 threadCpuTime=utime+stime 系統中有關進程 cpu 使用率的常用命令ps 命令通過 ps 命令可以查看系統中相關進程的 Cpu 使用率的信息。以下在 linuxman文檔中對 ps 命令輸出中有關 cpu 使用率的解釋:CPUusageiscurrentlyexpressedasthepercentageoftimespentrunningduringtheentirelifetimeofaprocess.Thisisnotideal,anditdoesnotconfor

12、mtothestandardsthatpsotherwiseconformsto.CPUusageisunlikelytoadduptoexactly100%.%cpucpuutilizationoftheprocessin#.#format.ItistheCPUtimeuseddividedbythetimetheprocesshasbeenrunning(cputime/realtimeratio),expressedasapercentage.Itwillnotaddupto100%unlessyouarelucky.結論 5:ps 命令算出來的 cpu 使用率相對于進程啟動時的平均值,

13、隨著進程運行時間的增大,該值會趨向于平緩。top 命令通過 top 命令可以查看系統中相關進程的實時信息(cpu 使用率等)。以下是 man文檔中對 top 命令輸出中有關進程 cpu 使用率的解釋。#C-LastusedCPU(SMP)Anumberrepresentingthelastusedprocessor.InatrueSMPenvironmentthiswilllikelychangefrequentlysincethekernelintentionallyusesweakaffinity.Also,theveryactofrunningtopmaybreakthisweakaff

14、inityandcausemoreprocessestochangeCPUsmoreoften(becauseoftheextrademandforcputime).%CPU-CPUusageThetasksshareoftheelapsedCPUtimesincethelastscreenupdate,expressedasapercent-ageoftotalCPUtime.InatrueSMPenvironment,ifIrixmodeisOff,topwilloperateinSolarismodewhereataskscpuusagewillbedividedbythetotalnu

15、mberofCPUs.結論 6:某一個線程在其運行期間其所使用的 cpu 可能會發(fā)生變化。結論 7:在多核的情況下 top 命令輸出的 cpu 使用率實質是按 cpu 個數*100%計算的。單核情況下 Cpu 使用率的計算基本思想通過讀取/proc/stat、/proc/stat、/proc/task/stat 以及/proc/cpuinfo 這幾個文件獲取總的 Cpu 時間、進程的 Cpu 時間、線程的 Cpu時間以及 Cpu 的個數的信息,然后通過一定的算法進行計算(采樣兩個足夠短的時間間隔的 Cpu 快照與進程快照來計算進程的 Cpu 使用率)??偟?Cpu 使用率計算計算方法:1、采樣

16、兩個足夠短的時間間隔的 Cpu 快照,分別記作 t1,t2,其中 t1、t2 的結構均為:(user、nice、systemidle、iowait、irq、softirq、stealstolen、guest)的 9 元組;2、計算總的 Cpu 時間片 totalCpuTimea)把第一次的所有 cpu 使用情況求和,得到 s1;b)把第二次的所有 cpu 使用情況求和,得到 s2;c)s2-s1 得到這個時間間隔內的所有時間片,即 totalCpuTime=j2-j1;3、計算空閑時間 idleidle 對應第四列的數據,用第二次的第四列-第一次的第四列即可idle=第二次的第四列-第一次的第

17、四列6、計算 cpu 使用率pcpu=100*(total-idle)/total某一進程 Cpu 使用率的計算計算方法:1.采樣兩個足夠短的時間間隔的 cpu 快照與進程快照,a)每一個 cpu 快照均為(user、nice、systemidle、iowait、irq、softirq、stealstolen、guest)的 9 元組;b)每一個進程快照均為(utime、stime、cutimecstime)的 4 元組;2.分別根據結論 2、結論 3 計算出兩個時刻的總的 cpu 時間與進程的 cpu 時間,分別記作:totalCpuTime1、totalCpuTime2、processCp

18、uTime1、processCpuTime23.計算該進程的 cpu 使用率 pcpu=100*(processCpuTime2-processCpuTime1)/(totalCpuTime2-totalCpuTime1)(按 100%f 算,如果是多核情況下還需乘以 cpu 的個數);實驗數據實驗一:監(jiān)控一空循環(huán)的進程的 cpu 使用率。說明:左邊的數據是按以上算法得到的數據,其中采樣的時間間隔與 top 命令刷新屏幕的時間間隔相同。按以上方法計算得到的 cpu 使用率通過 top 命令得到的99.5008398.33333698.098.8313899.099.099.8336198.83

19、52798.4975PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND7639fjzag200206m10m7136S992.21:00.74java7639fjzag200206m10m7136S992.21:03.71java7639fjzag200206m10m7136S992.21:06.67java7639fjzag200206m10m7136S992.21:09.63java7639fjzag200206m10m7136S982.21:12.59java7639fjzag200206m10m7136S992.21:15.55java7639fjza

20、g200206m10m7136S1002.21:18.55java7639fjzag200206m10m7136S1002.21:21.54java7639fjzag200206m10m7136S992.21:24.52java7639fjzag200206m10m7136S982.21:27.46java實驗二:監(jiān)控 jconsole 進程的 cpu 使用率。說明:左邊的數據是按以上算法得到的數據,其中采樣的時間間隔與 top 命令刷新屏幕的時間間隔相同。按以上方法計算得到的 cpu 使用率通過 top 命令得到的8.68113512.010.3505847.65390977.6539097

21、5.013.02170311.08.666667PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND7753fjzag200252m72m22mS1014.40:18.70jconsole7753fjzag200252m72m22mS1214.40:19.07jconsole7753fjzag200252m72m22mS1114.40:19.39jconsole7753fjzag200252m72m22mS714.40:19.61jconsole7753fjzag200252m72m22mS714.40:19.83jconsole7753fjzag200252m

22、72m22mS514.40:19.97jconsole7753fjzag200252m72m22mS1414.40:20.38jconsole7753fjzag200252m72m22mS1014.40:20.68jconsole7753fjzag200252m72m22mS914.50:20.96jconsole某一線程 Cpu 使用率的計算計算方法:1.采樣兩個足夠短的時間隔的 cpu 快照與線程快照,a)每一個 cpu 快照均為(user、nice、system、idle、iowait、irq、softirq、stealstealon、guest)的 9 元組;b)每一個線程快照均為(u

23、time、stime)的 2 元組;2.分別根據結論 2、結論 4 計算出兩個時刻的總的 cpu 時間與線程的 cpu 時間,分別記作:totalCpuTime1、totalCpuTime2、threadCpuTime1、threadCpuTime23.計算該線程的 cpu 使用率 pcpu=100*(threadCpuTime2-threadCpuTime1)/(totalCpuTime2-totalCpuTime1)(按 100%算,如果是多核情況下還需乘以 cpu 的個數);實驗數據實驗一:監(jiān)控一空循環(huán)的線程的 cpu 使用率。說明:左邊的數據是按以上算法得到的數據,其中采樣的時間間隔與

24、 top 命令刷新屏幕的時間間隔相同。按以上方法計算得到的 cpu 使用率通過 top 命令得到的98.8313897.0099796.9899797.4958398.16971696.8386S%CPU%MEMTIME+CO2.27:22.942.27:25.862.27:28.762.27:31.722.27:34.652.27:37.532.27:40.472.27:43.342.27:46.25java實驗二:監(jiān)控 jconsole 程序某一線程的cpu 使用率。說明:左邊的數據是按以上算法得到的數據,其中采樣的時間間隔與 top 命令刷新屏幕的時間間隔相同。按以上方法計算得到的 cp

25、u 使用率通過 top 命令得到的1.34003356.6445181.33333340.66777960.66666671.333333497.33333693.8230498.66667PIDUSERPRMMAND7649fjzag200java7649fjzag200java7649fjzag200java7649fjzag200java7649fjzag200java7649fjzag200java7649fjzag200java7649fjzag200java7649fjzag200NIVIRTRESSHR206m10m7136R97206m10m7136R97206m10m7136

26、R97206m10m7136R99206m10m7136R98206m10m7136R96206m10m7136R98206m10m7136R96206m10m7136R971.3333334PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMM以下通過實驗數據來說明多核情況下某一進程 cpu 使用率是按 cpu 個數*100 加算的.實驗一描述:在雙核的情況下作的一組實驗,第一組數據是通過 ps-eLopid,lwp,pcpu|grep9140 命令查看進程號為 9140 的進程中各線程的詳細信息。 第二組數據是通過 ps命令查看進程號為 9140 進程的 cpu 使

27、用率。數據一:pidlwp%cpu914091400.0914091410.0914091420.0914091430.0914091440.0914091490.0914091500.0914091510.0914091520.19140915396.69140915495.9以上除了紅色標注出來的兩個線程以外數據二:pid%cpu9140193AND7755fjzagjconsole7755fjzagjconsole7755fjzagjconsole7755fjzagjconsole7755fjzagjconsole7755fjzagjconsole7755fjzag多核情況下200251m200251m200251m200251m200251m72m22mS72m22mS72m22mS72m22mS72m22mS200251m72m22mS200251m72m22mScpu 使用率的計114.40:11.92714.40:12.1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論