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