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.

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...