Teil 6 der TSN-Serie

Mit offenen Lösungen zum eigenen Endpunkt


Fortsetzung des Artikels von Teil 1

Zeitgesteuerte Datenübertragung

Philipp Neher ist wissenschaftlicher Mitarbeiter am ISW in Stuttgart.
Philipp Neher ist wissenschaftlicher Mitarbeiter am ISW in Stuttgart.
© ISW

In Linux ist die Unterstützung der gesteuerten Datenübertragung von TSN im Linux Traffic Control (TC) System umgesetzt. Verschiedene Warteschlagentypen und Prinzipien (Queuing Disciplines, qdiscs) sorgen für die Sortierung und Sendezeitpunkte der zu übertragenden Datenpakete. Mehrere davon lassen sich für TSN nutzen. Größtenteils beziehen sich die Qdiscs und die gezeigten Einstellungen auf den Sendepfad, für reine Datenempfänger sind sie also unwichtig.

Senden zu einem bestimmten Zeitpunkt (ETF)

Das zeitgesteuerte Senden lässt sich in TSN dazu nutzen, um beispielweise zyklische Streams zu realisieren. Dabei wird ein Datenpaket zu einem spezifizierten Zeitpunkt gesendet. Diesen Sendezeitpunkt muss die Anwendung vor Senden des Paketes bestimmen und zusammen mit dem Paketinhalt der Linux-Netzwerkschicht übergeben. Die Netzwerkschicht von Linux kümmert sich durch die Nutzung der ETF-Qdisc (Earliest TXTime First) um den ­korrekten Versand des Datenpakets. Dabei kann auch eine ­Hardware-Unterstützung verwendet werden, um eine höhere Präzision zu erreichen. Dies wird beispielsweise von dem Intel-i210-Netzwerk-Controller unterstützt. Die Funktion nennt sich ‚LaunchTime‘.

 

Listing 5. Konfiguration Warteschlangen und Zuordnung der Netzwerk-Prioritäten
Listing 5. Konfiguration Warteschlangen und Zuordnung der Netzwerk-Prioritäten
© ISW

Die ETF-Qdisc arbeitet für jede Warteschlange separat und kann auch nur für einzelne Warteschlangen aktiviert ­beziehungsweise konfiguriert werden. Für die Nutzung von ETF müssen also zuerst die Warteschlangen und die Zuordnung der Linux-Socketprioritäten zu den Warteschlangen konfiguriert werden. Dies geschieht über die Qdisc MQPRIO. Diese realisiert die Zuordnung der Linux-Socket-Prioritäten auf ­Traffic-Klassen und schließlich auf Hardware-Warteschlangen (sofern verfügbar). Listing 5 zeigt ein Konfigurationsbeispiel unter Verwendung einer Intel i210 mit vier Warteschlangen.
Für die Konfiguration wird das Kommandozeilenwerkzeug tc verwendet.

Der gezeigte Befehl legt eine MQPRIO Qdisc an unterster Stelle des i210-Netzwerk-Interfaces mit der ID 6666 an. Weiterhin definiert der Befehl num_tc 3 drei Traffic-Klassen (Klasse 0 bis Klasse 2). Danach sind die 16 verfügbaren ­Linux-Socket-Prioritäten (0-15) den Traffic-Klassen zuzuordnen. Dafür wird nach dem ‚map‘-Schlüsselwort für jede Socket-Priorität die zugehörige Traffic-Klasse angegeben.

Im gezeigten Beispiel erfolgt die Zuordnung der Socket-Priorität 3 der Traffic-Klasse 0 und die Zuordnung der Socket-Priorität 2 der Traffic-Klasse 1. Alle anderen Socket-Prioritäten sind der Traffic-Klasse 2 zugeordnet. Über das Schlüsselwort ‚queues‘ werden anschließend die Traffic-Klassen den ­Warteschlangen zugeordnet. Dabei sind die Traffic-Klassen in strikter aufsteigender Reihenfolge zu konfigurieren. Der erste Eintrag gilt somit der Traffic-Klasse 0 und so weiter. Der jeweilige Eintrag spezifiziert die Anzahl an Warteschlangen mit Offset. Im Beispiel wird der Traffic-Klasse 0 die erste ­Warteschlange (also Warteschlange Q0) und der Traffic-Klasse 1 die zweite Warteschlange (also Q1) zugeordnet. Der Traffic-Klasse 2 sind im dritten Eintrag zwei Warteschlangen ab dem Offset 2 (also Warteschlange Q2 und Q3) zuzuordnen. Zum Schluss ist über ‚hw 1‘ das Hardware-Offloading zu ­aktivieren.

 

Listing 6. Konfiguration ETF Qdisc
Listing 6. Konfiguration ETF Qdisc
© ISW

Nachdem die Warteschlangen angelegt sind kann die ETF-Qdisc konfiguriert werden (siehe Listing 6). Das gezeigte Beispiel legt eine ETF-Qdisc auf die erste im vorherigen Beispiel angelegte Warteschlange (ID 6666:1). Der clockid-Parameter legt die für das zeitgesteuerte Senden zu ver­wendende Uhr fest. Die verwendete CLOCK_TAI ist die ­einzige unterstützte. Für eine korrekte Funktion muss diese Uhr synchronisiert ­werden (siehe Abschnitt Zeitsynchroni­sierung).

Der Parameter ‚delta‘ spezifiziert die Zeitspanne, um die ein Paket vor dem spezifizierten Sendezeitpunkt an die Hardware übergeben wird. Diese Zeitspanne ist für jedes System separat zu bestimmen. Sie lässt sich über das Werkzeug cyclictest abschätzen. Details sind im „TSN Documentation Project for Linux“ zu finden. Das Beispiel verwendet eine Zeitspanne von 500 µs. Abschließend spezifiziert das Schlüsselwort offload die Aktivierung der ­Hardware-Unterstützung. 


  1. Mit offenen Lösungen zum eigenen Endpunkt
  2. Zeitgesteuerte Datenübertragung
  3. Senden in Traffic-Klassen nach Qbv (TAPRIO)

Das könnte Sie auch interessieren

Verwandte Artikel

Institut für Steuerungstechnik der Werkzeugmaschinen- und Fertigungsindustrie (ISW), WEKA FACHMEDIEN GmbH

TSN & OPC UA