SR-IOV技术实现网卡数据分流到不同队列
前言
本文用于记录通过SR-IOV技术实现将指定的数据流映射到VF网卡队列。
需求说明
通过SR-IOV技术可以把物理网卡(PF)虚拟出多个VF,对于每个VF可以通过规则把数据分流到不同的VF网卡队列。现在需要将指定的数据流分到VF队列1,其他数据分流到队列0。
操作步骤
1、BIOS使能VT-d和SR-IOV
- 进入BIOS,选择Socket Configuration --> IIO Configuration --> Intel@VT For Directed I/O (VT-d)设置项,将VT-d使能。
- 使能SR-IOV
进入如下设置项:
Advance --> PCI Subsystem --> SR-IOV Support选项,使能SR-IOV
- 添加内核参数
打开文件:vim /etc/default/grub
添加标记字段后保存退出
GRUB_CMDLINE_LINUX="… intel_iommu=on iommu=pt …"
接下来执行如下命令,然后重启:
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
reboot
重启后执行如下命令检查内核参数是否生效:
cat /proc/cmdline
打印信息有添加的字段表示添加成功
2、功能测试
- 测试环境如下:
测试选用的是X722网卡,网卡驱动及固件版本信息如下:
driver: i40e
version: 2.11.29
firmware-version: 4.11 0x80001dbf 0.0.0
可通过如下命令查看:
ethtool -i s0p2
- 创建VF
echo 2 > /sys/class/net/s0p2/device/sriov_numvfs
是否创建成功可通过lspci | grep Eth查看,输出信息会有两个Virtual Function的设备,这里创建了两个VF;也可以通过ifconfig -a看到多出了两个网卡
- 配置分流规则
ethtool -N s0p2 flow-type udp4 dst-ip 20.20.20.55 dst-port 5555 action 0x100000001 loc 2
通过如下命令查看分流规则的配置
ethtool -n s0p2
该规则的作用是将目的IP为20.20.20.55且目的端口为5555的数据流分到VF的队列1中。
-
配置VF网卡的IP为20.20.20.55
-
将配置IP的VF绑定到DPDK
-
在DPDK网卡初始化中初始化至少2个收包队列,运行DPDK程序,同时开启DPDK抓包,队列0的包写入文件1,队列1的包写入文件2。对端开始向这个测试网卡发包。
通过验证,IP为20.20.20.55且端口为5555的报文全部都在文件2中,其他报文在文件1中。由此验证分流成功。