Aracılığıyla paylaş


Azure sanal makineleri için ağ aktarım hızını iyileştirme

Azure sanal makinelerinin (VM) ağ aktarım hızı için daha iyi hale getirilebilen varsayılan ağ ayarları vardır. Bu makalede Ubuntu ve Red Hat gibi büyük dağıtımlar dahil olmak üzere Windows ve Linux VM'leri için ağ aktarım hızının nasıl iyileştirilmeye başlandığı açıklanır.

Windows sanal makineleri

Windows VM'niz hızlandırılmış ağı destekliyorsa, en iyi aktarım hızı için bu özelliği etkinleştirin. Daha fazla bilgi için bkz . Hızlandırılmış ağ ile Windows VM oluşturma.

Diğer tüm Windows VM'leri için Alma Tarafı Ölçeklendirmesi (RSS) kullanmak RSS içermeyen bir VM'den daha yüksek maksimum aktarım hızına ulaşabilir. RSS bir Windows VM'de varsayılan olarak devre dışı bırakılmış olabilir. RSS'nin etkinleştirilip etkinleştirilmediğini denetlemek ve etkinleştirmek için şu adımları izleyin:

  1. Get-NetAdapterRss PowerShell komutuyla bir ağ bağdaştırıcısı için RSS'nin etkinleştirilip etkinleştirilmediğini görün. Aşağıdaki örnekte, RSS'den Get-NetAdapterRss döndürülen çıkış etkinleştirilmedi.

    Name                    : Ethernet
    InterfaceDescription    : Microsoft Hyper-V Network Adapter
    Enabled                 : False
    
  2. RSS'yi etkinleştirmek için aşağıdaki komutu girin:

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

    Bu komutun çıkışı yok. Komut, ağ arabirimi kartı (NIC) ayarlarını değiştirir. Yaklaşık bir dakika boyunca geçici bağlantı kaybına neden olur. Bağlantı kaybı sırasında Yeniden Bağlanma iletişim kutusu görüntülenir. Bağlantı genellikle üçüncü denemeden sonra geri yüklenir.

  3. Komutunu yeniden girerek VM'de RSS'nin Get-NetAdapterRss etkinleştirildiğini onaylayın. Başarılı olursa aşağıdaki örnek çıkış döndürülür:

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

Linux sanal makineleri

RSS, Azure'daki bir Linux Sanal Makinesinde (VM) her zaman varsayılan olarak etkinleştirilir. Ekim 2017'den bu yana yayımlanan Linux çekirdekleri, Linux VM'lerinin daha yüksek ağ aktarım hızı elde etmelerini sağlayan yeni ağ iyileştirme seçenekleri içerir.

En iyi aktarım hızı için Azure Hızlandırılmış Ağ'ı etkinleştirme

Azure, ağ performansını, gecikme süresini ve değişim durumunu gerçekten geliştirebilen hızlandırılmış ağ sağlar. Şu anda sanal makine boyutuna bağlı olarak kullanılan iki farklı teknoloji vardır: Geniş kullanılabilir Mellanox ve Microsoft tarafından geliştirilen MANA .

Azure Ayarlanmış Çekirdekler

Ubuntu (Canonical) ve SUSE gibi bazı dağıtımlarda Azure tarafından ayarlanmış çekirdekler bulunur.

Azure çekirdeğini kullandığınızdan emin olmak için, genellikle adında azure dizesi bulunan, aşağıdaki komutu kullanın.

uname -r

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

Diğer Linux dağıtımları

Modern dağıtımların çoğunda yeni çekirdeklerle ilgili önemli geliştirmeler vardır. 4.19'dan yeni bir çekirdek çalıştırdığınızdan emin olmak için geçerli çekirdek sürümünü denetleyin. Bu çekirdek ağ üzerinde bazı büyük geliştirmeler içerir, örneğin BBR Congestion-Based Tıkanıklık Denetimi desteği.

Azure'da Linux VM'lerinde tutarlı aktarım hızları elde etme

Linux VM'leri genellikle özellikle Batı Avrupa ve Batı ABD gibi bölgeler arasında büyük dosyaları (1 GB ila 50 GB) aktarırken ağ performansı sorunlarıyla karşılaşır. Bu sorunlara eski çekirdek sürümlerinin yanı sıra varsayılan çekirdek yapılandırmaları, varsayılan ağ arabelleği ayarları ve gecikmeli paketler, sınırlı aktarım hızı ve verimsiz kaynak kullanımına neden olan varsayılan tıkanıklık denetimi algoritmaları neden olur.

Tutarlı ağ performansı elde etmek için Azure'da birçok durumda etkili olduğu kanıtlanmış aşağıdaki iyileştirmeleri uygulamayı göz önünde bulundurun:

  • Ağ arabelleği ayarları: Okuma ve yazma bellek arabelleklerini en üst düzeye çıkarmak için çekirdek parametrelerini ayarlayın. Bu yapılandırmaları /etc/sysctl.d/99-azure-network-buffers.conf içine ekleyin.
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
  • 4.19 ve üzeri çekirdekler içinCongestion-Based Tıkanıklık denetimi: Darboğaz Bant Genişliği ve Gidiş dönüş yayılma süresi (BBR) tıkanıklık denetiminin etkinleştirilmesi genellikle daha iyi verime neden olabilir. Bu yapılandırmayı /etc/sysctl.d/99-azure-congestion-control.conf içine ekleyin.
net.ipv4.tcp_congestion_control = bbr 
  • Genellikle daha iyi tutarlılık ve aktarım hızına yardımcı olacak ek TCP parametreleri: Bu yapılandırmaları öğesine /etc/sysctl.d/99-azure-network-extras.confekleyin:
# 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
  • Kuyruk uzmanlık alanı (qdisc): Azure'da paket işleme, varsayılan qdisc fqolarak ayarlanarak geliştirildi. Bu yapılandırmayı /etc/sysctl.d/99-azure-qdisc.conf içine ekleyin.
net.core.default_qdisc = fq 
  • NIC halkası arabelleklerini TX/RX için iyileştirme: Ağ arabirimlerine uygulandığından emin olmak için içinde /etc/udev/rules.d/99-azure-ring-buffer.rules bir udev kuralı oluşturun:
# 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"
  • qdisc'nin ağ arabirimlerine uygulandığından emin olmak için içinde /etc/udev/rules.d/99-azure-qdisc.rules bir udev kuralı oluşturun:
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“ 
  • Kesme İsteği (IRQ) zamanlaması: İş yükünüze bağlı olarak, irqbalance hizmetinin belirli düğümlerde IRQ'ları planlamasını kısıtlamak isteyebilirsiniz. IRQBalance kullanırken, hangi CPU'lara IRQ atanmaması gerektiğini belirleyecek şekilde /etc/default/irqbalance'i güncelleyebilirsiniz. Dışlanması gereken CPU'ları dışlayacak maskeyi belirlemeniz gerekir.

Maske hesaplama hakkında daha fazla bilgi burada mevcuttur.

Aşağıdaki örnekte 8-15 ARASı CPU'ları dışlamak istediğiniz varsayılır

IRQBALANCE_BANNED_CPULIST=0000ff00
  • UDEV kuralları: Kuyruk uzunluğunu iyileştirmek ve cihaz bayraklarını verimli bir şekilde yönetmek için kurallar ekleyin. içinde /etc/udev/rules.d/99-azure-txqueue-len.rulesaşağıdaki kuralı oluşturun:
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="eth*", ATTR{tx_queue_len}="10000“ 

İki kez geciken paketler için

Linux performans ağı söz konusu olduğunda SR-IOV Mellanox sürücüleriyle (mlx4 veya mlx5) kullanırız. Azure'a özgü bir şey, bunun yapay ve sanal arabirim olmak üzere iki arabirim oluşturmasıdır. Daha fazla bilgi edinin.

Ek Notlar

Sistem yöneticileri, , /etc/sysctl.d/ve /etc/modules-load.d/gibi /etc/udev/rules.d/yapılandırma dosyalarını düzenleyerek bu çözümleri uygulayabilir. Çekirdek sürücüsü güncelleştirmelerinin ve sistemli yapılandırmaların olası regresyonlar için gözden geçirildiğinden emin olun.

Belirli yapılandırmalar ve sorun giderme hakkında daha fazla bilgi için ağ performansıyla ilgili Azure belgelerine bakın.

  • Yakınlık yerleştirme gruplarıyla düşük gecikme süresi için VM'leri birbirine yakın dağıtın.
  • Senaryonuz için Bant Genişliği/Aktarım Hızı testi ile en iyi duruma getirilmiş sonucu görün.
  • Bant genişliğinin sanal makinelere nasıl ayrıldığı hakkında bilgi edinin.
  • Azure Sanal Ağ sık sorulan sorular hakkında daha fazla bilgi edinin.