为了衡量用户的总CPU时间,我使用了以下字段中的“ utime”字段/proc/[pid]/stat
:
utime %lu Amount of time that this process has been scheduled in user
mode, measured in clock ticks (divide by
sysconf(_SC_CLK_TCK). This includes guest time, guest_time
(time spent running a virtual CPU, see below), so that
applications that are not aware of the guest time field do
not lose that time from their calculations.
(摘自man proc(5))
因此,我的“用户utime”是utime
该用户正在运行的所有PID 的总和。
我希望这将为我提供该用户所花费的CPU秒数的准确值。我在正确的轨道上吗?
我不了解或尚未考虑的一些事项:
- 每个PID都有一个父PID(或零)。但是我正在计算每个PID,而不仅仅是ppid为0的PID。这是否正确?
- 除了utime,还有stime,cutime和cstime。我需要担心这些吗?我假设utime是PID的cpu秒总数,不计算父级。
如果我使用来计算系统的总cpu时间/proc/uptime
,则该值对于所有用户而言都非常接近我的总和,但是两者之间的差异是很大的。例如(以分钟为单位):
system cpu_time: 96.13
sum of users_cputime: 111.45
更正:
对于所有事物,我都会获得“明智的看待”价值。目前,我正在使用utime,stime,cutime和cstime的总和。它报告的值(虽然我不了解它们)与的度量值很好地相关time
。
如果我完全走错了路,那么还有另一个问题:
- 监视每个用户的总CPU时间最公平的方法是什么?(+500赏金)在Ask Ubuntu上
/proc/uptime
?中的值?然后,我想归因于空闲任务的I / O可以解释差异。我对该主题一无所知,所以我怀疑我错过了一些重要的事情:我不希望空闲任务发生太多事情,尤其是考虑到您的用户cputime总和可能会缺少很多生动的过程。
/proc/cputime
没有有关CPU执行进程所花费时间的任何信息,所以我很困惑您的“系统cpu_time”计算是什么。如果您要用第二个数字做某事,那就是空闲任务所花费的时间;我不知道这实际上意味着什么。