Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在通过各种机制的stackoverflow线程来计算进程的CPU时间。
内部是如何clock()实现的?它是否使用rdtsc()(如果是这种情况,那么它对内核之间的迁移很敏感)。
clock()
rdtsc()
此外,getrusage()实施 ? 它也依赖于 TSC 吗?
getrusage()
提前致谢
内核以刻度大小跟踪进程的 CPU 利用率。
两者clock()都getrusage()基于这些。
时钟由内核使用采样方法由进程累积,其中内核接收时钟的硬件中断并执行时钟处理程序,将时钟添加到当前运行的进程中。至少,这是我上次查看时的工作方式。
所以,rtdsc根本没有发挥作用 - 这是一件好事,因为rdtsc不能跨 CPU 准确测量。
rtdsc
rdtsc
您可以轻松浏览一些 libc 代码。这里是时间/目录musl-libc
musl-libc
在几个库中,一些低级时序系统调用正在使用VDSO来避免支付实际系统调用的成本(从用户空间到内核并返回),因此以某种方式使用 RTDSC。
但我很惊讶你问。如果是好奇,就去研究一下自由软件实现的源代码吧。否则,请相信规范和实现。
由于实施和系统特定,血腥细节可能很复杂。实际的实现可以在运行时动态调整(例如通过内核中的 VDSO 设置)。