我试图了解在Linux中如何计算cpu时间。特别是,我想将这个问题集中在clock_gettime
和getrusage
上。我想知道这两个有什么关系。
答案 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内核中与时间相关的代码非常复杂,并且尝试服务于许多不同的大师。