我试图了解如何在 Linux 中计算 CPU 时间。特别是,我想把注意力集中在这个问题clock_gettime
上getrusage
。我想知道这两个是什么关系。
- 一个人打电话给另一个人吗?
- 它们是否都依赖于相同的底层机制?
- 如果是这样,他们最大的共同点是什么,我的意思是,他们都调用linux 内核中的什么函数来获得时间?
- 如果他们不依赖相同的底层机制,那为什么?
我试图了解如何在 Linux 中计算 CPU 时间。特别是,我想把注意力集中在这个问题clock_gettime
上getrusage
。我想知道这两个是什么关系。
Unix 和 Linux 中有很多时钟。有些是挂钟(CLOCK_REALTIME),有些是修改后的挂钟(CLOCK_MONO,CLOCK_BOOT),有些是CPU时钟(CLOCK_PROCESS_CPUTIME_ID,CLOCK_THREAD_CPUTIME_ID)。
clock_gettime
基本上可以从任何分配了 clkid 的时钟中提取。(在内核中,基本上有代码为每个 clkid 定义了一个合适get
的使用方法clock_gettime
。)
我怀疑,但尚未证实,clock_gettime
与 CPU 时间相关的 clkid 之一从相同的 CPU 计数器中提取getrusage
。
依次回答您的问题:
一个人打电话给另一个人吗?
我不相信。
它们是否都依赖于相同的底层机制?
我相信是这样,但我还没有证实这一点。
如果是这样,他们最大的共同点是什么,我的意思是,他们都调用 linux 内核中的什么函数来获得时间?
我不确定。(抱歉。我在所有这方面的工作都集中在墙上时间,而不是 CPU 时间。)
如果他们不依赖相同的底层机制,那为什么?
因为 Linux 内核中与时间相关的代码非常复杂,并且试图为许多不同的大师服务。