你能解释一下Linux上返回的时钟CLOCK_REALTIME
和CLOCK_MONOTONIC
时钟之间的区别clock_gettime()
吗?
如果我需要计算外部源产生的时间戳与当前时间之间的经过时间,那么哪个是更好的选择?
最后,如果我有一个NTP守护进程周期性地调整系统时间,如何做这些调整与每个交互CLOCK_REALTIME
和CLOCK_MONOTONIC
?
caf*_*caf 216
CLOCK_REALTIME
代表机器对当前挂钟,时间时间的最佳猜测.正如Ignacio和MarkR所说,这意味着CLOCK_REALTIME
随着系统时钟的变化(包括NTP),它可以向前和向后跳跃.
CLOCK_MONOTONIC
表示从过去的某个任意固定点开始的绝对经过的挂钟时间.它不受系统时钟变化的影响.
如果要计算在一台计算机上观察到的两个事件之间经过的时间而没有重新启动,CLOCK_MONOTONIC
则是最佳选择.
请注意,在Linux上,CLOCK_MONOTONIC
不会测量挂起所花费的时间,尽管它应该通过POSIX定义.您可以使用特定CLOCK_BOOTTIME
于Linux 的单调时钟在挂起期间保持运行.
use*_*100 36
Robert Love的书LINUX系统编程第2版,专门解决了您在第11章开头的问题,第363页:
单调时间源的重要方面不是当前值,而是时间源严格线性增加的保证,因此可用于计算两次采样之间的时间差.
也就是说,我相信他假设这些进程在同一个操作系统实例上运行,因此您可能希望定期运行校准以估算漂移.
Ign*_*ams 21
CLOCK_REALTIME
受NTP影响,可以向前和向后移动.CLOCK_MONOTONIC
不是,并且每剔一个刻度.
Mar*_*rkR 17
除了伊格纳西奥的回答之外,CLOCK_REALTIME
还可以在飞跃中前进,偶尔也会倒退.CLOCK_MONOTONIC
没有; 它只是继续前进(虽然它可能在重新启动时重置).
一个强大的应用程序需要能够容忍CLOCK_REALTIME
偶尔向前跳跃(也许偶尔会稍微向后倾斜,尽管这更像是一个边缘情况).
想象一下,当你暂停你的笔记本电脑时会发生什么 - CLOCK_REALTIME
在简历之后向前跳,CLOCK_MONOTONIC
但事实并非如此.在VM上试用它.
POSIX 7在http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html上指定:
CLOCK_REALTIME
:
该时钟代表测量系统实时的时钟.对于此时钟,clock_gettime()返回并由clock_settime()指定的值表示自Epoch以来的时间量(以秒和纳秒为单位).
CLOCK_MONOTONIC
(可选功能):
对于此时钟,clock_gettime()返回的值表示自过去未指定的点(例如,系统启动时间或Epoch)以来的时间量(以秒和纳秒为单位).系统启动时间后,这一点不会改变.无法通过clock_settime()设置CLOCK_MONOTONIC时钟的值.
clock_settime()
给出了一个重要提示:POSIX系统能够随意改变CLOCK_REALITME
它,因此不要依赖它既不连续也不向前流动.NTP可以使用clock_settime()
,也可能只会影响CLOCK_REALITME
.
Linux内核实现似乎将启动时间作为以下时代CLOCK_MONOTONIC
:CLOCK_MONOTONIC的起点
小智 8
抱歉,没有声誉可以将此添加为评论。所以它是一个补充答案。
根据您调用的频率clock_gettime()
,您应该记住,VDSO 中的 Linux 只提供了一些“时钟”(即不需要系统调用,而系统调用的所有开销只有一个 - 当 Linux 添加时,情况只会变得更糟防御类似幽灵攻击的防御措施)。
虽然clock_gettime(CLOCK_MONOTONIC,...)
、clock_gettime(CLOCK_REALTIME,...)
、 和gettimeofday()
总是非常快(由 VDSO 加速),但对于 CLOCK_MONOTONIC_RAW 或任何其他 POSIX 时钟来说,情况并非如此。
这可能会随着内核版本和体系结构的变化而改变。
尽管大多数程序不需要注意这一点,但由 VDSO 加速的时钟可能会出现延迟峰值:如果在内核使用时钟计数器更新共享内存区域时恰好命中它们,则它必须等待内核完成。
这是“证据”(GitHub,让机器人远离 kernel.org): https://github.com/torvalds/linux/commit/2aae950b21e4bc789d1fc6668faf67e8748300b7
归档时间: |
|
查看次数: |
155085 次 |
最近记录: |