40 DPDK #
DPDK (Data Plane Development Kit) é um conjunto de bibliotecas e drivers para processamento rápido de pacotes. Ele é usado para acelerar cargas de trabalho de processamento de pacotes executadas em uma ampla variedade de arquiteturas de CPU.
O DPDK inclui bibliotecas de plano de dados e drivers otimizados para a placa de interface de rede (NIC) para os seguintes fins:
Um gerenciador de filas implementa filas sem bloqueio.
Um gerenciador de buffers pré-aloca buffers de tamanho fixo.
Um gerenciador de memória aloca pools de objetos na memória e usa um anel para armazenar objetos livres; garante que os objetos sejam distribuídos igualmente em todos os canais
DRAM.Drivers de modo de polling (
PMD) são projetados para funcionar sem notificações assíncronas, reduzindo a sobrecarga.Uma estrutura de pacotes consiste em um conjunto de bibliotecas que auxiliam no desenvolvimento do processamento de pacotes.
As etapas a seguir mostrarão como habilitar DPDK e como criar VFs a partir do NICs para serem usados pelas interfaces DPDK:
Instale o pacote
DPDK:
$ transactional-update pkg install dpdk dpdk-tools libdpdk-25
$ rebootParâmetros kernel:
Para usar o DPDK, empregue alguns drivers para habilitar certos parâmetros do kernel:
| parameter | value | descrição |
|---|---|---|
iommu | pt | Esta opção habilita o uso do driver |
intel_iommu or amd_iommu | on | Esta opção habilita o uso de |
Para habilitar os parâmetros, adicione-os ao arquivo /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"Atualize a configuração do GRUB e reinicie o sistema para aplicar as alterações:
$ transactional-update grub.cfg
$ rebootCarregue o módulo do kernel
vfio-pcie habiliteSR-IOVnas NICs. O primeiro argumento indica o drivervfio-pcipara suportar SR-IOV, e o segundo argumento impede que o dispositivo PCI entre em um estado de baixo consumo de energia quando está ocioso:
$ modprobe vfio-pci enable_sriov=1 disable_idle_d3=1Crie algumas funções virtuais (
VFs) a partir doNICs.
Para criar para VFs, por exemplo, para dois NICs diferentes, os seguintes comandos são necessários:
$ echo 4 > /sys/bus/pci/devices/0000:51:00.0/sriov_numvfs
$ echo 4 > /sys/bus/pci/devices/0000:51:00.1/sriov_numvfsVincule as novas VFs com o driver
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.3Revise se a configuração foi aplicada corretamente:
$ 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