为了衡量用户的总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”计算是什么。如果您要用第二个数字做某事,那就是空闲任务所花费的时间;我不知道这实际上意味着什么。