我对clock_gettime可以访问的不同时钟有困难。尤其是我感兴趣的是:
CLOCK_REALTIME
CLOCK_PROCESS_CPUTIME_ID
CLOCK_THREAD_COUTIME_ID
我读了手册页,但没什么帮助。当profiler通过socket发送收集的数据时,我使用clock_gettime为它生成时间戳。我注意到以下差异:
CLOCK_REALTIME
我用这个时钟从剖析器接收到的事件有时顺序不对。时间戳从一个更高的值开始,虽然不是很高。通常,最后的消息(那些具有较高时间戳的消息)先出现,后出现具有较低值的时间戳。
CLOCK_PROCESS_CPUTIME_ID
CLOCK_THREAD_COUTIME_ID
我发现两个时钟没有区别,尽管它们的起始值较小,而且总是正确排序。
我无法解释这种行为。

最佳答案

您的系统时钟源可能设置为tsc而不是hpet。
在现代多核系统中,hpet是一种更精确、更一致的新系统,tsc是一种性能更高的旧系统。
在opensuse上,您可以通过
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
要在opensuse上将时钟源设置为hpet,请执行以下操作
echo 'hpet' > /sys/devices/system/clocksource/clocksource0/current_clocksource
进一步阅读:
http://en.wikipedia.org/wiki/HPET
http://en.wikipedia.org/wiki/Time_Stamp_Counter

10-06 04:05