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 für die ULL-Infrastruktur finden Sie unter Konfigurationsübersicht für die Lösung mit extrem niedriger Latenz.

Hinweis

Lesen Sie die folgenden Abschnitte, bevor Sie Compute Engine-Instanzen mit extrem niedriger Latenz erstellen.

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 einfügen.

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 Engine-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.

Konfigurationsübersicht für 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 Nicht-nic0-Schnittstellen für ULL-Unicast-Traffic 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. Eine Anleitung dazu finden Sie unter Mit Onload arbeiten.

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 ULL-Unicast und -Multicast erstellen.

Allgemeine Informationen zum Erstellen von Compute Engine-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.

Für die Netzwerkschnittstellen, die an ein VPC-Netzwerk mit extrem niedriger Latenz 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 verwendet werden 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=IMAGE_NAME \
    --maintenance-policy=TERMINATE \
    --network-interface=nic-type=NIC_TYPE,queue-count=QUEUES,network=GENERAL_PURPOSE_VPC_NETWORK,subnet=GENERAL_PURPOSE_SUBNET \
    --network-interface=nic-type=NIC_TYPE,queue-count=QUEUES,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_1,no-address,igmp-query=IGMP_QUERY_V2 \
    --network-interface=nic-type=NIC_TYPE,queue-count=QUEUES,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. Verwenden Sie für Tests während der Vorschau das von Google bereitgestellte Image-Projekt. Informationen zur Betriebssystemunterstützung für U4-Maschinentypen
  • IMAGE_NAME: der Name des Images. Verwenden Sie für Tests während der Vorschau das von Google bereitgestellte Image. Informationen zur Betriebssystemunterstützung für U4-Maschinentypen

  • NIC_TYPE: der zu verwendende Netzwerkschnittstellentyp. Verwenden Sie den unterstützten Netzwerkschnittstellentyp für die jeweilige Zone, in der Sie Ihre Instanz erstellen:

    • Geben Sie für us-south1-d IDPF an.
    • Geben Sie für us-south1-e GVNIC an.
  • QUEUES: die Anzahl der Empfangs- und Übertragungswarteschlangen für die Verarbeitung von Paketen aus dem Netzwerk:

    • Für GVNIC müssen Sie das Feld queue-count einfügen und für die XDP-Unterstützung den Wert 32 angeben.
    • Lassen Sie für IDPF queue-count=QUEUES im Befehl weg.
  • GENERAL_PURPOSE_VPC_NETWORK, GENERAL_PURPOSE_SUBNET: das VPC-Netzwerk und das Subnetz, an das die nic0-Schnittstelle der Instanz angehängt werden soll

  • ULL_VPC_NETWORK: das VPC-Netzwerk mit extrem niedriger Latenz, an das die Nicht-nic0-Schnittstellen angehängt werden sollen

    • ULL_SUBNET_1: das Subnetz im VPC-Netzwerk mit extrem niedriger Latenz, an das die nic1-Schnittstelle angehängt werden soll

    • ULL_SUBNET_2: das Subnetz im VPC-Netzwerk mit extrem niedriger Latenz, an das die nic2-Schnittstelle angehängt werden soll

Routing für die Nicht-nic0-Schnittstellen für ULL-Unicast-Traffic konfigurieren

Standardmäßig verwendet eine Instanz die Standardroute, die mit ihrer 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 ULL-Unicast-Traffic 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, ihn über nic0 zu senden.

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 mit SSH eine Verbindung zur Instanz her.

  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-Filterung (rp_filter) konfigurieren

In einigen Fällen, z. B. bei Instanzen mit mehreren NICs, kann die strenge Quellvalidierung durch die Reverse-Path-Filterung (rp-filter) dazu führen, dass legitime Multicast-Pakete verworfen werden. Um dies zu verhindern, können Sie die Reverse-Path-Filterung so konfigurieren, dass die Quellvalidierung für Nicht-nic0-Netzwerkschnittstellen, die Multicast-Traffic empfangen, gelockert oder deaktiviert wird. Mit den folgenden Befehlen wird beispielsweise die Reverse-Path-Filterung 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. Führen Sie diesen Schritt für jede Netzwerkschnittstelle aus, die Multicast-Traffic empfängt.

Hier sind Beispielbefehle, mit denen nic1 und nic2 konfiguriert werden:

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. Verwenden Sie dazu das iperf Tool. 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 mit SSH eine Verbindung zur Instanz her.

  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 mit SSH eine Verbindung zur Instanz her.

  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
    

Nächste Schritte

  • Informationen zum Aktivieren von Busy Polling und zum Testen von Onload-Funktionen für Compute Engine-Instanzen mit extrem niedriger Latenz finden Sie unter Mit Onload arbeiten.
  • Informationen zum Synchronisieren der Systemuhr Ihrer Instanz mit der Uhr der physischen NIC ihres Hostservers finden Sie unter Genaue Zeit konfigurieren.