clock_gettime和getrusage有何关系?

时间:2018-07-23 20:56:29

标签: c time linux-kernel clock rdtsc

我试图了解在Linux中如何计算cpu时间。特别是,我想将这个问题集中在clock_gettimegetrusage上。我想知道这两个有什么关系。

  • 一个打给另一个吗?
  • 它们都依赖相同的基础机制吗?
  • 如果是,那么他们最大的共同点是什么,我的意思是,他们俩都linux kernel都要求打发时间?
  • 如果他们不依赖于相同的基础机制,那为什么呢?

1 个答案:

答案 0 :(得分:1)

Unix和Linux中有很多时钟。有些是壁钟(CLOCK_REALTIME),有些是经过修改的壁钟(CLOCK_MONO,CLOCK_BOOT),有些是CPU时间时钟(CLOCK_PROCESS_CPUTIME_ID,CLOCK_THREAD_CPUTIME_ID)。

clock_gettime基本上可以从分配了clkid的任何时钟中提取。 (在内核中,基本上有一些代码,每个代码都为get定义了一个合适的clock_gettime方法以供使用。)

我怀疑但尚未确认,clock_gettime与CPU时间相关的事件之一与getrusage一样来自相同的CPU计数器。

依次回答您的问题:

  

一个打给另一个吗?

我不相信。

  

它们都依赖相同的基础机制吗?

我相信,但是我没有证实。

  

如果是的话,他们最大的共同点是什么,我的意思是,他们俩都在调用Linux内核的什么函数来获取时间?

我不确定。 (对不起。我在所有这些工作中都集中在墙上时间,而不是CPU时间上。)

  

如果他们不依赖于相同的基础机制,那为什么呢?

因为Linux内核中与时间相关的代码非常复杂,并且尝试服务于许多不同的大师。