我在完全卸载的 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 利用率没有类似功能。
所以:这不是错误,而是设计使然。