【发布时间】:2021-06-28 01:50:34
【问题描述】:
我最近尝试将 SR-IOV VF pci 设备绑定到 docker 容器中的 DPDK 应用程序,预期场景:每个 docker 容器运行负责一个 sriov VF 的 DPDK 应用程序。但是 DPDK 应用程序可以看到所有 sriov VF 端口,这会导致不同的 docker 容器可以处理其他可能被另一个容器充电的 VF。
步骤如下:
(1)开启SR-IOV功能,虚拟功能设置正确
#lspci
04:10.1 以太网控制器:英特尔公司 82599 以太网控制器虚拟功能(修订版 01)
04:10.3 以太网控制器:英特尔公司 82599 以太网控制器虚拟功能(修订版 01)
04:10.5 以太网控制器:英特尔公司 82599 以太网控制器虚拟功能(修订版 01)
04:10.7 以太网控制器:英特尔公司 82599 以太网控制器虚拟功能(修订版 01)
(2) 运行两个 docker 容器
#docker run --privileged --name="sriov_test" -v /mnt/huge:/mnt/huge -itd centos:latest
(3)绑定 VF 端口到 igb_uio drv
#./dpdk-devbind.py -s
使用 DPDK 兼容驱动程序的网络设备
==============================================
0000:04:10.1 '82599 以太网控制器虚拟功能 10ed' drv=igb_uio 未使用=ixgbevf,vfio-pci
0000:04:10.3 '82599 以太网控制器虚拟功能 10ed' drv=igb_uio used=ixgbevf,vfio-pci
(4)运行 dpdk 应用程序 my_basicforwd
#./my_basicfwd -l 1 --log-level 8 -- -p 1
EAL:检测到 4 个 lcore
EAL:检测到 1 个 NUMA 节点
EAL:多进程套接字 /var/run/dpdk/rte/mp_socket
EAL:hugepages-1048576kB 中没有报告免费的大页面
EAL:正在探索 VFIO 支持...
EAL:已初始化 VFIO 支持
EAL:NUMA 插槽 -1 上的 PCI 设备 0000:00:1f.6
EAL:无效的 NUMA 套接字,默认为 0
EAL:探针驱动程序:8086:15b7 net_e1000_em
EAL:NUMA 插槽 -1 上的 PCI 设备 0000:04:00.0
EAL:无效的 NUMA 套接字,默认为 0
EAL:探针驱动程序:8086:10fb net_ixgbe
EAL:NUMA 插槽 -1 上的 PCI 设备 0000:04:00.1
EAL:无效的 NUMA 套接字,默认为 0
EAL:探针驱动程序:8086:10fb net_ixgbe
EAL:NUMA 插槽 -1 上的 PCI 设备 0000:04:10.1
EAL:无效的 NUMA 套接字,默认为 0
EAL:探针驱动程序:8086:10ed net_ixgbe_vf
EAL:NUMA 插槽 -1 上的 PCI 设备 0000:04:10.3
EAL:无效的 NUMA 套接字,默认为 0
EAL:探针驱动程序:8086:10ed net_ixgbe_vf
EAL:NUMA 插槽 -1 上的 PCI 设备 0000:04:10.5
EAL:无效的 NUMA 套接字,默认为 0
EAL:探针驱动程序:8086:10ed net_ixgbe_vf
EAL:NUMA 插槽 -1 上的 PCI 设备 0000:04:10.7
EAL:无效的 NUMA 套接字,默认为 0
EAL:探针驱动程序:8086:10ed net_ixgbe_vf
定时器周期 33120229810
调试 nb_ports 2
端口 0 MAC:02 09 c0 4b b4 a7
端口 1 MAC:02 09 c0 3c ce 0f
上面显示dpdk可以看到两个VF端口,另一个容器dpdk应用结果是一样的。 我试图通过 ip link set xxx netns xxx 将 VF 端口设置为 docker 容器的 netns,不幸的是没有用。
我在网上搜索了很久,但没有用。请帮助或尝试给出一些想法如何实现这一点,非常感谢。
【问题讨论】:
-
请更新以下信息,内核版本,DPDK 版本,操作系统发行版,网卡固件,流量重定向规则。
-
感谢您的回复,内核版本为 Linux 版本 5.4.0-70-generic,dpdk-stable-18.11.11,docker 客户端和服务器引擎 19.03.11,Intel 82599ES NIC。我还没有发送流量。谢谢
-
请更新问题,同时更新网卡固件版本
-
一旦你将 NIC 绑定到像
uio_pci_generic|igb_uio|vfio-pci这样的 dpdk 驱动程序,就不再使用 Kerenl 或命名空间进行维护。因此,要使用或不使用 DPDK 端口,您应该为 DPDK 18.11.11 使用选项-w|-b。我在 DPDK 应用程序中看不到相同的内容,请您设置相同并检查相同吗? -
这是网卡版本:# ethtool -i enp4s0f1 驱动程序:ixgbe 版本:5.1.0-k 固件版本:0x00012b2c, 1.1197.0 我的问题是:两个不同 docker 容器中的 dpdk 应用程序可以看到相同的虚拟功能,dpdk应用程序可能会接管其他的VF,这是出乎意料的,它不能使VF资源隔离,谢谢。