Sesuaikan aturan hash RSS dan tabel indireksi pada ENI yang didukung untuk mendistribusikan traffic secara merata ke seluruh core CPU serta mengatasi bottleneck pada satu core.
Apa itu RSS
Receive Side Scaling (RSS) menggunakan perangkat keras dan driver ENI untuk menghitung nilai hash berdasarkan fitur paket (alamat IP sumber/tujuan dan port), lalu memetakan aliran traffic berbeda ke beberapa antrian RX. Core CPU yang terikat memproses antrian tersebut secara paralel, sehingga mencapai load balancing dan mengurangi latensi pada satu core.
ENI yang mendukung multiple queue menggunakan saluran RX (receive) dan TX (send) independen per antrian untuk pemrosesan paralel. Saat sebuah paket tiba, perangkat keras ENI menggunakan kebijakan RSS untuk mendistribusikan aliran data berbeda ke beberapa antrian RX. Secara default, kebijakan RSS untuk instance ECS bersifat tetap di Virtual Private Cloud (VPC) dan tidak dapat dilihat atau dimodifikasi dari dalam instance.
Beberapa keluarga instans mendukung fitur custom RSS untuk ENI. Setelah Anda mengaktifkan fitur custom RSS pada keluarga instans yang didukung, ENI mendistribusikan traffic berdasarkan aturan penghashan default. Anda juga dapat lebih lanjut menyesuaikan konfigurasi RSS sesuai karakteristik traffic aktual.
Setelah mengaktifkan custom RSS, Anda juga dapat mengonfigurasi RSS dalam skenario DPDK untuk memaksimalkan kinerja multi-core.
Cara kerja
Custom RSS untuk ENI instance ECS bekerja sebagai berikut:
-
Perhitungan nilai hash: ENI menghitung nilai hash dari 5-tupel (IP sumber, IP tujuan, port sumber, port tujuan, dan protokol), kunci hash, serta algoritma hash.
-
Kunci hash: Nilai tetap sepanjang
40byte. Driver ENI menghasilkan kunci hash default selama inisialisasi. Anda dapat menyesuaikan kunci hash untuk memengaruhi distribusi traffic. -
Algoritma hash: Saat ini, hanya algoritma default
toeplitzyang didukung. Pengaturan ini tidak dapat dimodifikasi. -
Aturan penghashan: Aturan untuk menghitung nilai hash bervariasi berdasarkan jenis traffic. Aturan penghashan default untuk RSS ENI ECS adalah sebagai berikut. Anda tidak dapat mengubah aturan ini.
-
Traffic TCP dan UDP melalui IPv4/IPv6: Nilai hash dihitung berdasarkan 4-tupel (IP sumber, IP tujuan, port sumber, dan port tujuan) serta kunci hash.
-
Traffic non-TCP/UDP melalui IPv4/IPv6, seperti ICMP: Nilai hash dihitung berdasarkan 2-tupel (IP sumber dan IP tujuan) serta kunci hash.
-
Pesan non-IP (seperti ARP) dikirim ke antrian default (antrian 0) dan tidak di-hash.
-
-
-
Pemetaan tabel indireksi: Tabel indireksi RSS adalah larik yang telah ditentukan sebelumnya yang memetakan nilai hash ke antrian penerima tujuan. Setiap elemen (bucket hash) menyimpan nomor antrian, seperti 0, 1, atau 2. Saat driver ENI dimuat, tabel indireksi secara otomatis dihasilkan untuk mendistribusikan traffic secara merata.
-
Panjang tabel indireksi: Jumlah total bucket hash. Nilainya tetap pada
128. -
Mode distribusi:
Mode distribusi tabel indireksi RSS merupakan mekanisme inti yang memetakan nilai hash ke antrian penerima tertentu. Dengan menggunakan tabel indireksi yang telah ditentukan, hasil perhitungan hash dikonversi menjadi indeks antrian. Hal ini memungkinkan distribusi traffic fleksibel di berbagai core.
Mode distribusi berbeda, seperti distribusi seragam dan distribusi berbobot, secara langsung memengaruhi cara traffic didistribusikan ke core CPU. Hal ini selanjutnya memengaruhi throughput sistem, latensi, pemanfaatan resource, dan kinerja layanan.
Pilih pola distribusi yang sesuai dengan skenario Anda. Lihat Pola distribusi tabel indireksi.
-
Proses pemetaan tabel indireksi:
-
Perhitungan indeks bucket hash:
Indeks = Nilai hash % Panjang tabel indireksi(Misalnya, 88 % 128 → indeks 88). Anda dapat menggunakan skrip perhitungan RSS untuk menghitung nilai indeks. -
Mengisi nomor antrian: Tulis nomor antrian ke setiap bucket hash berdasarkan mode distribusi.
Setelah tabel indireksi dihasilkan, indeks hash setiap paket dipetakan ke nomor antrian, dan paket dikirim ke antrian tersebut.
-
-
-
Pengikatan core CPU: Saat sebuah antrian menerima paket, interrupt dipicu. Core CPU yang terikat memproses interrupt tersebut.
Gambar selain Red Hat Enterprise Linux mendukung network interrupt affinity secara default. Setiap antrian dikaitkan dengan interrupt independen, dan interrupt affinity mendistribusikan penanganan ke berbagai core CPU. Lihat Mekanisme inti multi-queue.
Aktifkan atau nonaktifkan custom RSS untuk ENI
Fitur custom RSS untuk ENI sedang dalam pratinjau undangan. Untuk menggunakan fitur ini, Anda dapat membuat tiket.
Setelah Anda mengaktifkan custom RSS pada tipe instans yang didukung, traffic yang diterima didistribusikan ke beberapa antrian penerima berdasarkan aturan penghashan default. Core CPU berbeda memproses antrian tersebut secara paralel, meningkatkan throughput dan mengurangi beban pada satu core.
Prasyarat
-
Custom RSS diluncurkan secara bertahap. Fitur ini tersedia di wilayah berikut:
Nama Wilayah
ID Wilayah
China (Hong Kong)
cn-hongkong
-
Hanya beberapa keluarga instans multi-queue yang mendukung custom RSS, termasuk keluarga instans tujuan umum g9i dan keluarga instans yang dioptimalkan untuk memori r9i.
Panggil operasi API DescribeInstanceTypes untuk memeriksa dukungan. RssSupport=`true` menunjukkan fitur ini didukung.
-
Direkomendasikan menggunakan gambar Alibaba Cloud Linux 3.2104 LTS 64-bit.
-
Jika Anda menggunakan gambar publik lain, versi kernel harus 6.12 atau lebih baru.
-
Jika Anda menggunakan fitur custom RSS dalam aplikasi DPDK, versi DPDK harus 21.11 atau lebih baru.
-
Cara mengaktifkan atau menonaktifkan
Custom RSS nonaktif secara default. Anda dapat mengaktifkan atau menonaktifkannya saat membuat ENI atau setelah ENI dibuat.
-
Saat memanggil CreateNetworkInterface, atur EnableRss dalam EnhancedNetwork menjadi true atau false.
Custom RSS berlaku setelah ENI disambungkan ke instans.
-
Panggil ModifyNetworkInterfaceAttribute dan atur EnableRss dalam EnhancedNetwork menjadi true atau false. Setelah mengaktifkan atau menonaktifkan, perubahan berlaku saat ENI disambungkan ulang:
-
Untuk ENI sekunder yang disambungkan ke instans, Anda harus melepas ENI lalu menyambungkan ENI agar perubahan berlaku.
-
Untuk ENI primer, restart instans agar perubahan berlaku.
-
-
Panggil DescribeNetworkInterfaceAttribute dengan Attribute diatur ke enhancedNetwork untuk memeriksa apakah custom RSS diaktifkan. EnableRSS=true berarti diaktifkan; false berarti dinonaktifkan.
Jika RSS belum dimodifikasi untuk ENI, operasi ini tidak mengembalikan parameter EnableRSS, yang berarti fitur tersebut tidak diaktifkan.
Lihat konfigurasi RSS ENI
Setelah Anda mengaktifkan custom RSS, driver ENI menghasilkan konfigurasi RSS default berdasarkan mekanisme dan aturan default saat ENI dimuat ulang.
Anda dapat login jarak jauh ke instans Linux dan menjalankan ethtool -x eth0 untuk melihat konfigurasi RSS ENI primer. Untuk ENI sekunder, ganti pengenal antarmuka (eth1, eth2, dll.).

-
Tabel hash (tabel indireksi hash aliran RX): Menentukan aturan pemetaan dari nilai hash ke 64 antrian penerima.
-
Setiap baris dalam tabel hash merepresentasikan rentang nilai hash, ditunjukkan oleh indeks awal. Misalnya, 0 menunjukkan nilai hash 0–7, dan 8 menunjukkan 8–15.
-
Angka dalam tabel (0, 1, 2, dan seterusnya) merepresentasikan ID antrian penerima yang sesuai. Dalam contoh ini, terdapat 64 antrian (0–63).
-
Konfigurasi saat ini: Tabel indireksi diisi secara siklik dengan urutan
0,1,2,...,63,0,1,2...63, yang memastikan nilai hash dipetakan secara merata ke 64 antrian dan traffic didistribusikan secara merata.
-
-
Kunci hash RSS: Kunci yang digunakan untuk menghitung nilai hash. Karakter heksadesimal merepresentasikan kunci sepanjang 40 byte.
-
Fungsi hash RSS: Menentukan algoritma untuk menghitung nilai hash.
-
toeplitz: Ini adalah algoritma default dan saat ini diaktifkan. Mendukung penghashan simetris berdasarkan 5-tupel dan cocok untuk traffic tujuan umum. -
xor/crc32: Ini adalah algoritma opsional lain yang biasanya digunakan dalam skenario tertentu. ECS saat ini hanya mendukung algoritmatoeplitz, dan algoritma lain tidak didukung atau diaktifkan.
-
-
Aturan penghashan: Lihat konfigurasi bidang hash untuk traffic yang diterima oleh ENI primer.
ethtool -n eth0 rx-flow-hash tcp4-
Anda dapat mengganti
tcp4dengan jenis protokol yang ingin Anda kueri, sepertiudp4,tcp6, atauudp6. -
Aturan penghashan default untuk RSS ENI ECS adalah sebagai berikut. Anda tidak dapat mengubah aturan ini.
-
Traffic TCP dan UDP melalui IPv4/IPv6: Nilai hash dihitung berdasarkan 4-tupel (IP sumber, IP tujuan, port sumber, dan port tujuan) serta kunci hash.
-
Traffic non-TCP/UDP melalui IPv4/IPv6, seperti ICMP: Nilai hash dihitung berdasarkan 2-tupel (IP sumber dan IP tujuan) serta kunci hash.
-
Pesan non-IP (seperti ARP) dikirim ke antrian default (antrian 0) dan tidak di-hash.
-
-
Mengambil
tcp4sebagai contoh, untuk traffic TCP IPv4, nilai hash dihitung secara default berdasarkan 4-tupel (IP sumber, alamat IP tujuan, port sumber, port tujuan) dan kunci hash:
Fitur traffic yang diharapkan adalah sebagai berikut:
-
Koneksi TCP yang sama: Semua paket memiliki nilai hash yang sama dan didistribusikan ke antrian yang sama. Hal ini memastikan pengurutan paket.
-
Koneksi TCP berbeda: Jika 4-tupel berbeda, nilai hash berbeda. Traffic didistribusikan ke antrian berbeda. Hal ini memungkinkan beberapa core CPU memproses koneksi berbeda secara paralel dan meningkatkan throughput.
-
-
Jika pesan berikut dikembalikan, custom RSS tidak diaktifkan atau tipe instans tidak mendukung fitur tersebut. Aktifkan custom RSS setelah memastikan tipe instans mendukungnya.

Konfigurasi custom RSS untuk ENI
Konfigurasi RSS default memenuhi sebagian besar kebutuhan. Anda mungkin perlu menyesuaikan kunci hash atau tabel indireksi dalam situasi berikut:
-
Traffic tidak merata: Nilai hash default dapat memusatkan traffic tertentu di beberapa antrian.
-
Optimasi kinerja: Sesuaikan aturan penghashan berdasarkan fitur traffic, seperti proporsi UDP tinggi, untuk meningkatkan pemanfaatan antrian.
-
Kebutuhan keamanan: Gunakan kunci hash kustom untuk mencegah penyerang memprediksi distribusi traffic.
-
Dalam contoh ini, instans dikonfigurasi dengan gambar
Alibaba Cloud Linux 3.2104 LTS 64-bit. -
Contoh ini menggunakan ENI primer
eth0. Ganti pengenal antarmuka dengan eth1 atau eth2 untuk memodifikasi RSS untuk ENI sekunder yang sesuai. -
Saat konfigurasi RSS tidak sesuai dengan fitur traffic Anda, hal ini dapat menyebabkan distribusi tidak merata dan contention state lintas core, yang memengaruhi kinerja. Sesuaikan berdasarkan karakteristik traffic aktual dan gunakan tool pemantauan untuk mengamati distribusi antrian secara real time.
Konfigurasi kunci hash
Buat ulang kunci hash RSS jika distribusi traffic tidak merata (misalnya, rx_packets beberapa antrian jauh lebih tinggi daripada yang lain), atau untuk mencegah penyerang menginferensi pola traffic dengan merekayasa balik nilai hash.
Memodifikasi kunci mengubah nilai hash koneksi yang ada, yang dapat menyebabkan pengiriman ulang atau pengurutan ulang paket sementara. Lakukan ini selama jam sepi.
-
Lihat kunci hash saat ini dari ENI.
Driver ENI menghasilkan kunci hash default sepanjang 40 byte saat ENI dimuat.
ethtool -x eth0
-
Buat kunci acak baru menggunakan OpenSSL.
openssl rand -hex 40 | fold -w2 | paste -sd: - -
Terapkan kunci baru ke ENI.
PentingIni adalah pengaturan sementara. Pengaturan ini tidak berlaku setelah instans direstart atau ENI disambungkan ulang. Driver ENI secara otomatis menginisialisasi konfigurasi default acak.
ethtool -X eth0 hkey <hash key>Ganti <hash key> dengan kunci baru yang Anda buat pada langkah sebelumnya.
-
Verifikasi bahwa kunci baru telah berlaku.
ethtool -x eth0Output menunjukkan bahwa kunci baru telah berlaku:

Konfigurasi tabel indireksi
Mode distribusi tabel indireksi RSS merupakan mekanisme inti yang memetakan nilai hash ke antrian penerima tertentu. Dengan menggunakan tabel indireksi yang telah ditentukan, hasil perhitungan hash dikonversi menjadi indeks antrian. Hal ini memungkinkan distribusi traffic fleksibel di berbagai core.
Mode distribusi berbeda, seperti distribusi seragam dan distribusi berbobot, secara langsung memengaruhi cara traffic didistribusikan ke core CPU. Hal ini selanjutnya memengaruhi throughput sistem, latensi, pemanfaatan resource, dan kinerja layanan.
Pilih mode distribusi berdasarkan skenario Anda.
Konfigurasi berikut bersifat sementara. Konfigurasi ini tidak berlaku setelah instans direstart atau ENI disambungkan ulang. Driver ENI menginisialisasi ulang konfigurasi default acak.
-
Mode distribusi seragam: N antrian pertama mengisi bucket hash secara berulang. Cocok untuk skenario high-concurrency umum.
ethtool -X eth0 equal <Jumlah antrian N>Jika nilai diatur ke 64, tabel indireksi diisi secara berulang dengan
0,1,2,...,63,0,1,2...63,.
-
Distribusi berbobot: Alokasikan bucket hash berdasarkan rasio bobot. Cocok untuk skenario dengan prioritas bisnis berbeda (misalnya, antrian 0 memproses traffic real-time dan antrian 1 memproses tugas latar belakang) atau kinerja CPU campuran.
ethtool -X eth0 weight <bobot antrian 0> <bobot antrian 1> ...Dalam contoh berikut, antrian 0 mendapatkan 60% dan antrian 1 mendapatkan 40%:
CatatanJika terdapat empat antrian total, tetapi Anda hanya mengatur bobot untuk dua antrian, tabel indireksi hanya akan menghasilkan pemetaan untuk antrian 0 dan antrian 1.
ethtool -X eth0 weight 6 4
-
Distribusi antrian parsial: Mulai dari antrian tertentu, gunakan antrian berurutan untuk mengisi bucket hash secara berulang. Cocok untuk mengarahkan traffic ke rentang CPU tertentu, seperti node NUMA.
ethtool -X eth0 start <antrian awal> equal <jumlah antrian>Dalam contoh berikut, antrian 2–41 (40 antrian mulai dari antrian 2) mengisi bucket hash:
ethtool -X eth0 start 2 equal 40
Gunakan watch untuk mengamati distribusi traffic
Setelah Anda mengaktifkan custom RSS pada ENI, gunakan hping3 untuk menghasilkan traffic dengan fitur berbeda dan watch untuk memantau distribusi interrupt antrian, memverifikasi apakah traffic didistribusikan ke beberapa core seperti yang diharapkan.
Prasyarat
Beli dua instance ECS dengan konfigurasi berikut:
-
Instance ECS pengirim (10.0.0.252): Instans yang diinstal dengan
hping3untuk menghasilkan traffic dengan fitur berbeda. -
Instance ECS penerima: Instans yang tipenya mendukung multi-queue untuk ENI, dengan ENI sekunder yang disambungkan (10.0.0.5) dan custom RSS diaktifkan pada ENI sekunder eth1.
Catatan-
Contoh ini menggunakan empat antrian untuk pengujian.
-
Untuk menghilangkan dampak traffic login SSH pada ENI primer, custom RSS diaktifkan pada ENI sekunder eth1 untuk pengujian.
-
-
Konektivitas jaringan: Kedua instance ECS berada dalam grup keamanan yang sama dan dapat berkomunikasi satu sama lain melalui jaringan internal.
Prosedur
-
Login ke instance ECS penerima, periksa konfigurasi RSS ENI sekunder, dan konfirmasi distribusi traffic yang diharapkan. Lihat Lihat konfigurasi RSS ENI.

-
Login ke instance ECS pengirim dan instal
hping3.yum install -y hping3 -
Pada instance penerima, pantau jumlah paket antrian secara real time.
watch -n 1 "ethtool -S eth1 | grep rx[0,1,2,3]_packets"Ganti konfigurasi nomor antrian dengan konfigurasi aktual ENI penerima.
-
Login ke instance ECS pengirim dan simulasi pola traffic berbeda.
-
Skenario 1: Kirim 10.000 paket SYN dengan kecepatan tinggi ke alamat IP penerima dengan port tujuan acak. Hal ini memastikan hash traffic tersebar dan memverifikasi keseimbangan hash.
sudo hping3 10.0.0.5 -S -a 10.0.0.252 --rand-dest -p 0 --baseport 10000 -c 10000 -i u100 -I eth0-
rand-dest: Port tujuan acak -
-p 0: Digunakan denganrand-dest -
--baseport 10000: Nilai awal untuk port sumber. -
-c 10000: Kirim 10.000 paket -
-i u100: Menentukan interval 100 mikrodetik antar paket untuk pengiriman berkecepatan tinggi. -
-I eth0: Digunakan denganrand-destuntuk menentukan antarmuka jaringan pengirim
Pada instance penerima, jumlah paket keempat antrian seharusnya meningkat secara merata:

-
-
Skenario 2: Kirim traffic dengan alamat IP sumber dan port tetap. Hal ini menguji apakah traffic yang sama dipetakan ke antrian yang sama dan memverifikasi konsistensi hash.
Perintah berikut mengirim 10.000 paket TCP SYN ke target
10.0.0.5:80, dengan IP sumber tetap ke10.0.0.252dan port sumber tetap ke12345.sudo hping3 10.0.0.5 -S -p 80 -c 10000 -s 12345 -a 10.0.0.252 --keep -i u100-
Nilai indeks hash dihitung berdasarkan skrip RSS. Traffic diharapkan diproses oleh antrian 0:

-
Hasil pengamatan aktual pada instance ECS penerima (10.0.0.5):

-
-
-
Jika distribusi traffic tidak sesuai harapan (misalnya, beban suatu antrian jauh lebih tinggi), optimalkan dengan menyesuaikan kunci hash atau mengonfigurasi tabel indireksi.
Konfigurasi dan gunakan RSS dalam DPDK
Data Plane Development Kit (DPDK) adalah framework akselerasi bidang data open-source berbasis user-mode yang menggunakan driver user-mode, zero-copy, dan polling mode untuk mencapai pemrosesan paket mendekati kecepatan line-rate. Framework ini cocok untuk domain yang sensitif terhadap throughput dan latensi, seperti cloud telekomunikasi, fintech, dan komputasi tepi. Lihat Data Plane Development Kit (DPDK*).
Setelah Anda mengaktifkan custom RSS pada ENI, Anda dapat menggunakan testpmd dan l3fwd dalam DPDK untuk menguji dan memverifikasi distribusi RSS.
Instal dan konfigurasi DPDK pada instance ECS
-
Jika Anda menggunakan fitur custom RSS dalam aplikasi DPDK, versi DPDK harus 21.11 atau lebih baru.
-
Topik ini menggunakan instance
ecs.r9i.16xlarge(64 antrian) yang menjalankan gambarAlibaba Cloud Linux 3.2104 LTS 64-bitsebagai contoh untuk menunjukkan instalasi DPDK versi22.11.3. -
Contoh ini menggunakan ENI primer
eth0. Ganti pengenal antarmuka dengan eth1 atau eth2 untuk memodifikasi RSS untuk ENI sekunder yang sesuai.
Langkah 1: Instal DPDK
Langkah 2: Muat modul kernel
DPDK memerlukan modul kernel seperti UIO atau VFIO untuk akses perangkat user-mode. VFIO lebih disukai karena keamanannya (mengandalkan IOMMU), sedangkan UIO cocok untuk pengujian cepat. Contoh ini menggunakan VFIO.
-
Aktifkan IOMMU.
VFIO mengandalkan IOMMU untuk binding perangkat user-mode yang aman dan pemetaan DMA.
-
Buka file.
sudo vim /etc/default/grub -
Tekan
iuntuk masuk ke mode insert. Tambahkanintel_iommu=onke parameterGRUB_CMDLINE_LINUX. Simpan dan tutup file.Contoh konfigurasi yang dimodifikasi:

-
Terapkan konfigurasi.
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
Restart instans dan sambungkan kembali setelah instans menyala.
rebootPeringatanOperasi restart menghentikan instans untuk waktu singkat dan dapat mengganggu layanan yang sedang berjalan pada instans. Kami menyarankan Anda untuk merestart instans selama jam sepi.
-
-
Instal driver VFIO dan VFIO-PCI.
sudo modprobe vfio && \ sudo modprobe vfio-pci -
Aktifkan
noiommu_mode.sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
Langkah 3: Bind ENI ke driver DPDK
-
Pastikan custom RSS diaktifkan untuk ENI yang akan diambil alih oleh DPDK, dan ENI telah disambungkan ulang agar perubahan berlaku.
-
Sambungkan ke instans menggunakan VNC.
-
Contoh ini menggunakan ENI primer. Operasi selanjutnya akan melepas ENI, yang mengganggu sesi SSH.
-
Untuk operasi ENI sekunder, sambungkan menggunakan Workbench (ENI primer) sebagai gantinya.
-
-
Lihat status binding driver perangkat PCI. Secara default, ENI dikelola oleh kernel.
dpdk-devbind.py --status
-
Perangkat
0000:00:05.0dikelola oleh driver kernelvirtio-pci, daneth0aktif. -
Perangkat dapat dialihkan ke
vfio-pciuntuk pengambilalihan user-mode DPDK. Pertama nonaktifkan antarmuka dan lepas driver kernel.
-
-
Nonaktifkan eth0.
sudo ip link set dev eth0 downJika Anda melewatkan langkah ini, binding ke VFIO gagal:

-
Lepaskan driver kernel dan bind ke VFIO.
dpdk-devbind.py -b vfio-pci 0000:00:05.0Ganti pengenal perangkat PCI dengan yang Anda kueri untuk ENI Anda.
CatatanUntuk mengikat ulang driver kernel, hentikan aplikasi DPDK dengan
sudo pkill dpdk-appdan jalankandpdk-devbind.py -b virtio-pci 0000:00:05.0. -
Lihat status binding driver perangkat PCI lagi. ENI sekarang seharusnya diambil alih oleh DPDK.
PentingSaat ENI diambil alih oleh driver user-mode DPDK, kernel tidak lagi mengontrolnya. Perintah seperti
ip atidak dapat menampilkan informasinya.dpdk-devbind.py --status
Perangkat
0000:00:05.0sekarang terikat kevfio-pci.
Konfigurasi RSS menggunakan testpmd
Testpmd adalah tool pengujian DPDK untuk memverifikasi fitur driver ENI dan debugging aplikasi bidang data. Lihat Fungsi Runtime Testpmd.
Modifikasi konfigurasi ENI (jumlah antrian, aturan RSS, tabel RETA) hanya berlaku setelah memulai atau merestart forwarding paket.
-
Jalankan tool pengujian forwarding paket DPDK testpmd.
dpdk-testpmd -a 0000:00:05.0 --socket-mem 1024 -- -i --portmask=0x1 --rxq=64 --txq=64 --forward-mode=rxonly-
-a 0000:00:05.0: Menyambungkan ENI pada alamat PCI0000:00:05.0ke DPDK. Jalankandpdk-devbind.py --statusuntuk menemukan alamat PCI. -
--socket-mem 1024: Mengalokasikan sebelumnya memori huge page 1024 MB per node NUMA. -
-i: Memulai mode command-line interaktif untuk menyesuaikan konfigurasi secara dinamis dan melihat statistik. Masukkanquituntuk keluar. -
--portmask=0x1: Mengaktifkan mask port0x1(biner0001), hanya menggunakan ENI pertama (alamat PCI0000:00:05.0).-
Setiap bit biner
portmaskberkorespondensi dengan port (0x1mengaktifkan port 0,0x3mengaktifkan port 0 dan 1). -
Hanya satu perangkat (
0000:00:05.0) yang disambungkan, sehingga nomor port DPDK-nya adalah 0.
-
-
--rxq=64/--txq=64: Mengatur jumlah antrian RX dan TX per port menjadi 64 untuk pemrosesan multi-queue. Ganti 64 dengan jumlah antrian ENI aktual. -
--forward-mode=rxonly: Mode hanya menerima (paket diterima dan dibuang). Digunakan untuk menguji kinerja penerimaan ENI atau untuk pengambilan paket.
-
-
Masuk ke mode interaktif dan kueri konfigurasi RSS saat ini.
-
Kueri informasi konfigurasi hash:
show port info <port_id>port_id: Port tersebut. Dalam contoh ini, port 0.
-
Kueri kunci hash:
show port <port_id> rss-hash key
-
Kueri konfigurasi tabel indireksi:
show port <port_id> rss reta <size> <mask0, mask1...>-
size: Jumlah entri tabel indireksi yang dikueri. Nilainya tetap pada128. -
mask0, mask1: Mask yang digunakan untuk memfilter rentang indeks hash yang akan ditampilkan, yang ditentukan dalam format heksadesimal. Misalnya,mask0=0xffmenunjukkan bahwa entri untuk indeks hash 0 hingga 7 ditampilkan.Ukuran tabel indireksi tetap pada 128. Diperlukan dua mask, masing-masing mencakup 64 blok indeks. Jalankan
show port 0 rss reta 128 (0xffffffffffffffff,0xffffffffffffffff)untuk mengembalikan semua 128 pemetaan indeks-ke-antrian:
-
-
-
Konfigurasi RSS berdasarkan kebutuhan Anda.
-
Konfigurasi kunci hash baru.
Buat kunci acak baru dengan OpenSSL.
port config <port_id> rss-hash-key (ipv4|ipv4-frag|\ ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|\ ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|\ ipv6-other|l2-payload|ipv6-ex|ipv6-tcp-ex|\ ipv6-udp-ex <string of hex digits \ (variable length, NIC dependent)>)Untuk TCP melalui IPv4, jalankan
port config 0 rss-hash-key ipv4 6D5A56DA255B0EC24167253D43A38FB0D0CA2BCBAE7B30B477CB2DA38030F20C6A42B73BBEAC01FCuntuk mengonfigurasi kunci hash dan verifikasi:
-
Konfigurasi tabel indireksi RSS untuk memetakan nilai hash ke antrian tertentu.
port config all rss reta <hash,queue>,<hash,queue>..Konfigurasikan berdasarkan jumlah antrian aktual:
-
hash: Indeks hash. Rentang tergantung pada ukuran tabel indireksi (misalnya, 0–63 untuk 64 entri). -
queue: Nomor antrian penerima target.
-
-
Terapkan RSS dalam l3fwd
Untuk mengaktifkan RSS dalam aplikasi DPDK, implementasikan konfigurasi kunci hash dan tabel indireksi dalam kode Anda. Berikut menggunakan L3FWD sebagai contoh.
L3FWD (Layer 3 Forwarding) adalah aplikasi contoh DPDK yang menunjukkan routing paket berbasis IP berkinerja-tinggi menggunakan zero-copy dan Polling Mode Drivers (PMDs).
-
Modifikasi kode sumber L3FWD dalam DPDK (
examples/l3fwd/main.c).-
Modifikasi bagian inisialisasi port
static struct rte_eth_conf port_confdalam kode contoh L3FWD. -
Tambahkan fungsi untuk mengonfigurasi tabel indireksi hash dan kunci hash.
-
Setelah
rte_eth_dev_start, panggil fungsi konfigurasi baru.
-
-
Kompilasi ulang L3FWD setelah memodifikasi kode sumber.
cd ~/dpdk-stable-22.11.3/ rm -rf build # Inisialisasi direktori build dan konfigurasikan opsi proyek, tentukan untuk membangun contoh forwarding Lapisan 3 l3fwd. meson setup -Dexamples=l3fwd build cd build # Kompilasi. ninja # Instal file yang telah dikompilasi ke direktori sistem. sudo ninja install # Perbarui cache library bersama sistem. sudo ldconfig -
Tentukan binding port-antrian-core dan mulai L3FWD.
cd ~/dpdk-stable-22.11.3/build/examples ./dpdk-l3fwd --legacy-mem -a 0000:00:05.0 --socket-mem 1024 -- -p 0x1 --config="(PORT_ID, QUEUE_ID, LCORE_ID), (PORT_ID, QUEUE_ID, LCORE_ID), ..." --parse-ptype-
--config: Setiap tripel menentukan:-
PORT_ID: ID port (dimulai dari 0).
-
QUEUE_ID: ID antrian penerima (dimulai dari 0).
-
LCORE_ID: ID core logis (dimulai dari 0).
-
-
Contoh berikut menggunakan dua core dan dua antrian:
./dpdk-l3fwd --legacy-mem -a 0000:00:05.0 --socket-mem 1024 -- -p 0x1 --config="(0,0,0),(0,1,1)" --parse-ptype-
Tripel pertama
(0,0,0): Core logis 0 (lcore0) memproses antrian 0 port 0. -
Tripel kedua
(0,1,1): Core logis 1 (lcore1) memproses antrian 1 port 0.

-
-
Gunakan skrip RSS untuk menghitung indeks hash
Gunakan skrip Python ini untuk menghitung antrian penerima mana yang dipetakan oleh sebuah paket, berdasarkan 4-tupel dan kunci hash-nya. Hasilnya membimbing konfigurasi tabel indireksi untuk mengarahkan aliran tertentu ke antrian yang ditentukan.
Contoh berikut menggunakan konfigurasi RSS dari sebuah ENI dengan 64 antrian:

Hitung nilai hash RSS menggunakan skrip dengan informasi 5-tuple berikut (sesuaikan nilai sesuai kebutuhan).
-
Alamat IP tujuan (-r): 10.0.0.1, yaitu alamat IP ENI instans penerima yang telah dikonfigurasi RSS.
-
Alamat IP sumber (-t): 10.0.0.251, yaitu alamat IP ENI pengirim.
-
Port tujuan (-R):
26000 -
Port sumber (-T):
18042 -
Kunci hash: Diperoleh dari konfigurasi tabel indirection RSS.
python ali_ecs_rss_calc.py -r 10.0.0.1 -t 10.0.0.251 -R 26000 -T 18042 -k 69:e8:7c:56:bf:03:9f:63:d7:c5:e5:96:b3:00:36:93:02:8c:d2:8f:cc:a9:00:65:fd:c8:94:71:5f:fd:c8:de:7a:30:a9:73:b3:33:0c:c6
Skrip tersebut menghitung hash menggunakan algoritma toeplitz. Pada hasil di bawah ini, sistem menggunakan panjang tabel indirection sebesar 128. Indeks hash 117 berarti paket dipetakan ke antrian pada indeks 117.

Lihat tabel indirection: indeks 117 dipetakan ke antrian 53, sehingga paket diproses oleh antrian 53.




