在我的 Ubuntu 15.04\xc2\xa0(Linux Kernel 3.19.0-28-generic) 上,我在请求CLOCK_TAI
和CLOCK_REALTIME
使用clock_gettime()
. 这显然是一个错误,因为考虑到这篇关于 RedHat 操作系统的 文章CLOCK_TAI
,\xc2\xa0and之间的差异CLOCK_REALTIME
应该是闰秒数加上纪元差异。
CLOCK_TAI is basically designed as CLOCK_REALTIME(UTC) + tai_offset.
Run Code Online (Sandbox Code Playgroud)
因此 timeval/timespec 的 usec/nsec 部分应该相同。
CLOCK_MONOTONIC: Zeroed at boot.
CLOCK_TAI = CLOCK_MONOTONIC + tai_mon_offset
CLOCK_REALTIME(UTC) = CLOCK_TAI - tai_utc_offset
Run Code Online (Sandbox Code Playgroud)
但出于性能考虑(CLOCK_REALTIME 是应用程序最常使用的),在 Linux 中我们实际上将其结构为:
CLOCK_REALTIME: Initialized at boot from RTC
CLOCK_MONOTONIC: CLOCK_REALTIME - wall_to_monotonic
CLOCK_TAI: CLOCK_REALTIME + tai_offset
Run Code Online (Sandbox Code Playgroud)
所以CLOCK_REALTIME and CLOCK_TAI return the same because the kernel parameter tai_offset is zero.
使用adjtimex(timex tmx)
并读取值进行检查。我认为ntpd
如果它足够新(>4.2.6
)并且有闰秒文件,就会设置它。它也可能能够从上游服务器获取它,但我无法验证。adjtimex()
当以 root 身份运行时,可以手动设置该调用tai_offset
。
归档时间: |
|
查看次数: |
4185 次 |
最近记录: |