linux-kernel - 计算所有 PID 的 CPU 使用率
问题描述
我正在制作一个 Linux 模块来计算系统中每个任务的 CPU 使用时间。为此,我正在阅读for_each_process
用于遍历所有task_struct
条目的任务列表。关于这种方法,我有几个问题:
- 在一些代码片段中,我看到人们使用
for_each_process
RCU 锁。是必须的吗?我只是在阅读这个数据结构。 - 我
utime
打算stime
使用task_struct
. 但是当我尝试打印这些值时,我发现这些值与我使用的不同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
以纳秒为单位返回时间的内核函数,而不是以秒为单位计算时间。我使用了这个功能,我能够看到正确的时间结果。
推荐阅读
- grails - Shiro - Grails 应用程序中的“调用代码无法访问 SecurityManager...”异常
- swift - 如何在 Swift 中将包含 % 的字符串转换为 Int
- javascript - 无法打印销售订单中的 NetSuite PDF 文件
- amazon-web-services - 如何使用 S3 工件详细信息通过 cli 运行 aws code-build?
- javascript - 使用不带 jQuery 的 Bootstrap 和 CoreUI 将侧边栏链接显示为活动的
- dataframe - 如何将 requests.models.Response(obj) 转换为有用的东西,如列表,然后转换为 DataFrame?
- python-3.x - 如何重置 QFile/QTextStream?
- excel - Delphi - 如何创建 Excel 数据透视图
- javascript - Antd 固定 Tabs 在 Header 中的位置并在 Content 中渲染 Tabs 内容
- symfony - 带有正方形棕色线条的传单地图