你不一定懂的cpu显示信息
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
在使用top命令的時(shí)候會(huì)看到這么一行:
里面的各個(gè)值分別是什么意思呢?
今天被問到這個(gè)問題,發(fā)現(xiàn)答的不是很清楚。果然啊,天天用最多的top命令都還沒摸透。。。慚愧。。。于是就查了些資料:
官方解釋
Cpu(s)表示的是cpu信息。各個(gè)值的意思是:
us: user cpu time (or) % CPU time spent in user space
sy: system cpu time (or) % CPU time spent in kernel space
ni: user nice cpu time (or) % CPU time spent on low priority processes
id: idle cpu time (or) % CPU time spent idle
wa: io wait cpu time (or) % CPU time spent in wait (on disk)
hi: hardware irq (or) % CPU time spent servicing/handling hardware interrupts
si: software irq (or) % CPU time spent servicing/handling software interrupts
st: steal time - - % CPU time in involuntary wait by virtual cpu while hypervisor is servicing another processor (or) % CPU time stolen from a virtual machine
?
翻譯一下:
us:用戶態(tài)使用的cpu時(shí)間比
sy:系統(tǒng)態(tài)使用的cpu時(shí)間比
ni:用做nice加權(quán)的進(jìn)程分配的用戶態(tài)cpu時(shí)間比
id:空閑的cpu時(shí)間比
wa:cpu等待磁盤寫入完成時(shí)間
hi:硬中斷消耗時(shí)間
si:軟中斷消耗時(shí)間
st:虛擬機(jī)偷取時(shí)間
?
好了,如果說列出上面的條條框框說我懂了,那真是自欺欺人了。下面是我自己的理解
首先這個(gè)百分比是怎么算出來的呢?
比如一秒內(nèi)有100個(gè)cpu時(shí)間片,這個(gè)cpu時(shí)間片就是cpu工作的最小單位。那么這100個(gè)cpu時(shí)間片在不同的區(qū)域和目的進(jìn)行操作使用,就代表這個(gè)區(qū)域所占用的cpu時(shí)間比。也就是這里得出的cpu時(shí)間百分比。
比如下面一個(gè)程序:
將文件從磁盤的src位置拷貝到磁盤的dst位置。文件會(huì)從src先讀取進(jìn)入到內(nèi)核空間,然后再讀取到用戶空間,然后拷貝數(shù)據(jù)到用戶空間的buf上,再通過用戶空間,內(nèi)核空間,數(shù)據(jù)才到磁盤的dst上。
?
所以從上面這個(gè)程序來看,cpu消耗在kernel space的時(shí)候就是sy(系統(tǒng)態(tài)使用的cpu百分比),cpu消耗在user space的時(shí)候就是us(用戶態(tài)使用的cpu百分比)。
好了,下面說說hi和si
如果程序都沒什么問題,那么是沒有hi和si的,但是實(shí)際上有個(gè)硬中斷和軟中斷的概念。比如硬中斷,cpu在執(zhí)行程序的時(shí)候,突然外設(shè)硬件(比如硬盤出現(xiàn)問題了)機(jī)器需要立刻通知cpu進(jìn)行現(xiàn)場(chǎng)保存工作。這個(gè)時(shí)候會(huì)cpu會(huì)出現(xiàn)上下文切換。就是cpu會(huì)有一部分時(shí)間會(huì)被硬中斷占用了,這個(gè)時(shí)間就是hi。相類似,si是軟中斷的cpu占用時(shí)間,軟中斷是由軟件的指令方式觸發(fā)的。
相關(guān)軟中斷和硬中斷的概念可以參考:
http://blog.csdn.net/pxz_002/article/details/7327668
下面是ni
ni是nice的意思,nice是什么呢,每個(gè)linux進(jìn)程都有個(gè)優(yōu)先級(jí),優(yōu)先級(jí)高的進(jìn)程有優(yōu)先執(zhí)行的權(quán)利,這個(gè)叫做pri。進(jìn)程除了優(yōu)先級(jí)外,還有個(gè)優(yōu)先級(jí)的修正值。即比如你原先的優(yōu)先級(jí)是20,然后修正值為-2,那么你最后的進(jìn)程優(yōu)先級(jí)為18。這個(gè)修正值就叫做進(jìn)程的nice值。
?
那么nice是一個(gè)進(jìn)程的優(yōu)先級(jí)修正值,為什么會(huì)占用cpu時(shí)間呢?
ni是指用做nice加權(quán)的進(jìn)程使用的用戶態(tài)cpu時(shí)間比,我的理解就是一個(gè)進(jìn)程的所謂修正值就意味著多分配一些cpu時(shí)間給這個(gè)進(jìn)程的用戶態(tài),這個(gè)中間所多分配的cpu時(shí)間就是我們這里的ni。(這個(gè)理解沒啥把握,如果有錯(cuò)誤麻煩幫忙指出下)
下面是wa
wa指的是CPU等待磁盤寫入完成的時(shí)間,就是說前提是要進(jìn)行IO操作,在進(jìn)行IO操作的時(shí)候,CPU等待時(shí)間。比如上面那個(gè)程序,最后一步,從系統(tǒng)空間到dst硬盤空間的時(shí)候,如果程序是阻塞的,那么這個(gè)時(shí)候cpu就要等待數(shù)據(jù)寫入磁盤才能完成寫操作了。所以這個(gè)時(shí)候cpu等待的時(shí)間就是wa。
所以如果一臺(tái)機(jī)器看到wa特別高,那么一般說明是磁盤IO出現(xiàn)問題,可以使用iostat等命令繼續(xù)進(jìn)行詳細(xì)分析。
下面是st
st的名字很生動(dòng),偷取。。。是專門對(duì)虛擬機(jī)來說的,一臺(tái)物理是可以虛擬化出幾臺(tái)虛擬機(jī)的。在其中一臺(tái)虛擬機(jī)上用top查看發(fā)現(xiàn)st不為0,就說明本來有這么多個(gè)cpu時(shí)間是安排給我這個(gè)虛擬機(jī)的,但是由于某種虛擬技術(shù),把這個(gè)cpu時(shí)間分配給了其他的虛擬機(jī)了。這就叫做偷取。
id
剩下的id就是除了上面那么多cpu處理上下文以外的cpu時(shí)間片。當(dāng)然在這些時(shí)間片上,cpu是空閑的。
top的所有這些cpu時(shí)間應(yīng)該是相加為100%的。
dstat
題外話,有個(gè)dstat命令也是可以查看cpu的信息的。下圖就是dstat -c的顯示
其中可以很容易將usr和us,sys和sy,idl和id,wai和wa,hig和hi,siq和si對(duì)應(yīng)起來
但是可以觀察到dstat是沒有st,ni的統(tǒng)計(jì)的,而且它的所有部分加起來總和可能沒有100,這就說明dstat實(shí)際是沒有對(duì)st,ni做cpu統(tǒng)計(jì)的。使用的時(shí)候要注意下這個(gè)。
參考文章:
http://hi.baidu.com/higkoo/item/70600834426247483075a1df
http://blog.csdn.net/codestinity/article/details/7496962
http://book.51cto.com/art/200812/99435.htm
http://unix.stackexchange.com/questions/18918/in-linux-top-command-what-are-us-sy-ni-id-wa-hi-si-and-st-for-cpu-usage
轉(zhuǎn)載于:https://my.oschina.net/goopand/blog/465997
總結(jié)
以上是生活随笔為你收集整理的你不一定懂的cpu显示信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用DriverStudio开发USB驱动
- 下一篇: 自己写着玩(三)