|Index|SUSE Telco Cloud 文档|电信功能配置|DPDK
Applies to SUSE Telco Cloud 3.6

40 DPDK

DPDK (Data Plane Development Kit) 是一组用于快速数据包处理的库和驱动程序。它用于加速在各种 CPU 架构上运行的数据包处理工作负载。 DPDK 包括数据平面库和针对以下内容优化的网络接口卡 (NIC) 驱动程序:

  1. 队列管理器实现无锁队列。

  2. 缓冲区管理器预分配固定大小的缓冲区。

  3. 内存管理器在内存中分配对象池,并使用环形缓冲区存储空闲对象;确保对象均匀分布在所有 DRAM 通道上。

  4. 轮询模式驱动程序 (PMD) 旨在无需异步通知即可工作,从而减少开销。

  5. 数据包框架是一组用于辅助开发数据包处理流程的库。

以下步骤将展示如何启用 DPDK 以及如何从 NICs 创建 VFs,以供 DPDK 接口使用:

  • 安装 DPDK 软件包:

$ transactional-update pkg install dpdk dpdk-tools libdpdk-25
$ reboot
  • 内核参数:

要使用 DPDK,请使用一些驱动程序来启用内核中的特定参数:

parametervalue描述

IOMMU

pt

此选项启用 vfio 驱动程序以用于 DPDK 接口。

intel_iommu or amd_iommu

on

此选项启用 vfio 以用于 VFs

要启用这些参数,请将它们添加到 /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"

更新 GRUB 配置并重启系统以应用更改:

$ transactional-update grub.cfg
$ reboot
  • 加载 vfio-pci 内核模块并在 NIC 上启用 SR-IOV。第一个参数指示 vfio-pci 驱动程序支持 SR-IOV,第二个参数可防止 PCI 设备在空闲时进入低功耗状态:

$ modprobe vfio-pci enable_sriov=1 disable_idle_d3=1
  • NICs 创建一些虚拟功能(VF) (VFs)。

要为 VFs 创建(例如,针对两个不同的 NICs),需要执行以下命令:

$ echo 4 > /sys/bus/pci/devices/0000:51:00.0/sriov_numvfs
$ echo 4 > /sys/bus/pci/devices/0000:51:00.1/sriov_numvfs
  • 将新的虚拟功能与 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
  • 检查配置是否已正确应用:

$ 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