当我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
答案1
hi
是处理硬件中断所花费的时间。硬件中断由硬件设备(网卡、键盘控制器、外部定时器、硬件传感器等)在需要向 CPU 发出某些信号(例如数据已到达)时生成。
由于这些情况可能会非常频繁地发生,并且它们在运行时基本上会阻塞当前的 CPU,因此内核硬件中断处理程序被编写得尽可能快速和简单。
如果需要完成长时间或复杂的处理,则可以使用机制调用来推迟这些任务softirqs
。它们是独立调度的,可以在任何 CPU 上运行,甚至可以并发运行(对于硬件中断处理程序来说,这些都不是真的)。
关于硬 IRQ 阻塞当前 CPU 的部分以及关于softirqs
能够在任何地方运行的部分并不完全正确,可能存在限制,并且某些硬 IRQ 可能会中断其他硬 IRQ。
例如,来自网卡的“数据接收”硬件中断可以简单地将信息“网卡 ethX 需要维修”存储在某处,并安排softirq
.这softirq
将触发实际的数据包路由。
si
代表在这些上花费的时间softirqs
。
Matthew Wilcox 的一本关于该机制的好读物softirq
(也有一些历史)我稍后会做:Softirqs、Tasklet、Bottom Halfes、任务队列、工作队列和计时器(PDF,64k)。
st
,“窃取时间”,仅在虚拟化环境中相关。它代表当前虚拟机无法使用真实 CPU 的时间 - 它被虚拟机管理程序从该虚拟机“窃取”(为了运行另一个虚拟机,或者满足其自身的需要)。
这CPU时间统计IBM 的文档提供了有关虚拟化环境中的窃取时间和 CPU 核算的更多信息。 (它针对的是 zSeries 类型的硬件,但对于大多数平台来说总体思路是相同的。)
答案2
- us - 在用户空间中花费的时间
- sy - 在内核空间中花费的时间
- ni - 运行好用户进程所花费的时间(用户定义的优先级)
- id - 空闲操作所花费的时间
- wa - 等待 IO 外围设备(例如磁盘)所花费的时间
- hi - 处理硬件中断例程所花费的时间。 (每当外围单元需要 CPU 的注意时,它就会拉一条线,向 CPU 发出信号以为其提供服务)
- si - 处理软件中断例程所花费的时间。 (一段代码,调用中断例程...)
- st - 当虚拟机管理程序正在为另一个处理器提供服务时,虚拟 CPU 花费在非自愿等待上的时间(从虚拟机中窃取)
答案3
“st”值可以通过使用 AWS 的 T2.micro EC2 实例来简单解释。
在里面AWS 文档您可以看到每个 VCPU 只能获得 10% 的基准性能。这意味着,如果您有一个进程会消耗大量 cpu 时间,则“st”值将保持在 90 左右,因为您只允许使用 10% 的 VCPU。其他值的总和将保持在 10 左右。
因此,AWS 使用虚拟机管理程序只允许您访问一定量的计算能力。由于您仅使用低层类型的实例,因此它会故意减慢您的速度。
我希望这能让事情变得更容易理解。