gpt4 book ai didi

linux - clock_nanosleep 是否受 adjtime 和 NTP 影响?

转载 作者:IT王子 更新时间:2023-10-29 00:14:39 31 4
gpt4 key购买 nike

通常CLOCK_MONOTONIC_RAW用于获取不受NTP或adjtime()影响的时钟。但是 clock_nanosleep() 不支持 CLOCK_MONOTONIC_RAW 并且无论如何尝试使用它都会导致返回代码 95 Operation not supported(内核 4.6.0 ).

clock_nanosleep() 是否以某种方式考虑了这些时钟调整,或者 sleep 时间是否会受到影响?

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

最佳答案

CLOCK_MONOTONIC_RAW 从未支持 clock_nanosleep(),因为它 was introduced在 Linux 2.6.28 中。也是explicitly fixed在 2.6.32 中没有此支持 because of oopses .代码在那之后被重构了几次,但在 clock_nanosleep() 中仍然没有对 CLOCK_MONOTONIC_RAW 的支持,而且我在 上找不到任何评论为什么是这样。

至少,有一个补丁明确禁用了这个功能,并且它通过了所有审查,这一事实告诉我们,对于内核开发人员来说,这看起来不是什么大问题。所以,此刻 (4.7) the only things CLOCK_MONOTONIC_RAW supportsclock_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 .我们还有什么?我想没什么。

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

关于linux - clock_nanosleep 是否受 adjtime 和 NTP 影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39061851/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com