【发布时间】:2014-03-24 06:04:14
【问题描述】:
在一个模块中,我正在访问 task_struct 并返回 stime+utime。 我想将其转换为毫秒。 task_struct 中将以何种格式显示 stime 和 utime。 我也可以从 /proc//stat 访问它。两个单位是否不同。
【问题讨论】:
标签: linux linux-kernel task
在一个模块中,我正在访问 task_struct 并返回 stime+utime。 我想将其转换为毫秒。 task_struct 中将以何种格式显示 stime 和 utime。 我也可以从 /proc//stat 访问它。两个单位是否不同。
【问题讨论】:
标签: linux linux-kernel task
Marc Rochkind 的 Advanced Unix Programming 在某种程度上涵盖了这个主题(如果我没记错的话,第 55 页)。如果我解释他所说的更好,请原谅我。
utime 代表用户时间,是执行指令所花费的时间。它只是 CPU 时间,不包括等待运行所花费的时间。
stime 是代表进程执行系统调用所花费的 CPU 时间。
单位是时钟滴答。
每秒时钟滴答数可以通过 sysconf 系统调用来确定。
我希望这会有所帮助。
【讨论】:
给定task_struct,以纳秒为单位的 CPU 总运行时间存储在 task->se.sum_exec_runtime 中。
除非首先通过task_cputime_adjusted(task, &utime, &stime) 进行调整,否则这似乎与task->utime+task->stime 相加。
对于其他尝试实现此类功能的人,我强烈建议阅读proc(5)。在这种情况下,搜索utime 会引导您找到/proc/[pid]/stat(或proc/self/stat),它在第14 列中提供utime。该实现可以在fs/proc/array.c 中找到,我在这里找到了对task_cputime_adjusted 的调用。验证模块输出,例如/proc/[pid]/stat | awk '{ print $14 } 为utime。
【讨论】: