PCI 设备的 ID 指的是什么,哪些与设置直通相关?

PCI 设备的 ID 指的是什么,哪些与设置直通相关?

在使用 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 所暗示的那样。

相关内容