Bagikan melalui


Mengoptimalkan throughput jaringan untuk mesin virtual Azure

Komputer virtual (VM) Azure memiliki pengaturan jaringan default yang dapat dioptimalkan lebih lanjut untuk throughput jaringan. Artikel ini menjelaskan cara mengoptimalkan throughput jaringan untuk VM Windows dan Linux, termasuk distribusi utama seperti Ubuntu dan Red Hat.

Mesin virtual Windows

Jika VM Windows Anda mendukung jaringan yang dipercepat, aktifkan fitur tersebut untuk throughput yang optimal. Untuk informasi selengkapnya, lihat Membuat VM Windows dengan jaringan yang dipercepat.

Untuk semua VM Windows lainnya, penggunaan Receive Side Scaling (RSS) dapat mencapai throughput maksimal yang lebih tinggi daripada VM tanpa RSS. RSS mungkin dinonaktifkan secara default di VM Windows. Untuk memeriksa apakah RSS diaktifkan dan mengaktifkannya, ikuti langkah-langkah berikut:

  1. Lihat apakah RSS diaktifkan untuk adaptor jaringan dengan perintah PowerShell Get-NetAdapterRss . Dalam contoh berikut, output yang dikembalikan dari Get-NetAdapterRss RSS tidak diaktifkan.

    Name                    : Ethernet
    InterfaceDescription    : Microsoft Hyper-V Network Adapter
    Enabled                 : False
    
  2. Untuk mengaktifkan RSS, masukkan perintah berikut:

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

    Perintah ini tidak memiliki output. Perintah mengubah pengaturan kartu antarmuka jaringan (NIC). Ini menyebabkan hilangnya konektivitas sementara selama sekitar satu menit. Dialog Menyambungkan Kembali muncul saat kehilangan konektivitas. Konektivitas biasanya dipulihkan setelah upaya ketiga.

  3. Pastikan bahwa RSS diaktifkan dalam VM dengan memasukkan perintah Get-NetAdapterRss lagi. Jika berhasil, contoh output berikut muncul kembali:

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

Mesin virtual Linux

RSS selalu diaktifkan secara default di Komputer Virtual Linux (VM) di Azure. Kernel Linux yang dirilis sejak Oktober 2017 mencakup opsi pengoptimalan jaringan baru yang memungkinkan VM Linux untuk mencapai throughput jaringan yang lebih tinggi.

Mengaktifkan Azure Accelerated Networking untuk mendapatkan throughput optimal

Azure menyediakan jaringan terakselerasi yang benar-benar dapat meningkatkan performa jaringan, latensi, jitter. Saat ini ada dua teknologi berbeda yang digunakan tergantung pada ukuran komputer virtual, Mellanox yang tersedia luas dan MANA yang dikembangkan oleh Microsoft.

Kernel yang Disesuaikan untuk Azure

Beberapa distribusi seperti Ubuntu (Canonical) dan SUSE memiliki kernel yang disetel Azure.

Gunakan perintah berikut untuk memastikan bahwa Anda menggunakan kernel Azure, yang biasanya memiliki string azure dalam penamaannya.

uname -r

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

Distribusi Linux lainnya

Sebagian besar distribusi modern memiliki peningkatan signifikan dengan kernel yang lebih baru. Periksa versi kernel saat ini untuk memastikan bahwa Anda menjalankan kernel yang lebih baru dari 4.19, yang mencakup beberapa peningkatan besar dalam jaringan, misalnya dukungan untuk BBR Congestion-Based Congestion Control.

Mencapai kecepatan transfer yang konsisten di VM Linux di Azure

VM Linux sering mengalami masalah performa jaringan, terutama ketika mentransfer file besar (1 GB hingga 50 GB) antar wilayah, seperti Eropa Barat dan AS Barat. Masalah ini disebabkan oleh versi kernel yang lebih lama serta, konfigurasi kernel default, pengaturan buffer jaringan default, dan algoritma kontrol kemacetan default, yang mengakibatkan paket tertunda, throughput terbatas, dan penggunaan sumber daya yang tidak efisien.

Untuk mendapatkan performa jaringan yang konsisten, pertimbangkan untuk menerapkan pengoptimalan berikut yang terbukti efektif dalam banyak situasi di Azure:

  • Pengaturan buffer jaringan: Sesuaikan parameter kernel untuk memaksimalkan buffer memori baca dan tulis. Tambahkan konfigurasi ini ke /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 Kontrol kemacetan untuk kernel 4.19 ke atas: Mengaktifkan Bottleneck Bandwidth dan kontrol kemacetan waktu propagasi perjalanan pulang-pergi (BBR) sering kali dapat menghasilkan throughput yang lebih baik. Tambahkan konfigurasi ini ke /etc/sysctl.d/99-azure-congestion-control.conf:
net.ipv4.tcp_congestion_control = bbr 
  • Parameter TCP tambahan yang biasanya akan membantu konsistensi yang lebih baik, throughput: Tambahkan konfigurasi ini ke /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
  • Disiplin antrean (qdisc): Pemrosesan paket di Azure ditingkatkan dengan mengatur qdisc default ke fq. Tambahkan konfigurasi ini ke /etc/sysctl.d/99-azure-qdisc.conf:
net.core.default_qdisc = fq 
  • Optimalkan buffer cincin NIC untuk TX/RX: Buat aturan /etc/udev/rules.d/99-azure-ring-buffer.rules udev untuk memastikan buffer tersebut diterapkan ke antarmuka jaringan:
# 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"
  • Buat aturan udev di /etc/udev/rules.d/99-azure-qdisc.rules agar memastikan qdisc diterapkan ke antarmuka jaringan.
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“ 
  • Penjadwalan Permintaan Interupsi (IRQ): Tergantung pada beban kerja Anda, Anda mungkin ingin membatasi layanan iqbalance dari penjadwalan IRQ pada simpul tertentu. Saat menggunakan IRQBalance, Anda dapat memperbarui /etc/default/irqbalance untuk menentukan CPU mana yang seharusnya tidak memiliki IRQ yang dijadwalkan, Anda harus menentukan masker yang akan mengecualikan CPU yang memerlukan pengecualian.

Informasi selengkapnya tentang cara menghitung masker yang tersedia di sini.

Contoh di bawah ini akan mengasumsikan bahwa Anda ingin mengecualikan CPU 8-15

IRQBALANCE_BANNED_CPULIST=0000ff00
  • Aturan UDEV: Tambahkan aturan untuk mengoptimalkan panjang antrean dan mengelola bendera perangkat secara efisien. Buat aturan berikut di /etc/udev/rules.d/99-azure-txqueue-len.rules:
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="eth*", ATTR{tx_queue_len}="10000“ 

Untuk paket yang tertunda dua kali

Dalam hal jaringan performa Linux, kami menggunakan SR-IOV dengan driver Mellanox (mlx4 atau mlx5), sesuatu yang spesifik untuk Azure adalah bahwa ini menciptakan dua antarmuka sintetis dan antarmuka virtual. Pelajari lebih lanjut.

Catatan Tambahan

Administrator sistem dapat menerapkan solusi ini dengan mengedit file konfigurasi seperti /etc/sysctl.d/, , /etc/modules-load.d/dan /etc/udev/rules.d/. Pastikan bahwa pembaruan driver kernel dan konfigurasi sistemd ditinjau untuk potensi regresi.

Untuk informasi selengkapnya tentang konfigurasi dan pemecahan masalah tertentu, lihat dokumentasi Azure tentang performa jaringan.