Compute Engine-Instanzen mit extrem niedriger Latenz erstellen

Auf dieser Seite wird beschrieben, wie Sie Compute Engine-Instanzen mit extrem niedriger Latenz (ULL) erstellen, indem Sie U4P- oder U4C-Maschinentypen aus der U4-Maschinenfamilie verwenden.

Eine Übersicht über den Konfigurationsprozess der ULL-Infrastruktur finden Sie unter Konfigurationsübersicht für die Lösung mit extrem niedriger Latenz.

Hinweis

Bevor Sie Compute Engine-Instanzen mit extrem niedriger Latenz erstellen, lesen Sie die folgenden Abschnitte.

VPC-Netzwerke erstellen

Erstellen Sie VPC-Netzwerke für jede Netzwerkschnittstelle Ihrer Instanz, falls noch nicht geschehen. Eine Anleitung dazu finden Sie unter Konfigurationsübersicht für die Lösung mit extrem niedriger Latenz.

Platzierungsrichtlinie erstellen

Optional können Sie eine Richtlinie für verteilte Platzierung auf Ihre ULL-Instanz anwenden, um die Ausfallsicherheit zu erhöhen. Weitere Informationen finden Sie unter Richtlinien für gestreute Platzierung erstellen und anwenden in der Compute Engine-Dokumentation.

Projekt festlegen

Legen Sie die gcloud CLI so fest, dass sie Ihr Projekt verwendet. Alternativ können Sie für jeden Befehl in den folgenden Schritten das --project=PROJECT_ID Flag angeben.

gcloud config set project PROJECT_ID

Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen von Compute Engine-Instanzen benötigen:

  • Zum Erstellen und Verwalten von Compute-Instanzen: Compute Instance Admin (compute.instanceAdmin) für Ihr Projekt

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Übersicht über die Konfiguration von ULL-Instanzen

So erstellen Sie eine Compute-Instanz mit extrem niedriger Latenz und konfigurieren sie so, dass sie Unicast- und Multicast-Traffic mit extrem niedriger Latenz sendet oder empfängt:

Schritt Beschreibung
ULL-Instanz erstellen Erstellen Sie eine Instanz mit einem U4P- oder U4C-Maschinentyp und verbinden Sie die Netzwerkschnittstellen mit einem VPC-Netzwerk für allgemeine Zwecke und einem VPC-Netzwerk mit extrem niedriger Latenz. Wenn Sie die Instanz als Multicast-Consumer verwenden möchten, setzen Sie das Flag igmp-query auf IGMP_QUERY_V2.
Routing für die Schnittstellen, die nicht nic0 sind, für Unicast-Traffic mit extrem niedriger Latenz konfigurieren Konfigurieren Sie das quellbasierte Richtlinienrouting im Gastbetriebssystem, um sicherzustellen, dass ausgehende Pakete über die richtige Schnittstelle weitergeleitet werden und asymmetrisches Routing verhindert wird.
Instanz als ULL-Multicast-Consumer konfigurieren Führen Sie die folgenden Schritte aus, um Multicast-Traffic über ULL-Netzwerkschnittstellen zu empfangen:
Zur weiteren Leistungsoptimierung empfehlen wir, auch Busy Polling zu aktivieren, wie unter Mit Onload arbeiten beschrieben.

Außerdem können Sie die Beispielbefehle auf dieser Seite verwenden, um die Multicast-Verbindung zu testen.

ULL-Instanz erstellen

In diesem Abschnitt wird beschrieben, wie Sie eine neue Instanz für Unicast- und Multicast-Traffic mit extrem niedriger Latenz erstellen.

Allgemeine Informationen zum Erstellen von Compute-Instanzen, einschließlich zusätzlicher Konfigurationsoptionen, finden Sie unter Compute Engine-Instanz erstellen und starten.

gcloud

Verwenden Sie den compute instances create Befehl, um eine ULL-Instanz zu erstellen.

Der unterstützte Netzwerkschnittstellentyp für ULL-Instanzen ist GVNIC. Sie müssen das Feld queue-count angeben und für die XDP-Unterstützung den Wert 32 festlegen.

Für die Netzwerkschnittstellen, die an ein ULL-VPC-Netzwerk angehängt werden, muss no-address angegeben werden.

Außerdem enthält der folgende Befehl das Flag igmp-query, damit die Instanz als Multicast-Consumer fungieren kann. Dieses Flag ist nicht erforderlich, wenn die Instanz nur ein Multicast-Producer ist oder wenn die Instanz nur Unicast-Traffic sendet und empfängt.

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --maintenance-policy=TERMINATE \
    --network-interface=nic-type=GVNIC,queue-count=32,network=GENERAL_PURPOSE_VPC_NETWORK,subnet=GENERAL_PURPOSE_SUBNET \
    --network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_1,no-address,igmp-query=IGMP_QUERY_V2 \
    --network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_2,no-address,igmp-query=IGMP_QUERY_V2

Ersetzen Sie die folgenden Werte:

  • ZONE: die Zone, in der die Instanz erstellt werden soll
  • INSTANCE_NAME: ein Name für die Instanz
  • MACHINE_TYPE: der U4P- oder U4C-Maschinentyp der Instanz
  • IMAGE_PROJECT: das Image-Projekt, z. B. rhel-cloud. Informationen zur Betriebssystemunterstützung für U4-Maschinentypen
  • IMAGE_FAMILY: die Image-Familie, z. B. rhel-10-2-eus-gvnic-baremetal. Informationen zur Betriebssystemunterstützung für U4-Maschinentypen

    Wenn Sie eine Image-Familie angeben, wird die Instanz aus der neuesten, nicht veralteten Version des Betriebssystem-Image in der Image-Familie erstellt. Alternativ können Sie stattdessen das Flag --image verwenden und eine Image-Version angeben.

  • GENERAL_PURPOSE_VPC_NETWORK, GENERAL_PURPOSE_SUBNET: das VPC-Netzwerk und das Subnetz, an die die nic0-Schnittstelle der Instanz angehängt werden soll

  • ULL_VPC_NETWORK: das ULL-VPC-Netzwerk, an das die Schnittstellen, die nicht nic0 sind, angehängt werden sollen

    • ULL_SUBNET_1: das Subnetz im ULL-VPC-Netzwerk, an das die nic1-Schnittstelle angehängt werden soll

    • ULL_SUBNET_2: das Subnetz im ULL-VPC-Netzwerk, an das die nic2-Schnittstelle angehängt werden soll

Routing für die Schnittstellen, die nicht nic0 sind, für Unicast-Traffic mit extrem niedriger Latenz konfigurieren

Standardmäßig verwendet eine Instanz die Standardroute, die mit der nic0-Schnittstelle verknüpft ist, um Traffic an ein Ziel außerhalb des direkt verbundenen Subnetzes zu senden. Weitere Informationen finden Sie unter Übersicht über mehrere Netzwerkschnittstellen.

Damit die nic1- und nic2-Schnittstellen Ihrer Instanz Unicast-Traffic mit extrem niedriger Latenz senden und empfangen können, müssen Sie das quellbasierte Richtlinienrouting im Gastbetriebssystem konfigurieren. Diese Konfiguration sorgt dafür, dass ausgehende Pakete über die richtige Schnittstelle weitergeleitet werden und asymmetrisches Routing verhindert wird, bei dem Traffic über eine Schnittstelle eingeht, aber versucht wird, über nic0 auszugehen.

Ein Beispiel für die Konfiguration des Richtlinienroutings finden Sie in der Anleitung Routing für eine zusätzliche Netzwerkschnittstelle konfigurieren unter Richtlinienrouting konfigurieren.

Instanz als ULL-Multicast-Consumer konfigurieren

In diesem Abschnitt wird beschrieben, wie Sie eine vorhandene ULL-Instanz als Multicast-Consumer konfigurieren.

IGMP-Abfrage für eine vorhandene ULL-Instanz aktivieren

Wenn Sie IGMP beim Erstellen der Instanz nicht aktiviert haben, können Sie es für Ihre vorhandene Instanz aktivieren, wie in diesem Abschnitt beschrieben.

gcloud

Verwenden Sie den compute instances network-interfaces update Befehl, um die IGMP-Abfrage für eine vorhandene ULL-Instanz zu aktivieren.

Wiederholen Sie den folgenden Befehl für jede Netzwerkschnittstelle, die Multicast-Traffic empfangen soll.

gcloud compute instances network-interfaces update INSTANCE_NAME \
    --zone=ZONE \
    --network-interface=NETWORK_INTERFACE_NAME \
    --igmp-query=IGMP_QUERY_V2

Ersetzen Sie die folgenden Werte:

  • INSTANCE_NAME: der Name der Instanz
  • ZONE: die Zone der Instanz
  • NETWORK_INTERFACE_NAME: der Name der Netzwerkschnittstelle, für die die IGMP-Abfrage aktiviert werden soll. In Google Cloudist das Format nicNUMBER, z. B. nic0, nic1, oder nic2.

IGMPv2 im Gastbetriebssystem festlegen

So legen Sie IGMPv2 im Gastbetriebssystem Ihrer Instanz fest:

  1. Stellen Sie eine Verbindung zur Instanz her indem Sie SSH verwenden.

  2. Führen Sie den folgenden Befehl aus und ermitteln Sie die Gerätenamen der Netzwerkschnittstellen, die Multicast-Traffic empfangen sollen.

    sudo ifconfig
    
  3. Führen Sie für jede entsprechende Netzwerkschnittstelle den folgenden Befehl aus, um IGMPv2 zu erzwingen.

    sudo -i
    echo "2" > /proc/sys/net/ipv4/conf/NETWORK_INTERFACE_DEVICE_NAME/force_igmp_version
    

    Ersetzen Sie NETWORK_INTERFACE_DEVICE_NAME durch den Gerätenamen der Netzwerkschnittstelle, z. B. eth0, eth1 oder eth2.

Reverse Path Filtering (rp_filter) konfigurieren

In einigen Fällen, z. B. bei Instanzen mit mehreren NICs, kann die strenge Quellvalidierung durch Reverse Path Filtering (rp-filter) dazu führen, dass legitime Multicast-Pakete verworfen werden. Um dies zu verhindern, können Sie Reverse Path Filtering so konfigurieren, dass die Quellvalidierung für Netzwerkschnittstellen, die nicht nic0 sind und Multicast-Traffic empfangen, gelockert oder deaktiviert wird. Mit den folgenden Befehlen wird beispielsweise Reverse Path Filtering so konfiguriert, dass die Quellvalidierung für eth1 und eth2 deaktiviert wird, indem rp_filter auf 0 gesetzt wird.

sudo sysctl -w net.ipv4.conf.all.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth1.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth2.rp_filter=0

Weitere Informationen zu rp_filter finden Sie unter IP Sysctl in der Linux Kernel-Dokumentation.

Ringpuffergröße des Netzwerktreibers erhöhen

In diesem Abschnitt wird beschrieben, wie Sie die Ringpuffergröße des Netzwerktreibers auf Ihrer Instanz erhöhen.

Erhöhen Sie für Multicast-Consumer, die viel Traffic empfangen, die Ringpuffergröße des Netzwerktreibers auf 2048, um Paketverluste zu vermeiden. Tun Sie dies für jede Netzwerkschnittstelle, die Multicast-Traffic empfängt.

Die folgenden Beispielbefehle konfigurieren nic1 und nic2:

sudo ethtool -G eth1 rx 2048 tx 2048
sudo ethtool -G eth2 rx 2048 tx 2048

Beispielbefehle zum Testen der ULL-Multicast-Verbindung

In diesem Abschnitt finden Sie Beispielbefehle zum Testen von Multicast-Traffic, ohne eine Anwendungslast zu starten, indem Sie das iperf Tool verwenden. Für die Schritte in diesem Abschnitt muss die in der Konfigurationsübersicht für die Lösung mit extrem niedriger Latenz beschriebene Multicast-Konfiguration abgeschlossen sein.

ULL-Multicast-Traffic von einem Multicast-Producer senden

  1. Stellen Sie eine Verbindung zur Instanz her indem Sie SSH verwenden.

  2. Installieren Sie iperf, falls noch nicht geschehen. iperf3 unterstützt Multicast nicht. Der folgende Befehl verwendet iperf, wodurch iperf2 installiert wird.

    sudo yum install iperf
    
  3. Führen Sie den folgenden Befehl aus, um Multicast-Traffic an die IP-Adresse der Multicast-Gruppe zu senden:

    iperf -c MULTICAST_GROUP_ADDRESS%NIC -p 1234 -l 512 -i 1 -u -b 1000pps -t 999999 -B NIC_IP_ADDRESS
    

    Ersetzen Sie die folgenden Werte:

    • MULTICAST_GROUP_ADDRESS: die IP-Adresse der Multicast-Gruppe
    • NIC : der Gerätename der Netzwerkschnittstelle, z. B. eth1 oder eth2
    • NIC_IP_ADDRESS : die IP-Adresse, die der angegebenen NIC zugewiesen ist

Einer Gruppe beitreten und ULL-Multicast-Traffic von einem Multicast-Consumer empfangen

  1. Stellen Sie eine Verbindung zur Instanz her indem Sie SSH verwenden.

  2. Installieren Sie iperf, falls noch nicht geschehen.

    sudo yum install iperf
    
  3. Führen Sie den folgenden Befehl aus, um einer Multicast-Gruppe beizutreten und den empfangenen Traffic zu protokollieren:

    iperf -s -p 1234 -B MULTICAST_GROUP_ADDRESS%NIC -l 512 -u -i 1
    

    Ersetzen Sie die folgenden Werte:

    • MULTICAST_GROUP_ADDRESS : die IP-Adresse der Multicast-Gruppe
    • NIC : der Gerätename der Netzwerkschnittstelle, z. B. eth1 oder eth2

    Mit dem folgenden Befehl wird beispielsweise einer Gruppe mit der IP-Adresse 224.1.0.176 beigetreten, um Pakete mit bis zu 512 Byte zu empfangen, und der empfangene Traffic wird protokolliert:

    iperf -s -p 1234 -B 224.1.0.176%eth1 -l 512 -u -i 1
    

Auf den ULL-Netzwerkschnittstellen Ihrer Instanz zeigt ethtool den tatsächlichen Status der physischen Portverbindung (up/down) und die physischen Verbindungsgeschwindigkeiten an.

Führen Sie den folgenden Befehl aus, um den Status und die Geschwindigkeit der physischen Verbindung einer ULL-Netzwerkschnittstelle zu prüfen:

sudo ethtool NIC

Ersetzen Sie NIC durch den Namen der Netzwerkschnittstelle, die vom Gastbetriebssystem zugewiesen wurde, z. B. ens8f0 oder ens48f0.

Nächste Schritte

  • Allgemeine Informationen zur Fehlerbehebung bei der Netzwerkleistung für Bare Metal-Instanzen finden Sie in der Compute Engine-Dokumentation unter Fehlerbehebung bei der Netzwerkleistung. Sie können beispielsweise die CPU-Ruhemodusstatus deaktivieren, um die volle Netzwerkbandbreite zu erreichen.
  • Informationen zum Aktivieren von Busy Polling und zum Testen von Onload-Funktionen für Compute-Instanzen mit extrem niedriger Latenz finden Sie unter Mit Onload arbeiten.
  • Informationen zum Synchronisieren der Systemuhr Ihrer Instanz mit der physischen NIC-Uhr des Hostservers finden Sie unter Genaue Zeit konfigurieren.