CLOCK_REALTIME内核中的纳秒级精度支持

时间:2017-09-07 11:05:38

标签: c linux

我编写了一个简单的程序来确定我的系统是否可以获得纳秒精度,这是一个RHEL 5.5 VM(内核2.6.18-194)。

REALTIME

示例输出:

MONOTONIC

所以MONOTONIC给了我当地时间和man clock_gettime系统的正常运行时间。两个时钟似乎都具有μs精度(999848ns≅1ms),即使grep -R CLOCK_REALTIME_HR /usr/include/ | wc -l以毫微秒为单位输出,这也令人困惑。

0州:

  

CLOCK_REALTIME_HR         CLOCK_REALTIME的高分辨率版本。

但是,error: ‘CLOCK_REALTIME_HR’ undeclared (first use in this function)会返回clock_getres并尝试在MONOTONIC中编译结果。

我试图确定我是否可以以纳秒精度获得本地时间,但是我的代码有错误,或者5.5中可能不完全支持此功能(或者VM的HPET已关闭,或者其他内容)。

可以我在这个系统中获得纳秒的本地时间吗?我做错了什么?

修改

答案似乎是否正确

虽然可以实现纳秒精度,但在这种情况下系统并不能保证纳秒精度(这里有一个明确的APK details差异而非咆哮)。典型的COTS硬件并没有真正处理它(正确方向的另一个answer)。

我仍然很好奇为什么时钟报告相同的REALTIME分辨率,{{1}}产生的似乎是纳秒值,而{{1}}产生微秒。

1 个答案:

答案 0 :(得分:-1)

RHEL5在这一点上真的很古老,你应该考虑升级。在较新的系统(Ubuntu 16.04)上,您的程序会生成:

CLOCK_REALTIME - "Systemwide realtime clock.":
    precision: 1ns
    value    : 1504783164.686220185
CLOCK_MONOTONIC - "Represents monotonic time. Cannot be set.":
    precision: 1ns
    value    : 0000537257.257923964