重复的 PCI 设备 ID (lspci -nn)

重复的 PCI 设备 ID (lspci -nn)

我的系统中安装了两个相同的网卡(同一设备、同一供应商)。

现在我想存根一张网卡以便使用 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?这可能吗?

答案1

这不是设备 ID,而是产品ID –10ec是 PCI供应商 IDRealtek 的,8161是其“RTL8111/8168/8411 PCI Express 千兆以太网控制器”的产品或型号 ID。它不是序列号,也不应该是唯一的,恰恰相反。

PCI 总线上每张卡的唯一“总线 ID”是最左边列,其中[0000:]02:00.0表示第一张卡和03:00.0第二张卡。大多数处理 PCI 参考设备的工具都通过其总线 ID 进行处理,只要拓扑结构不变,该 ID 通常保持稳定,例如,安装在特定插槽中的卡将保持 03:00。

(lspci 显示的总线 ID 格式为“[domain:]bus:device.function”。)

您的 lspci 输出不包含任何全局唯一 ID;事实上,我不确定 PCI 设备是否通常有一个。(运行似乎显示某些设备具有“[13c] 设备序列号:”功能,但并非所有设备都具有此功能。)sudo lspci -v


如果我理解正确的话,将 VID:PID 写入 PCI 驱动程序的“new_id”文件仅允许该驱动程序将绑定到匹配的设备,但不会主动踢出任何其他驱动程序(即,您仍然必须将每个设备从其原始驱动程序解除绑定并将其绑定到 vfio-pci)。查看DPDK 的工具,后面部分依然是通过bus ID来完成的:

echo 10ec 8161 > /sys/bus/pci/drivers/vfio-pci/new_id
[...]
echo 0000:03:00.0 > /sys/bus/pci/drivers/r8169/unbind
echo 0000:03:00.0 > /sys/bus/pci/drivers/vfio-pci/bind

相关内容