← Alle News

Robotweax SRT 0.2.6: Weniger Verwaltungsaufwand für viele parallele Streams

Testaufbau der Performance-Messung: Robotweax SRT 0.2.6 und Haivision SRT 1.5.7 in getrennten Läufen auf derselben Ubuntu-ARM64-VM.

Wie wir CPU- und Speicherbedarf reduziert haben – und was unsere Vergleichsmessungen mit Haivision SRT 1.5.7 zeigen.

Viele gleichzeitige SRT-Verbindungen stellen andere Anforderungen als ein einzelner Stream. Neben der eigentlichen Paketverarbeitung können Speicherreservierungen, häufige Weckrufe und die Verteilung der Arbeit auf Threads einen erheblichen Teil der Ressourcen beanspruchen. Genau dort haben wir für Robotweax SRT 0.2.6 angesetzt.

Ausgangspunkt waren Skalierungsmessungen in unserem SRT Network Lab. Daraus entstand eine Reihe gezielter Untersuchungen und Änderungen: weniger unnötige Arbeit im Empfangspfad, bedarfsgerechte Nutzung des Paketspeichers und eine überarbeitete Ablaufsteuerung. Das Ergebnis ist unser veröffentlichtes Performance Optimization Release 0.2.6. Die Versionsnummer bezeichnet die Robotweax-Implementierung; SRT-Protokoll und kompatible API bleiben auf dem Stand 1.5.7. Release und Kompatibilitätsumfang.

Weniger CPU-Arbeit im Empfangspfad

Ein wichtiger Befund betraf die Benachrichtigungen nach dem Lesen empfangener Daten durch die Anwendung. Solche Reads schaffen Platz im Empfangsfenster. Wenn daraus jedoch jedes Mal ein sofortiger weiterer Durchlauf der Kanalverarbeitung entsteht, verursacht hohe Empfangslast zusätzliche Arbeit für Scheduler und Synchronisation.

Wir bündeln diese Benachrichtigungen und nutzen bereits anstehende Verarbeitungsschritte. Dabei bleiben der Fortschritt des Empfangsfensters und die Protokollfristen erhalten. Ruhige Kanäle können außerdem auf eine gemeinsame Überwachung der Socket-Bereitschaft warten, statt unnötig häufig abgefragt zu werden.

Eine gezielte Linux-Gegenmessung zeigte bei 32 Streams mit jeweils 10 Mbit/s folgende Wirkung der Empfangsoptimierung:

Übertragungsrichtung Empfänger-CPU vorher Empfänger-CPU nachher Veränderung
Haivision → Robotweax 6,364 CPU-s 2,536 CPU-s −60,2 %
Robotweax → Robotweax 6,436 CPU-s 2,451 CPU-s −61,9 %

Verglichen wurden zwei aufeinanderfolgende Robotweax-Entwicklungsstände, jeweils mit zwei Läufen pro Fall in wechselnder Reihenfolge.

Speicher nach Belegung nutzen, Pufferkapazität erhalten

Der zweite große Ansatzpunkt war der Paketspeicher. Zuvor wurden große Payloadbereiche bereits beim Aufbau einer Session resident, auch wenn die Verbindung nur einen kleinen Teil ihrer konfigurierten Kapazität nutzte.

Die neue Verwaltung trennt Paketmetadaten und Nutzdaten. Sie reserviert weiterhin die konfigurierte Kapazität, berührt die Speicherseiten für Nutzdaten aber erst bei Bedarf. Frei gewordene Payloadplätze werden unabhängig vom Umlauf des Paketrings wiederverwendet.

Im Linux-Komponententest sank der zusätzliche residente Speicher einer leeren Session mit Standardkapazitäten von rund 23,74 auf 1,18 MiB – etwa 95 %. Auch unter echtem Netzwerkverkehr zeigte sich die Wirkung. Bei 16 Streams ergab die isolierte Gegenmessung des Speicherumbaus:

Robotweax → Robotweax, 16 Streams Prozess-RSS vorher Prozess-RAM mit Payload-Pool Veränderung
Sender 915,1 MiB 53,5 MiB −94,2 %
Empfänger 917,8 MiB 97,8 MiB −89,3 %

Der Vergleich mit Haivision SRT 1.5.7

Wie steht die optimierte Implementierung gegenüber der Referenz da? Die letzte ausgewertete Linux-Serie erlaubt einen konkreten Vergleich bei 32 parallelen Streams und insgesamt 320 Mbit/s angebotener Nutzdatenrate.

Die folgenden Werte wurden mit Robotweax Version 0.2.6 beobachtet. Verglichen werden jeweils Sender und Empfänger derselben Implementierung auf derselben Linux-ARM64-VM: vier Robotweax-Läufe und zwei Haivision-Kontrollläufe.

Messgröße Robotweax P28 Haivision SRT 1.5.7
Empfangsrate¹ 319,696 Mbit/s 319,994 Mbit/s
CPU-Zeit Sender 3,607 s 3,661 s
CPU-Zeit Empfänger 1,992 s 3,980 s
CPU-Zeit beider Prozesse 5,610 s 7,641 s
RAM Nutzung 43,12 MiB 24,34 MiB
Prozess-Threads Sender / Empfänger 4 / 8 66 / 36
Prozess-Threads insgesamt 12 102

Bei nahezu gleicher Empfangsrate benötigte Robotweax in dieser Serie rund 50 % weniger Empfänger-CPU und 26,6 % weniger CPU-Zeit insgesamt. Auch die Zahl der vorhandenen Prozess-Threads lag deutlich niedriger: 12 gegenüber 102, entsprechend 88,2 % weniger.

Beim Speicher war Haivision im Vorteil. Trotz der erheblichen Verbesserung gegenüber den früheren Robotweax-Ständen lag die gleichzeitige RAM-Spitze von Robotweax hier 77,1 % höher.

Unter welchen Bedingungen wurde gemessen?

Die letzte Vergleichsserie lief auf einer dedizierten Ubuntu-ARM64-VM mit vier vCPUs und rund 6 GiB RAM. Sender und Empfänger kommunizierten über Loopback. Verwendet wurden unverschlüsselte LIVE/Message-Streams, 20 ms SRT-Latenz und deaktiviertes TLPKTDROP. Künstliche Verluste und Netem-Verzögerungen waren ausgeschaltet.

320 Mbit/s waren die vorgegebene Last, keine ermittelte maximale Transportkapazität. Die Messungen erlauben keine pauschalen Aussagen über verschlüsselte Verbindungen, WAN-Strecken, andere Plattformen oder beliebig viele Streams.

Weitere Änderungen für einen zuverlässigeren Betrieb

Die Arbeit ging über CPU und Speicher hinaus. Ein Sendecursor vermeidet wiederholtes Durchsuchen bereits gesendeter, noch nicht bestätigter Pakete. Begrenzte Arbeit pro Kanaldurchlauf und rotierende Verbindungsbesuche verbessern die Verteilung der Verarbeitung. Temporären UDP-Rückstau behandeln wir mit begrenzten Wiederholungen; Sendeabrechnung und Pacing werden erst nach erfolgreicher Übergabe fortgeschrieben. Wiederverwendbare Callback-Worker vermeiden wiederholtes Erzeugen von Threads.

Messen heißt auch, Grenzen sichtbar zu machen

Nicht jede plausible Optimierung brachte einen messbaren Gewinn. Das Entfernen einer redundanten Scheduler-Benachrichtigung bestand die Funktionsprüfungen, zeigte gegenüber dem direkten Vorgänger aber keinen nachgewiesenen CPU-Vorteil.

Verbesserungen der Reordering-Toleranz, weitere Parallelisierung am gemeinsamen Listener und gebündelte Empfangs-Systemaufrufe sind eigenständige Aufgaben außerhalb dieses Releases.

Robotweax SRT 0.2.6 ist damit ein erster Schritt zur Performance Optimierung und weitere Untersuchungen werden folgen.

Robotweax SRT 0.2.6 ist verfügbar: als GitHub-Release mit signierten Windows-SDKs und über unseren Homebrew-Tap mit Bottle für Apple Silicon unter macOS 15.