我需要从/proc/pid/schedstat获取特定进程的统计信息。
在这里https://www.kernel.org/doc/Documentation/scheduler/sched-stats.txt我找到了字段的描述。
(1) 花费在 cpu 上的时间和 (2) 花费在等待运行队列上的时间的度量单位是什么?如何将它们转换为秒?它们是以时钟滴答为单位测量的,我应该将它们除以sysconf(_SC_CLK_TCK)吗?
我需要从/proc/pid/schedstat获取特定进程的统计信息。
在这里https://www.kernel.org/doc/Documentation/scheduler/sched-stats.txt我找到了字段的描述。
(1) 花费在 cpu 上的时间和 (2) 花费在等待运行队列上的时间的度量单位是什么?如何将它们转换为秒?它们是以时钟滴答为单位测量的,我应该将它们除以sysconf(_SC_CLK_TCK)吗?
文档说它们处于“jiffies”状态,但文档已经过时。尝试运行 CPU 密集型任务并每隔几秒钟对计数器进行采样,您会发现它们的增量太快而无法实现。
采用现代内核默认的完全公平调度程序 (CFS) 导致文档出错,因此除以 1000000000 以转换为秒。
https://lkml.org/lkml/2019/7/24/906
根据文档,时间单位是“jiffies”,如“我马上就到!” :)
一瞬间等于光在真空中传播一厘米所需的时间或大约 33.3564 皮秒。-维基百科
但这不是您想要的定义。试试这篇文章https://stackoverflow.com/questions/10885685/jiffies-how-to-calculate-seconds-elapsed上面的答案说
结论:将一个schedstat时间值除以系统的 HZ 常数转换为秒。
更新:如果您在编程上下文中处理这些时间,则同一页面上的当前最佳答案指向一些系统例程,您可以调用这些例程来进行转换(例如 jiffies 到毫秒)。
在 Linux 2.6.23 中从 jiffies 更改为纳秒,请参阅提交 425e0968a25f