在使用 virsh 设置域时,我一直认为 PCI 卡的“插槽”是指主板上的哪个插槽。然而,事实似乎并非如此,virsh 将两个不同物理插槽中的卡分配给了同一个“插槽”。前两个设备是 GTX 1070 的一部分,第三个是 Sonnet PCI usb 卡。
另外,这两个不同的总线 ID 是什么?第一个总线 ID 是 67 还是 43?
~$ virsh nodedev-dumpxml pci_0000_43_00_0
<device>
<name>pci_0000_43_00_0</name>
<path>/sys/devices/pci0000:40/0000:40:01.3/0000:43:00.0</path>
<parent>pci_0000_40_01_3</parent>
<driver>
<name>nouveau</name>
</driver>
<capability type='pci'>
<domain>0</domain>
<bus>67</bus>
<slot>0</slot>
<function>0</function>
<product id='0x1b81'>GP104 [GeForce GTX 1070]</product>
<vendor id='0x10de'>NVIDIA Corporation</vendor>
<iommuGroup number='39'>
<address domain='0x0000' bus='0x43' slot='0x00' function='0x0'/>
<address domain='0x0000' bus='0x43' slot='0x00' function='0x1'/>
</iommuGroup>
<pci-express>
<link validity='cap' port='0' speed='8' width='16'/>
<link validity='sta' speed='2.5' width='8'/>
</pci-express>
</capability>
</device>
~$ virsh nodedev-dumpxml pci_0000_43_00_1
<device>
<name>pci_0000_43_00_1</name>
<path>/sys/devices/pci0000:40/0000:40:01.3/0000:43:00.1</path>
<parent>pci_0000_40_01_3</parent>
<driver>
<name>snd_hda_intel</name>
</driver>
<capability type='pci'>
<domain>0</domain>
<bus>67</bus>
<slot>0</slot>
<function>1</function>
<product id='0x10f0'>GP104 High Definition Audio Controller</product>
<vendor id='0x10de'>NVIDIA Corporation</vendor>
<iommuGroup number='39'>
<address domain='0x0000' bus='0x43' slot='0x00' function='0x0'/>
<address domain='0x0000' bus='0x43' slot='0x00' function='0x1'/>
</iommuGroup>
<pci-express>
<link validity='cap' port='0' speed='8' width='16'/>
<link validity='sta' speed='2.5' width='8'/>
</pci-express>
</capability>
</device>
~$ virsh nodedev-dumpxml pci_0000_0a_00_0
<device>
<name>pci_0000_0a_00_0</name>
<path>/sys/devices/pci0000:00/0000:00:03.1/0000:0a:00.0</path>
<parent>pci_0000_00_03_1</parent>
<driver>
<name>xhci_hcd</name>
</driver>
<capability type='pci'>
<domain>0</domain>
<bus>10</bus>
<slot>0</slot>
<function>0</function>
<product id='0x1242'>ASM1142 USB 3.1 Host Controller</product>
<vendor id='0x1b21'>ASMedia Technology Inc.</vendor>
<iommuGroup number='18'>
<address domain='0x0000' bus='0x0a' slot='0x00' function='0x0'/>
</iommuGroup>
<numa node='0'/>
<pci-express>
<link validity='cap' port='1' speed='5' width='2'/>
<link validity='sta' speed='5' width='2'/>
</pci-express>
</capability>
</device>
答案1
“总线”是指主板芯片组的 PCI/PCI-X/PCI 快速总线,设备连接到该总线。这可能是通过主板上的实际插槽,也可能不是;例如,板载以太网端口与接受视频卡的扩展插槽位于不同的总线上。
“插槽”是指 PCI 总线上连接单个物理设备的空间,该空间在电气上与该总线上的其他“插槽”不同。例如,两个不同的 USB 控制器占用两个不同的插槽。或者您的视频卡占用的插槽与 RAID HBA 不同。
请注意,虽然您询问了两个不同的物理设备使用同一个插槽,但您在问题中发布的内容并未证明这种情况的发生。事实上,这种情况并没有发生。插槽在物理上是总线的一部分,一条总线上的插槽 0 与另一条总线上的插槽 0 不同。
“功能”是指提供不同功能的物理设备的子集。例如,板载以太网设备针对每个物理以太网端口提供单独的功能。您的视频卡针对视频控制器和音频设备提供单独的功能。
对于直通,单个总线/插槽/功能可标识一个设备或其一部分,可以单独传递到 VM。
最后,67 和 43 是同一个数字。前者是十进制,而后者是十六进制,正如其显示为 0x43 所暗示的那样。