Linux网卡驱动
更新于 2021-05-06
内核模块
不同的轮询模式需要使用不同的内核驱动模块,相应的网口也要绑到对应的驱动.
内核模块Git仓库
1.VFIO
VFIO简介,稍后补.
| Bash |
|---|
| #安装内核模块
sudo modprobe vfio-pci
|
2.非IOMMU模式下的VFIO
在不支持IOMMU的设备上启动VFIO.
| Bash |
|---|
| #安装内核模块
modprobe vfio enable_unsafe_noiommu_mode=1
#或者在已启用的系统上
echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
|
3.UIO
UIO简介,稍后补.
| Bash |
|---|
| #安装内核模块,注意:该内核模块不支持vf
sudo modprobe uio_pci_generic
#或者
sudo modprobe uio
sudo insmod igb_uio.ko #该模块是dpdk编译出来的
##注意: igb_uio代码已经从dpdk代码中分离,需要单独下载编译
|
内核模块安装加载
| Bash |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | #内核模块路径
/lib/modules/`uname -a`/
# (1)将dpdk内核模块拷贝到该目录下
mkdir /lib/modules/`uname -a`/dpdk
cp /path/to/dpdk-kmod/igb_uio.ko /lib/modules/`uname -a`/dpdk
cp /path/to/dpdk-kmod/rte_kni.ko /lib/modules/`uname -a`/dpdk
# (2)安装
cd /lib/modules/`uname -a`/dpdk
modprobe uio
insmod igb_uio.ko
insmod rte_kni.ko
# (3)更新modules.dep
depmod
#重启后系统会自动加载dpdk内核模块
|
4.分叉驱动
该驱动和linux内核驱动协作.
后续使用再补充.
5.绑定/解绑网口
针对使用UIO和VFIO驱动的网口,可以使用下面方式绑定.
| Bash |
|---|
| #查看网口绑定状态
./usertools/dpdk-devbind.py --status
#绑定网口
./usertools/dpdk-devbind.py --bind=uio_pci_generic 04:00.1
#或
./usertools/dpdk-devbind.py --bind=uio_pci_generic eth1
./usertools/dpdk-devbind.py --bind=ixgbe 82:00.*
./usertools/dpdk-devbind.py -b ixgbe 82:00.*
|
6.VFIO问题定位
| Bash |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | dmesg | tail
#...
#[ 1297.875090] vfio-pci: probe of 0000:31:00.0 failed with error -22
#...
#大多数情况下:`error -22`意味着IOMMU不支持,VFIO子系统未启用.
#检测内核启动参数
cat /proc/cmdline
#检测内核启动配置参数
##检测IOMMU相关参数
cat /boot/config-$(uname -r) | grep IOMMU
cat /boot/config-$(uname -r) | grep NOIOMMU
#如果未配置CONFIG_VFIO_NOIOMMU,VFIO则不能工作在no-IOMMU模式
|