Simple Science

Hochmoderne Wissenschaft einfach erklärt

# Computerwissenschaften# Netzwerke und Internet-Architektur

Netzwerkfunktionen verbessern für bessere Leistung

Ein Tool verwandelt einsträngige Netzwerkfunktionen in effiziente mehrsträngige Versionen.

― 6 min Lesedauer


ParalleleParalleleNetzwerkfunktionenvereinfachtGeschwindigkeit.von Netzwerkfunktionen für bessereEin Tool automatisiert die Umwandlung
Inhaltsverzeichnis

In der digitalen Welt von heute spielen Software-Netzwerkfunktionen (NFs) eine wichtige Rolle darin, wie Daten verarbeitet und gehandhabt werden. Diese Funktionen sind entscheidend für das Management des Netzwerkverkehrs, die Gewährleistung der Sicherheit und die Kommunikation zwischen verschiedenen Systemen. Allerdings ist es, mit der sich entwickelnden Technologie, zunehmend wichtig geworden, diese Funktionen schneller und effizienter zu machen.

Traditionell sind NFs so konzipiert, dass sie flexibel und leicht bereitzustellen sind, aber das hat seinen Preis in Bezug auf die Leistung. Um die Geschwindigkeit zu verbessern, wird der Verkehr oft auf mehrere CPU-Kerne verteilt. Diese Methode stellt eine bedeutende Herausforderung dar: Wie können wir sicherstellen, dass NFs parallel laufen können, ohne ihre beabsichtigte Funktion zu verlieren?

In diesem Artikel wird eine vorgeschlagene Lösung besprochen, die eine Single-Thread-Version eines Software-NF automatisch in eine Multi-Thread-Version umwandelt, ohne deren grundlegende Operationen zu verändern. Durch eine bestimmte Technik können wir erkennen, wie das NF seine Daten verwaltet und Aufgaben effizient auf die CPU-Kerne verteilt.

Die Herausforderung der Parallelisierung

Parallelisierung bedeutet, Aufgaben auf verschiedene Prozessoren oder Kerne zu verteilen, um die Verarbeitung zu beschleunigen. Idealerweise arbeitet jeder Kern bei der Parallelisierung eines NFs unabhängig an unterschiedlichen Arbeitslasten, ohne sich gegenseitig zu stören. Dafür muss mit den gemeinsamen Daten sorgfältig umgegangen werden, um Konflikte zu vermeiden, die den Prozess verlangsamen oder zu Fehlern führen können.

NFs verwalten oft Daten, auf die mehrere Threads zugreifen, was es schwierig macht, effizient parallel zu arbeiten. Wenn mehrere Kerne gleichzeitig versuchen, auf dieselben Daten zuzugreifen oder sie zu ändern, können Probleme wie Wettlaufbedingungen oder Datenkorruption auftreten. Daher ist es wichtig, die Menge an gemeinsamen Daten zu minimieren und den Datenzugriff effizient zu gestalten.

Traditionelle Methoden

Traditionell erstellen Entwickler Multi-Instanz-Versionen von NFs. Das bedeutet, dass mehrere separate Prozesse erstellt werden, die jeweils ihren eigenen Verkehr abwickeln. Auch wenn das funktionieren kann, erfordert es, dass die Entwickler tiefes Wissen darüber haben, wie das NF funktioniert und wie der Verkehr am besten unter Verwendung der Hardwarefunktionen verteilt werden kann.

Zum Beispiel müssen Entwickler, um den Verkehr mit einer Technik namens Receive Side Scaling (RSS) auszugleichen, definieren, wie eingehende Daten gehasht werden, um sie korrekt auf die verschiedenen Kerne zu verteilen. Dieser Prozess ist jedoch komplex und kann zu Ineffizienzen führen, wenn er falsch durchgeführt wird.

Eine neue Lösung

Die vorgeschlagene Lösung führt ein Tool ein, das bestehende sequenzielle NFs analysiert und automatisch in parallele Versionen umwandelt. Dieses Tool untersucht, wie ein NF arbeitet und wie es seinen Zustand beibehält. Anschliessend konfiguriert es die RSS-Einstellungen, um sicherzustellen, dass ähnliche Daten vom gleichen Kern verarbeitet werden, wodurch die Notwendigkeit komplexer Datenfreigabe und Koordination entfällt.

Wichtige Erkenntnisse

Zwei zentrale Ideen unterstützen diese Lösung. Erstens analysiert das Tool das NF, um effizient zu verstehen, wie es seinen Zustand verwaltet. Zweitens konfiguriert es die RSS so, dass Pakete, die dieselben Daten verändern, an denselben Kern gesendet werden, was die Koordination reduziert und die Leistung verbessert.

Verwendung von symbolischer Ausführung

Das Tool verwendet eine Methode namens symbolische Ausführung, um ein detailliertes Modell zu erstellen, wie das NF Daten behandelt. Dieses Modell hilft dabei, die Verbindungen zwischen verschiedenen Paketen zu erkennen und wie sie mit den Daten, die das NF verwaltet, in Beziehung stehen. Durch das Verständnis dieser Beziehungen kann das Tool die beste Möglichkeit bestimmen, den Verkehr auf die verfügbaren Kerne zu verteilen.

Beispiele von Netzwerkfunktionen

Netzwerkfunktionen können verschiedene Formen annehmen, einschliesslich Firewalls, Lastenausgleich und Verkehrsmonitore. Jede dieser Funktionen hat einen einzigartigen Zweck, bringt aber ähnliche Herausforderungen in Bezug auf die Parallelisierung mit sich.

Firewall

Eine Firewall untersucht den eingehenden und ausgehenden Verkehr und entscheidet, ob Pakete durchgelassen werden sollen. Sie verfolgt normalerweise laufende Verbindungen mithilfe einer Methode namens zustandsbehaftete Verfolgung. Indem sie versteht, welche Pakete zu derselben Verbindung gehören, kann die Firewall sie effizient verarbeiten und sicherstellen, dass verwandte Pakete ohne unnötigen Overhead denselben Kern erreichen.

Lastenausgleich

Lastenausgleicher verteilen den eingehenden Verkehr auf mehrere Server. Sie halten Informationen darüber, welcher Server welche Verbindungen bearbeitet, um sicherzustellen, dass kein einzelner Server überlastet wird. Wenn im parallelen Modus implementiert, muss der Lastenausgleicher die gleiche Logik zur Verbindungsbearbeitung über verschiedene Kerne hinweg beibehalten, um einen reibungslosen Datenfluss zu gewährleisten.

Verkehrsmonitor

Verkehrsmonitore analysieren die Daten, die durch das Netzwerk fliessen, um Muster oder Probleme zu erkennen. Sie können die verschiedenen Verbindungen, die zu einem bestimmten Zeitpunkt stattfinden, im Auge behalten und über die Datenströme berichten. Ähnlich wie Firewalls benötigen Verkehrsmonitore auch eine Möglichkeit zur Verfolgung der Verbindungen, ohne Leistungsengpässe zu verursachen.

Generierung einer parallelen Implementierung

Das Tool generiert automatisch eine parallele Version des NF, indem es einem strukturierten Pipeline-Prozess folgt. Diese Pipeline besteht aus drei Hauptphasen:

  1. Constraints-Generierung: Das Tool analysiert zuerst das NF-Modell, um zu bestimmen, wie Daten abgerufen und gespeichert werden. Es identifiziert Constraints, die vorschreiben, welche Pakete zusammen verarbeitet werden müssen, um die Funktionalität des NFs aufrechtzuerhalten.

  2. RSS-Konfiguration: Als Nächstes formuliert das Tool die RSS-Einstellungen basierend auf den identifizierten Constraints. So wird sichergestellt, dass Pakete, die dieselben Daten berühren, an denselben Kern gesendet werden.

  3. Codegenerierung: Schliesslich generiert das Tool eine neue parallele Implementierung des NFs, die den festgelegten Regeln folgt und die Leistung optimiert. Dazu gehört das Erstellen von speziellen Zustandsinstanzen für jeden Kern, das Konfigurieren der RSS und das Sicherstellen, dass die Datenzugriffsmuster sich nicht gegenseitig stören.

Leistungsevaluation

Sobald die parallelen NFs generiert sind, kann ihre Leistung bewertet werden. Dazu gehört die Einschätzung, wie gut sie mit der Anzahl der CPU-Kerne skalieren und wie sie sich unter verschiedenen Verkehrsarten verhalten.

Skalierbarkeit

Die Evaluierung der Skalierbarkeit bedeutet, zu messen, wie sehr die Leistung mit der Anzahl der hinzugefügten Kerne zunimmt. Idealerweise sollte eine Erhöhung der Anzahl der Kerne zu einem proportionalen Anstieg der Leistung führen, aber das wird oft durch Hardwarefaktoren wie PCIe-Bandbreite eingeschränkt.

Einfluss der Arbeitslast

Die Art des verarbeiteten Verkehrs hat ebenfalls Einfluss auf die Leistung. Einige Verkehrsströme, wie sie in typischen Geschäftsumgebungen zu sehen sind, verteilen sich gleichmässig auf mehrere Flüsse, während andere "Elefanten"-Flüsse aufweisen können, bei denen eine kleine Anzahl von Verbindungen den Grossteil der Daten trägt. Die Leistung des NFs kann je nach diesen Faktoren erheblich variieren.

Fazit

Das vorgeschlagene Tool zur automatischen Generierung von parallelisierten Versionen von Software-Netzwerkfunktionen kann die Netzwerkleistung erheblich steigern. Durch effizientes Management von Aufgaben über mehrere CPU-Kerne hinweg und gleichzeitige Bewahrung der Semantik der ursprünglichen Funktion reduziert dieses Tool die Belastung für Entwickler und ermöglicht eine verbesserte Durchsatzrate in stark frequentierten Szenarien.

Während sich die Technologie weiterentwickelt, können Lösungen wie diese Organisationen helfen, mit den steigenden Anforderungen an Geschwindigkeit und Effizienz im Netzwerkmanagement Schritt zu halten. Die Zukunft der Netzwerkfunktionen sieht vielversprechend aus, da automatisierte Tools es einfacher machen, sich an sich verändernde Umgebungen und Leistungsanforderungen anzupassen.

Originalquelle

Titel: Automatic Parallelization of Software Network Functions

Zusammenfassung: Software network functions (NFs) trade-off flexibility and ease of deployment for an increased challenge of performance. The traditional way to increase NF performance is by distributing traffic to multiple CPU cores, but this poses a significant challenge: how to parallelize an NF without breaking its semantics? We propose Maestro, a tool that analyzes a sequential implementation of an NF and automatically generates an enhanced parallel version that carefully configures the NIC's Receive Side Scaling mechanism to distribute traffic across cores, while preserving semantics. When possible, Maestro orchestrates a shared-nothing architecture, with each core operating independently without shared memory coordination, maximizing performance. Otherwise, Maestro choreographs a fine-grained read-write locking mechanism that optimizes operation for typical Internet traffic. We parallelized 8 software NFs and show that they generally scale-up linearly until bottlenecked by PCIe when using small packets or by 100Gbps line-rate with typical Internet traffic. Maestro further outperforms modern hardware-based transactional memory mechanisms, even for challenging parallel-unfriendly workloads.

Autoren: Francisco Pereira, Fernando M. V. Ramos, Luis Pedrosa

Letzte Aktualisierung: 2023-10-13 00:00:00

Sprache: English

Quell-URL: https://arxiv.org/abs/2307.14791

Quell-PDF: https://arxiv.org/pdf/2307.14791

Lizenz: https://creativecommons.org/licenses/by/4.0/

Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.

Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.

Mehr von den Autoren

Ähnliche Artikel