Linux 内核“11 分钟模式”可以进行的最大硬件时钟更新是多少?

Linux 内核“11 分钟模式”可以进行的最大硬件时钟更新是多少?

当某些与时间相关的程序(如ntpd)在 Linux 系统上运行时,内核将切换到所谓的“十一分钟模式”(参见hwclock手册页),从而每十一分钟自动从系统时钟更新硬件时钟。

在 SLES11 上,我根据经验确定,如果我将硬件时钟设置为比系统时钟慢 10 小时,11 分钟模式似乎无法使硬件时钟与系统时钟匹配。但如果我将硬件时钟设置为比系统时钟慢 5 分钟,11 分钟模式就可以完美匹配。

所以显然 11 分钟模式可以处理某个最大更新,我想知道它是什么。


更新:

这很奇怪...

更多的实验表明,当我的硬件时钟比系统时钟慢 20 分钟左右时,11 分钟模式会将硬件时钟设置为确切地比系统时钟晚 30 分钟(!):

# date
Tue Dec  6 10:16:52 EST 2011
# hwclock --set --date "12/6/11 09:56"
#
# date
Tue Dec  6 10:17:16 EST 2011
# hwclock --show
Tue Dec  6 09:56:06 2011  -0.156551 seconds
#
# date
Tue Dec  6 10:23:09 EST 2011
# hwclock --show
Tue Dec  6 10:01:58 2011  -0.535772 seconds
#
# date
Tue Dec  6 10:34:28 EST 2011
# hwclock --show
Tue Dec  6 10:04:27 2011  -0.192025 seconds

更新:

我碰到了这一点:https://bugs.archlinux.org/task/27408这确实意味着,无论好坏,当硬件时钟时间与系统时钟时间相差太远时,内核都不会更新硬件时钟。

答案1

来自hwclockRHEL 4.6 的手册页:

This mode (we'll call it "11 minute mode") is off until something turns it on.  The ntp
daemon  xntpd  is  one thing  that  turns  it on.  You can turn it off by running
anything, including hwclock --hctosys, that sets the System Time the old fashioned way.

To see if it is on or off, use the command adjtimex --print and look at the value of
"status".  If the "64" bit of this number (expressed in binary) equal to 0, 11 minute mode 
is on.  Otherwise, it is off.

因此,由于您运行了该程序,因此hwclock --set您可能已将其关闭。同样,您可以检查输出以adjtimex --print进行确认。

答案2

其实这个跟内核的十一分钟模式没关系,是跟ntpd的一个功能有关。

您是否知道 ntp 所谓的健全性限制?如果时间相差太远(例如 10 小时),ntpd 会放弃并且不会扭曲时钟。在这些情况下,应手动运行 ntpd 或 ntpdate。ntpd 选项应该可以-g做到这一点。检查手册页中的信息:

http://doc.ntp.org/4.1.0/ntpd.htm

答案3

如果在十一分钟模式下时间偏差超过 60 分钟,内核将不会同步时间。这是 SUSE Enterprise 中的一个常见问题,请参阅 Open SU​​SE 的这篇文章了解更多详细信息: https://lists.opensuse.org/opensuse-bugs/2011-06/msg01348.html

相关内容