Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

16.4. 配置设备控制器

根据客户机虚拟机架构,一些设备总线可能多次出现,有一组绑定到虚拟控制器的虚拟设备。通常,libvirt 可以自动推断这样的控制器,无需显式 XML 标记,但在某些情况下最好显式设置虚拟控制器元素。

图 16.15. 虚拟控制器的域 XML 示例


  ...
  <devices>
    <controller type='ide' index='0'/>
    <controller type='virtio-serial' index='0' ports='16' vectors='4'/>
    <controller type='virtio-serial' index='1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
    </controller>
    ...
  </devices>
  ...
每个控制器都有一个强制属性 <控制器类型>,它必须是以下之一:
  • IDE
  • fdc
  • scsi
  • SATA
  • usb
  • ccid
  • virtio-serial
  • pci
<controller> 元素有一个强制属性 <控制器索引>,它是一个十进制整数,用于描述总线控制器被遇到的顺序(用于 <地址> 元素的控制器属性)。当控制器 <type ='virtio-serial'> 时,有两个额外可选属性( 指定端口向量),它们控制可以通过控制器连接的设备数量。
<当控制器 type ='scsi'> 时,有一个可选属性 模型,它可采用以下值:
  • auto
  • buslogic
  • ibmvscsi
  • lsilogic
  • lsisas1068
  • lsisas1078
  • virtio-scsi
  • vmpvscsi
<控制器类型 ='usb'> 时,有一个可选属性 模型,它可采用以下值:
  • piix3-uhci
  • piix4-uhci
  • ehci
  • ich9-ehci1
  • ich9-uhci1
  • ich9-uhci2
  • ich9-uhci3
  • vt82c686b-uhci
  • pci-ohci
  • nec-xhci
请注意,如果需要为客户机虚拟机明确禁用 USB 总线,可以使用 <model='none'>
对于作为 PCI 或 USB 总线中的设备本身的控制器,可选的子元素 <地址> 可以指定控制器到其主总线的确切关系,使用 第 16.5 节 “为设备设置地址” 所示的语义。
可选的 sub-element <驱动程序> 可以指定特定于驱动程序的选项。目前,它只支持属性队列,它指定控制器的队列数。为了获得最佳性能,建议指定一个与 vCPU 数量匹配的值。
USB 配套控制器有一个可选的子元素 <master>,以指定与其主控制器相配的确切关系。配套控制器位于与其 master 的同一总线上,因此相应的 索引 值应该相等。
可以使用的 XML 示例:

图 16.16. USB 控制器的域 XML 示例

   
     ...
  <devices>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0' bus='0' slot='4' function='7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0' bus='0' slot='4' function='0' multifunction='on'/>
    </controller>
    ...
  </devices>
  ...
   

PCI 控制器具有具有以下可能值的可选 模型 属性:
  • pci-root
  • pcie-root
  • pci-bridge
  • dmi-to-pci-bridge
对于提供隐式 PCI 总线的机器类型,pci-root 控制器使用 index='0' 是自动添加的,且需要使用 PCI 设备。pci-root 没有地址。如果对由 model='pci-root' 或指定大于零的 PCI 总线,则存在太多的设备适合一个总线上,则会自动添加 PCI 网桥。也可以手动指定 PCI 网桥,但其地址应该只看到已经指定的 PCI 控制器提供的 PCI 总线。在 PCI 控制器索引中造成空白可能会导致无效的配置。以下 XML 示例可添加到 <devices> 部分:

图 16.17. PCI 网桥的域 XML 示例


  ...
  <devices>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='pci' index='1' model='pci-bridge'>
      <address type='pci' domain='0' bus='0' slot='5' function='0' multifunction='off'/>
    </controller>
  </devices>
  ...
对于提供隐式 PCI Express 总线(例如,基于 Q35 芯片组的机器类型),带有 index='0' 的 pcie-root 控制器已自动添加到域的配置。pcie-root 也没有地址,但提供 31 插槽(数字为 1-31),且只能附加到 PCIe 设备。要在具有 pcie-root 控制器的系统中连接标准 PCI 设备,会自动添加带有 model='dmi-to-pci-bridge 的 pci 控制器。dmi-to-pci-bridge 控制器插件到一个 PCIe 插槽(由 pcie-root 提供),并且自己提供 31 标准 PCI 插槽(这不是热插拔的)。为了在客户机系统中具有热插拔 PCI 插槽,则也会自动创建 pci-bridge 控制器,并连接到自动创建的 dmi-to-pci-bridge 控制器中的一个插槽;所有具有 PCI 地址的客户机设备均会被放置到此 pci-bridge 设备上。

图 16.18. PCIe 的域 XML 示例(PCI express)

   
     ...
  <devices>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <address type='pci' domain='0' bus='0' slot='0xe' function='0'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <address type='pci' domain='0' bus='1' slot='1' function='0'/>
    </controller>
  </devices>
  ...
   

以下 XML 配置用于 USB 3.0 / xHCI 模拟:

图 16.19. USB3/xHCI 设备的域 XML 示例

   
     ...
  <devices>
    <controller type='usb' index='3' model='nec-xhci'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0f' function='0x0'/>
    </controller>
  </devices>
    ...