Debian squeeze/xen 上的 top 与 vmstat

Debian squeeze/xen 上的 top 与 vmstat

我在完全卸载的 xen 4.0.1 上运行 squeeze DomU。我注意到 iostat 和 top 之间的 CPU 状态存在差异,如下所示:

顶部(在每个 iter 中):

Cpu0  :  0.2%us,  2.0%sy,  0.0%ni, 94.2%id,  2.7%wa,  0.0%hi,  0.0%si,  0.9%st

iostat -x 3 (第一次迭代):

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.19    0.00    1.98    2.69    0.88   94.26

iostat -x 3 (后续迭代):

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

如果我假设 top 显示的是累计百分比,而不是现在与现在-1 迭代之间的差异,那么我是否正确?我知道 top 理解累积模式,但这对我来说是不可用的,并且只会影响进程显示,而不会影响 CPU 状态统计信息。

有漏洞?可能与 Xen 有关?

问候

蒂姆

答案1

top, (以及您可以使用的vmstat其他类似的 x )从尝试 catting 该虚拟文件中获取它们的信息,您将看到整个 CPU 的计数器,以及每个硬件线程的一行和一些其他中断计数器。stat/proc/stat

您可以看到的 CPU 数字是内核的数字吉菲斯已经过去自系统启动以来在各个州。

而第一次迭代vmstat将简单地向您显示基于这些计数器的单次读取的相对百分比(正如您所说的那样,基于累积计数),top 实际上会在您看到初始显示之前大约 0.5 秒内轮询计数器两次,因此(可能稍微不准确的)当前比率的读数将是您首先看到的内容。

要确认,请尝试运行:strace -e open top |grep "/proc/stat"您将看到两次快速读取大部分内容/proc/,然后每刻进行一次后续读取。这就是为什么在 top 出现之前总会有短暂的延迟。

据我所知,内核没有寄存器来跟踪用户空间程序的即时访问增量。它对平均负载有跟踪功能,在不同时间间隔内维护“正在运行”进程数量的三个滚动平均值;但对 CPU 利用率没有类似功能。

所以:这不是错误,而是设计使然。

相关内容