Какое самое большое аппаратное обновление часов может сделать ядро ​​Linux в «11-минутном режиме»?

18

Когда определенные связанные со временем программы (например ntpd) запускаются в системе Linux, ядро ​​переключается в так называемый «режим одиннадцати минут» (см. hwclockСправочную страницу), в результате чего оно автоматически обновляет аппаратные часы с системных часов каждые одиннадцать минут. ,

На 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, который подразумевает, что ядро ​​не будет обновлять аппаратные часы, если время аппаратных часов слишком далеко от времени системных часов.

QuantumMechanic
источник
Я понятия не имею, что может быть причиной этого, но я задам стандартный вопрос о часах: установлены ли аппаратные часы на UTC? (Если нет, то, вероятно, так и должно быть - я не думаю, что это объясняет поведение, которое вы упоминаете, но оно может вызвать другую странность ...)
voretaq7
Вы в Индии или устанавливаете свои часы на стандартное индийское время? ITS GMT +05: 30, так что это может составлять 30-минутное смещение. Также (но маловероятно) причиной может быть плохо настроенный ntp-сервер в Индии.
Джастин Даринг
Нет. Я нахожусь в США / Восточной и NTP-сервер находится в нашем офисе, а также США / Восточная.
QuantumMechanic
Это на VPS? NTP и виртуальные среды не очень хорошо играют вместе.
Scrivener
Я не смог найти справочную информацию о 11-минутном режиме в ядре и о том, какие у него могут быть ограничения. Однако ntpd проверяет, что системное время и время сервера ntp находятся в пределах 1000 секунд. Если нет, он даже не попытается исправить системное время. Он думает, что это может быть так далеко нарочно. Можете ли вы придумать способ проверить, что этот режим ядра ограничивает вас, а не ntpd?
JakePaulus

Ответы:

5

Со 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для подтверждения.

Карлсон
источник
То, что отключает это то, что устанавливает системное время . hwclock --setне касается системного времени. И когда я это делаю, adjtimex --printэто подтверждает, что 11-минутный режим включен, поскольку бит «64» действительно выключен.
QuantumMechanic
Msgstr "Если бит" 64 "из этого числа (выраженный в двоичном виде) равен 0, включен режим 11 минут." - означает ли это, что если статус нечетный, то режим 11 минут отключен (при условии, что статус 64-битный и порядок старших битов)?
Jfs
Если «64» бит этого числа (выраженный в двоичном формате) равен 0 --->, я вижу это как означающий 7-й бит, или if((status & (1<<6)) == 0)тогда включается 11-минутный режим.
BMiner
Существует реализация режима 11 минут: lxr.free-electrons.com/source/kernel/time/ntp.c?v=4.4#L509 sync_cmos_clock функции
osgx
4

На самом деле это не имеет ничего общего с одиннадцатиминутным режимом в ядре. Это связано с функцией в ntpd.

Знаете ли вы о так называемом здравом рассудке ntp? Если время слишком далеко (например, 10 часов), ntpd сдается и не искажает часы. В этих случаях ntpd или ntpdate следует запускать вручную. Параметр Ntpd -gдолжен сделать это. Проверьте информацию со страницы руководства:

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

Zouppen
источник
1
На этой машине ntpdуже запускается -gопция.
QuantumMechanic
0

Ядро не будет синхронизировать время, если оно отключено более чем на 60 минут в режиме одиннадцати минут. Это распространенная проблема в SUSE Enterprise. Дополнительную информацию смотрите в этой статье Open SUSE: https://lists.opensuse.org/opensuse-bugs/2011-06/msg01348.html.

JasonV
источник