Applies to SUSE Telco Cloud 3.6
40 DPDK #
DPDK (Data Plane Development Kit) 是一组用于快速数据包处理的库和驱动程序。它用于加速在各种 CPU 架构上运行的数据包处理工作负载。
DPDK 包括数据平面库和针对以下内容优化的网络接口卡 (NIC) 驱动程序:
队列管理器实现无锁队列。
缓冲区管理器预分配固定大小的缓冲区。
内存管理器在内存中分配对象池,并使用环形缓冲区存储空闲对象;确保对象均匀分布在所有
DRAM通道上。轮询模式驱动程序 (
PMD) 旨在无需异步通知即可工作,从而减少开销。数据包框架是一组用于辅助开发数据包处理流程的库。
以下步骤将展示如何启用 DPDK 以及如何从 NICs 创建 VFs,以供 DPDK 接口使用:
安装
DPDK软件包:
$ transactional-update pkg install dpdk dpdk-tools libdpdk-25
$ reboot内核参数:
要使用 DPDK,请使用一些驱动程序来启用内核中的特定参数:
| parameter | value | 描述 |
|---|---|---|
IOMMU | pt | 此选项启用 |
intel_iommu or amd_iommu | on | 此选项启用 |
要启用这些参数,请将它们添加到 /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