Nachdem die Anschaffung einer Atomuhr im Hause Kühnast keine Mehrheit gefunden hat, zapft Charly eben das Uhrwerk eines GPS-Satelliten an. So verschafft er zu Hause der Pünktlichkeit Geltung, die sonst nur große Rechenzentren benötigen. Genau.
NTP, das Network Time Protocol, ist einer der am einfachsten zu konfigurierenden Serverdienste. Minimal verlangt die Konfigurationsdatei »ntp.conf« nur nach einer Zeile mit einer Quelle, aus der die Uhrzeit kommen soll:
pool de.pool.ntp.org iburst
Meist gibt man aber mehr als eine Quelle an. Der NTP-Daemon fragt sie zyklisch ab und versucht Laufzeitunterschiede herauszurechnen, die durch die Latenzen im Netz entstehen. Mein heimischer NTP-Dienst läuft auf dem Raspberry Pi, der hauptberuflich die Bewässerung im Garten steuert, und hat eine Zeitunschärfe von 30 bis 40 Millisekunden.
Das ist für meinen eh leicht chaotischen Haushalt fast schon unanständig präzise, aber in Rechenzentren ist Millisekunden-genaues Logging tatsächlich ein Thema. Wie weit kann ich wohl meinen frisch entfachten Pünktlichkeitswahn treiben?
Zunächst müsste ich das Stratum verringern. Eine hochgenaue Zeitquelle, die ihr Zeitsignal öffentlich zugänglich macht, ist eine Stratum-0-Quelle (Stratum: Schicht). Ein Server, der die Zeit dort erfragt und weiterverteilt, ist ein Stratum-1-Server, und so weiter.
Der naheliegende Kauf einer Atomuhr scheiterte seltsamerweise im Familienrat. Also versorge ich meinen Raspi mit einem GPS-Empfänger – jeder GPS-Satellit ist eine Stratum-0-Zeitquelle. Der GPS-Daemon, der zum Umfang der meisten Distributionen gehört, stellt dem NTP-Server das Zeitsignal über ein virtuelles Interface bereit. In der »ntp.conf« ergänze ich zwei Zeilen, um dem Ntpd die Adresse bekannt zu machen:
server 127.127.28.0 minpoll4 noselect fudge 127.127.28.0 time1 0.0 refid GPS
Schon besser. Aber es geht noch genauer, denn der Datentransport durchs serielle Interface kann weiterhin leichte Schwankungen erzeugen. Selbst die lassen sich herausrechnen: GPS-Satelliten funken nämlich nicht nur die Uhrzeit, sondern auch ein so genanntes PPS-Signal (Pulse per Second). Das sind kurze Pulse hochpräzise im Abstand einer Sekunde.
Das kleine Tool »rpi_gpio_ntp«[1] des Programmierers Folkert van Heusden macht dem Zeitserver das PPS-Signal zugänglich. Auch das passiert wieder über eine virtuelle IP, die ich in »ntp.conf« eintrage:
server 127.127.28.1 minpoll 4 prefer fudge 127.127.28.1 refid UPPS
Der Erfolg ist in der Tat durchschlagend. Meine Munin-Grafik in Abbildung 1, die die Schwankungen des Zeitsignals zeigt, legt sich nach dem Aktivieren der GPS-PPS-Kombi als glatte Linie zurecht – nicht übel für einen Stratum-1-Zeitserver.
Zeit zu gehen
Auf Clients stirbt der Ntpd infolge von Systemd gerade aus, Timesyncd ersetzt ihn. Der ist schlanker, verteilt aber als Client nichts weiter. Ihn konfiguriere ich in der »/etc/systemd/timesyncd.conf« so, dass er meinen Gieß-Raspi primär nutzt und Internet-Zeitserver nur zur Not:
NTP=gpspi FallBackNTP=de.pool.ntp.org 0.pool.ntp.org 1.pool.ntp.org
Habe ich eines Tages genug Hardware angehäuft, die hochgenaues Logging nötig macht – ich bin vorbereitet. (jk)
Infos
-
Rpi_gpio_ntp: https://vanheusden.com/time/rpi_gpio_ntp/








