|Index|SUSE Telco Cloud Documentação|Configuração de recursos de Telco|DPDK
Applies to SUSE Telco Cloud 3.6

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:

  1. Um gerenciador de filas implementa filas sem bloqueio.

  2. Um gerenciador de buffers pré-aloca buffers de tamanho fixo.

  3. 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.

  4. Drivers de modo de polling (PMD) são projetados para funcionar sem notificações assíncronas, reduzindo a sobrecarga.

  5. 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
$ reboot
  • Parâmetros kernel:

Para usar o DPDK, empregue alguns drivers para habilitar certos parâmetros do kernel:

parametervaluedescrição

iommu

pt

Esta opção habilita o uso do driver vfio para as interfaces DPDK.

intel_iommu or amd_iommu

on

Esta opção habilita o uso de vfio para VFs.

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
$ reboot
  • Carregue o módulo do kernel vfio-pci e habilite SR-IOV nas NICs. O primeiro argumento indica o driver vfio-pci para 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=1
  • Crie algumas funções virtuais (VFs) a partir do NICs.

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_numvfs
  • Vincule 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.3
  • Revise 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