模块安装
运行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模块的作用主要分为以下两点:
- 注册一个 PCI 设备
- 让用户态的 PMD 网卡驱动程序得以与 UIO 进行交互
加载 IGB_UIO 模块
过了一会,lsmod|grep io也能看到igb-uio模块。
绑定网卡到IGB_UIO模块
选择 usertools/dpdk-setup.sh 脚本 24 选项,再输入网卡地址,注意这里要先把网卡down掉否则绑定不上。
然后再用 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 模块
过了一会,查看ls /dev|grep vfio可以看到文件夹vfio, lsmod|grep vf也能看到vfio模块。
绑定网卡到 VFIO 模块
KNI module
KNI 模块功能概述
加载 KNI 模块
过了一会,查看ls /dev|grep kni 可以看到文件夹kni, lsmod|grep kni也能看到 rte_kni 模块。