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

前端之家收集整理的这篇文章主要介绍了linux – clock_nanosleep受adjtime和NTP的影响吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
通常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.

猜你在找的Linux相关文章