Когда определенные программы, связанные со временем (например, ntpd
) работают в системе Linux, ядро переключится в так называемый «одиннадцатиминутный режим» (см. hwclock
man-страницу), посредством чего он будет автоматически обновлять аппаратные часы по системным часам каждые одиннадцать минут.
На SLES11 я эмпирически определил, что если я устанавливаю аппаратные часы на 10 часов ниже системных часов, 11-минутный режим кажется неспособным заставить аппаратные часы соответствовать системным часам. Но если я выставлю аппаратные часы на 5 минут позже системных часов, 11-минутный режим идеально подойдет.
Итак, очевидно, есть какое-то максимальное обновление, которое может обрабатывать 11-минутный режим, и мне интересно, что это такое.
Обновить:
Это странно ...
Дальнейшие эксперименты показывают, что, когда у меня часы HW примерно на 20 минут отстают от системных часов, в 11-минутном режиме часы HW будут именно 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 что означает, что хорошо это или плохо, ядро не будет обновлять аппаратные часы, когда время аппаратных часов слишком далеко от времени системных часов.
Из hwclock
справочная страница в RHEL 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
чтобы подтвердить.
На самом деле это не имеет ничего общего с одиннадцатиминутным режимом ядра. Это связано с функцией в ntpd.
Вы знаете о так называемом пределе работоспособности ntp? Если время слишком далеко (например, 10 часов) ntpd сдается и не искажает часы. В таких случаях ntpd или ntpdate следует запускать вручную. Вариант NTPD -g
должен это сделать. Проверьте информацию на странице руководства:
Ядро не будет синхронизировать время, если оно выключено более 60 минут в режиме одиннадцати минут. Это обычная проблема в SUSE Enterprise, дополнительные сведения см. В этой статье Open SUSE: https://lists.opensuse.org/opensuse-bugs/2011-06/msg01348.html