正在计算所有 PID 的 CPU 使用情况
Calculating CPU usage for all PIDs
我正在制作一个 Linux 模块来计算系统中每个任务的 CPU 使用时间。为此,我正在阅读任务列表,使用 for_each_process
遍历所有 task_struct
条目。我有几个关于此方法的问题:
- 在一些代码片段中,我看到有人使用
for_each_process
和 RCU 锁。是必须的吗?我只读这个数据结构。
- 我打算使用
task_struct
的 utime
和 stime
字段。但是当我尝试打印这些值时,我发现这些值与我使用 cat /proc/<pid>/stat
得到的值不同。这些值之间存在巨大差异。我做错了什么吗?
- 根据我的理解,
utime
和stime
代表时钟滴答数。我如何从这些值中得出以秒为单位的经过时间?
抱歉,如果这些是基本问题,我是 Linux 内核的新手。
提前致谢。
我实际上在 Reddit 上得到了一些建议。
https://www.reddit.com/r/linuxquestions/comments/kp55ev/calculating_cpu_usage_for_all_pids/?utm_source=share&utm_medium=web2x&context=3
此外,我没有以秒为单位计算时间,而是找到了一个内核函数 task_cputime
returns 以纳秒为单位的时间。我使用了这个功能,我能够看到正确的时间结果。
我正在制作一个 Linux 模块来计算系统中每个任务的 CPU 使用时间。为此,我正在阅读任务列表,使用 for_each_process
遍历所有 task_struct
条目。我有几个关于此方法的问题:
- 在一些代码片段中,我看到有人使用
for_each_process
和 RCU 锁。是必须的吗?我只读这个数据结构。 - 我打算使用
task_struct
的utime
和stime
字段。但是当我尝试打印这些值时,我发现这些值与我使用cat /proc/<pid>/stat
得到的值不同。这些值之间存在巨大差异。我做错了什么吗? - 根据我的理解,
utime
和stime
代表时钟滴答数。我如何从这些值中得出以秒为单位的经过时间?
抱歉,如果这些是基本问题,我是 Linux 内核的新手。
提前致谢。
我实际上在 Reddit 上得到了一些建议。 https://www.reddit.com/r/linuxquestions/comments/kp55ev/calculating_cpu_usage_for_all_pids/?utm_source=share&utm_medium=web2x&context=3
此外,我没有以秒为单位计算时间,而是找到了一个内核函数 task_cputime
returns 以纳秒为单位的时间。我使用了这个功能,我能够看到正确的时间结果。