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:
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.
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.
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.
Korrekturwerte für time1 bestimmen
Korrektur für C1
Die Messung ergibt folgende Mittelwerte für den USB-GPS-Dongle G72 G-Mouse
C1 | Peer ø | Offset | Median | StdErr | Jitter ø | JStdErr |
1 | 127.127.28.0 | -39,6792 | -39,6799 | 1,9512 | 0,8230 | 0,5635 |
2 | 192.168.20.40 | -0,0005 | -0,0004 | 0,0181 | 0,0177 | 0,0085 |
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.
C2 | Peer ø | Offset ø | Median | StdErr | Jitter ø | JStdErr |
1 | 127.127.28.0 | -48,9257 | -48,8536 | 3,5874 | 1,4772 | 1,3518 |
2 | 192.168.20.40 | -0,0006 | -0,0010 | 0,0187 | 0,0269 | 0,0119 |
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.
C3 | Peer ø | Offset | Median | StdErr | Jitter ø | JStdErr |
1 | 127.127.28.0 | -60,5935 | -61,4021 | 5,7959 | 1,9309 | 1,7110 |
2 | 192.168.20.40 | -0,0009 | -0,0007 | 0,0180 | 0,0187 | 0,0095 |
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.
Neueste Kommentare