Freigeben über


Optimieren des Netzwerkdurchsatzes für virtuelle Azure-Computer

Virtuelle Azure-Computer (VMs) weisen standardmäßige Netzwerkeinstellungen auf, die zur Steigerung des Netzwerkdurchsatzes weiter optimiert werden können. Dieser Artikel beschreibt die Optimierung des Netzwerkdurchsatzes für Windows- und Linux-VMs, einschließlich der wichtigsten Distributionen wie etwa Ubuntu und Red Hat.

Virtuelle Windows-Computer

Wenn Ihre Windows-VM beschleunigten Netzwerkbetrieb unterstützt, aktivieren Sie dieses Feature, um einen optimalen Durchsatz zu erzielen. Weitere Informationen finden Sie unter Erstellen eines virtuellen Windows-Computers mit beschleunigtem Netzwerkbetrieb.

Alle anderen virtuellen Windows-Computer, die die empfangsseitige Skalierung (Receive Side Scaling; RSS) verwenden, können einen höheren maximalen Durchsatz als ein virtueller Computer ohne RSS erreichen. RSS kann auf virtuellen Windows-Computern standardmäßig deaktiviert sein. Führen Sie die folgenden Schritte aus, um zu überprüfen, ob RSS aktiviert ist und es bei Bedarf zu aktivieren:

  1. Geben Sie den PowerShell-Befehl Get-NetAdapterRss ein, um zu ermitteln, ob RSS für einen Netzwerkadapter aktiviert ist. In der folgenden Beispielausgabe von Get-NetAdapterRss ist RSS nicht aktiviert.

    Name                    : Ethernet
    InterfaceDescription    : Microsoft Hyper-V Network Adapter
    Enabled                 : False
    
  2. Geben Sie den folgenden Befehl ein, um RSS zu aktivieren:

    Get-NetAdapter | % {Enable-NetAdapterRss -Name $_.Name}
    

    Dieser Befehl liefert keine Ausgabe. Der Befehl ändert die Einstellungen der Netzwerkschnittstellenkarte (Network Interface Card, NIC). Dies verursacht einen vorübergehenden Konnektivitätsverlust für etwa eine Minute. Während des Konnektivitätsverlusts wird das Dialogfeld Verbindung wird wiederhergestellt angezeigt. In der Regel ist die Konnektivität nach dem dritten Versuch wiederhergestellt.

  3. Bestätigen Sie, dass RSS auf dem virtuellen Computer aktiviert ist, indem Sie den Befehl Get-NetAdapterRss erneut eingeben. Bei Erfolg wird die folgende Beispielausgabe zurückgegeben:

    Name                    : Ethernet
    InterfaceDescription    : Microsoft Hyper-V Network Adapter
    Enabled                 : True
    

Virtuelle Linux-Computer

RSS ist standardmäßig in einem virtuellen Linux-Computer (VM) in Azure aktiviert. Linux-Kernel, die seit Oktober 2017 veröffentlicht wurden, enthalten neue Netzwerkoptimierungsoptionen, die einem virtuellen Linux-Computer einen höheren Netzwerkdurchsatz ermöglichen.

Aktivieren von Azure Accelerated Networking für optimalen Durchsatz

Azure bietet beschleunigte Netzwerke, die die Netzwerkleistung, Latenz, Jitter wirklich verbessern können. Es gibt derzeit zwei verschiedene Technologien, die je nach Größe des virtuellen Computers verwendet werden, Mellanox , das breit verfügbar ist und MANA , das von Microsoft entwickelt wird.

Optimierte Azure-Kernel

Einige Verteilungen wie Ubuntu (Canonical) und SUSE haben für Azure optimierte Kernel.

Verwenden Sie den folgenden Befehl, um sicherzustellen, dass Sie den Azure-Kernel verwenden, der in der Regel die azure Zeichenfolge in der Benennung enthält.

uname -r

#sample output on Azure kernel on a Ubuntu Linux VM
6.8.0-1017-azure

Andere Linux-Distributionen

Die meisten modernen Distributionen haben signifikante Verbesserungen mit neueren Kerneln. Überprüfen Sie die aktuelle Kernelversion, um sicherzustellen, dass Sie einen Kernel ausführen, der neuer als 4.19 ist. Dies umfasst einige großartige Verbesserungen bei der Netzwerkverbindung, z. B. unterstützung für die BBR-Congestion-Based Überlastungskontrolle.

Erzielen konsistenter Übertragungsgeschwindigkeiten in Linux-VMs in Azure

Linux-VMs treten häufig Probleme mit der Netzwerkleistung auf, insbesondere bei der Übertragung großer Dateien (1 GB auf 50 GB) zwischen Regionen wie Westeuropa und West-USA. Diese Probleme werden durch ältere Kernelversionen sowie standard kernelkonfigurationen, Standardnetzwerkpuffereinstellungen und Standardmäßige Überlastungssteuerungsalgorithmen verursacht, die zu verzögerten Paketen, eingeschränktem Durchsatz und ineffizienter Ressourcennutzung führen.

Um eine konsistente Netzwerkleistung zu erzielen, sollten Sie die folgenden Optimierungen implementieren, die in vielen Situationen in Azure als effektiv erwiesen sind:

  • Netzwerkpuffereinstellungen: Passen Sie Kernelparameter an, um Lese- und Schreibspeicherpuffer zu maximieren. Fügen Sie diese Konfigurationen zu /etc/sysctl.d/99-azure-network-buffers.conf hinzu.
net.ipv4.tcp_mem = 4096 87380 67108864
net.ipv4.udp_mem = 4096 87380 33554432
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.core.rmem_default = 33554432
net.core.wmem_default = 33554432
net.ipv4.udp_wmem_min = 16384
net.ipv4.udp_rmem_min = 16384
net.core.wmem_max = 134217728
net.core.rmem_max = 134217728
net.core.busy_poll = 50
net.core.busy_read = 50
  • Congestion-Based Überlastungssteuerung für Kernel 4.19 und höher: Die Aktivierung der BBR-Überlastungssteuerung (Bottleneck Bandwidth and Round-trip propagation time) kann häufig zu einem besseren Durchsatz führen. Fügen Sie diese Konfiguration zu /etc/sysctl.d/99-azure-congestion-control.conf hinzu:
net.ipv4.tcp_congestion_control = bbr 
  • Zusätzliche TCP-Parameter, die in der Regel bei besserer Konsistenz, Durchsatz helfen: Fügen Sie diese Konfigurationen hinzu:/etc/sysctl.d/99-azure-network-extras.conf
# For deployments where the Linux VM is BEHIND an Azure Load Balancer, timestamps MUST be set to 0
net.ipv4.tcp_timestamps = 1

# Reuse does require tcp_timestamps to be enabled. If tcp_timestamps are disabled because of load balancers, you should set reuse to 2.
net.ipv4.tcp_tw_reuse = 1

# Allowed local port range. This will increase the number of locally available ports (source ports)
net.ipv4.ip_local_port_range = 1024 65535

# Maximum number of packets taken from all interfaces in one polling cycle (NAPI poll). In one polling cycle interfaces which are # registered to polling are probed in a round-robin manner.
net.core.netdev_budget = 1000

# For high-performance environments, it's recommended to increase from the default 20KB to 65KB, in some extreme cases, for environments that support 100G+ networking, you can 
# increase it to 1048576
net.core.optmem_max = 65535

# F-RTO is not recommended on wired networks. 
net.ipv4.tcp_frto = 0

# Increase the number of incoming connections / number of connections backlog
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768
net.core.dev_weight = 64
  • Warteschlangendisziplin (qdisc): Die Paketverarbeitung in Azure wird verbessert, indem die Standard-qdisc auf "qdisc" fqfestgelegt wird. Fügen Sie diese Konfiguration zu /etc/sysctl.d/99-azure-qdisc.conf hinzu:
net.core.default_qdisc = fq 
  • Optimieren Sie NIC-Ringpuffer für TX/RX: Erstellen Sie eine udev-Regel, /etc/udev/rules.d/99-azure-ring-buffer.rules um sicherzustellen, dass sie auf Netzwerkschnittstellen angewendet werden:
# Setup Accelerated Interface ring buffers (Mellanox / Mana) 
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add",  RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 1024 tx 1024"

# Setup Synthetic interface ring buffers (hv_netvsc)
SUBSYSTEM=="net", DRIVERS=="hv_netvsc*", ACTION=="add",  RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 1024 tx 1024"
  • Erstellen Sie eine udev-Regel in /etc/udev/rules.d/99-azure-qdisc.rules, um sicherzustellen, dass die qdisc auf Netzwerkschnittstellen angewendet wird.
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="enP*", PROGRAM="/sbin/tc qdisc replace dev \$env{INTERFACE} root noqueue" 
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="eth*", PROGRAM="/sbin/tc qdisc replace dev \$env{INTERFACE} root fq“ 
  • Interrupt Request (IRQ)-Planung: Je nach Workload möchten Sie den Irqbalance-Dienst möglicherweise daran hindern, IRQs auf bestimmten Knoten zu planen. Bei Verwendung von IRQBalance können Sie /etc/default/irqbalance aktualisieren, um festzulegen, auf welchen CPUs keine IRQs geplant werden sollen. Dazu müssen Sie die Maske bestimmen, die die auszuschließenden CPUs umfasst.

Weitere Informationen zum Berechnen der hier verfügbaren Maske.

Im folgenden Beispiel wird davon ausgegangen, dass Sie CPUs 8-15 ausschließen möchten.

IRQBALANCE_BANNED_CPULIST=0000ff00
  • UDEV-Regeln: Fügen Sie Regeln hinzu, um die Warteschlangenlänge zu optimieren und Gerätekennzeichnungen effizient zu verwalten. Erstellen Sie die folgende Regel in /etc/udev/rules.d/99-azure-txqueue-len.rules:
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="eth*", ATTR{tx_queue_len}="10000“ 

Bei Paketen, die zweimal verzögert wurden

In Bezug auf Linux-Leistungsnetzwerke verwenden wir SR-IOV mit Mellanox-Treibern (mlx4 oder mlx5), was für Azure spezifisch ist, ist, dass dadurch zwei Schnittstellen eine synthetische und eine virtuelle Schnittstelle erstellt werden. Weitere Informationen.

Weitere Hinweise

Systemadministratoren können diese Lösungen implementieren, indem sie Konfigurationsdateien wie /etc/sysctl.d/, /etc/modules-load.d/ und /etc/udev/rules.d/ bearbeiten. Stellen Sie sicher, dass Kerneltreiberupdates und systemdierte Konfigurationen auf mögliche Regressionen überprüft werden.

Weitere Informationen zu bestimmten Konfigurationen und Zur Problembehandlung finden Sie in der Azure-Dokumentation zur Netzwerkleistung.