Red Hat Training

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

9.3. 配置设备控制器

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

图 9.11. 自动化控制器的域 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
<控制器> 元素具有强制属性 <控制器索引>,它是十进制整数,描述总线控制器被遇到的顺序(用于控制器 <地址> 元素)。当 <控制器类型 = 'virtio-serial'> 时,还有两个可选属性(名为 端口和 向量),它控制可以通过控制器连接多少个设备。请注意,Red Hat Enterprise Linux 6 不支持使用每个设备超过 32向量。使用更多的向量将导致迁移客户机虚拟机失败。
<控制器类型 = '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
注意
如果需要为 guest 虚拟机明确禁用 USB 总线,可以使用 <model='none'>。 .
对于在 PCI 或 USB 总线上本身设备的控制器,可选的子元素 <地址> 可以指定控制器与其主总线的确切关系,以及语义,如 第 9.4 节 “为设备设置地址” 所示。
可选的 sub-element <驱动程序> 可以指定驱动程序特定选项。目前它只支持属性队列,这指定了控制器的队列数量。为获得最佳性能,建议指定一个与 vCPU 数量匹配的值。
USB companion 控制器具有一个可选的子元素 <master>,用于指定与主控制器相配套的关系。companion 控制器与其 master 位于同一个总线上,因此相应的 索引 值应该相等。
可以使用的 XML 示例如下:

图 9.12. 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
root 控制器(pci-rootpcie-root)具有一个可选的 pcihole64 元素,用于指定 pcihole64 单元 属性指定的单位是 pcihole。有些客户机虚拟机(如 Windows Server 2003)可能会导致崩溃,除非禁用 单位 (设置为 0 单元='0')。
对于提供隐式 PCI 总线的机器类型,pci-root 控制器自动添加 index='0',且需要使用 PCI 设备。pci-root 没有地址。如果已在由 model='pci-root' 提供的一个总线上适合一个由 model='pci-root' 或一个大于零的 PCI 总线号,则会自动添加 PCI 网桥。PCI 网桥也可以手动指定,但其地址应仅引用已经指定 PCI 控制器提供的 PCI 总线。PCI 控制器索引中的间隔可能会导致无效的配置。以下 XML 示例可添加到 <devices> 部分:

图 9.13. 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(PCIe)总线(例如,基于 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 插槽,所有由 libvirt 自动终止的 pci-bridge 控制器也会自动创建并连接到自动创建的 dmi-to-pci-bridge 控制器的插槽之一。所有具有 PCI 地址且由 libvirt 自动终止的客户机设备都将放置在此 pci-bridge 设备中。

图 9.14. 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>
  ...