¿Cuál es la actualización de reloj de hardware más grande que puede hacer el kernel de Linux en "modo de 11 minutos"?

18

Cuando ciertos programas relacionados con el tiempo (como ntpd) se ejecutan en un sistema Linux, el kernel cambiará al llamado "modo de once minutos" (vea la hwclockpágina del manual) mediante el cual actualizará automáticamente el reloj del hardware del reloj del sistema cada once minutos .

En SLES11, he determinado empíricamente que si configuro el reloj del hardware para que esté a unas 10 horas del reloj del sistema, el modo de 11 minutos parece incapaz de hacer que el reloj del hardware coincida con el reloj del sistema. Pero si configuro el reloj de hardware 5 minutos detrás del reloj del sistema, el modo de 11 minutos hace una combinación perfecta.

Entonces, aparentemente hay alguna actualización máxima que el modo de 11 minutos puede manejar y me pregunto qué es.


Actualizar:

Esto es raro ...

Más experimentación muestra que cuando tengo el reloj HW alrededor de 20 minutos detrás del reloj del sistema, el modo de 11 minutos establecerá que el reloj HW esté exactamente 30 minutos detrás del reloj del sistema (!):

# 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

Actualizar:

Me encontré con esto: https://bugs.archlinux.org/task/27408, lo que implica que, para bien o para mal, el núcleo no actualizará el reloj del hardware cuando la hora del reloj del hardware está demasiado lejos de la hora del reloj del sistema.

Mecánica cuántica
fuente
No tengo idea de qué podría estar causando esto, pero haré la pregunta estándar del reloj: ¿Su reloj de hardware está configurado en UTC? (Si no es así, probablemente debería ser - no creo que esto explica el comportamiento que se menciona, pero podría causar otra extrañeza ...)
voretaq7
¿Estás en India o estás ajustando tu reloj a la hora estándar india? SU es GMT +05: 30, por lo que podría representar un desplazamiento de 30 minutos. Además (pero poco probable), un servidor ntp mal configurado en India podría ser la causa.
Justin Dearing
No Estoy en EE. UU. / Este y el servidor NTP está en nuestra oficina y también en EE. UU. / Este.
QuantumMechanic
¿Está esto en un VPS? Los entornos NTP y virtuales no juegan bien juntos.
Scrivener
No pude encontrar ninguna información de referencia sobre el modo de 11 minutos en el núcleo y qué limitaciones podría tener. Sin embargo, ntpd verifica que la hora del sistema y la hora del servidor ntp estén dentro de los 1000 segundos. Si no, ni siquiera intentará corregir la hora del sistema. Piensa que podría estar tan lejos a propósito. ¿Se te ocurre alguna forma de verificar que este modo de kernel te limita en lugar de ntpd?
JakePaulus

Respuestas:

5

Desde la hwclockpágina del manual en 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.

Entonces, en virtud de que corres, hwclock --setes probable que lo hayas apagado. De la misma manera, puede verificar la salida del adjtimex --printpara confirmar.

Karlson
fuente
Lo que lo apaga es algo que establece la hora del sistema . hwclock --setno toca la hora del sistema. Y cuando lo haga adjtimex --print, que confirma que el modo de 11 min en el puesto que el "64" es de hecho poco apagado.
QuantumMechanic
"Si el bit" 64 "de este número (expresado en binario) igual a 0, el modo de 11 minutos está activado". - ¿significa que si el estado es impar, entonces el modo de 11 minutos está apagado (suponiendo que el estado es de 64 bits y el orden de bits big-endian)?
jfs
Si el bit "64" de este número (expresado en binario) igual a 0 ---> veo que esto significa el séptimo bit, o if((status & (1<<6)) == 0)entonces el modo de 11 minutos está activado.
BMiner
Hay una implementación del modo de 11 minutos: lxr.free-electrons.com/source/kernel/time/ntp.c?v=4.4#L509 sync_cmos_clock function
osgx
4

De hecho, esto no tiene nada que ver con el modo de once minutos en el núcleo. Esto está relacionado con una función en ntpd.

¿Conoces el llamado límite de cordura de ntp? Si el tiempo está muy lejos (por ejemplo, 10 horas), ntpd se da por vencido y no sesga el reloj. En esos casos, ntpd o ntpdate deben ejecutarse manualmente. La opción Ntpd de -gdebería hacer eso. Verifique la información de la página del manual:

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

Zouppen
fuente
1
En esta máquina ntpdya se está ejecutando con la -gopción.
QuantumMechanic