了解clock_gettime的问题

clock_gettime可以访问不同的时钟。 特别是我感兴趣的是:

  • CLOCK_REALTIME
  • CLOCK_PROCESS_CPUTIME_ID
  • CLOCK_THREAD_COUTIME_ID

我阅读了这个手册,但是对我没有太大的帮助。 我使用clock_gettime来为我的分析器生成时间戳,当它通过套接字发送收集的数据时。 我注意到以下的不同:

  • CLOCK_REALTIME

我用这个时钟从我的分析器收到的事件有时是错误的顺序。 时间戳以较高的值开始,但不是很高。 通常最后的消息(具有较高时间戳的消息)首先出现,而后面的消息则以较低的值出现。

  • CLOCK_PROCESS_CPUTIME_ID
  • CLOCK_THREAD_COUTIME_ID

我发现两个时钟都没有什么区别,尽pipe它们的值较小,总是正确的。

我无法解释这种行为。

Solutions Collecting From Web of "了解clock_gettime的问题"

您的系统时钟源可能设置为TSC而不是HPET。

在现代多核系统中,HPET是一个更加精确和一致的新系统,TSC是一个性能更高的老系统。

在openSUSE上,你可以找出你当前的clocksource是什么

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

  • CLOCK_REALTIME使您可以访问实时时钟,即存储当前日期和时间的时钟。
  • CLOCK_MONOTONIC让你访问时间永远不会回来的时钟,你应该使用这个而不是CLOCK_REALTIME
  • CLOCK_PROCESS_CPUTIME_ID使您可以访问特定于当前进程的时钟,为您提供进程的CPU时间(CPU运行该特定进程的时间)。
  • CLOCK_THREAD_CPUTIME_ID使您可以访问特定于当前线程的时钟,为您提供进程的CPU时间(CPU运行该特定线程的时间)。