1

我正在通过各种机制的stackoverflow线程来计算进程的CPU时间。

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

此外,getrusage()实施 ? 它也依赖于 TSC 吗?

提前致谢

4

2 回答 2

2

内核以刻度大小跟踪进程的 CPU 利用率。

两者clock()getrusage()基于这些。

时钟由内核使用采样方法由进程累积,其中内核接收时钟的硬件中断并执行时钟处理程序,将时钟添加到当前运行的进程中。至少,这是我上次查看时的工作方式。

所以,rtdsc根本没有发挥作用 - 这是一件好事,因为rdtsc不能跨 CPU 准确测量。

于 2013-09-04T05:27:13.943 回答
0

您可以轻松浏览一些 libc 代码。这里是时间/目录musl-libc

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

但我很惊讶你问。如果是好奇,就去研究一下自由软件实现的源代码吧。否则,请相信规范和实现。

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

于 2012-10-14T16:26:24.197 回答