40 DPDK #
DPDK (Data Plane Development Kit) es un conjunto de bibliotecas y controladores para el procesamiento rápido de paquetes. Se utiliza para acelerar las cargas de trabajo de procesamiento de paquetes que se ejecutan en una amplia variedad de arquitecturas de CPU.
El DPDK incluye bibliotecas de plano de datos y controladores de tarjeta de interfaz de red (NIC) optimizados para lo siguiente:
Un gestor de colas implementa colas sin bloqueo.
Un gestor de búferes preasigna búferes de tamaño fijo.
Un gestor de memoria asigna grupos de objetos en la memoria y utiliza un anillo para almacenar objetos libres; garantiza que los objetos se distribuyan equitativamente en todos los
DRAMcanales.Los controladores en modo sondeo (
PMD) están diseñados para funcionar sin notificaciones asíncronas, lo que reduce la sobrecarga.Un marco de paquetes como un conjunto de bibliotecas que sirven de ayuda para desarrollar el procesamiento de paquetes.
Los siguientes pasos mostrarán cómo habilitar DPDK y cómo crear VFs a partir de NICs para que sean utilizados por las interfaces DPDK:
Instale el paquete
DPDK:
$ transactional-update pkg install dpdk dpdk-tools libdpdk-25
$ rebootParámetros del kernel:
Para utilizar DPDK, utiliza algunos controladores para habilitar ciertos parámetros en el núcleo de Linux:
| parameter | valor | description |
|---|---|---|
iommu | pt | Esta opción permite el uso del controlador |
intel_iommu or amd_iommu | on | Esta opción permite el uso de |
Para habilitar los parámetros, añádelos al archivo /etc/default/grub:
GRUB_CMDLINE_LINUX="BOOT_IMAGE=/boot/vmlinuz-6.4.0-9-rt root=UUID=77b713de-5cc7-4d4c-8fc6-f5eca0a43cf9 skew_tick=1 rd.timeout=60 rd.retry=45 console=ttyS1,115200 console=tty0 default_hugepagesz=1G hugepagesz=1G hugepages=40 hugepagesz=2M hugepages=0 ignition.platform.id=openstack net.ifnames=1 intel_iommu=on iommu=pt irqaffinity=0,31,32,63 isolcpus=domain,nohz,managed_irq,1-30,33-62 nohz_full=1-30,33-62 nohz=on mce=off nosoftlockup nowatchdog nmi_watchdog=0 quiet rcu_nocb_poll rcu_nocbs=1-30,33-62 rcupdate.rcu_cpu_stall_suppress=1 rcupdate.rcu_expedited=1 rcupdate.rcu_normal_after_boot=1 rcupdate.rcu_task_stall_timeout=0 rcutree.kthread_prio=99 security=selinux selinux=1 idle=poll"Actualiza la configuración de GRUB y reinicia el sistema para aplicar los cambios:
$ transactional-update grub.cfg
$ rebootCarga el módulo del núcleo de Linux
vfio-pciy habilitaSR-IOVen las NIC. El primer argumento indica el controladorvfio-pcipara admitir SR-IOV, y el segundo argumento evita que el dispositivo PCI entre en un estado de bajo consumo cuando está inactivo:
$ modprobe vfio-pci enable_sriov=1 disable_idle_d3=1Cread algunas funciones virtuales (
VFs) a partir deNICs.
Para crear para VFs, por ejemplo, para dos NICs diferentes, se requieren los siguientes comandos:
$ echo 4 > /sys/bus/pci/devices/0000:51:00.0/sriov_numvfs
$ echo 4 > /sys/bus/pci/devices/0000:51:00.1/sriov_numvfsVinculad las nuevas VFs con el controlador
vfio-pci:
$ dpdk-devbind.py -b vfio-pci 0000:51:01.0 0000:51:01.1 0000:51:01.2 0000:51:01.3 \
0000:51:11.0 0000:51:11.1 0000:51:11.2 0000:51:11.3Revisad que la configuración se haya aplicado correctamente:
$ dpdk-devbind.py -s
Network devices using DPDK-compatible driver
============================================
0000:51:01.0 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio
0000:51:01.1 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio
0000:51:01.2 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio
0000:51:01.3 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio
0000:51:01.0 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio
0000:51:11.1 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio
0000:51:21.2 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio
0000:51:31.3 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio
Network devices using kernel driver
===================================
0000:19:00.0 'BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet 1751' if=em1 drv=bnxt_en unused=igb_uio,vfio-pci *Active*
0000:19:00.1 'BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet 1751' if=em2 drv=bnxt_en unused=igb_uio,vfio-pci
0000:19:00.2 'BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet 1751' if=em3 drv=bnxt_en unused=igb_uio,vfio-pci
0000:19:00.3 'BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet 1751' if=em4 drv=bnxt_en unused=igb_uio,vfio-pci
0000:51:00.0 'Ethernet Controller E810-C for QSFP 1592' if=eth13 drv=ice unused=igb_uio,vfio-pci
0000:51:00.1 'Ethernet Controller E810-C for QSFP 1592' if=rename8 drv=ice unused=igb_uio,vfio-pci