Was ist das größte Hardware-Uhr-Update, das der Linux-Kernel im „11-Minuten-Modus“ durchführen kann?

18

Wenn bestimmte zeitbezogene Programme (wie ntpd) auf einem Linux-System ausgeführt werden, wechselt der Kernel in den sogenannten "Elf-Minuten-Modus" (siehe hwclockManpage), wodurch die Hardware-Uhr automatisch alle elf Minuten von der Systemuhr aktualisiert wird .

Unter SLES11 habe ich empirisch festgestellt, dass der 11-Minuten-Modus nicht in der Lage ist, die Hardware-Uhr an die Systemuhr anzupassen, wenn ich die Hardware-Uhr auf etwa 10 Stunden nach der Systemuhr stelle. Wenn ich die Hardware-Uhr jedoch 5 Minuten hinter der Systemuhr stelle, passt der 11-Minuten-Modus perfekt zusammen.

Es gibt also anscheinend ein maximales Update, das der 11-Minuten-Modus verarbeiten kann, und ich frage mich, was es ist.


Aktualisieren:

Das ist komisch ...

Weitere Experimente zeigen, dass wenn ich die HW-Uhr etwa 20 Minuten hinter der Systemuhr habe, der 11-Minuten-Modus die HW-Uhr auf genau 30 Minuten hinter der Systemuhr setzt (!):

# 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

Aktualisieren:

Ich bin auf Folgendes gestoßen: https://bugs.archlinux.org/task/27408. Dies bedeutet, dass der Kernel die Hardware-Uhr nicht aktualisiert, wenn die Uhrzeit der Hardware zu weit von der Uhrzeit des Systems entfernt ist.

Quantenmechanik
quelle
Ich habe keine Ahnung, woran das liegen könnte, aber ich werde die Standarduhr-Frage stellen: Ist Ihre Hardware-Uhr auf UTC eingestellt? (Wenn nicht, sollte es wahrscheinlich sein - ich glaube nicht, dass dies für das von Ihnen erwähnte Verhalten verantwortlich ist, aber es könnte andere Seltsamkeiten hervorrufen ...)
voretaq7
Sind Sie in Indien oder stellen Sie Ihre Uhr auf die indische Standardzeit ein? ITS ist GMT +05: 30, was einen 30-minütigen Versatz ausmachen könnte. Auch (aber unwahrscheinlich) ein schlecht konfigurierter NTP-Server in Indien könnte die Ursache sein.
Justin Dearing
Nee. Ich bin in den USA / Osten und und NTP-Server ist in unserem Büro und ist auch USA / Osten.
QuantumMechanic
Ist das auf einem VPS? NTP und virtuelle Umgebungen spielen nicht gut zusammen.
Scrivener
Ich konnte im Kernel keine Referenzinformationen zum 11-Minuten-Modus und zu den möglichen Einschränkungen finden. Ntpd überprüft jedoch, ob die Systemzeit und die Zeit des ntp-Servers innerhalb von 1000 Sekunden liegen. Andernfalls wird nicht einmal versucht, die Systemzeit zu korrigieren. Es glaubt, dass es mit Absicht so weit weg sein könnte. Können Sie sich eine Möglichkeit vorstellen, um zu überprüfen, ob dieser Kernel-Modus Sie eher einschränkt als ntpd?
JakePaulus

Antworten:

5

Aus der hwclockManpage zu 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.

Wenn du also rennst, hwclock --sethast du es wahrscheinlich ausgeschaltet. Aus dem gleichen Grund können Sie die Ausgabe von überprüfen adjtimex --print, um zu bestätigen.

Karlson
quelle
Was es abstellt, ist etwas, das die Systemzeit einstellt . hwclock --setberührt nicht die Systemzeit. Und wenn ich adjtimex --printdie bestätigt , dass 11-min - Modus in auf , da der „64“ Bit ist in der Tat aus.
QuantumMechanic
"Wenn das 64-Bit dieser Zahl (binär ausgedrückt) gleich 0 ist, ist der 11-Minuten-Modus aktiviert." - Bedeutet dies, dass bei einem ungeraden Status der 11-Minuten-Modus deaktiviert ist (vorausgesetzt, der Status ist 64-Bit und die Big-Endian-Bit-Reihenfolge)?
jfs
Wenn das "64" -Bit dieser Zahl (binär ausgedrückt) gleich 0 ist -> bedeutet dies für mich das 7. Bit, oder der if((status & (1<<6)) == 0)11-Minuten-Modus ist aktiviert.
BMiner
Der 11-Minuten-Modus wurde implementiert: lxr.free-electrons.com/source/kernel/time/ntp.c?v=4.4#L509 sync_cmos_clock function
osgx
4

Tatsächlich hat dies nichts mit dem Elf-Minuten-Modus im Kernel zu tun. Dies hängt mit einer Funktion in ntpd zusammen.

Kennen Sie die sogenannte Sanity Limit von NTP? Wenn die Zeit zu weit entfernt ist (zum Beispiel 10 Stunden), gibt ntpd auf und verzerrt die Uhr nicht. In diesen Fällen sollte ntpd oder ntpdate manuell ausgeführt werden. Ntpd Option -gsollte das tun. Überprüfen Sie die Informationen auf der Manpage:

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

Zouppen
quelle
1
Auf diesem Rechner ntpdwird bereits mit der -gOption gearbeitet.
QuantumMechanic