- 版本状态
BIOS:MEC2.00.08
I40e: 1.6.27-k
Dpdk:19.11
Centos:7.4.1708 kernel:3.10.0
- 准备
- BIOS enable SR-IOV and VT-d
2.开启大页表和sriov
default_hugepagesz=1G hugepagesz=1G hugepages=8 intel_iommu=on ixgbe.max_vfs=2
更新:
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
3.上面的ixgbe.max_vfs=2在本环境不生效,手动配置(用哪个配哪个):
Echo 2 > /sys/bus/pci/devices/0000\:b8\:00.0/sriov_numvfs
lspci | grep -i eth可以看到:
b8:06.0 Ethernet controller: Intel Corporation X722 Virtual Function (rev 04)
b8:06.1 Ethernet controller: Intel Corporation X722 Virtual Function (rev 04)
- Dpdk收发验证:
将源码放到工控机,进行编译,分别测试helloworld 和skeleton例程来测试环境
Hellworld:
1G大页表已经在启动是配置,还是报错:
Cannot get hugepage information.
解决方法:
挂载一下:
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
运行通过;
下面是用skeletom来测试收包:
1)需要绑定两个网口
2)稍微修改一下:原来例程将一个网口收到的包发到另外一个口,这里就从1口发0口收到就打印收到的个数。
3)运行时报错
eth_i40e_dev_init(): Failed to init adminq: -66
EAL: ethdev initialisation failedEAL: Requested device 0000:b8:00.0 cannot be used
添加命令行参数参数iommu=pt解决
4)测试通过
sriov验证
- 使用x722的第1个光口,对接i350的光口,从i350给x722发包;
- 配置两个vf: echo 2 > /sys/bus/pci/devices/0000\:b8\:00.0/sriov_numvfs
- 给vf0配置vlan11和mac
ip link set dev enp184s0f0 vf 0 mac 00:00:00:00:00:01(可以配全0,不能配全ff)
ip link set dev enp184s0f0 vf 0 vlan 10
ip link show 可以看到有没有设成功
- 将vf0 ifconfig up起来,从i350发送vlan为11,mac为00:00:00:00:00:01小于1500的包,通过tcpdump -i xxx(vf0网口名称)进行抓包,可以抓取到发送过来的包
- 将vf0绑定igb_uio:
dpdk-devbind.py --bind=igb_uio b8:02.0
在skeleton查询里面收到发过来的包;
接下来验证:
Sriov模式:
验证不设mac(不通过,可以不设vlan必须设置mac)
验证大于1500的包(修改配置,通过)
验证不设vlan(通过)
验证Vmdq模式(通过)