我肯定在理解“/proc/stat”方面遇到了一些问题。在附加的计算表中(实际上是一个图像,因为我无法添加工作表),我记录了一些收集的“/proc/stat”,延迟了 2 秒(黄色列显示一天中的时间和两次扫描之间的准确时间,蓝色列显示“/proc/stat”的核心对应第一行)。在白色列中,我执行了一些计算。在 Q 列中,我将所有 10 个 CPU 时间相加,并期望结果为 100%。但事实并非如此。问题出在哪里?感谢您的帮助。
答案1
因此,查看此问题的最佳方法是查看所有 CPU 的累积统计数据。我刚刚运行了以下命令:
cat /proc/stat | grep "cpu "; sleep 1; cat /proc/stat | grep "cpu "
cpu 72793 633 14979 2271004 2783 0 517 0 0 0
cpu 72794 633 14980 2271403 2783 0 518 0 0 0
两组结果之间的变化就是消耗的 USER_HZ 数量。因此,我得到了
用户:72794 - 72793 = 1
好:633-633=0
系统:14980-14979=1
空闲:2271403-2271004 = 399
iowait:2783-2783 = 0
中断请求: 0-0=0
软中断:518-517 = 1
盗垒:0 - 0 = 0
客人: 0 - 0 = 0
客人友善度: 0 - 0 = 0
因此,总的 USER_HZ 消耗为 1 + 0 + 1 + 399 + 0 + 1 + 0 + 0 + 0 = 402。这是针对 4 线程机器而言的,因此每个 CPU 大约有 100.5 个 USER_HZ,这对于 100Hz 时序时钟上的某些统计采样来说大致正确。采样周期越长,结果越接近时序时钟速率。
您可以对系统中的所有 n 个 CPU(cpu0.. CPUn-1)执行相同操作。只需计算每个采样周期之间的统计数据增量,将增量相加,它就会大致等于 CPU 数量 x jiffy 时钟速率。