Quelle est la plus grande mise à jour de l'horloge matérielle que le «mode 11 minutes» du noyau Linux puisse effectuer?

18

Lorsque certains programmes liés au temps (comme ntpd) s'exécutent sur un système Linux, le noyau bascule en soi-disant "mode onze minutes" (voir la hwclockpage de manuel) par lequel il mettra automatiquement à jour l'horloge matérielle de l'horloge système toutes les onze minutes .

Sur SLES11, j'ai déterminé empiriquement que si je réglais l'horloge matérielle à 10 heures de retard sur l'horloge système, le mode 11 minutes semblait incapable de faire correspondre l'horloge matérielle à l'horloge système. Mais si je règle l'horloge matérielle 5 minutes derrière l'horloge système, le mode 11 minutes fait un match parfait.

Donc, apparemment, il y a une mise à jour maximale que le mode 11 minutes peut gérer et je me demande ce que c'est.


Mise à jour:

C'est bizarre ...

Plus d'expérimentation montre que lorsque j'ai l'horloge HW environ 20 minutes derrière l'horloge système, le mode 11 minutes réglera l'horloge HW exactement 30 minutes derrière l'horloge système (!):

# 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

Mise à jour:

J'ai rencontré ceci: https://bugs.archlinux.org/task/27408, ce qui implique que, pour de bon ou de mauvais, le noyau ne mettra pas à jour l'horloge matérielle lorsque l'heure de l'horloge matérielle est trop éloignée de l'heure de l'horloge système.

QuantumMechanic
la source
Je n'ai aucune idée de ce qui pourrait provoquer cela, mais je vais poser la question d'horloge standard: votre horloge matérielle est-elle réglée sur UTC? (Sinon, cela devrait probablement l'être - je ne pense pas que cela explique le comportement que vous mentionnez, mais cela pourrait provoquer une autre étrangeté ...)
voretaq7
Vous êtes en Inde ou vous réglez votre horloge sur l'heure standard indienne? ITS est GMT +05: 30, ce qui pourrait représenter un décalage de 30 minutes. Aussi (mais peu probable), un serveur ntp mal configuré en Inde pourrait être la cause.
Justin Dearing
Nan. Je suis aux États-Unis / Est et le serveur NTP est dans notre bureau et est également aux États-Unis / Est.
QuantumMechanic
Est-ce sur un VPS? Les environnements NTP et virtuels ne fonctionnent pas bien ensemble.
Scrivener
Je n'ai trouvé aucune information de référence sur le mode 11 minutes dans le noyau et quelles limitations il pourrait avoir. Cependant, ntpd vérifie que l'heure système et l'heure du serveur ntp sont dans les 1000 secondes. Sinon, il n'essaiera même pas de corriger l'heure du système. Il pense que cela pourrait être si loin que ça. Pouvez-vous penser à un moyen de vérifier que ce mode noyau vous limite plutôt que ntpd?
JakePaulus

Réponses:

5

Depuis la hwclockpage de manuel sur 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.

Donc, en vertu de votre course, hwclock --setvous l'avez probablement désactivé. De la même manière, vous pouvez vérifier la sortie du adjtimex --printpour confirmer.

Karlson
la source
Ce qui le désactive, c'est quelque chose qui règle l' heure du système . hwclock --setne touche pas l'heure du système. Et quand je fais adjtimex --printce que confirme que le mode 11 min dans le fait que le bit « 64 » est en effet au large.
QuantumMechanic
"Si le bit" 64 "de ce nombre (exprimé en binaire) égal à 0, le mode 11 minutes est activé." - cela signifie-t-il que si l'état est impair, le mode 11 minutes est désactivé (en supposant que l'état est 64 bits et l'ordre des bits big-endian)?
jfs
Si le bit "64" de ce nombre (exprimé en binaire) est égal à 0 ---> je vois cela comme signifiant le 7ème bit, ou if((status & (1<<6)) == 0)alors le mode 11 minutes est activé.
BMiner
Il y a la mise en œuvre du mode 11 minutes: lxr.free-electrons.com/source/kernel/time/ntp.c?v=4.4#L509 sync_cmos_clock fonction
osgx
4

En fait, cela n'a rien à voir avec le mode onze minutes dans le noyau. Ceci est lié à une fonctionnalité de ntpd.

Connaissez-vous la soi-disant limite d'intégrité de ntp? Si l'heure est trop éloignée (par exemple 10 heures), ntpd abandonne et ne déforme pas l'horloge. Dans ces cas, ntpd ou ntpdate doit être exécuté manuellement. L'option Ntpd de -gdevrait le faire. Vérifiez les informations de la page de manuel:

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

Zouppen
la source
1
Sur cette machine ntpdest déjà en cours d'exécution avec l' -goption.
QuantumMechanic