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-root
和 pcie-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> ...