Übersetzungen dieser Seite:
de

Benutzer-Werkzeuge

Webseiten-Werkzeuge


ptpdservicetux

PTPd: Zeitsynchronisierung für (Realtime-)Linux-Systeme mit Tux

Alternativ zum Zeitsynchronisierungstool NTP, welches für Echtzeitsysteme gänzlich ungeeignet ist, wurde PTP entwickelt. Dieses basiert im Gegensatz zu NTP nicht auf dem Client/Server-Prinzip, sondern auf dem Multicast-Prinzip (Master/Slave). PTP wurde also dafür entwickelt, die Uhrzeit zwischen einem PTP-Master und seinen PTP-Slaves möglichst genau abzugleichen. Dabei existieren PTP-Applikationen, welche hard- oder softwaregesteuert sind, also beides beherrschen. Hardwaregesteuerte PTP-Applikationen gleichen die Zeit um ein Vielfaches genauer ab als softwaregesteuerte PTP-Applikationen, was insbesondere unter Einsatz in Realtime-Systemen an Relevanz hat. Für einen Hardwareabgleich muss jedoch entsprechend physische Hardware vorhanden sein (dedizierter PTP-Clock Chip auf der Netzwerkkarte von Master und Slaves und im besten Fall noch im ggf. dazwischenliegenden Switch/Router). Wird kein hardwaregesteuertes PTP benötigt (z.B. für Testzwecke), kann PTPd verwendet werden.
PTPd ein ist eine rein softwaregesteuerte PTP-Applikation und kann nicht hardwaregesteuert werden.
Vorteil: Einsparung finanzieller Mittel, jedoch auf Kosten der Genauigkeit.
Wichtig: PTPd sollte nur bedingt und nach Abklärungen aller Anforderungen an das Realtime-System verwendet werden! Für kritische Realtime-Anwendungen sollte PTP auf Hardware-Basis zum Einsatz kommen.

Anwendungsbeispiel

Plattformabhängige Installationsvarianten

Ubuntu 14.04 und PTPd im neuesten Release aus GitHub.com

Source code files hier herunterladen. Source code file ins folgende Verzeichnis kopieren (Die folgenden Platzhalter <x> sind durch die entsprechende Versionsnummer der heruntergeladenen Datei zu ersetzen):

cp ptpd-<x>.<x>.<x>.tar.gz /opt

Ins Verzeichnis /opt navigieren:

cd /opt

Die Datei ptpd-<x>.<x>.<x>.tar.gz hier entpacken:

tar xvzf ptpd-<x>.<x>.<x>.tar.gz

Die Datei ptpd-<x>.<x>.<x>.tar.gz löschen:

rm -rf ptpd-<x>.<x>.<x>.tar.gz

Das Verzeichnis ptpd-<x>.<x>.<x> umbenennen in ptpd:

mv /opt/ptpd-<x>.<x>.<x> /opt/ptpd

Ins Verzeichnis /opt/ptpd navigieren:

cd /opt/ptpd

Folgende Befehle der Reihe nach eingeben:

./configure
make
make install

Als Nächstes wird ein Autostart des PTPd-Dienstes beim Betriebssystemstart konfiguriert.
Eine Datei <meinStartSkript>.sh im Verzeichnis /usr/local/bin/ erstellen…

vi /usr/local/bin/<meinStartSkript>.sh

…folgenden Inhalt einfügen (Wichtig: sleep wird zwingend benötigt, denn falls das Netzwerkinterface beim Systemstart aufgrund noch nicht geladener Netzwerkkartentreiber noch keine Netzwerkverbindung hat, wird der Dienst nicht gestartet.)…

sleep 30

Variante Master

sudo /opt/ptpd/src/ptpd2 -M -i <meinNetzwerkInterface>

Variante Slave

sudo /opt/ptpd/src/ptpd2 -s -i <meinNetzwerkInterface>

…speichern und Editor verlassen. Die eben erstellte Datei ausführbar machen:

chmod +x /usr/local/bin/<meinStartSkript>.sh

Folgende Datei editieren:

vi /etc/rc.local

Vor dem bestehenden Eintrag exit 0 folgenden Eintrag in die Datei machen:

/usr/local/bin/<meinStartSkript>.sh
exit 0

Optional

Falls über das rc-.local-File mehrere Prozesse gestartet werden sollen, muss zwingend hinter jede Zeile, welche einen Nachfolgeprozess hat, ein «&»-Zeichen eingefügt werden. Beispiel:

/usr/local/bin/<meinErstesStartSkript>.sh &
/usr/local/bin/<meinZweitesStartkript>.sh
exit 0

Datei speichern und Editor verlassen.
System neu starten und prüfen, ob der ptpd2-Dienst automatisch startet:

ps -A | grep ptpd2

Achtung: Wird nichts angezeigt, dann läuft der Prozess nicht!


Ubuntu 14.04 und 16.04 und PTPd aus dem default Paket-Repository

Installation

pdpd-Paket Installation via default Paket-Repository:

apt-get install ptpd

Folgende Datei editieren…

vi /etc/default/ptpd

…und folgenden Default-Einträge entsprechend folgender Angabe ändern (Achtung: case sensitive!)
START_DAEMON = no → ändern zu → START_DAEMON = yes

Variante Ubuntu 16.04 Master


PTPD_OPTS = "" → ändern zu → PTPD_OPTS = "-M -i <meinNetzwerkInterface>"

Variante Ubuntu 14.04 Master


PTPD_OPTS = "" → ändern zu → PTPD_OPTS = "-G -h -b <meinNetzwerkInterface>"

Variante Ubuntu 16.04 Slave


PTPD_OPTS = ""PTPD_OPTS = "-s -i <meinNetzwerkInterface>"

Variante Ubuntu 14.04 Slave


PTPD_OPTS = ""PTPD_OPTS = "-g -h -b <meinNetzwerkInterface>"


Speichern und Editor verlassen.
Als Nächstes wird ein Autostart des PTPd-Dienstes beim Betriebssystemstart konfiguriert.
Eine Datei <meinStartSkript>.sh im Verzeichnis /usr/local/bin/ erstellen…

vi /usr/local/bin/<meinStartSkript>.sh

…folgenden Inhalt einfügen (Wichtig: sleep wird zwingend benötigt, denn falls das Netzwerkinterface beim Systemstart keine Netzwerkverbindung hat, wird der Dienst nicht gestartet.)…

sleep 30

Variante Ubuntu 16.04 Master

sudo ptpd -M -i <meinNetzwerkInterface>

Variante Ubuntu 14.04 Master

sudo ptpd -G -h -b <meinNetzwerkInterface>

Variante Ubuntu 16.04 Slave

sudo ptpd -s -i <meinNetzwerkInterface>

Variante Ubuntu 14.04 Slave

sudo ptpd -g -h -b <meinNetzwerkInterface>

…speichern und Editor verlassen.
Die eben erstellte Datei ausführbar machen:

chmod +x /usr/local/bin/<meinStartSkript>.sh

Folgende Datei editieren:

vi /etc/rc.local

Vor dem bestehenden Eintrag exit 0 folgenden Eintrag in die Datei machen:

/usr/local/bin/<meinStartSkript>.sh
exit 0

Optional

Falls über das rc-.local-File mehrere Prozesse gestartet werden sollen, muss zwingend hinter jede Zeile, welche einen Nachfolgeprozess hat, ein «&»-Zeichen eingefügt werden. Beispiel:

/usr/local/bin/<meinErstesStartSkript>.sh &
/usr/local/bin/<meinZweitesStartkript>.sh
exit 0

Datei speichern und Editor verlassen.
System neu starten und prüfen, ob der ptpd-Dienst automatisch startet:

service ptpd status

Variante Ubuntu 16.04

Als Output sollte ein grünes «Licht» generiert werden (kann etwas Startverzögerung von ca. 10 Sekunden haben).

Variante Ubuntu 14.04

Als Output sollte ein «ptpd is running» generiert werden (kann etwas Startverzögerung von ca. 10 Sekunden haben).



Troubleshooting & Wissenswertes zu PTP und PTPd

  • Ob die eingebauten physischen Netzwerkkarten hardwaregesteuertes PTP unterstützen, kann mit folgendem Kommandozeilenbefehl überprüft werden:
    ethtool -T <meinNetzwerkInterface>
  • Optional: Handelt es sich beim verwendeten Netzwerkinterface um ein WiFi-Modul und möchte man feststellen, ob die Verbindung vom Linux-PC zum Access-Point Fast Roaming (802.11 r) unterstützt (kann für unterbruchsfreie Zeitsynchronisation hilfreich sein), folgende Kommandozeilenbefehle ausführen:
    wpa_cli roam <meineAccessPointMACadresse>
    wpa_cli scan
    wpa_cli scan_results

    Wenn nun als Ergebnis z.B. WPA2-PSK+FT angezeigt wird, dann wird Fast Roaming (FT / Fast Transition) unterstützt. Wichtig: Wird 802.11r am Access-Point aktiviert, wird empfohlen, 802.11k ebenfalls zu aktivieren (für weitere Infos zu diesem Thema das Internet nutzen ;-)). Zudem müssen sowohl Access-Point sowie die NIC-Treiber des Linux-Systems die FT-Technologie unterstützen.

  • Ein Verbindungsabbruch von Master zu Slave(s) oder umgekehrt hat keinen Einfluss auf die Laufzeit der laufenden PTPd-Dienste. Das bedeutet: Wird z.B. ein PTP-Master neu gestartet, wird der Zeitabgleich automatisch wieder gestartet, sobald der PTP-Master wieder hochgefahren wurde und sein PTPd-Dienst automatisch gestartet ist. Es muss kein manueller Eingriff auf Seiten des Slaves erfolgen. Dasselbe gilt auch umgekehrt, also für den Master, wenn ein Slave neu gestartet wird.

  • Um PTPd zu betreiben werden mindestens zwei durch ein Hub oder Switch oder direkt miteinander verbundene Computer mit installiertem und konfiguriertem PTPd-Dienst benötigt . Es ist möglich, PTPd zwischen zwei (und maximal zwei!) Computern über eine geroutete Verbindung zu betreiben, indem man PTPd beidseitig mit dem -u Argument, gefolgt von der jeweiligen Ziel IP-Adresse, ausführt.

  • PTP kann mit anderen Zeitsynchronisierungsvarianten kombiniert werden. Beispiel: Ein PTP-Master kann seine lokale Uhrzeit via NTP (Layer 3) periodisch bei einem externen Zeitserver beziehen und diese dann via PTP an seine Slaves verteilen.

  • PTP nutzt defaultmässig Multicast, kann aber auch für einen Unicast-Betrieb konfiguriert werden.



Ende des Tutorials.

Quellen
http://ptpd.sourceforge.net/doc.html
https://manpages.debian.org/stretch/ptpd/ptpd.8.en.html
https://www.youtube.com/watch?v=Forh3XfD_Ec
https://de.wikipedia.org/wiki/Precision_Time_Protocol
http://www.pdv.reutlingen-university.de/rte/White_paper_ieee1588_de_v1-2.pdf
http://manpages.ubuntu.com/manpages/trusty/man8/ptpd.8.html
https://gist.github.com/mhaberler/f4809ed2e465912d3534
https://www.endruntechnologies.com/pdf/PTP-1588.pdf
https://www.endruntechnologies.com/ptp-ieee-1588-faq.htm
https://www.endruntechnologies.com/ptp-slave.htm
http://www.en4tel.com/pdfs/NTPandPTP-A-Brief-Comparison.pdf
https://www.youtube.com/watch?v=-MK7DcGjjFE
https://networkengineering.stackexchange.com/questions/23369/how-to-check-if-a-nic-supports-hardware-timestamps
http://linuxptp-users.narkive.com/kYXafDxt/installation-of-linuxptp-on-ubuntu-pc
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/ch-configuring_ptp_using_ptp4l
https://www.reddit.com/r/openwrt/comments/515oea/finally_got_80211r_roaming_working/

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
158 +10 = 
 
ptpdservicetux.txt · Zuletzt geändert: 2019/03/08 (Externe Bearbeitung)