计算所有PID的CPU使用情况



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

  1. 在一些代码片段中,我看到有人使用带有RCU锁的for_each_process。是否必须这样做?我只是在阅读这个数据结构
  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_medial=web2x&上下文=3

此外,我可以找到一个以纳秒为单位返回时间的内核函数task_cputime,而不是以秒为单位计算时间。我使用了这个函数,我能够看到正确的时间结果。

最新更新