linux:times还是clock_gettime(CLOCK_MONOTONIC)?哪一个更快?

时间:2016-08-05 01:27:20

标签: c linux kernel

我在几台机器上测试了times()和clock_gettime(CLOCK_MONOTONIC),结果很混乱(用单线程运行每个api 10M次):

Thinkpad P50 Xeon E3-1505Mv5 ​​[Skylake 14nm]:

select tel_num, max(reg_date)
from tel_num
group by tel_num

你可以在Skylake上看到clock_gettime比时间更快。

以下是Xeon E5-2430 [Sandy Bridge 32nm]的结果:

times(NULL)                   : 450ms
clock_gettime(CLOCK_MONOTONIC): 325ms

次(NULL)现在更快。

我也在旧的Thinkpad W510 I7-720QM上做了同样的测试[Clarksfield 45nm]:

times(NULL)                   : 600ms
clock_gettime(CLOCK_MONOTONIC): 1420ms

似乎新硬件实现了一些新的功能,这提高了clock_gettime的性能?

1 个答案:

答案 0 :(得分:1)

times(2))clock_gettime(2)不能衡量不同的事物吗? times()衡量运行进程所用的CPU,而clock_gettime()衡量挂钟时间,无论您的进程是否“在CPU上”。

如果vDSO版本支持clock_gettime()使用的时钟,那么我会认为调用它的开销通常可以与times()相提并论,但是显然他们可以返回的结果取决于您是否在某些时候调度了流程。