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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

2、.6.0-test6 以上的版本中/proc/pid 目錄中有一個(gè) task 目錄,/proc/pid/task 目錄中也有一些以該進(jìn)程所擁有的線程的線程號(hào)命名的目錄/proc/pid/task/tid,它們是讀取線程信息的接口。/proc/cpuinfo 文件該文件中存放了有關(guān) cpu 的相關(guān)信息(型號(hào),緩存大小等)。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說(shuō)明:以下只解釋對(duì)我們計(jì)算 Cpu

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

5、871061757666100cpu115202154107394636201639423400intr12005322226860110503000473020034194297750501984500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

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

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

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

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

11、程號(hào),而是 linux 中的輕量級(jí)進(jìn)程(lwp),即我們通常所說(shuō)的線程。結(jié)論4:線程 Cpu 時(shí)間 threadCpuTime=utime+stime 系統(tǒng)中有關(guān)進(jìn)程 cpu 使用率的常用命令ps 命令通過(guò) ps 命令可以查看系統(tǒng)中相關(guān)進(jìn)程的 Cpu 使用率的信息。以下在 linuxman文檔中對(duì) ps 命令輸出中有關(guān) cpu 使用率的解釋:CPUusageiscurrentlyexpressedasthepercentageoftimespentrunningduringtheentirelifetimeofaprocess.Thisisnotideal,anditdoesnotconfor

12、mtothestandardsthatpsotherwiseconformsto.CPUusageisunlikelytoadduptoexactly100%.%cpucpuutilizationoftheprocessin#.#format.ItistheCPUtimeuseddividedbythetimetheprocesshasbeenrunning(cputime/realtimeratio),expressedasapercentage.Itwillnotaddupto100%unlessyouarelucky.結(jié)論 5:ps 命令算出來(lái)的 cpu 使用率相對(duì)于進(jìn)程啟動(dòng)時(shí)的平均值,

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

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

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

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

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

18、uTime1、processCpuTime23.計(jì)算該進(jìn)程的 cpu 使用率 pcpu=100*(processCpuTime2-processCpuTime1)/(totalCpuTime2-totalCpuTime1)(按 100%f 算,如果是多核情況下還需乘以 cpu 的個(gè)數(shù));實(shí)驗(yàn)數(shù)據(jù)實(shí)驗(yàn)一:監(jiān)控一空循環(huán)的進(jìn)程的 cpu 使用率。說(shuō)明:左邊的數(shù)據(jù)是按以上算法得到的數(shù)據(jù),其中采樣的時(shí)間間隔與 top 命令刷新屏幕的時(shí)間間隔相同。按以上方法計(jì)算得到的 cpu 使用率通過(guò) 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實(shí)驗(yàn)二:監(jiān)控 jconsole 進(jìn)程的 cpu 使用率。說(shuō)明:左邊的數(shù)據(jù)是按以上算法得到的數(shù)據(jù),其中采樣的時(shí)間間隔與 top 命令刷新屏幕的時(shí)間間隔相同。按以上方法計(jì)算得到的 cpu 使用率通過(guò) 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 使用率的計(jì)算計(jì)算方法:1.采樣兩個(gè)足夠短的時(shí)間隔的 cpu 快照與線程快照,a)每一個(gè) cpu 快照均為(user、nice、system、idle、iowait、irq、softirq、stealstealon、guest)的 9 元組;b)每一個(gè)線程快照均為(u

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

24、 top 命令刷新屏幕的時(shí)間間隔相同。按以上方法計(jì)算得到的 cpu 使用率通過(guò) 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實(shí)驗(yàn)二:監(jiān)控 jconsole 程序某一線程的cpu 使用率。說(shuō)明:左邊的數(shù)據(jù)是按以上算法得到的數(shù)據(jù),其中采樣的時(shí)間間隔與 top 命令刷新屏幕的時(shí)間間隔相同。按以上方法計(jì)算得到的 cp

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

26、R97206m10m7136R99206m10m7136R98206m10m7136R96206m10m7136R98206m10m7136R96206m10m7136R971.3333334PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMM以下通過(guò)實(shí)驗(yàn)數(shù)據(jù)來(lái)說(shuō)明多核情況下某一進(jìn)程 cpu 使用率是按 cpu 個(gè)數(shù)*100 加算的.實(shí)驗(yàn)一描述:在雙核的情況下作的一組實(shí)驗(yàn),第一組數(shù)據(jù)是通過(guò) ps-eLopid,lwp,pcpu|grep9140 命令查看進(jìn)程號(hào)為 9140 的進(jìn)程中各線程的詳細(xì)信息。 第二組數(shù)據(jù)是通過(guò) ps命令查看進(jìn)程號(hào)為 9140 進(jìn)程的 cpu 使

27、用率。數(shù)據(jù)一:pidlwp%cpu914091400.0914091410.0914091420.0914091430.0914091440.0914091490.0914091500.0914091510.0914091520.19140915396.69140915495.9以上除了紅色標(biāo)注出來(lái)的兩個(gè)線程以外數(shù)據(jù)二:pid%cpu9140193AND7755fjzagjconsole7755fjzagjconsole7755fjzagjconsole7755fjzagjconsole7755fjzagjconsole7755fjzagjconsole7755fjzag多核情況下200251m200251m200251m200251m200251m72m22mS72m22mS72m22mS72m22mS72m22mS200251m72m22mS200251m72m22mScpu 使用率的計(jì)114.40:11.92714.40:12.1

溫馨提示

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

評(píng)論

0/150

提交評(píng)論