首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么CLOCK_TAI和CLOCK_REALTIME returns值相同?

为什么CLOCK_TAI和CLOCK_REALTIME returns值相同?
EN

Ask Ubuntu用户
提问于 2015-09-18 14:08:59
回答 2查看 3.6K关注 0票数 3

在我的Ubuntu15.04(LinuxKernel3.19.0-28-Generic)上,我在使用CLOCK_TAICLOCK_REALTIME请求clock_gettime()时得到了相同的值。这显然是一个错误,因为CLOCK_TAICLOCK_REALTIME之间的区别应该是闰秒的数量加上考虑到这篇文章关于RedHat操作系统的时代性差异。

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2015-09-18 15:08:18

代码语言:javascript
复制
CLOCK_TAI is basically designed as CLOCK_REALTIME(UTC) + tai_offset.  

因此,时间/时间的usec/nsec部分应该是相同的。

代码语言:javascript
复制
CLOCK_MONOTONIC: Zeroed at boot.  

CLOCK_TAI = CLOCK_MONOTONIC + tai_mon_offset    

CLOCK_REALTIME(UTC) = CLOCK_TAI - tai_utc_offset  

但是由于性能方面的考虑(CLOCK_REALTIME是应用程序中最看重的),在Linux中,我们实际上将其结构为:

代码语言:javascript
复制
CLOCK_REALTIME: Initialized at boot from RTC  
CLOCK_MONOTONIC: CLOCK_REALTIME - wall_to_monotonic  
CLOCK_TAI: CLOCK_REALTIME + tai_offset

所以CLOCK_REALTIME and CLOCK_TAI return the same because the kernel parameter tai_offset is zero.

使用adjtimex(timex tmx)进行检查并读取值。我认为,如果ntpd是足够新的(>4.2.6)并且有一个闰秒文件,它就会设置它。它也可以从上游服务器获得它,但我还无法验证。调用adjtimex()可以在以根用户身份运行时手动设置tai_offset

我的参考资料这里这里

票数 5
EN

Ask Ubuntu用户

发布于 2015-09-18 14:57:47

答案在所提到的文章中找到。重点是我。

对于可以使用TAI时间而不是UTC的应用程序,内核提供了一个特殊的CLOCK_TAI时钟,其中确实包含了闰秒,并且不需要在闰秒之后进行校正,从而完全避免了时间上的反向跳转问题。它被实现为一个时钟,运行在一个固定的积分偏移量到CLOCK_REALTIME,当CLOCK_REALTIME时钟在闰秒上向后退时,该时钟原子地递增1。它是在LinuxVersion3.10中引入的,可以在RHEL7中提供的内核中使用。请注意,CLOCK_REALTIME的偏移量是在启动时初始化为零的,无论是ntpd还是the,默认情况下都不会将其设置为正确的值(当前为35)。当然,在应用程序中切换到CLOCK_TAI需要修改代码,也可能需要修改所有使用Unix表示时间的协议。

票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/675622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档