我的系统中安装了两块 R9 280。在 Ubuntu 中运行时,lspci -nn
两块卡具有相同的设备 ID。
示例输出:
01:00.0 Example GPU 1 [8080:aa68]
04:00.0 Example GPU 2 [8080:aa68]
请注意,设备 ID“8080:aa68”是相同的。所以我的问题是为什么 ID 相同?我试图将其中一张卡传递到 kvm,但由于 ID 相同,所以两张卡都通过了。那么我该怎么做才能解决这个问题?
更新 1:我试过了,setpci -s 04:00.0 02.w=aa69
它什么也没做,设备 ID 保持不变。我也试过了,echo "8086 10f5" > /sys/bus/pci/drivers/radeon/new_id
但它说文件存在。
更新 2:如果我这样做echo 0000:04:00.0 > /sys/bus/pci/devices/0000:04:00.0/driver/unbind
,我的系统就会冻结
答案1
因为它们是完全相同的硬件,所以会显示相同的供应商 ID 和相同的设备 ID。两张卡之间的唯一区别是其所在的插槽(可能是输出中的第一部分)。
您可以用dmidecode –t slot
它来与输出进行匹配以lspci -nn
识别它们,但您不能告诉 KVM 这一点。
这是一个有趣的问题,当我遇到这个问题时,我一般会把它留在“你可能需要另一张不同的卡”上:
在内核网站它说“写入设备 ID/sys/bus/pci/drivers/.../new_id
将尝试动态地将新的设备 ID 添加到 PCI 设备驱动程序。这可能允许驱动程序支持比在编译时驱动程序的静态设备 ID 支持表中包含的更多的硬件。设备 ID 的格式为:VVVV DDDD SVVV SDDD CCCC MMMM PPPP。即供应商 ID、设备 ID、子系统供应商 ID、子系统设备 ID、类、类掩码和私有驱动程序数据。供应商 ID 和设备 ID 字段是必需的,其余的是可选的。成功添加 ID 后,驱动程序将探测设备并尝试绑定到它。例如:# echo "8086 10f5" > /sys/bus/pci/drivers/foo/new_id
“
这让我想到了命令setpci
和U&L 主题这表明您可以更改 PCI 卡的设备 ID。
因此,也许您可以使用这两种方法之一将其中一个更改8080:aa68
为另一个设备 ID。请选择与卡类似的 ID,但可能比您拥有的卡稍旧或稍新。将其更改为随机设备 ID 可能会造成麻烦。