Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
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-NetAdapterRssist RSS nicht aktiviert.Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : FalseGeben 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.
Bestätigen Sie, dass RSS auf dem virtuellen Computer aktiviert ist, indem Sie den Befehl
Get-NetAdapterRsserneut 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.confhinzu.
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.confhinzu:
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.confhinzu:
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.rulesum 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/irqbalanceaktualisieren, 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.
Zugehöriger Inhalt
- Stellen Sie VMs in der Nähe zueinander für geringe Latenz mit einer Näherungsplatzierungsgruppe bereit.
- Sehen Sie sich das optimierte Ergebnis an, indem Sie die Bandbreite bzw. den Durchsatz für Ihr Szenario testen.
- Lesen Sie mehr über die Zuweisung von Bandbreite zu virtuellen Computern.
- Weitere Informationen finden Sie unter Azure Virtual Network – häufig gestellte Fragen.