我在需要纳秒分辨率的地方编写了一些测试代码。当我将clock_gettime与CLOCK_MONOTONIC一起使用时,我会得到一个期望的值:3327.874384321。
当我将clock_gettime与CLOCK_MONOTONIC_RAW一起使用时,我得到了一个我不期望的值:3327.875723000
我已经循环运行了,返回的所有值都具有“截断”的纳秒分辨率000。
uname -a的输出:Linux raspberrypi 3.12.22+#691 PREEMPT Wed Jun 18 18:29:58 BST 2014 armv6l GNU/Linux
关于正在发生的事情的想法?如何解决?
我目前正在考虑禁用NTP,因此可以使用CLOCK_MONOTONIC
最佳答案
我认为您关于CLOCK_MONOTONIC_RAW
被“截断”的结论是错误的。相反,硬件时钟源的分辨率可能仅为微秒。您在CLOCK_MONOTONIC
中看到的非零低位数字是因为通过adjtime
/NTP进行的每次调整都对来自硬件时钟源的时间戳进行了缩放,以校正硬件时钟速率的不精确性,否则将导致其相对于实时漂移。
要检验此假设,您应该使用CLOCK_MONOTONIC
提取大量的计时器样本,并寻找低位数的模式。我怀疑您会发现所有时间戳都相差几纳秒的倍数,接近但不完全是1000,例如可能是995或1005左右。
关于c - CLOCK_MONOTONIC与CLOCK_MONOTONIC_RAW的截断值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25583498/