基于dpdk19.11验证sriov功能

  • 版本状态

BIOS:MEC2.00.08

I40e: 1.6.27-k

Dpdk:19.11

Centos:7.4.1708 kernel:3.10.0

  • 准备
  1. 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验证

  1. 使用x722的第1个光口,对接i350的光口,从i350给x722发包;
  2. 配置两个vf: echo 2 > /sys/bus/pci/devices/0000\:b8\:00.0/sriov_numvfs
  3. 给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 可以看到有没有设成功

  1. 将vf0 ifconfig up起来,从i350发送vlan为11,mac为00:00:00:00:00:01小于1500的包,通过tcpdump  -i  xxx(vf0网口名称)进行抓包,可以抓取到发送过来的包
  2. 将vf0绑定igb_uio:

         dpdk-devbind.py --bind=igb_uio b8:02.0

    在skeleton查询里面收到发过来的包;

接下来验证:

Sriov模式:

验证不设mac(不通过,可以不设vlan必须设置mac)

验证大于1500的包(修改配置,通过)

验证不设vlan(通过)

验证Vmdq模式(通过)

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_21640423/article/details/106197098