Dela via


Optimera nätverkets dataflöde för virtuella Azure-datorer

Virtuella Azure-datorer (VM) har standardinställningar för nätverk som kan optimeras ytterligare för nätverkets dataflöde. Den här artikeln beskriver hur du optimerar nätverkets dataflöde för virtuella Windows- och Linux-datorer, inklusive större distributioner som Ubuntu och Red Hat.

Virtuella Windows-datorer

Om den virtuella Windows-datorn stöder accelererat nätverk aktiverar du den funktionen för optimalt dataflöde. Mer information finns i Skapa en virtuell Windows-dator med accelererat nätverk.

För alla andra virtuella Windows-datorer kan användning av RSS (Receive Side Scaling) nå högre maximalt dataflöde än en virtuell dator utan RSS. RSS kan inaktiveras som standard på en virtuell Windows-dator. Följ dessa steg för att kontrollera om RSS är aktiverat och aktivera det:

  1. Se om RSS är aktiverat för ett nätverkskort med PowerShell-kommandot Get-NetAdapterRss . I följande exempel är utdata som returneras från Get-NetAdapterRss RSS inte aktiverat.

    Name                    : Ethernet
    InterfaceDescription    : Microsoft Hyper-V Network Adapter
    Enabled                 : False
    
  2. Om du vill aktivera RSS anger du följande kommando:

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

    Det här kommandot har inte några utdata. Kommandot ändrar inställningarna för nätverkskort (NIC). Det orsakar tillfällig anslutningsförlust i ungefär en minut. En dialogruta för återanslutning visas under anslutningsförlusten. Anslutningen återställs vanligtvis efter det tredje försöket.

  3. Bekräfta att RSS är aktiverat på den virtuella datorn genom att ange Get-NetAdapterRss kommandot igen. Om det lyckas returneras följande exempelutdata:

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

Virtuella Linux-datorer

RSS är alltid aktiverat som standard på en virtuell Linux-dator (VM) i Azure. Linux-kernels som släppts sedan oktober 2017 innehåller nya alternativ för nätverksoptimering som gör det möjligt för en virtuell Linux-dator att uppnå högre nätverksdataflöde.

Aktivera Azure Accelerated Networking för optimalt dataflöde

Azure tillhandahåller accelererade nätverk som verkligen kan förbättra nätverksprestanda, svarstid, jitter. Det finns för närvarande två olika tekniker som används beroende på storleken på den virtuella datorn, Mellanox som är bred tillgänglig och MANA som har utvecklats av Microsoft.

Azure anpassade kärnor

Vissa distributioner som Ubuntu (Canonical) och SUSE har Azure-finjusterade kernels.

Använd följande kommando för att se till att du använder Azure-kerneln, som vanligtvis har strängen azure i namngivningen.

uname -r

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

Andra Linux-distributioner

De flesta moderna distributioner har betydande förbättringar med nyare kärnor. Kontrollera den aktuella kernelversionen för att se till att du kör en kernel som är nyare än 4.19, vilket innehåller några bra förbättringar i nätverk, till exempel stöd för BBR-Congestion-Based överbelastningskontroll.

Uppnå konsekventa överföringshastigheter i virtuella Linux-datorer i Azure

Virtuella Linux-datorer har ofta problem med nätverksprestanda, särskilt vid överföring av stora filer (1 GB till 50 GB) mellan regioner, till exempel Västeuropa och västra USA. Dessa problem orsakas av äldre kernelversioner samt standardkonfigurationer av kernel, standardinställningar för nätverksbuffert och standardalgoritmer för överbelastningskontroll, vilket resulterar i fördröjda paket, begränsat dataflöde och ineffektiv resursanvändning.

För att få konsekventa nätverksprestanda bör du överväga att implementera följande optimeringar som har visat sig vara effektiva i många situationer i Azure:

  • Inställningar för nätverksbuffert: Justera kernelparametrar för att maximera läs- och skrivminnesbuffertar. Lägg till dessa konfigurationer i /etc/sysctl.d/99-azure-network-buffers.conf:
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 Överbelastningskontroll för kernels 4.19 och senare: Att aktivera överbelastningskontroll med Bottleneck Bandwidth och Round-trip Propagation Time (BBR) kan ofta leda till bättre genomströmning. Lägg till den här konfigurationen i /etc/sysctl.d/99-azure-congestion-control.conf:
net.ipv4.tcp_congestion_control = bbr 
  • Extra TCP-parametrar som vanligtvis hjälper till med förbättrad konsekvens och genomströmning: Lägg till dessa konfigurationer i /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
  • Ködiciplin (qdisc): Paketbearbetning i Azure förbättras genom att standard-qdisc anges till fq. Lägg till den här konfigurationen i /etc/sysctl.d/99-azure-qdisc.conf:
net.core.default_qdisc = fq 
  • Optimera NIC-ringbuffertar för TX/RX: Skapa en udev-regel för /etc/udev/rules.d/99-azure-ring-buffer.rules att säkerställa att de tillämpas på nätverksgränssnitt:
# 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"
  • Skapa en udev-regel i /etc/udev/rules.d/99-azure-qdisc.rules för att säkerställa att qdisc tillämpas på nätverksgränssnitt:
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“ 
  • Schemaläggning av avbrottsbegäran (IRQ): Beroende på din arbetsbelastning kanske du vill begränsa irqbalance-tjänsten från att schemalägga IRQ:er på vissa noder. När du använder IRQBalance kan du uppdatera /etc/default/irqbalance för att ange vilka processorer som inte ska ha schemalagda IRQ:er. Du måste fastställa masken som utesluter de processorer som behöver exkluderas.

Mer information om hur man beräknar masken finns här.

Exemplet nedan förutsätter att du vill exkludera processorer 8–15

IRQBALANCE_BANNED_CPULIST=0000ff00
  • UDEV-regler: Lägg till regler för att optimera kölängden och hantera enhetsflaggor effektivt. Skapa följande regel i /etc/udev/rules.d/99-azure-txqueue-len.rules:
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="eth*", ATTR{tx_queue_len}="10000“ 

För paket som fördröjs två gånger

När det gäller Linux-prestandanätverk använder vi SR-IOV med Mellanox-drivrutiner (mlx4 eller mlx5), något som är specifikt för Azure är att detta skapar två gränssnitt som ett syntetiskt och ett virtuellt gränssnitt. Läs mer.

Ytterligare anteckningar

Systemadministratörer kan implementera dessa lösningar genom att redigera konfigurationsfiler som /etc/sysctl.d/, /etc/modules-load.d/och /etc/udev/rules.d/. Kontrollera att kerneldrivrutinsuppdateringar och systemkonfigurationer granskas för potentiella regressioner.

Mer information om specifika konfigurationer och felsökning finns i Azure-dokumentationen om nätverksprestanda.