为什么/proc/pid/stat CPU 总和大于/proc/stat

为什么/proc/pid/stat CPU 总和大于/proc/stat

/proc/<pid>/stat为所有进程添加了用户 cpu、系统 cpu、子用户和子系统 cpu。我从之前的样本中获取了增量。

在我对用户、nice 和系统 CPU 进行求和之后,/proc/stat应该是整个盒子的。我再次采取三角洲。

进程的总和几乎总是略大于整个处理器的总和,我不明白为什么。

答案1

造成这种情况的原因有几个,最明显的一个是每个进程的会计使用不同的逻辑来计算不同的事物。

两个具体例子:

  1. 系统stat有一个nice列,用于计算用户在好任务(较低优先级)上花费的时间 - 您没有指定您使用的时间,所以我猜您没有对其进行求和。在此过程中,这将被计为标准用户时间。
  2. iowait时间 - 您也没有考虑到 - 可能在该过程中算作stat系统时间。但同时计算iowait时间是个坏主意,因为它对实际时间的计算非常不可靠,如下man proc所示:

iowait(自 Linux 2.5.41 起)

(5) 等待I/O完成的时间。该值并不可靠,原因如下:

  1. CPU不会等待I/O完成; iowait 是任务等待 I/O 完成的时间。当CPU因未完成的任务I/O而进入空闲状态时,将在该CPU上调度另一个任务。

  2. 在多核CPU上,等待I/O完成的任务不在任何CPU上运行,因此每个CPU的iowait很难计算。

  3. 在某些情况下,该字段的值可能会减少。

最后,我必须指出,我相信这种类型的记帐是无用的,因为它对于任何严肃的目的来说永远都不够准确 - 系统和进程计数器出于不同的目的在系统的不同部分进行处理,并且永远不会匹配到任何有用的程度。

相关内容