【发布时间】:2014-10-29 15:45:53
【问题描述】:
我正在做一些关于分析程序行为的工作。我想做的一件事是获取进程在 CPU 上运行的时间。我通过读取 Linux 内核 sched_entity 数据结构中的 sum_exec_runtime 字段来完成此操作。
在使用一些相当简单的程序进行测试后,这些程序只是执行一个循环然后退出,我遇到了一个特殊的问题,即程序每次执行时都不会以相同的运行时结束。看到 sum_exec_runtime 是一个以纳秒表示的值,我希望该值在几微秒内有所不同。但是,我看到了几毫秒的变化。
我最初的反应是,这可能是由于 I/O 等待时间造成的,但据我了解,该进程应该在等待 I/O 时放弃 CPU。此外,我的测试程序只是在执行循环,所以应该很少甚至没有 I/O。
我正在就以下问题寻求任何建议:
- sum_exec_runtime不是进程控制 CPU 的实际时间吗?
- 进程在等待 I/O 时实际上并没有放弃 CPU 吗?
- 是否还有其他因素会影响进程的实际运行时间(I/O 除外)?
请记住,我只是想找出进程在 CPU 上执行的实际时间。我不关心总执行时间,包括休眠或等待运行。
编辑:我还想明确一点,我的测试程序中除了循环之外没有任何分支,循环只是循环进行恒定次数的迭代。
谢谢。
【问题讨论】:
-
预计该测量中会出现噪音,尤其是在运行时间较短的程序中。各种事情都会影响它。做大量的平均。
标签: process linux-kernel profiling scheduling