正在计算所有 PID 的 CPU 使用情况

Calculating CPU usage for all PIDs

我正在制作一个 Linux 模块来计算系统中每个任务的 CPU 使用时间。为此,我正在阅读任务列表,使用 for_each_process 遍历所有 task_struct 条目。我有几个关于此方法的问题:

  1. 在一些代码片段中,我看到有人使用 for_each_process 和 RCU 锁。是必须的吗?我只读这个数据结构。
  2. 我打算使用 task_structutimestime 字段。但是当我尝试打印这些值时,我发现这些值与我使用 cat /proc/<pid>/stat 得到的值不同。这些值之间存在巨大差异。我做错了什么吗?
  3. 根据我的理解,utimestime代表时钟滴答数。我如何从这些值中得出以秒为单位的经过时间?

抱歉,如果这些是基本问题,我是 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 以纳秒为单位的时间。我使用了这个功能,我能够看到正确的时间结果。