DPDK使用linux drivers(二十九)

不同的PMD可能需要不同的内核驱动程序才能正常工作。根据所用的PMD,应加载相应的内核驱动程序并将其绑定到网络端口。

1. UIO

一个小的内核模块,用于设置设备,将设备内存映射到用户空间并注册中断。在许多情况下,Linux内核中包含的标准uio_pci_generic模块可以提供uio功能。可以使用以下命令加载该模块:

sudo modprobe uio_pci_generic

注意:
uio_pci_generic模块不支持虚拟函数的创建。

作为uio_pci_generic的替代,DPDK还包括igb_uio模块,该模块可在上述kmod子目录中找到。可以如下所示加载它:

sudo modprobe uio
sudo insmod kmod/igb_uio.ko

注意
从DPDK v20.02开始默认禁用igb_uio模块。要构建它,应启用配置选项CONFIG_RTE_EAL_IGB_UIO。计划将igb_uio模块移动到其他git存储库。

注意
对于某些不支持传统中断的设备,例如如果使用虚拟功能(VF)设备,则可能需要使用igb_uio模块代替uio_pci_generic。

注意
如果启用了UEFI安全启动,则Linux内核可能会禁止在系统上使用UIO。因此,用于DPDK的设备应绑定到vfio-pci内核模块,而不是igb_uio或uio_pci_generic。有关更多详细信息,请参见下面的将网络端口绑定到内核模块和从内核模块解除绑定。

注意

如果用于DPDK的设备绑定到uio_pci_generic内核模块,请确保IOMMU已禁用或直通。可以在x86_64系统上的GRUB命令行中在inommu = pt上添加intel_iommu = off或amd_iommu = off或intel_iommu = on或intel_iommu = on,或者在aarch64系统上添加iommu.passthrough = 1。

由于DPDK 1.7及更高版本提供VFIO支持,因此对于支持使用VFIO的平台,可以选择使用UIO。

2. VFIO

与UIO相比,依靠IOMMU保护,驱动程序更强大,更安全。要使用VFIO,必须加载vfio-pci模块:

sudo modprobe vfio-pci

请注意,为了使用VFIO,您的内核必须支持它。从3.6.0版开始,Linux内核中已包含VFIO内核模块,通常默认情况下会提供VFIO内核模块,但是请查阅您的发行版文档以确保确实如此。

从Linux 5.7版开始的vfio-pci模块支持虚拟功能的创建。将PF绑定到vfio-pci模块后,用户可以通过sysfs接口创建VF,并将这些VF自动绑定到vfio-pci模块。

当PF绑定到vfio-pci时,它具有由随机生成的初始VF令牌。出于安全原因,此令牌是只写的,用户无法直接从内核读取它。要访问VF,用户需要使用令牌参数启动PF,以UUID格式设置VF令牌,然后可以使用此新令牌访问VF。

由于vfio-pci模块使用VF令牌作为内部数据来提供SR-IOV PF和VF之间的协作,因此DPDK可以对绑定到一个应用程序的所有PF设备使用相同的VF令牌。可以通过EAL参数–vfio-vf-token指定此VF令牌。

1. Generate the VF token by uuid command
    14d63f20-8445-11ea-8900-1f9ce7d5650d

2. sudo modprobe vfio-pci enable_sriov=1

2. ./usertools/dpdk-devbind.py -b vfio-pci 0000:86:00.0

3. echo 2 > /sys/bus/pci/devices/0000:86:00.0/sriov_numvfs

4. Start the PF:
    ./x86_64-native-linux-gcc/app/testpmd -l 22-25 -n 4 -w 86:00.0 \
     --vfio-vf-token=14d63f20-8445-11ea-8900-1f9ce7d5650d --file-prefix=pf -- -i

5. Start the VF:
    ./x86_64-native-linux-gcc/app/testpmd -l 26-29 -n 4 -w 86:02.0 \
     --vfio-vf-token=14d63f20-8445-11ea-8900-1f9ce7d5650d --file-prefix=vf0 -- -i

另外,要使用VFIO,内核和BIOS都必须支持并配置为使用IO虚拟化(例如Intel®VT-d)。

注意
vfio-pci模块不支持在Linux 5.7之前的版本中创建虚拟功能。

为了在以非特权用户身份运行DPDK应用程序时正确运行VFIO,还应设置正确的许可权。这可以通过使用DPDK安装脚本(位于dpdk-setup.sh,位于usertools目录中)来完成。

注意
可以在没有IOMMU的情况下使用VFIO。尽管这与使用UIO一样不安全,但在IOMMU不可用的情况下,它的确使用户可以保持VFIO拥有的设备访问和编程的程度。

原文链接:http://doc.dpdk.org/guides/linux_gsg/linux_drivers.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值