参考:http://doc.dpdk.org/guides/linux_gsg/linux_drivers.html#linux-gsg-binding-kernel
不同的 PMD 可能需要不同的内核驱动程序才能正常工作。根据所使用的 PMD,应加载相应的内核驱动程序,并且网络端口应绑定到该驱动程序。
1、绑定和取消绑定内核模块的网络端口
注意:使用分叉驱动程序的 PMD 不应与其内核驱动程序解除绑定。本部分适用于使用 UIO 或 VFIO 驱动程序的 PMD。有关更多详细信息,请参阅分叉驱动程序部分。
注意:建议在所有情况下将 vfio-pci 用作 DPDK 绑定端口的内核模块。如果 IOMMU 不可用,则可以在无 IOMMU 模式下使用 vfio-pci。如果由于某种原因,vfio 不可用,则可以使用基于 UIO 的模块、igb_uio和uio_pci_generic。有关详细信息,请参阅 UIO 部分。
大多数设备要求 DPDK 使用的硬件与其使用的内核驱动程序解除绑定,而是在应用程序运行之前绑定到 vfio-pci 内核模块。对于此类 PMD,Linux 控制下的任何网络端口或其他硬件都将被忽略,并且应用程序无法使用*。
要将端口绑定到 vfio-pci 模块以供 DPDK 使用,或将端口返回到 Linux 控件,在 usertools 子目录中提供了一个名为 dpdk-devbind.py 的实用程序脚本。此实用程序可用于提供系统上网络端口当前状态的视图,以及从不同的内核模块(包括 VFIO 和 UIO 模块)绑定和取消绑定这些端口。下面是如何使用该脚本的一些示例。脚本及其参数的完整描述可以通过使用 --help 或 --usage 选项调用脚本来获取。请注意,在运行 dpdk-devbind.py 脚本之前,应将要使用的 UIO 或 VFIO 内核模块加载到内核中。
注意:由于 VFIO 的工作方式,哪些设备可以与 VFIO 一起使用存在一定的限制。主要归结为IOMMU小组的工作方式。任何虚拟功能设备通常都可以单独与 VFIO 一起使用,但物理设备可能需要绑定到 VFIO 的所有端口,或者其中一些端口绑定到 VFIO,而其他端口根本不绑定到任何东西。
注意:如果您的设备位于 PCI 到 PCI 网桥后面,则该网桥将成为设备所在的 IOMMU 组的一部分。因此,桥接驱动程序还应与网桥 PCI 设备解除绑定,以便 VFIO 与网桥后面的设备配合使用。
注意:虽然任何用户都可以运行 dpdk-devbind.py 脚本来查看网络端口的状态,但绑定或取消绑定网络端口需要 root 权限。
要查看系统上所有网络端口的状态:
./usertools/dpdk-devbind.py --status
Network devices using DPDK-compatible driver
============================================
0000:82:00.0 '82599EB 10-GbE NIC' drv=vfio-pci unused=ixgbe
0000:82:00.1 '82599EB 10-GbE NIC' drv

文章讲述了DPDK(DataPlaneDevelopmentKit)在Linux环境中如何与内核驱动交互,特别是使用VFIO和UIO驱动进行网络端口的绑定与解绑。VFIO提供了一种安全的方法,依赖IOMMU保护,而UIO则是一种不安全但方便的替代方案。文章还涵盖了VFIO的无IOMMU模式、创建虚拟功能、VFIO平台以及分叉驱动程序的概念和使用方法。
1690

被折叠的 条评论
为什么被折叠?



