模块安装

运行dpdk源文件(以18.11.2版本为例)中 usertools/dpdk-setup.sh 脚本可以选择如下选项18、19、20分别加载IGB_UIO、VFIO或者KNI模块。要能加载成功首先要编译安装好基础dpdk环境,加载成功后可以在/dev目录下看到vfio或kni文件夹。卸载这些模块可以选择该脚本的 31、32、33项命令

IGB UIO module

功能概述

IGB_UIO模块是Userspace I/O运行在用户空间的I/O技术,是实现用户空间下驱动程序的支撑机制。DPDK使用UIO机制使用网卡驱动程序(主要是Intel的千兆igb和万兆ixgbe驱动程序)运行在用户态,并采用轮询和零拷贝方式从网卡收取报文,提高收发报文的性能。通过 IGB_UIO 来 bind 指定的 PCI 网卡设备给到用户态的 PMD 使用。IGB_UIO 借助 UIO 技术来截获中断,并重设中断回调行为,从而绕过内核协议栈后续的处理流程。并且 IGB_UIO 会在内核初始化的过程中将网卡硬件寄存器映射到用户态。IGB_UIO模块的作用主要分为以下两点:

  1. 注册一个 PCI 设备
  2. 让用户态的 PMD 网卡驱动程序得以与 UIO 进行交互

加载 IGB_UIO 模块

dpdk 支持qos_网卡驱动


过了一会,lsmod|grep io也能看到igb-uio模块。

绑定网卡到IGB_UIO模块

选择 usertools/dpdk-setup.sh 脚本 24 选项,再输入网卡地址,注意这里要先把网卡down掉否则绑定不上。

dpdk 支持qos_网卡驱动_02


然后再用 23 选项来查看是否绑定成功。

解绑网卡

./usertools/dpdk-devbind.py -u 0000:1a:00.3

这个之后就在other drivers 里面了,需要再绑到内核网卡上,./usertools/dpdk-devbind.py -s 查看绑在内核里的网卡驱动类型
例如:0000:1a:00.2 'Ethernet Connection X722 for 1GbE 37d1' if=eno3 drv=i40e unused=igb_uio *Active*, 那么就是i40e. 使用命令./usertools/dpdk-devbind.py -b i40e 0000:1a:00.3 就可以用ifconfig看到该网卡了,无需重启

VFIO module

功能概述

加载 VFIO 模块

dpdk 支持qos_加载_03


过了一会,查看ls /dev|grep vfio可以看到文件夹vfio, lsmod|grep vf也能看到vfio模块。

绑定网卡到 VFIO 模块

KNI module

KNI 模块功能概述

加载 KNI 模块

dpdk 支持qos_加载_04


过了一会,查看ls /dev|grep kni 可以看到文件夹kni, lsmod|grep kni也能看到 rte_kni 模块。