Mit Onload arbeiten
Auf dieser Seite wird beschrieben, wie Sie Onload für Compute Engine-Instanzen mit extrem niedriger Latenz (Ultra Low Latency, ULL) verwenden.
Onload ist ein leistungsstarker Netzwerk stack für latenzempfindliche Anwendungen, die eine extrem niedrige Latenz, minimalen Jitter und eine gleichbleibende Leistung erfordern. Onload bietet eine TCP/IP-Implementierung, die den Betriebssystemkernel umgeht und direkt im Userspace ausgeführt wird, während Anwendungen Standard-BSD-Socket-APIs verwenden können.
Die Verwendung von Onload mit der ULL-Lösung umfasst die Unterstützung für Folgendes:
- Datenflusssteuerung: Mit ULL-Netzwerkschnittstellen können Sie das standardmäßige RSS-Hashing (Receive Side Scaling) umgehen, indem Sie bestimmte Traffic-Flüsse direkt an eine bestimmte Empfangswarteschlange (Receive Queue, RX) weiterleiten. Für ULL-Unicast- und Multicast-Traffic wird die 3-Tupel-Datenflusssteuerung unterstützt (Protokoll, Ziel-IP-Adresse, Zielport).
Erforderlicher Instanztyp und Betriebssystem-Image
Wenn Sie Onload verwenden möchten, müssen Sie ULL Compute Engine-Instanzen (U4P oder U4C) mit dem Image-Projekt und dem Image erstellen, das von Google für Tests bereitgestellt wird. Eine Anleitung finden Sie unter ULL Compute Engine-Instanzen erstellen.
Wenn Sie das erforderliche Image verwenden, ist Onload vorinstalliert und wird beim Booten geladen. Anschließend können Sie Prozesse mit Onload ausführen, wie in den Verfahren auf dieser Seite beschrieben.
Onload starten und beenden
In diesem Abschnitt wird beschrieben, wie Sie Onload starten und beenden. Sie müssen Onload starten, um die Verfahren in den folgenden Abschnitten auszuführen.
Führen Sie den folgenden Befehl aus, um Onload zu starten:
sudo /opt/gcp_tp-scripts/load-onload-and-tune
Führen Sie den folgenden Befehl aus, um Onload zu beenden:
sudo /opt/gcp_tp-scripts/unload-onload
Busy Polling aktivieren
Aktivieren Sie Busy Polling, um eine extrem niedrige Latenz zu erzielen und Jitter zu minimieren.
So aktivieren Sie Busy Polling:
Stellen Sie über SSH eine Verbindung zur Instanz her, falls noch nicht geschehen.
Sie können Busy Polling für alle Warteschlangen oder detaillierter aktivieren. Wählen Sie die Option aus, die Ihrem Anwendungsfall entspricht:
Alle Warteschlangen:
sudo /opt/gcp_tp-scripts/busypoll-all-queues
Bestimmte RX-Warteschlange, die von einem Onload-Stack verwendet wird:
Starten Sie einen Onload-Stack, falls noch nicht geschehen, indem Sie den folgenden Befehl ausführen:
gcp_tp-onload /opt/neper/tcp_rr &
Führen Sie den folgenden Befehl aus, um die
stack-iddes gestarteten Stacks abzurufen:onload_stackdump
Führen Sie den folgenden Befehl aus, um die Indexnummern Ihrer Netzwerkschnittstellen abzurufen:
cat /sys/class/net/NIC_NAME/ifindex
Ersetzen Sie
NIC_NAMEdurch den Namen der Netzwerkschnittstelle im Gastbetriebssystem, z. B.eth1odereth2.Führen Sie den folgenden Befehl aus, um Busy Polling zu aktivieren:
sudo /opt/gcp_tp-scripts/busypoll-onload-stack STACK_ID enable NIC_INDEX CPU_ID
Ersetzen Sie Folgendes:
STACK_ID: die zuvor abgerufene Stack-IDNIC_INDEX: die Indexnummer der Netzwerkschnittstelle, für die Sie Busy Polling aktivieren möchten, z. B.1oder2.CPU_ID: die ID der CPU, für die Busy Polling aktiviert werden soll.- Wir empfehlen, die CPU
0oder eine CPU, die von einer Anwendung verwendet wird, nicht zu verwenden. Verwenden Sie CPU-Kerne, die sich lokal auf dem NUMA-Knoten der angegebenen Netzwerkschnittstelle befinden. Beispiel:
eth1verwendet den NUMA-Knoten0, der die CPU-Kerne0-29verwendet.eth2verwendet den NUMA-Knoten2. Dieser verwendet die CPU-Kerne60-89.
- Wir empfehlen, die CPU
Sie können Busy Polling mit dem folgenden Befehl deaktivieren:
sudo /opt/gcp_tp-scripts/busypoll-onload-stack STACK_ID disable NIC_INDEX CPU_ID
Nächste Schritte
- Informationen zum Synchronisieren der Systemuhr Ihrer Instanz mit der physischen NIC-Uhr des Hostservers finden Sie unter Genaue Zeit konfigurieren.