Linux ’top’ 命令:什麼是 us、sy、ni、id、wa、hi、si 和 st(用於 CPU 使用)?
當我
top
在 Linux 中發佈時,我得到類似於以下的結果:其中一行的 CPU 使用情況資訊如下所示:
Cpu(s): 87.3%us, 1.2%sy, 0.0%ni, 27.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
雖然我知道它們中的每一個的定義(遠在下面),但我不明白這些任務的確切含義。
hi
- 服務硬體中斷是什麼意思?si
- 服務軟體中斷是什麼意思?st
- 他們說這是“虛擬 CPU 非自願等待的 CPU 時間,而管理程序正在為另一個處理器提供服務(或)從虛擬機竊取的 CPU 時間百分比”。但它實際上是什麼意思?有人可以更清楚嗎?
我列出了所有
us
,sy
,ni
等,因為它可以幫助其他人搜尋相同的內容。此資訊不在手冊頁中。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
hi
是處理硬體中斷所花費的時間。硬體中斷是由硬體設備(網卡、鍵盤控制器、外部計時器、硬體感測器等)在需要向 CPU 發出信號(例如,數據已到達)時生成的。由於這些可能非常頻繁地發生,並且由於它們在執行時實際上會阻塞目前的 CPU,因此核心硬體中斷處理程序被編寫得盡可能快速和簡單。
如果需要完成長時間或複雜的處理,則使用機制呼叫延遲這些任務
softirqs
。這些是獨立調度的,可以在任何 CPU 上執行,甚至可以同時執行(硬體中斷處理程序都不是這樣)。關於硬 IRQ 阻塞目前 CPU 的部分,以及關於
softirqs
能夠在任何地方執行的部分並不完全正確,可能存在限制,一些硬 IRQ 可以中斷其他的。例如,來自網卡的“數據接收”硬體中斷可以簡單地將資訊“卡 ethX 需要服務”儲存在某處並安排
softirq
. 這softirq
將是觸發實際數據包路由的東西。
si
代表在這些中花費的時間softirqs
。Matthew Wilcox 的I’ll Do It later: Softirqs, Tasklets, Bottom Halves, Task Queues, Work Queues and Timers (PDF, 64k)是關於機制的好讀物
softirq
(也有一點歷史)。
st
,“竊取時間”,僅與虛擬化環境相關。它表示目前虛擬機無法使用真正的 CPU 的時間——它被虛擬機管理程序從該虛擬機“偷走”(執行另一個虛擬機,或者為了自己的需要)。IBM的CPU 時間核算文件包含有關竊取時間和虛擬化環境中的 CPU 核算的更多資訊。(它針對的是 zSeries 類型的硬體,但總體構想對於大多數平台都是相同的。)