我遇到了clock_gettime
可以访问的不同时钟的问题。特别是我感兴趣的是:
CLOCK_REALTIME
CLOCK_PROCESS_CPUTIME_ID
CLOCK_THREAD_COUTIME_ID
我阅读了联机帮助页,但它对我没有多大帮助。我使用clock_gettime
来为我的探查器生成时间戳,当它通过套接字发送收集的数据时。我注意到以下差异:
CLOCK_REALTIME
我使用此时钟从我的探查器收到的事件有时是错误的顺序。时间戳以更高的值开始,但不是更高。通常,最后的消息(具有更高时间戳的消息)首先出现,然后出现具有较低值的时间戳。
CLOCK_PROCESS_CPUTIME_ID
CLOCK_THREAD_COUTIME_ID
我发现两个时钟都没有差异,尽管它们的值较小且总是正确排序。
我无法解释这种行为。
答案 0 :(得分:2)
CLOCK_REALTIME
可让您访问实时时钟,即存储当前日期和时间的时钟。CLOCK_MONOTONIC
可让您访问一个永不过时的时钟,您应该使用此时钟而不是CLOCK_REALTIME
。CLOCK_PROCESS_CPUTIME_ID
使您可以访问特定于当前进程的时钟,为您提供进程的CPU时间(运行该特定进程的CPU所花费的时间)。CLOCK_THREAD_CPUTIME_ID
使您可以访问特定于当前线程的时钟,为您提供进程的CPU时间(运行该特定线程的CPU所花费的时间)。答案 1 :(得分:2)
您的系统时钟源可能设置为TSC而不是HPET。
在现代多核系统中,HPET是一种更加准确和一致的新系统,而TSC是一种性能更高的旧系统。
在openSUSE上,您可以通过
找出当前的时钟源 cat /sys/devices/system/clocksource/clocksource0/current_clocksource
要在openSUSE上将时钟源设置为HPET,请执行
echo 'hpet' > /sys/devices/system/clocksource/clocksource0/current_clocksource
进一步阅读: