Raspberry Pi: NTP und GPS (3)

Wie im Artikel 2 zu diesem Thema angekündigt, habe ich einen Versuchsaufbau mit mehreren Raspberry Pi 3b und einem Raspberry Pi 4 gebastelt und die drei USB-GPS-Dongles über drei Tage gleichzeitig an je einem Pi 3b laufen lassen.

Der Aufbau und die Zeitverteilung sahen wie folgt aus:

Zeitverteilung

Der Raspberry Pi C0 bezog seine Zeit von fünf Servern aus dem Internet. Hier habe ich bewusst nicht die lokale Fritz!Box genommen, in der Hoffnung dadurch der „wahren“ Zeit näherzukommen. Die drei Raspberry Pi C1, C2 und C3 bezogen ihre Zeit wiederum vom C0. An den Raspberry Pi C1, C2 und C3 war ein USB-GPS-Dongle angeschlossen. Wobei der GPS nicht als Zeitreferenz auf den Raspberry Pi gewählt werden sollte. Pi2 (ein Raspberry Pi 4) spielt hier noch keine Rolle. Er wird erst in der nächsten Messreihe die Zeit der drei Zeitserver mit GPS abfragen.

Die GNSS habe ich auf GPS und GALILEO für den Pi C1 mit G72 G-Mouse und auf GPS für Pi C 2 und C3 beschränkt. Die beiden Dongle VK-162 G-Mouse und Navilock NL-701US unterstützen leider nicht GALILEO. In der Zwischenzeit hatte ich festgestellt, dass jedes zusätzliche aktivierte GNSS die Rechenzeit und damit den Offset auf dem Dongle erhöht.

xgps auf C0, hier noch mit BEIDOU

Zusätzlich habe ich die Pis unterm Dach aufgestellt, sodass sie mehr Satelliten sehen. Je mehr Satelliten, desto mehr ist zu rechnen, desto höher ist der Offset. Die ermittelten Werte für die Korrektur gelten nur für eine bestimmte Einstellung und an einem Standort der USB-GPS-Dongle.

Über drei Tage haben die Raspberry die GPS-Mäuse alle 16 Sekunden nach der Zeit gefragt, was folgendes Diagramm für den Raspberry Pi C1 mit dem Dongle G72 G-Mouse ergab.

Offset und Jitter für den Dongle G72 G-Mouse

Die Werte streuen nicht zufällig, sondern bewegen sich wellenförmig um den Mittelwert. Dies lässt sich leider nicht in NTP parametrisieren.

Die Diagramme für die beiden anderen Dongle sehen ähnlich aus, deshalb erspare ich sie mir hier.

Gegenüber für dem Zeitserver C0 dem ergibt sich ein sehr geringer Offset und Jitter.

Offset und Jitter auf C1 gegenüber C0

Korrekturwerte für time1 bestimmen

Korrektur für C1

Die Messung ergibt folgende Mittelwerte für den USB-GPS-Dongle G72 G-Mouse

C1Peer øOffsetMedianStdErrJitter øJStdErr
1127.127.28.0-39,6792-39,67991,95120,82300,5635
2192.168.20.40-0,0005-0,00040,01810,01770,0085
Statistische Parameter C1 in Millisekunden

Der Korrekturwert time1 ergibt sich als minus Offset und wird in der Datei /etc/ntp.conf in der Zeile fudge … eingesetzt. Dabei ist zu beachten, dass time1 in Sekunden angegeben wird.

Da der Median Ausreißer nach oben und unten ausbügelt, bevorzuge ich den Median gegenüber dem Mittelwert. Der Unterschied ist beim V1 nicht sehr groß ist.

Da wir es mit der Genauigkeit nicht übertreiben sollten, runde ich auf 1/1000 Millisekunde auf. 😉

fudge 127.127.28.0 time1 0.039680 refid GPS

Korrektur für C2

Bei C2 ist der Unterschied zwischen Mittelwert des Offset und Median etwas größer.

C2Peer øOffset øMedianStdErrJitter øJStdErr
1127.127.28.0-48,9257-48,85363,58741,47721,3518
2192.168.20.40-0,0006-0,00100,01870,02690,0119
Statistische Parameter C2 in Millisekunden
fudge 127.127.28.0 time1 0.048854 refid GPS

Korrektur für C3:

Zu guter Letzt schauen wir und noch den dritten Dongle an. Hier ist der Unterschied zwischen Mittelwert und Median mit -0,8086 ms, also fast eine Millisekunde, deutlich größer.

C3Peer øOffsetMedianStdErrJitter øJStdErr
1127.127.28.0-60,5935-61,40215,79591,93091,7110
2192.168.20.40-0,0009-0,00070,01800,01870,0095
Statistische Parameter C3 in Millisekunden
fudge 127.127.28.0 time1 0.061402 refid GPS

Wie genau ist eigentlich die Zeit auf den Raspberry Pi

Fragen wir sie einfach selbst mit ntpstat.

--- c0 ---
synchronised to NTP server (131.188.3.223) at stratum 2
time correct to within 40 ms
polling server every 1024 s
--- c1 ---
synchronised to NTP server (192.168.20.40) at stratum 3
time correct to within 41 ms
polling server every 16 s
--- c2 ---
synchronised to NTP server (192.168.20.40) at stratum 3
time correct to within 41 ms
polling server every 16 s
--- c3 ---
synchronised to NTP server (192.168.20.40) at stratum 3
time correct to within 41 ms
polling server every 16 s

Auch der Zeitserver C0, der seine Zeit direkt aus dem Internet bezieht, liegt nur um die 40 ms richtig. Dieser Wert ist allerdings ein Snapshot, der mit jeder Abfrage stark schwankt.

--- c0 ---
synchronised to NTP server (131.188.3.223) at stratum 2
time correct to within 31 ms
polling server every 1024 s
--- c1 ---
synchronised to NTP server (192.168.20.40) at stratum 3
time correct to within 32 ms
polling server every 16 s
--- c2 ---
synchronised to NTP server (192.168.20.40) at stratum 3
time correct to within 32 ms
polling server every 16 s
--- c3 ---
synchronised to NTP server (192.168.20.40) at stratum 3
time correct to within 32 ms
polling server every 16 s

Für die nächste Messreihe werden die USB-GPS-Dongle als bevorzugte Zeitquellen gesetzt und die Zeitserver neu gestartet.

Start frei für die nächste Messreihe

Dazu müssen wir die /etc/ntp.conf nochmals wie folgt anpassen.

server 192.168.20.40 iburst minpoll 4 maxpoll 4 noselect
server 127.127.28.0 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.0 time1 0.039680 refid GPS

Mit dieser Änderung wird die Uhr auf den Raspberry Pi nach dem USB-GPS-Dongel synchronisiert.

Spannende Frage ist: Wird sich die Zeit auf C1, C2 und C3 und besonders auf Pi 2 verhalten?

Fortsetzung folgt in ein paar Tagen.