我需要一种非常准确的方法来为程序的某些部分计时。我可以为此使用常规的高分辨率时钟,但这将返回挂钟时间,这不是我需要的:我需要只花时间运行我的进程。
我清楚地记得看到一个 Linux 内核补丁,它允许我将我的进程计时精确到纳秒级,只是我忘记了将它添加为书签并且我也忘记了补丁的名称:(。
不过我记得它是如何工作的:
在每次上下文切换时,它会读出高分辨率时钟的值,并将最后两个值的增量添加到正在运行的进程的进程时间中。这会生成过程实际过程时间的高分辨率准确 View 。
使用常规时钟保持常规处理时间,我认为它精确到毫秒 (1000Hz),这对于我的目的来说太大了。
有人知道我在说什么内核补丁吗?我还记得它就像一个前后有一个字母的单词——类似于“rtimer”之类的东西,但我记不太清了。
(也欢迎其他建议)
Marko 建议的 Completely Fair Scheduler 不是我想要的,但看起来很有希望。我遇到的问题是,我可以用来获取处理时间的调用仍然没有返回足够精细的值。
- times() 返回值 21、22,以毫秒为单位。
- clock() 返回值 21000、22000,粒度相同。
- getrusage() 返回的值如 210002、22001(以及类似的值),它们的准确性看起来更高一些,但这些值看起来明显相同。
所以现在我可能遇到的问题是内核有我需要的信息,我只是不知道将返回它的系统调用。
最佳答案
如果您正在寻找这种级别的时序分辨率,您可能正在尝试进行一些微优化。如果是这样的话,你应该看看 PAPI .它不仅提供挂钟和虚拟(仅进程)计时信息,还提供对 CPU 事件计数器的访问,这在您尝试提高性能时是必不可少的。
关于linux - Linux 中精确到微秒级(或更好)的进程计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/182554/