/proc/ 中的测量单位/schedstat

/proc/ 中的测量单位/schedstat

我需要从中获取统计数据/proc/pid/schedstat对于一个特定的过程。

这里https://www.kernel.org/doc/Documentation/scheduler/sched-stats.txt我找到了字段的描述。

(1) 花费在 cpu 上的时间和 (2) 花费在等待运行队列上的时间的度量单位是什么?如何将它们转换为秒?它们是用时钟滴答来测量的吗?我应该将它们除以系统配置(_SC_CLK_TCK)

答案1

文档说它们处于“jiffies”状态,但文档已过时。尝试运行一个 CPU 密集型任务并每隔几秒钟对计数器进行采样,您会发现它们增加得太快而无法在瞬间完成。

由于采用了完全公平调度程序 (CFS),该文档是错误的,CFS 是现代内核的默认设置,因此除以 1000000000 即可转换为秒。

https://lkml.org/lkml/2019/7/24/906

答案2

根据文档,时间单位是“jiffies”,即“我很快就会到那里!” :)

一瞬间等于光在真空中传播一厘米所需的时间,即大约 33.3564 皮秒。 -维基百科

但这不是您想要的定义。试试这个帖子https://stackoverflow.com/questions/10885685/jiffies-how-to-calculate-seconds-elapsed最上面的答案说

jiffy 的大小由内核常量 HZ 的值决定。

HZ 的值因内核版本和硬件平台而异。在 i386 上,情况如下:在 2.4.x 及之前的内核上,HZ 为 100,给出的 jiffy 值为 0.01 秒;从 2.6.0 开始,HZ 提高到 1000,即 0.001 秒。从内核 2.6.13 开始,HZ 值是一个内核配置参数,可以是 100、250(默认)或 1000,分别产生 0.01、0.004 或 0.001 秒的 jiffies 值。从内核 2.6.20 开始,可以使用更多频率:300,该数字可均匀划分常见视频帧速率(PAL,25 HZ;NTSC,30 HZ)。

结论:划分一个调度统计时间值通过系统的HZ常数来转换为秒。

更新:如果您在程序化环境中处理这些时间,现在的最佳答案同一页面上的 指向一些系统例程,您可以调用它们来进行转换(例如 jiffies 到毫秒)。

答案3

在 Linux 2.6.23 中从 jiffies 更改为纳秒,请参阅提交 425e0968a25f

相关内容