Sdílet prostřednictvím


Optimalizace propustnosti sítě pro virtuální počítače Azure

Virtuální počítače Azure mají výchozí nastavení sítě, která je možné dále optimalizovat pro propustnost sítě. Tento článek popisuje, jak optimalizovat propustnost sítě pro virtuální počítače s Windows a Linuxem, včetně hlavních distribucí, jako je Ubuntu a Red Hat.

Virtuální počítače s Windows

Pokud váš virtuální počítač s Windows podporuje akcelerované síťové služby, povolte tuto funkci pro zajištění optimální propustnosti. Další informace najdete v tématu Vytvoření virtuálního počítače s Windows s akcelerovanými síťovými službami.

U všech ostatních virtuálních počítačů s Windows může použití škálování na straně příjmu (RSS) dosáhnout vyšší maximální propustnosti než virtuální počítač bez rss. Rss může být ve výchozím nastavení na virtuálním počítači s Windows zakázané. Pokud chcete zkontrolovat, jestli je technologie RSS povolená, a povolte ji, postupujte takto:

  1. Pomocí příkazu Get-NetAdapterRss PowerShell zjistěte, jestli je pro síťový adaptér povolený rss. V následujícím příkladu není výstup vrácený z Get-NetAdapterRss rss povolený.

    Name                    : Ethernet
    InterfaceDescription    : Microsoft Hyper-V Network Adapter
    Enabled                 : False
    
  2. Pokud chcete povolit rss, zadejte následující příkaz:

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

    Tento příkaz nemá výstup. Příkaz změní nastavení síťové karty (NIC). Způsobuje dočasnou ztrátu připojení přibližně jednu minutu. Během ztráty připojení se zobrazí dialogové okno Opětovné připojení . Připojení se obvykle obnoví po třetím pokusu.

  3. Zadáním příkazu znovu potvrďte, že je na virtuálním Get-NetAdapterRss počítači povolená technologie RSS. V případě úspěchu se vrátí následující příklad výstupu:

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

Virtuální počítače s Linuxem

Technologie RSS je ve výchozím nastavení povolená na virtuálním počítači s Linuxem v Azure. Linuxová jádra vydaná od října 2017 zahrnují nové možnosti optimalizace sítě, které umožňují virtuálnímu počítači s Linuxem dosáhnout vyšší propustnosti sítě.

Povolení akcelerovaných síťových služeb Azure pro optimální propustnost

Azure poskytuje akcelerované síťové služby, které můžou skutečně zlepšit výkon sítě, latenci a zpoždění. V současné době existují dvě různé technologie, které se používají v závislosti na velikosti virtuálního počítače, Mellanox , která je dostupná a mana , kterou vyvíjí Microsoft.

Optimalizovaná jádra Azure

Některé distribuce, jako je Ubuntu (Canonical) a SUSE, mají jádra vyladěná v Azure.

Pomocí následujícího příkazu se ujistěte, že používáte jádro Azure, které má obvykle azure řetězec v pojmenování.

uname -r

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

Další linuxové distribuce

Většina moderních distribucí má významná zlepšení díky použití novějších jader. Zkontrolujte aktuální verzi jádra a ujistěte se, že používáte jádro, které je novější než 4.19, což zahrnuje několik skvělých vylepšení v síťování, například podporu BBR Congestion-Based řízení přetížení.

Dosažení konzistentní přenosové rychlosti na virtuálních počítačích s Linuxem v Azure

U virtuálních počítačů s Linuxem často dochází k problémům s výkonem sítě, zejména při přenosu velkých souborů (1 GB na 50 GB) mezi oblastmi, jako je západní Evropa a USA – západ. Příčinou těchto problémů jsou starší verze jádra a také výchozí konfigurace jádra, výchozí nastavení vyrovnávací paměti sítě a výchozí algoritmy řízení zahlcení, což vede ke zpožděným paketům, omezené propustnosti a neefektivnímu využití prostředků.

Pokud chcete dosáhnout konzistentního výkonu sítě, zvažte implementaci následujících optimalizací, které se v mnoha situacích v Azure osvědčily:

  • Nastavení vyrovnávací paměti sítě: Upravte parametry jádra, aby se maximalizovaly vyrovnávací paměti pro čtení a zápis. Přidejte tyto konfigurace do /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 Řízení zahlcení pro jádra 4.19 a vyšší: Povolení řízení zahlcení BBR (šířka pásma úzkého místa a doba šíření zpáteční cesty) může často vést k lepší propustnosti. Přidejte tuto konfiguraci do /etc/sysctl.d/99-azure-congestion-control.conf:
net.ipv4.tcp_congestion_control = bbr 
  • Další parametry PROTOKOLU TCP, které obvykle pomůžou s lepší konzistencí, propustností: Přidejte tyto konfigurace do /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
  • Disciplína fronty (qdisc): Zpracování paketů v Azure se vylepšuje nastavením výchozí disciplíny fronty (qdisc) na fq. Přidejte tuto konfiguraci do /etc/sysctl.d/99-azure-qdisc.conf:
net.core.default_qdisc = fq 
  • Optimalizovat vyrovnávací paměti okruhu síťových adaptérů pro TX/RX: Vytvořte pravidlo udev v /etc/udev/rules.d/99-azure-ring-buffer.rules, k zajištění jejich použití na síťových rozhraních.
# 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"
  • Vytvořte pravidlo udev v /etc/udev/rules.d/99-azure-qdisc.rules, abyste zajistili použití qdisc na síťová rozhraní:
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“ 
  • Plánování žádostí o přerušení (IRQ): V závislosti na vaší úloze možná budete chtít omezit službu irqbalance, aby nezpracovávala IRQ na určitých uzlech. Při použití IRQBalance můžete aktualizovat /etc/default/irqbalance, abyste určili, které procesory by neměly mít naplánované IRQ. Je nutné určit masku, která vyloučí dané procesory.

Další informace o tom, jak vypočítat masku, jsou k dispozici zde.

Následující příklad předpokládá, že chcete vyloučit procesory 8-15.

IRQBALANCE_BANNED_CPULIST=0000ff00
  • Pravidla UDEV: Přidejte pravidla pro optimalizaci délky fronty a efektivní správu příznaků zařízení. Vytvořte následující pravidlo v /etc/udev/rules.d/99-azure-txqueue-len.rules:
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="eth*", ATTR{tx_queue_len}="10000“ 

Pro pakety zpožděné dvakrát

Pokud jde o síťový výkon Linuxu, používáme SR-IOV s ovladači Mellanox (mlx4 nebo mlx5). Pro Azure je specifické, že tímto vznikají dvě rozhraní: syntetické a virtuální. Další informace

Další poznámky

Správci systému mohou tato řešení implementovat úpravou konfiguračních souborů, jako jsou /etc/sysctl.d/, /etc/modules-load.d/ a /etc/udev/rules.d/. Ujistěte se, že aktualizace ovladačů jádra a konfigurace systemd jsou zkontrolovány na potenciální regrese.

Další informace o konkrétních konfiguracích a řešení potíží najdete v dokumentaci k Azure o výkonu sítě.