首页 > 解决方案 > 计算所有 PID 的 CPU 使用率

问题描述

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

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

抱歉,如果这些是基本问题,我对 Linux 内核有点陌生。

提前致谢。

标签: linux-kerneloperating-system

解决方案


我实际上在 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以纳秒为单位返回时间的内核函数,而不是以秒为单位计算时间。我使用了这个功能,我能够看到正确的时间结果。


推荐阅读