Skenario Operasi
Dokumen ini menjelaskan cara melakukan pengujian kinerja jaringan throughput tinggi CVM dengan metode DPDK.
Langkah-langkah Operasi
Langkah 1: Persiapan Dan Instalasi Lingkungan
Bab ini akan memandu Anda menyelesaikan penyiapan lingkungan pengujian DPDK, termasuk mengunduh kode sumber, mengekstrak, menginstal pustaka dependensi, dan mengompilasi.
Persiapan Lingkungan
CVM membutuhkan kemampuan akses jaringan publik. Anda dapat memilih untuk mengalokasikan IP Publik saat membuat CVM, atau mengonfigurasi IP Publik Elastis untuknya setelah CVM dibuat. CVM dikonfigurasi dengan beberapa kartu jaringan. Disarankan untuk menggunakan eth0 untuk pengujian dan menggunakan kartu jaringan lainnya untuk login jarak jauh.
Operasi terkait perlu dilakukan dengan hak akses root sistem. Mohon ajukan permohonan untuk izin terkait terlebih dahulu.
Panduan operasi berikut berlaku untuk sistem operasi TencentOS 3.0 dan yang lebih tinggi.
Siapkan 2 server pengujian, masing-masing berperan sebagai penerima dan pengirim.
Unduh Dan Ekstrak Paket Sumber DPDK
Gunakan perintah wget untuk mengunduh paket terkompresi kode sumber DPDK 23.11 dari repositori resmi dan mengekstraknya.
Keterangan:
Operasi selanjutnya harap dilakukan di dalam direktori setelah DPDK diekstrak.
wget https://fast.dpdk.org/rel/dpdk-23.11.tar.gz
tar -xf dpdk-23.11.tar.gz
cd dpdk-23.11
Instalasi Pustaka Ketergantungan Dan Kompilasi
Instal pustaka dependensi dan alat kompilasi yang diperlukan.
Instal pustaka dependensi numactl-devel (memerlukan hak akses root).
yum install numactl-devel -y
Instal alat pembangunan Python.
pip3 install meson ninja pyelftools
Gunakan meson untuk membangun proyek (mengatur jumlah inti logika maksimum menjadi 1024).
meson build -Dmax_lcores=1024
Gunakan ninja untuk mengompilasi proyek.
Perhatian:
Jika server pengujian yang Anda gunakan adalah tipe instans setelah Standar SA4 dan CPU memiliki spesifikasi tertinggi, silakan lihat Penanganan Skenario Khusus dan tambahkan langkah konfigurasi terkait. Langkah 2: Pengikatan Modul Driver Kernel
DPDK perlu mengikat modul driver kernel khusus untuk mengambil alih perangkat kartu jaringan.
Unduh Modul UIO
Kloning kode modul kernel dari repositori resmi DPDK:
git clone http://dpdk.org/git/dpdk-kmods
Atau gunakan protokol git (opsi cadangan).
git clone git://dpdk.org/dpdk-kmods
Kompilasi Modul UIO
Masuk ke direktori igb_uio dan lakukan kompilasi.
cd ./dpdk-kmods/linux/igb_uio
make
Memuat Modul UIO
Muat modul kernel uio dan igb_uio (memerlukan hak akses root).
modprobe uio
insmod ./dpdk-kmods/linux/igb_uio/igb_uio.ko
Kueri Dan Catat Alamat PCI Kartu Jaringan
Sebelum mengikat kartu jaringan, Anda perlu memperoleh dan mencatat alamat PCI dari kartu jaringan target. Jalankan perintah berikut untuk melihat dan mencatat informasi perangkat semua kartu jaringan:
ethtool -i eth0 | grep bus-info
Ikat Kartu Jaringan Ke Driver UIO
Gunakan alat yang disediakan oleh DPDK untuk mengikat kartu jaringan ke driver igb_uio.
1. Matikan kartu jaringan.
Perhatian:
Sebelum mematikan kartu jaringan, periksa apakah Anda saat ini sedang login jarak jauh ke CVM melalui IP Elastic Network Interface lainnya. Jika Anda menggunakan eth0 untuk login jarak jauh, hal ini akan menyebabkan koneksi terputus.
2. Ikat kartu jaringan ke driver igb_uio (perhatikan untuk menggantinya dengan alamat PCI yang sebenarnya).
./usertools/dpdk-devbind.py --bind=igb_uio 0000:02:01.0
Langkah 3: Konfigurasi Memori Halaman Besar
DPDK menggunakan memori halaman besar (Huge Pages) untuk meningkatkan efisiensi akses memori. Mengonfigurasi memori halaman besar adalah prasyarat yang diperlukan untuk menjalankan DPDK.
Jalankan perintah berikut untuk mengalokasikan memori halaman besar (di sini menggunakan halaman besar 2MB sebagai contoh, mengalokasikan 8192 halaman, total sekitar 16 GB):
echo 8192 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
Langkah 4: Jalankan Pengujian Kinerja
Pengujian kinerja DPDK menggunakan mode dua mesin RX-TX: satu server berfungsi sebagai penerima (RX), dan server lainnya berfungsi sebagai pengirim (TX).
Keterangan:
RX sebagai penerima, TX sebagai pengirim. Kedua server perlu menjalankan perintah yang sesuai secara terpisah.
Perintah dijalankan pada sisi penerima RX sebagai berikut:
C=4; Q=32; ./build/app/dpdk-testpmd -l 0-47 --proc-type primary --file-prefix bench -a 0000:1b:00.0 -- --burst=128 --nb-cores=$C --txd=4096 --rxd=4096 --txq=$Q --rxq=$Q --forward-mode=rxonly --stats-period=1
Perintah dijalankan pada sisi pengirim TX sebagai berikut:
C=4; Q=32; S=10.31.0.80; D=10.31.0.240; ./build/app/dpdk-testpmd -l 0-47 --proc-type primary --file-prefix bench -a 0000:1b:00.0 -- --burst=128 --nb-cores=$C --tx-ip $S,$D --txonly-multi-flow --txpkts=64 --txd=4096 --rxd=4096 --txq=$Q --rxq=$Q --forward-mode=txonly --stats-period=1
Penjelasan Detail Parameter
|
-a 0000:1b:00.0 | Menentukan alamat PCI kartu jaringan yang akan digunakan, perlu diganti sesuai dengan lingkungan aktual. |
--tx-ip S,D | Alamat IP tujuan untuk transmisi paket dari sisi TX, ganti sesuai dengan alamat kartu jaringan CVM. |
--txonly-multi-flow | Mengaktifkan mode pengiriman multi-aliran (jika tidak diatur, hanya satu aliran yang dikirim). |
--txpkts=64 | Panjang paket (dalam byte, termasuk header MAC), disarankan 64 untuk skenario pengujian PPS. |
-l 0-47 | |
--txq / --rxq = $Q | Jumlah antrian pengiriman/penerimaan, dapat dilihat melalui ethtool -l eth0 | grep Combined. |
--nb-cores=$C | Jumlah inti CPU yang benar-benar berpartisipasi dalam pengujian, direkomendasikan 2 ≤ C ≤ Q. |
--stats-period=1 | Menampilkan informasi statistik sekali per detik. |
Contoh hasil pengujian adalah sebagai berikut, sisi kiri adalah penerima RX, dan sisi kanan adalah pengirim TX:
Langkah 5: Pemulihan Lingkungan Pengujian
Setelah pengujian selesai, disarankan untuk mengembalikan lingkungan ke status awal, membebaskan sumber daya, dan menghindari dampak terhadap layanan lainnya.
Pulihkan Driver Kartu Jaringan
Gunakan alat dpdk-devbind.py untuk mengembalikan kartu jaringan ke driver secara default:
./usertools/dpdk-devbind.py -b virtio-pci 0000:00:08.0
Jika perintah di atas tidak berfungsi normal, Anda dapat menjalankan perintah berikut secara manual untuk melepas ikatan vfio-pci.
echo 0000:1b:00.0 > /sys/bus/pci/drivers/vfio-pci/unbind
echo virtio-pci > /sys/bus/pci/devices/0000\\:1b\\:00.0/driver_override
echo 0000:1b:00.0 > /sys/bus/pci/drivers/virtio-pci/bind
Pulihkan Memori Halaman Besar
Setel jumlah memori halaman besar ke nol.
echo 0 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
Aktifkan kembali kartu jaringan.
Penanganan Skenario Khusus
Jika server pengujian yang Anda gunakan adalah tipe instans setelah Tipe Standar SA4 dan CPU memiliki spesifikasi tertinggi, Anda perlu menambahkan langkah konfigurasi berikut.
Periksa Distribusi Antrian Lintas NUMA
Keterangan:
Untuk server dengan CPU multi-jalur, Anda perlu memastikan bahwa inti CPU yang digunakan DPDK dan kartu jaringan berada pada node NUMA yang sama, jika tidak, kinerja akan menurun secara signifikan.
1. Unduh dan lihat skrip
wget https://lag-dpdk-1326316016.cos.ap-guangzhou.myqcloud.com/dpdk_core_advisor.sh
2. Jalankan skrip untuk melihat distribusi NUMA antre-queue.
sh dpdk_core_advisor.sh eth0
Jika hasil yang dikembalikan menunjukkan distribusi antre-queue melintasi NUMA, silakan instal lag_dpdk.patch
Instal lag_dpdk.patch
1. Unduh skrip tambalan lag_dpdk.patch.
wget https://lag-dpdk-1326316016.cos.ap-guangzhou.myqcloud.com/lag_dpdk.patch
2. Terapkan tambalan.
git apply lag_dpdk.patch
patch -p1 < lag_dpdk.patch
3. Kompilasi ulang.
meson build -Dmax_lcores=1024
ninja -C build