我的系统中安装了两个相同的网卡(相同的设备,相同的供应商)。
现在我想存根一张网卡以使用 PCIe 直通。
我开始意识到这两个网卡具有相同的设备 ID:
$ lspci -nn
02:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. Device [10ec:8161] (rev 15)
03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. Device [10ec:8161] (rev 15)
如您所见,两个网卡的 PCI 设备 ID10ec:8161
相同。我希望它们是不同的(即每个网卡都有自己唯一的 PCI 设备 ID)。
这是正常行为吗?我将如何处理两个网卡中的一个(使用vfio-pci
)?有可能吗?
这不是设备 ID,而是产品ID——是Realtek
10ec
的 PCI供应商 ID8161
,也是其“RTL8111/8168/8411 PCI Express 千兆以太网控制器”的产品或型号 ID。它不是序列号,也不应该是唯一的,恰恰相反。PCI 总线上每张卡的唯一“总线 ID”是最左边的一列,
[0000:]02:00.0
分别是第一张卡和03:00.0
第二张卡。大多数工具通过总线 ID 处理 PCI 参考设备,只要拓扑结构不改变,它通常保持稳定,例如,安装在特定插槽中的卡将保持 03:00。(lspci 显示的总线 ID 格式为“[domain:]bus:device.function”。)
您的 lspci 输出不包含任何全局唯一 ID;事实上,我不确定 PCI 设备是否通常有一个。(运行似乎显示了某些设备的功能“[13c] 设备序列号:”,但不是所有设备。)
sudo lspci -v
如果我理解正确,将 VID:PID 写入 PCI 驱动程序的“new_id”文件只允许该驱动程序绑定到匹配的设备,但不会主动踢出任何其他驱动程序(即您仍然必须取消绑定每个设备从其原始驱动程序并将其绑定到 vfio-pci)。看DPDK的tools,后面的部分还是通过bus ID来完成的: