DPDK (1) - PMD驱动方案

为了支持Userspace IO,DPDK可以选择如下三种类型的驱动:

  • uio_pci_generic
  • uio + igb_uio
  • vfio-pci

uio_pci_generic是内核原生的一种uio驱动,该驱动提供了uio功能,直接使用如下命令加载:

sudo modprobe uio_pci_generic

这个原生驱动是不支持VF设备创建的,因此DPDK也提供了另外一种uio驱动igb_uio,它是可以用于宿主机上来创建VF设备的。适用性比内核原生的uio_pci_generic更强一些,其中igb_uio.ko是由dpdk代码库编译出来的:

sudo modprobe uio
sudo insmod kmod/igb_uio.ko

从DPDK release 1.7开始,DPDK对VFIO进行了支持,因此VFIO Driver成了新的可选项:

sudo modprobe vfio-pci

当DPDK使用vfio来实现网络功能时可以直接加载该驱动。

特别注意:
对于使用VFIO驱动来使用DPDK的场景,必须保证:
1.硬件上支持支持VT-x、VT-d,BIOS中需要打开相关特性
2.对于物理机的内核中需要支持IOMMU特性(在启动参数添加 iommu=pt, intel_iommu=on

物理机上使用DPDK

在物理机上使用DPDK,需要内核中加载DPDK PMD Driver,那么需要使用如下命令加载DPDK的驱动:

modprobe uio
insmod igb_uio
usertools/dpdk-devbind.py --bind=igb_uio bb:ss.f

当然这里我们也可以使用上面介绍过的其他类型的内核模块:uio_pci_generic 或者 vfio-pci

虚拟机中使用DPDK

对于支持SR-IOV的网卡来说,比如Intel的X710/XL710网卡,在虚拟化的环境中使用,网卡可以进行透传,本文以透传的方式来进行实践介绍,对于支持SR-IOV的网卡来说,它分为PF和VF模块,在宿主机中需要加载对应的PF Driver和VF Driver来驱动这两个子模块。

宿主机

在宿主机上可以直接使用Linux kernel官方的intel PF驱动,比如i40e,也可以使用DPDK专用的 PMD PF驱动。如果使用了DPDK PMD PF 驱动,那么这个宿主机网络的管理权就完全交给DPDK了。

  • 方案一:i40e驱动
rmmod i40e (To remove the i40e module)
insmod i40e.ko max_vfs=2,2 (To enable two Virtual Functions per port)

通过重新加载intel提供的i40e驱动,并指定max_vfs参数来创建VF功能,对于该网卡的VF功能内核默认使用的驱动为i40evf,因此在使用dpdk之前,还需要在Host上将VF与i40evf驱动解绑,重新绑定到vfio-pci驱动上:

modprobe vfio-pci

宿主机中需要使用vfio_pci这个内核模块来对需要分配给客户机的设备进行隐藏, 从而让宿主机和未被分配该设备的客户机都无法使用该设备, 达到隔离和安全使用的目的。而在客户机不需要使用该设备后, 让宿主机使用该设备, 则需要将其恢复到使用原本的驱动。

这里也可以利用DPDK提供的脚本dpdk_bind_nic.py来设置:

usertools/dpdk-devbind.py --bind=vfio-pci  bb:ss.f

此时该VF已经由vfio驱动接管,对于上一章介绍的,如果在宿主机上使用VFIO DPDK,那么此时就已经满足了条件,但是我们此处是为了演示虚拟机中使用DPDK,所以此时不能启动DPDK去使用该VF,而需要在虚拟机中透传该设备来使用。

  • 方案二:DPDK PMD PF驱动

需要内核启动参数中使能iommu=pt, intel_iommu=on,然后启动后加载DPDK驱动:

modprobe uio
insmod kmod/igb_uio.ko
usertools/dpdk-devbind.py --bind=igb_uio bb:ss.f
echo 2 > /sys/bus/pci/devices/0000\:bb\:ss.f/max_vfs (To enable two VFs on a specific PCI device)

虚拟机

对于虚拟机来说,透传过来的VFIO网卡对于虚拟机来说就相当于是一个常规的物理网卡,默认就会使用该物理网卡对应的驱动,比如i40e driver,那么如果要在虚拟机中使用DPDK,就需要把虚拟网卡重新绑定到igb_uio驱动,这样就可以在虚拟机中使用DPDK了。实际上操作还是与宿主机中一样:

modprobe uio
insmod kmod/igb_uio.ko
usertools/dpdk-devbind.py --bind=igb_uio bb:ss.f
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DPDK提供了多种不同类型的驱动程序,包括基于物理设备的驱动程序和虚拟设备驱动程序。其中一种虚拟设备驱动程序是libpcap-PMD驱动程序,它允许使用libpcap捕获和发送数据包。在本文中,我们将介绍如何使用libpcap-PMD驱动程序在DPDK中收发数据包。 1. 安装libpcap和libpcap-dev库 在使用libpcap-PMD驱动程序之前,需要先安装libpcap和libpcap-dev库。在Ubuntu系统中,可以使用以下命令进行安装: ``` sudo apt-get install libpcap0.8 libpcap0.8-dev ``` 2. 编译DPDK 在编译DPDK时,需要启用libpcap-PMD驱动程序。可以使用以下命令进行编译: ``` make config T=x86_64-native-linuxapp-gcc O=x86_64-native-linuxapp-gcc CONFIG_RTE_LIBRTE_PMD_PCAP=y make ``` 在这个命令中,CONFIG_RTE_LIBRTE_PMD_PCAP=y用于启用libpcap-PMD驱动程序。 3. 配置DPDK环境 在使用libpcap-PMD驱动程序之前,需要进行DPDK环境的配置。可以使用以下命令进行配置: ``` sudo modprobe uio_pci_generic sudo ./usertools/dpdk-devbind.py --bind=uio_pci_generic sudo ./usertools/dpdk-devbind.py --status ``` 这将加载uio_pci_generic内核模块,并将所有网络设备绑定到uio_pci_generic驱动程序。 4. 运行应用程序 在使用libpcap-PMD驱动程序时,需要指定使用libpcap作为数据包源和目的地。可以使用以下命令运行应用程序: ``` ./build/app/testpmd -c 0x03 -n 4 --vdev 'net_pcap0,rx_iface=<iface>,tx_iface=<iface>' -- -i --port-topology=loop ``` 在这个命令中,rx_iface和tx_iface参数分别指定libpcap-PMD驱动程序的接收和发送接口。可以使用以下命令查看可用接口: ``` sudo tcpdump -D ``` 5. 测试 在运行应用程序后,可以使用testpmd命令进行测试。可以使用以下命令发送和接收数据包: ``` testpmd> start tx_first testpmd> show port stats all ``` 在这个命令中,tx_first参数将启动数据包发送,show port stats all命令将显示端口统计信息。 这就是使用libpcap-PMD驱动程序在DPDK中收发数据包的过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值