为什么所有进程的CPU使用量之和(stime + utime)与Linux中/ proc / stat中的CPU使用总量相比有何不同?

时间:2019-05-03 07:43:19

标签: c++ linux cpu-usage

我需要计算一段时间(1-5秒)内Linux设备的总体CPU使用率,并计算一个进程列表及其各自的CPU使用时间。该程序应使用C ++设计和实现。我的假设是所有进程CPU时间的总和等于整个CPU的总值。目前,我正在使用的CPU是多核(2核)。

根据How to determine CPU and memory consumption from inside a process?,可以使用/ proc / stat中的“ cpu”值来计算自启动以来系统中所有可用的“ jiffies”。如果现在在两个时间点对值进行采样,然后在两个时间点比较用户,nice,system和idle的值,则可以计算此时间间隔内的平均CPU使用率。公式应该是

totalCPUUsage = ((user_aft - user_bef) + (nice_aft - nice_bef) + (system_aft - system_bef)) / 
((user_aft - user_bef) + (nice_aft - nice_bef) + (system_aft - system_bef) + (idle_aft - idle_bef)) * 100 %

根据How to calculate the CPU usage of a process by PID in Linux from C?,可以通过从/ proc / $ {PID} / stat(此文件的第14和15列)中添加utime和stime来计算单个进程的已用暂存器。现在,当我计算此总和并将其除以所分析间隔中的总抖动量时,我将假设一个过程的公式为

processCPUUsage = ((process_utime_aft - process_utime_bef) + (process_stime_aft - process_stime_bef)) / 
((user_aft - user_bef) + (nice_aft - nice_bef) + (system_aft - system_bef) + (idle_aft - idle_bef)) * 100 %

当我现在总结所有进程的值并将其与总体计算的CPU使用率进行比较时,大多数时候我收到的聚合值略高(尽管对于所有不同的CPU负载来说,这些值都非常接近)

谁能向我解释,这是什么原因?是否有不止一个进程使用任何CPU资源,因此在我的累加中占了两倍或更多?还是我只是在这里想念什么?在proc文件系统(https://linux.die.net/man/5/proc)的Linux手册页中也找不到任何进一步的提示。

谢谢!

0 个答案:

没有答案