Menyiapkan DPDK di komputer virtual Linux

Data Plane Development Kit (DPDK) di Azure menawarkan kerangka kerja pemrosesan paket ruang pengguna yang lebih cepat untuk aplikasi intensif kinerja. This framework bypasses the virtual machine’s kernel network stack.

Dalam pemrosesan paket biasa yang menggunakan tumpukan jaringan kernel, prosesnya digerakkan oleh interupsi. When the network interface receives incoming packets, there's a kernel interrupt to process the packet and a context switch from the kernel space to the user space. DPDK eliminates context switching and the interrupt-driven method in favor of a user-space implementation that uses poll mode drivers for fast packet processing.

DPDK terdiri dari sekumpulan pustaka ruang pengguna yang menyediakan akses ke sumber daya tingkat bawah. These resources can include hardware, logical cores, memory management, and poll mode drivers for network interface cards.

DPDK dapat berjalan pada komputer virtual Azure yang mendukung beberapa distribusi sistem operasi. DPDK memberikan diferensiasi kinerja utama dalam mendorong implementasi virtualisasi fungsi jaringan. Implementasi ini dapat berupa appliance virtual jaringan (NVAs), seperti router virtual, firewall, VPN, load balancer, inti paket yang berkembang, dan aplikasi DDoS (denial-of-service).

Daftar instruksi penyiapan untuk DPDK di MANA VM tersedia di sini: Microsoft Azure Network Adapter (MANA) dan DPDK di Linux

Keuntungan

Paket per detik (PPS) lebih tinggi: Melewati kernel dan mengambil kendali paket di ruang pengguna mengurangi jumlah siklus dengan menghilangkan pengalihan konteks. Ini juga meningkatkan laju paket yang diproses per detik di komputer virtual Azure Linux.

Versi minimum sistem operasi yang didukung

Distribusi dari Azure Marketplace berikut didukung:

Linux OS Kernel version
Ubuntu 18.04 4.15.0-1014-azure+
SLES 15 SP1 4.12.14-8.19-azure+
RHEL 7.5 3.10.0-862.11.6.el7.x86_64+
Debian 10 4.19.0-1-cloud+

Versi yang dicatat adalah persyaratan minimum. Versi yang lebih baru juga didukung.

Daftar persyaratan untuk DPDK di MANA VM tersedia di sini: Microsoft Azure Network Adapter (MANA) dan DPDK di Linux

Custom kernel support

Untuk versi kernel Linux apa pun yang tidak tercantum, lihat Patch untuk membangun kernel Linux yang disetel Azure. Untuk informasi lebih lanjut, Anda juga dapat menghubungi aznetdpdk@microsoft.com.

Dukungan wilayah

Semua wilayah Azure mendukung DPDK.

Prasyarat

Jaringan terakselerasi harus diaktifkan pada komputer virtual Linux. Komputer virtual harus memiliki setidaknya dua antarmuka jaringan, dengan satu antarmuka untuk manajemen. Mengaktifkan jaringan yang dipercepat pada antarmuka manajemen tidak disarankan. Pelajari cara membuat komputer virtual Linux dengan jaringan terakselerasi aktif.

Selain itu, DPDK menggunakan verba RDMA untuk membuat antrean data pada Adaptor Jaringan. Di VM, pastikan driver kernel RDMA yang benar dimuat. ** Mereka bisa menjadi mlx4_ib, mlx5_ib, atau mana_ib tergantung pada ukuran VM.

Instruksi penginstalan DPDK untuk MANA VM tersedia di sini: Microsoft Azure Network Adapter (MANA) dan DPDK di Linux

Install build dependencies

RHEL7.5

yum -y groupinstall "Infiniband Support"
sudo dracut --add-drivers "mlx4_en mlx4_ib mlx5_ib" -f
yum install -y gcc kernel-devel-`uname -r` numactl-devel.x86_64 librdmacm-devel libmnl-devel meson

Menyusun dan memasang DPDK secara manual

  1. Unduh DPDK terbaru. Versi 22.11 LTS atau yang lebih baru direkomendasikan untuk Azure.

  2. Buat konfigurasi default dengan meson builddir.

  3. Kompilasikan dengan ninja -C builddir.

  4. Install with DESTDIR=<output folder> ninja -C builddir install.

Konfigurasikan lingkungan runtime

Setelah memulai ulang, jalankan perintah berikut ini sekali:

  1. Hugepages

    • Konfigurasikan hugepage dengan menjalankan perintah berikut, sekali untuk setiap node numa:
     echo 1024 | sudo tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepages
    
    • Create a directory for mounting with mkdir /mnt/huge.

    • Mount hugepages with mount -t hugetlbfs nodev /mnt/huge.

    • Check that hugepages are reserved with grep Huge /proc/meminfo.

    • Contoh di atas adalah untuk halaman besar berukuran 2M. 1G huge pages can also be used.

    Catatan

    There is a way to modify the grub file so that hugepages are reserved on boot by following the instructions for the DPDK. Instruksinya ada di bagian bawah halaman. When you're using an Azure Linux virtual machine, modify files under /etc/config/grub.d instead, to reserve hugepages across reboots.

  2. Alamat MAC & IP: Gunakan ifconfig –a untuk melihat alamat MAC dan IP antarmuka jaringan. Antarmuka jaringan VF dan antarmuka jaringan NETVSC memiliki alamat MAC yang sama, tetapi hanya antarmuka jaringan NETVSC yang memiliki alamat IP. Antarmuka VF berjalan sebagai antarmuka subordinat NETVSC.

  3. Alamat PCI

    • Gunakan ethtool -i <vf interface name> untuk mengetahui alamat PCI mana yang akan digunakan untuk VF.

    • Jika eth0 telah mengaktifkan jaringan terakselerasi, pastikan bahwa testpmd tidak mengambil alih perangkat VF pci untuk eth0. Jika aplikasi DPDK secara tidak sengaja mengambil alih antarmuka jaringan manajemen dan menyebabkan Anda kehilangan koneksi SSH, gunakan konsol serial untuk menghentikan aplikasi DPDK. Anda juga dapat menggunakan konsol serial untuk menghentikan atau memulai komputer virtual.

  4. Muat ibuverbs pada setiap reboot dengan modprobe -a ib_uverbs. For SLES 15 only, also load mlx4_ib with modprobe -a mlx4_ib.

Master PMD

Aplikasi DPDK harus berjalan melalui master PMD yang diekspos di Azure. Jika aplikasi berjalan langsung di atas VF PMD, aplikasi tidak menerima semua paket yang ditujukan untuk VM, karena beberapa paket muncul di atas antarmuka sintetis. DPDK mendukung dua jenis PMD master: NetVSC PMD dan Failsafe PMD. Master PMD menjamin bahwa aplikasi menerima semua paket yang memang ditujukan kepadanya. It also makes sure that the application keeps running in DPDK mode over master PMD, even if the VF is revoked when the host is being serviced.

NetVSC PMD

NetVSC adalah PMD yang direkomendasikan untuk dijalankan sebagai master PMD di Azure. Ini menjamin bahwa aplikasi menerima semua paket yang ditujukan untuk itu. It also makes sure that the application keeps running in DPDK mode, even if the VF is revoked when the host is being serviced. Untuk informasi selengkapnya tentang cara menggunakan dan mengonfigurasi NetVSC PMD, lihat (https://doc.dpdk.org/guides/nics/netvsc.html).

Failsafe PMD

Perhatian: menjalankan PMD failsafe tidak disarankan di Azure. Jika versi DPDK Anda adalah 22.11 LTS atau yang lebih baru, gunakan NetVSC PMD disarankan.

Sebagai alternatif, Anda dapat menjalankan aplikasi DPDK melalui PMD failsafe. For more information about failsafe PMD see Fail-safe poll mode driver library.

Jalankan testpmd

Untuk menjalankan testpmd dalam mode root, gunakan sudo sebelum perintah testpmd.

Dasar: Periksa kewarasan, inisialisasi adapter failsafe

  1. Jalankan perintah berikut untuk memulai aplikasi testpmd satu port:

    testpmd -w <pci address from previous step> \
      -- -i \
      --port-topology=chained
    
  2. Jalankan perintah berikut untuk memulai aplikasi testpmd dua port:

    testpmd -w <pci address nic1> \
    -w <pci address nic2> \
    -- -i
    

Setelah dimulai, jalankan show port info all untuk memeriksa informasi port. You should see one or two DPDK ports that are net_netvsc.

  1. Gunakan start <port> /stop <port> untuk memulai lalu lintas.

Perintah sebelumnya memulai testpmd dalam mode interaktif, yang disarankan untuk mencoba perintah testpmd.

Dasar: Pengirim tunggal/penerima tunggal

Perintah berikut ini secara berkala mencetak statistik paket per detik:

  1. Di sisi TX, jalankan perintah berikut ini:

    testpmd \
      -l <core-list> \
      -n <num of mem channels> \
      -w <pci address of the device you plan to use> \
      -- --port-topology=chained \
      --nb-cores <number of cores to use for test pmd> \
      --forward-mode=txonly \
      --eth-peer=<port id>,<receiver peer MAC address> \
      --stats-period <display interval in seconds>
    
  2. Di sisi RX, jalankan perintah berikut ini:

    testpmd \
      -l <core-list> \
      -n <num of mem channels> \
      -w <pci address of the device you plan to use> \
      -- --port-topology=chained \
      --nb-cores <number of cores to use for test pmd> \
      --forward-mode=rxonly \
      --eth-peer=<port id>,<sender peer MAC address> \
      --stats-period <display interval in seconds>
    

Ketika Anda menjalankan perintah sebelumnya pada komputer virtual, ubah IP_SRC_ADDR dan IP_DST_ADDR di app/test-pmd/txonly.c untuk mencocokkan alamat IP sebenarnya dari komputer virtual sebelum Anda kompilasi. Jika tidak, paket dibuang sebelum mencapai penerima.

Tingkat Lanjut: Pengirim tunggal/penerus tunggal

Perintah berikut ini secara berkala mencetak statistik paket per detik:

  1. Di sisi TX, jalankan perintah berikut ini:

    testpmd \
      -l <core-list> \
      -n <num of mem channels> \
      -w <pci address of the device you plan to use> \
      -- --port-topology=chained \
      --nb-cores <number of cores to use for test pmd> \
      --forward-mode=txonly \
      --eth-peer=<port id>,<receiver peer MAC address> \
      --stats-period <display interval in seconds>
    
  2. Di sisi FWD, jalankan perintah berikut ini:

    testpmd \
      -l <core-list> \
      -n <num of mem channels> \
      -w <pci address NIC1> \
      -w <pci address NIC2> \
      -- --nb-cores <number of cores to use for test pmd> \
      --forward-mode=io \
      --eth-peer=<recv port id>,<sender peer MAC address> \
      --stats-period <display interval in seconds>
    

Ketika Anda menjalankan perintah sebelumnya pada komputer virtual, ubah IP_SRC_ADDR dan IP_DST_ADDR di app/test-pmd/txonly.c untuk mencocokkan alamat IP sebenarnya dari komputer virtual sebelum Anda kompilasi. Otherwise, the packets are dropped before reaching the forwarder. Anda tidak dapat memiliki komputer ketiga yang menerima lalu lintas yang diteruskan, karena penerus testpmd tidak mengubah alamat layer-3, kecuali Anda membuat beberapa perubahan kode.

sudo yum install -y dpdk

Referensi