3

我试图了解如何在 Linux 中计算 CPU 时间。特别是,我想把注意力集中在这个问题clock_gettimegetrusage。我想知道这两个是什么关系。

  • 一个人打电话给另一个人吗?
  • 它们是否都依赖于相同的底层机制?
  • 如果是这样,他们最大的共同点是什么,我的意思是,他们都调用linux 内核中的什么函数来获得时间?
  • 如果他们不依赖相同的底层机制,那为什么?
4

1 回答 1

1

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 内核中与时间相关的代码非常复杂,并且试图为许多不同的大师服务。

于 2018-07-23T23:14:52.100 回答