时钟()的实现

时间:2012-10-14 15:07:55

标签: linux time clock

我正在使用各种机制上的stackoverflow线程来计算进程的CPU时间。

clock()如何在内部实施?它是否使用rdtsc()(如果是这种情况,那么它对核心之间的迁移很敏感。)

此外,getrusage()已实施?它还取决于TSC吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

内核跟踪大小为tick的进程的CPU利用率。

clock()getrusage()都基于这些。

内核使用采样方法由进程累积任务,其中内核接收时钟的硬件中断并执行时钟处理程序,这会将勾号添加到当前正在运行的进程中。至少,这是我上次看的时候。

所以,rtdsc根本没有发挥作用 - 这是一件好事,因为rdtsc无法在CPU之间准确衡量。

答案 1 :(得分:0)

您可以轻松浏览一些libc代码。以下是musl-libc

time/目录

在几个库中,一些低级别的计时系统调用正在使用VDSO来避免支付真实系统调用的成本(从用户空间到内核和返回),因此以某种方式使用RTDSC。

但是我很惊讶你问。如果是好奇心,只需研究自由软件实现的源代码。否则,请相信规格&实施。

由于实施和系统特定,Gory的细节可能很复杂。真正的实现可以在运行时动态调整(例如通过内核中的VDSO设置)。