Distribusikan pemrosesan paket ke beberapa core CPU untuk meningkatkan throughput jaringan dan mengurangi latensi.
Mengapa menggunakan NIC multi-queue
Antarmuka jaringan single-queue mengandalkan satu core CPU untuk semua paket, yang dapat menyebabkan overload CPU, latensi, dan kehilangan paket. NIC multi-queue mendistribusikan lalu lintas ke beberapa core untuk meningkatkan pemanfaatan sumber daya.
Dalam kondisi PPS dan bandwidth yang sama, dua queue meningkatkan kinerja jaringan sebesar 50% hingga 100% dibandingkan single queue. Empat queue memberikan peningkatan yang lebih besar lagi:
-
Pemanfaatan multi-core yang lebih baik: Mendistribusikan lalu lintas ke core CPU untuk beban yang seimbang dan pemanfaatan yang lebih tinggi.
-
Throughput yang lebih tinggi: Pemrosesan paket secara paralel meningkatkan throughput, terutama di bawah beban tinggi.
-
Latensi yang lebih rendah: Mendistribusikan paket ke beberapa queue mengurangi kemacetan dan latensi.
-
Kehilangan paket berkurang: Mencegah kehilangan paket akibat overload single-queue saat lalu lintas tinggi.
Konfigurasi yang tidak tepat dapat menurunkan kinerja. Misalnya, pengaturan jumlah queue atau CPU affinity yang salah menyebabkan context switching yang tidak perlu, sedangkan jumlah queue yang terlalu sedikit menyebabkan sumber daya hardware tidak dimanfaatkan secara optimal.
Saat ENI disambungkan ke instans, jumlah queuenya secara default mengikuti pengaturan tipe instans. Untuk menyesuaikan jumlah queue secara manual, evaluasi terlebih dahulu kasus penggunaan dan kondisi hardware Anda.
Cara kerja NIC multi-queue
-
Arsitektur queue
ENI mendukung beberapa combined queue, masing-masing diproses oleh core CPU yang independen. Hal ini memungkinkan pemrosesan paket secara paralel, mengurangi lock contention, dan memaksimalkan pemanfaatan performa multi-core.
Queue Receive (RX) dan Transmit (TX) adalah dua jenis queue yang digunakan untuk memproses paket. Setiap combined queue terdiri dari satu RX queue dan satu TX queue:
-
RX queue: Memproses paket masuk. Antarmuka jaringan mendistribusikan setiap paket ke RX queue tertentu berdasarkan aturan Receive Side Scaling (RSS), seperti round-robin atau flow-based hashing.
Beberapa family tipe instans mendukung Custom RSS untuk ENI, yang menggunakan algoritma hash untuk mendistribusikan lalu lintas ke RX queue yang berbeda.
-
TX queue: Mengelola paket keluar. Aplikasi menempatkan paket ke dalam TX queue, dan antarmuka jaringan mengirimkannya berdasarkan urutan atau prioritas.
-
-
Dukungan IRQ affinity
Setiap queue memiliki interrupt independen. IRQ affinity mendistribusikan penanganan interrupt ke core CPU untuk mencegah overload pada satu core tertentu.
IRQ affinity diaktifkan secara default pada semua gambar publik kecuali Red Hat Enterprise Linux. Lihat Konfigurasi IRQ affinity.
Batasan
-
Hanya beberapa tipe instans yang mendukung NIC multi-queue. Lihat Family tipe instans. Jika nilai kolom Multi-queue lebih besar dari 1, tipe instans tersebut mendukung NIC multi-queue.
-
Untuk tipe instans yang didukung, NIC multi-queue diaktifkan secara otomatis saat Anda menyambungkan ENI.
-
Jumlah queue yang tercantum untuk suatu tipe instans adalah jumlah maksimum queue per ENI yang didukung oleh tipe tersebut.
-
Panggil operasi API DescribeInstanceTypes dengan parameter InstanceTypeFamily untuk mengkueri metrik terkait queue:
-
Jumlah antrian bawaan
PrimaryEniQueueNumber: jumlah queue default untuk ENI primer. SecondaryEniQueueNumber: jumlah queue default untuk ENI sekunder.
-
Jumlah maksimum queue per ENI
MaximumQueueNumberPerEni: jumlah maksimum queue per ENI untuk family tipe instans.
-
Kuota total queue
TotalEniQueueQuantity: kuota total queue untuk family tipe instans.
-
-
-
Gambar publik dengan versi kernel sebelum 2.6 mungkin tidak mendukung NIC multi-queue. Gunakan gambar publik terbaru.
Lihat jumlah queue ENI
Gunakan Konsol
Di pojok kiri atas halaman, pilih wilayah dan kelompok sumber daya.
-
Klik ID ENI sekunder target untuk membuka halaman detailnya.
-
Di bagian Informasi Dasar, temukan parameter Queues. Nilai ini adalah jumlah queue saat ini.
-
Jika Anda telah mengubah jumlah queue, nilai yang dimodifikasi akan ditampilkan.
-
Jika Anda belum mengubah jumlah queue:
-
Jika ENI tidak disambungkan ke instans, tidak ada nilai yang ditampilkan.
-
Jika ENI disambungkan ke instans, jumlah queue default untuk tipe instans akan ditampilkan.
-
-
Gunakan API
Panggil operasi DescribeNetworkInterfaceAttribute. Parameter respons QueueNumber menunjukkan jumlah queue.
-
Jika Anda telah mengubah jumlah queue, nilai yang dimodifikasi akan ditampilkan.
-
Jika Anda belum mengubah jumlah queue:
-
Jika ENI tidak disambungkan ke instans, tidak ada nilai yang ditampilkan.
-
Jika ENI disambungkan ke instans, jumlah queue default untuk tipe instans akan ditampilkan.
-
Periksa di dalam instans
-
Catatan
Untuk instans Windows, lihat jumlah queue ENI di Konsol ECS atau dengan memanggil operasi API.
-
Lihat konfigurasi jaringan dengan
ip a:[root@ixxxxx ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:1b:74:12 brd ff:ff:ff:ff:ff:ff altname enp0s5 altname ens5 inet 172.16.20.226/24 brd 172.16.20.255 scope global dynamic noprefixroute eth0 valid_lft 315359814sec preferred_lft 315359814sec inet6 fe80::216:3eff:fe1b:7412/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:46:ff:fc brd ff:ff:ff:ff:ff:ff altname enp0s6 altname ens6 inet 172.16.20.227/24 brd 172.16.20.255 scope global dynamic noprefixroute eth1 valid_lft 315359814sec preferred_lft 315359814sec inet6 fe80::216:3eff:fe46:fffc/64 scope link valid_lft forever preferred_lft forever 4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:47:47:c2 brd ff:ff:ff:ff:ff:ff altname enp0s8 altname ens8 inet 172.16.20.228/24 brd 172.16.20.255 scope global dynamic noprefixroute eth2 valid_lft 315359814sec preferred_lft 315359814sec inet6 fe80::216:3eff:fe47:47c2/64 scope link valid_lft forever preferred_lft forever -
Periksa apakah ENI primer eth0 mendukung NIC multi-queue.
Contoh ini menggunakan ENI primer. Untuk memeriksa ENI sekunder, ganti identifikator dengan eth1, eth2, atau nilai lainnya.
ethtool -l eth0Periksa output:
-
Jika "Combined" di bawah "Pre-set maximums" lebih besar dari 1, ENI mendukung NIC multi-queue. Nilai ini adalah jumlah maksimum queue.
-
"Combined" di bawah "Current hardware settings" adalah jumlah queue saat ini yang sedang digunakan.
Pada contoh ini, ENI mendukung maksimal tiga combined queue (RX+TX) dan saat ini menggunakan tiga.
[root@xxx ~]# ethtool -l eth0 Channel parameters for eth0: Pre-set maximums: RX: n/a TX: n/a Other: n/a Combined: 3 Current hardware settings: RX: n/a TX: n/a Other: n/a Combined: 3-
Untuk memodifikasi jumlah maksimum queue, lihat Modifikasi jumlah queue untuk ENI.
-
Untuk memodifikasi jumlah queue yang digunakan oleh OS, lihat Modifikasi jumlah queue yang digunakan oleh OS.
-
Modifikasi jumlah queue ENI
Saat Anda menyambungkan ENI ke instans, jumlah queuenya secara default mengikuti pengaturan tipe instans. Anda dapat menyesuaikannya melalui Konsol atau dengan memanggil operasi API. Perhatikan hal berikut:
-
Anda hanya dapat memodifikasi jumlah queue saat ENI berstatus Available, atau Bound dengan instans berstatus Stopped.
-
Jumlah queue tidak boleh melebihi jumlah maksimum queue per ENI untuk tipe instans.
-
Jumlah total queue dari semua ENI pada suatu instans tidak boleh melebihi kuota total queue untuk tipe instans.
Gunakan Konsol
Di pojok kiri atas halaman, pilih wilayah dan kelompok sumber daya.
-
Klik ID ENI sekunder target untuk membuka halaman detailnya.
-
Klik Modify Queue Count.
Klik ikon edit di samping bidang NIC Queue Number, lalu masukkan jumlah queue target di kotak input (rentang valid: 1 hingga 2048).
-
Klik OK.
Gunakan API
Panggil operasi ModifyNetworkInterfaceAttribute dan atur parameter QueueNumber untuk memodifikasi jumlah queue.
Jumlah queue baru akan berlaku saat instans yang disambungkan dijalankan kembali.
Modifikasi jumlah queue OS
Saat Anda memodifikasi jumlah queue ENI, OS secara otomatis menerapkan pengaturan baru tersebut.
Anda juga dapat menyesuaikan jumlah queue yang aktif digunakan oleh ENI. Nilai ini harus kurang dari atau sama dengan jumlah queue yang dikonfigurasi.
-
Mengubah jumlah queue yang digunakan oleh OS tidak memengaruhi jumlah queue yang dikonfigurasi pada ENI atau ditampilkan di Konsol maupun respons API.
-
Perubahan ini bersifat temporary dan tidak bertahan setelah instans direstart.
Contoh berikut menyesuaikan jumlah queue pada instans Alibaba Cloud Linux 3 dengan NIC multi-queue.
-
Lihat konfigurasi jaringan dengan
ip address show:[ecs-user@iZbpxxx ~]$ ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:37:7a:82 brd ff:ff:ff:ff:ff:ff altname enp0s5 altname ens5 inet 172.16.0.20/24 brd 172.16.0.255 scope global dynamic noprefixroute eth0 valid_lft 315359878sec preferred_lft 315359878sec inet6 fe80::216:3eff:fe37:7a82/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:28:b1:9e brd ff:ff:ff:ff:ff:ff altname enp0s6 altname ens6 inet 172.16.0.21/24 brd 172.16.0.255 scope global dynamic noprefixroute eth1 valid_lft 315359879sec preferred_lft 315359879sec inet6 fe80::216:3eff:fe28:b19e/64 scope link valid_lft forever preferred_lft forever -
Periksa apakah ENI primer eth0 mendukung NIC multi-queue.
Contoh ini menggunakan ENI primer. Untuk memeriksa ENI sekunder, ganti identifikator dengan eth1, eth2, atau nilai lainnya.
ethtool -l eth0 -
Periksa output:
-
Jika "Combined" di bawah "Pre-set maximums" lebih besar dari 1, ENI mendukung NIC multi-queue. Nilai ini adalah jumlah maksimum queue.
-
"Combined" di bawah "Current hardware settings" adalah jumlah queue saat ini yang sedang digunakan.
Pada contoh ini, ENI mendukung maksimal tiga combined queue (RX+TX) dan tiga sedang digunakan.
[root@xxx ~]# ethtool -l eth0 Channel parameters for eth0: Pre-set maximums: RX: n/a TX: n/a Other: n/a Combined: 3 Current hardware settings: RX: n/a TX: n/a Other: n/a Combined: 3 -
-
Atur jumlah queue aktif untuk ENI primer eth0 menjadi 2.
Contoh ini menggunakan ENI primer. Untuk menyesuaikan ENI sekunder, ganti identifikator dengan eth1, eth2, atau nilai lainnya.
sudo ethtool -L eth0 combined NNadalah jumlah queue yang ingin digunakan oleh ENI.Nharus kurang dari atau sama dengan nilai "Combined" di bawah "Pre-set maximums".Atur jumlah queue ENI primer menjadi 2:
sudo ethtool -L eth0 combined 2
Konfigurasi IRQ affinity
NIC multi-queue biasanya memerlukan konfigurasi IRQ affinity untuk menetapkan interrupt dari queue yang berbeda ke core CPU tertentu, sehingga mengurangi contention dan meningkatkan kinerja.
-
Semua gambar publik kecuali Red Hat Enterprise Linux telah mengaktifkan IRQ affinity secara default.
-
Red Hat Enterprise Linux mendukung IRQ affinity tetapi tidak mengaktifkannya secara default. Ikuti langkah-langkah berikut untuk mengonfigurasinya.
Langkah-langkah berikut menggunakan skrip ecs_mq untuk mengonfigurasi IRQ affinity pada gambar Red Hat Enterprise Linux 9.2. Gambar lainnya telah mengaktifkan IRQ affinity secara default.
-
(Opsional) Hentikan layanan irqbalance.
Layanan irqbalance secara dinamis menyesuaikan IRQ affinity, yang dapat bertentangan dengan
ecs_mq. Hentikan terlebih dahulu.systemctl stop irqbalance.service -
Unduh skrip
ecs_mqversi terbaru:wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_latest.tgz -
Ekstrak paket
ecs_mq:tar -xzf ecs_mq_latest.tgz -
Berpindah ke direktori kerja:
cd ecs_mq/ -
Jalankan skrip instalasi
ecs_mq:bash install.sh redhat 9CatatanGanti
redhatdan9dengan nama dan nomor versi utama sistem operasi Anda. -
Jalankan layanan
ecs_mq:systemctl start ecs_mqLayanan ini secara otomatis mengaktifkan IRQ affinity.
Uji kombinasi jumlah queue dan IRQ affinity yang berbeda sambil memantau throughput dan latensi untuk menemukan keseimbangan optimal.