加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – clock_nanosleep受adjtime和NTP的影响吗?

发布时间:2020-12-13 16:58:57 所属栏目:Linux 来源:网络整理
导读:通常CLOCK_MONOTONIC_RAW用于获取不受NTP或adjtime()影响的时钟.但是clock_nanosleep()不支持CLOCK_MONOTONIC_RAW并且无论如何都试图使用它将导致返回代码95不支持操作(内核4.6.0). clock_nanosleep()会以某种方式考虑这些时钟调整,还是会影响睡眠时间? 如
通常CLOCK_MONOTONIC_RAW用于获取不受NTP或adjtime()影响的时钟.但是clock_nanosleep()不支持CLOCK_MONOTONIC_RAW并且无论如何都试图使用它将导致返回代码95不支持操作(内核4.6.0).

clock_nanosleep()会以某种方式考虑这些时钟调整,还是会影响睡眠时间?

如果需要一个不受时钟调整影响的休眠时间,有哪些替代方案?

解决方法

CLOCK_MONOTONIC_RAW从未支持clock_nanosleep(),因为它在 Linux 2.6.28中是 was introduced.这也是 explicitly fixed在2.6.32 because of oopses中没有这个支持.之后代码被重构了几次,但仍然没有对clock_nanosleep()中的CLOCK_MONOTONIC_RAW的支持,我无法找到任何关于为什么是那.

至少,有一个明确禁用此功能并通过所有评论的补丁这一事实告诉我们,对于内核开发人员来说,它看起来不是一个大问题.所以,目前(4.7)the only things CLOCK_MONOTONIC_RAW supports是clock_getres()和clock_gettime().

说到调整,因为already noted by Rich CLOCK_MONOTONIC仅根据时钟的性质进行速率调整.发生这种情况是因为hrtimer_interrupt()以调整的单调时间值(ktime_get_update_offsets_now()-> timekeeping_get_ns()-> timekeeping_delta_to_ns()并且使用xtime_nsec(subject to adjustment)操作)运行其队列.实际上,看看这段代码我可能不再感到惊讶,因为CLOCK_MONOTONIC_RAW不支持clock_nanosleep()(并且可能在将来不会有它) – 调整后的单调时钟使用似乎是hrtimers的基础.

至于替代方案,我认为没有. nanosleep() uses the same CLOCK_MONOTONIC,setitimer() has its own set of timers,alarm() uses ITIMER_REAL (same as setitimer()),那(with some indirection)是also our good old friend CLOCK_MONOTONIC.我们还有什么?我什么都没想.

作为一个不相关的附注,有一个有趣的观察结果,如果你调用clock_nanosleep()作为相对间隔(不是TIMER_ABSTIME),那么CLOCK_REALTIME actually becomes a synonym for CLOCK_MONOTONIC.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读