我正在编写一些测试代码,我需要纳秒分辨率。当我将clock_gettime与CLOCK_MONOTONIC结合使用时,我得到了一个我期望的值: 3327.874384321。当我将clock_gettime与CLOCK_MONOTONIC_RAW一起使用时,我得到了一个我不希望得到的值: 3327.875723000
我已经在一个循环中运行了这一点,所有返回的值都具有纳秒分辨率“截断”,000。
来自uname -a的输出: Linux raspberrypi 3.12.22+ #691抢占Wed Jun 18:29:58 BST 2014 armv6l GNU/Linux
对发生了什么事的想法?怎么称呼?我目前正在考虑禁用NTP,以便可以使用CLOCK_MONOTONIC。
发布于 2014-08-31 00:54:28
我认为你关于CLOCK_MONOTONIC_RAW被“截断”的结论是错误的。相反,硬件时钟源的分辨率可能只是微秒。您在CLOCK_MONOTONIC中看到的非零低位数是因为来自硬件时钟源的时间戳正在按adjtime/NTP进行的调整进行缩放,以纠正硬件时钟速率中的不精确,否则会使其相对于实时漂移。
要检验这一假设,您应该使用大量的CLOCK_MONOTONIC计时器样本,并在低位数中寻找一个模式。我怀疑你会发现你所有的时间戳都相差数纳秒的倍数,接近但不完全是1000,例如995或1005左右。
https://stackoverflow.com/questions/25583498
复制相似问题