从 Linux 内核版本 3.10 开始,该功能clock_gettime()
现在接受CLOCK_TAI
.
我没能找到这个时钟的详细描述。它的时代是什么?
编辑 1:刚刚比较了我的 Linux 3.19 操作系统上的 CLOCK_REALTIME 和 CLOCK_TAI 的输出,它返回完全相同的值(1442582497)!?CLOCK_REALTIME 是否在闰秒减少?
编辑 2:根据这篇文章, CLOCK_TAI 和(名字不好的) CLOCK_REALTIME 之间的区别应该是闰秒数。
编辑 3:编辑 2 中引用的文章解释了原因CLOCK_TAI
和CLOCK_REALTIME
时间相同。重点是我。
对于可以使用 TAI 时间而不是 UTC 的应用程序,内核提供了一个特殊的 CLOCK_TAI 时钟,它确实包括闰秒并且不需要在闰秒之后进行校正,从而完全避免了时间向后跳跃的问题. 它被实现为以相对于 CLOCK_REALTIME 的固定积分偏移量运行的时钟,当 CLOCK_REALTIME 时钟在闰秒后退时,该时钟以原子方式递增 1。它是在 Linux 内核版本 3.10 中引入的,并且随 RHEL7 中的内核一起提供。请注意,CLOCK_REALTIME 的偏移量在启动时被初始化为零,并且 ntpd 和 chronyd 都没有将其默认设置为正确的值(当前为 35)。在应用程序中切换到 CLOCK_TAI 当然需要修改代码,可能还需要修改所有使用 Unix 时间表示的协议。
编辑 4:在 Ask Ubuntu 上获得的这个答案澄清了一切。