总线配置

概述

总线是计算机各个部件之间进行信息通信的通道。外部设备需要挂载到对应的总线上,每个设备都会被分配一个唯一地址(由子元素address指定),通过总线网络完成与其他设备或中央处理器的信息交换。常见的设备总线有ISA总线、PCI总线、USB总线、SCSI总线、PCIe总线。

PCIe总线是一种典型的树结构,具有比较好的扩展性,总线之间通过控制器关联,这里以PCIe总线为例介绍如何为虚拟机配置总线拓扑。

总线配置 - 图1 说明:
总线的配置相对比较繁琐,若不需要精确控制设备拓扑结构,可以使用Libvirt自动生成的缺省总线配置。

元素介绍

在Libvirt的XML配置中,每个控制器元素(使用controller元素表示)可以表示一个总线,根据虚拟机架构的不同,一个控制器上通常可以挂载一个或多个控制器或设备。这里介绍常用属性和子元素。

controller:控制器元素,表示一个总线。

  • 属性type:控制器必选属性,表示总线类型。常用取值有“pci”、“usb”、“scsi”、“virtio-serial”、“fdc”、“ccid”。
  • 属性index:控制器必选属性,表示控制器的总线“bus”编号(编号从0开始),可以在地址元素“address”元素中使用。
  • 属性model:控制器必选属性,表示控制器的具体型号,其可选择的值与控制器类型“type”的值相关,对应关系及含义请参见表1
  • 子元素address:为设备或控制器指定其在总线网络中的挂载位置。

    • 属性type:设备地址类型。常用取值有“pci”、“usb”、“drive”。address的type类型不同, 对应的属性也不同,常用type属性值及其该取值下address的属性请参见表2
  • 子元素model:控制器具体型号的名称。

    • 属性name:指定控制器具体型号的名称,和父元素controller中的属性model对应。

表 1 controller属性type常用取值和model取值对应关系

type属性值

model属性值

简介

pci

pcie-root

PCIe根节点,可挂载PCIe设备或控制器

pcie-root-port

只有一个slot,可以挂载PCIe设备或控制器

pcie-to-pci-bridge

PCIe转PCI桥控制器,可挂载PCI设备

usb

ehci

USB 2.0控制器,可挂载USB 2.0设备

nec-xhci

USB 3.0控制器,可挂载USB 3.0设备

scsi

virtio-scsi

virtio类型SCSI控制器,可以挂载块设备,如磁盘,光盘等

virtio-serial

virtio-serial

virtio类型串口控制器,可挂载串口设备,如pty串口

表 2 address元素不同设备类型下的属性说明

类型type属性值

含义

对应地址属性

pci

地址类型为PCI地址,表示该设备在PCI总线网络中的挂载位置。

domain:PCI设备的域号

bus:PCI设备的bus号

slot:PCI设备的device号

function:PCI设备的function号

multifunction:controller元素可选,是否开启multifunction功能

usb

地址类型为USB地址,表示该设备在USB总线中的位置。

bus:USB设备的bus号

port:USB设备的port号

drive

地址类型存储设备地址,表示所属的磁盘控制器,及其在总线中的位置。

controller:指定所属控制器号

bus:设备输出的channel号

target:存储设备target号

unit:存储设备lun号

配置示例

该示例给出一个PCIe总线的拓扑结构。PCIe根节点(BUS 0)下挂载了三个PCIe-Root-Port控制器。第一个PCIe-Root-Port控制器(BUS 1)开启了multifunction功能,并在其下挂载一个PCIe-to-PCI-bridge控制器,形成了一个PCI总线(BUS 3),该PCI总线上挂载了一个virtio-serial设备和一个USB 2.0控制器。第二个PCIe-Root-Port控制器(BUS 2)下挂载了一个SCSI控制器。第三个PCIe-Root-Port控制器(BUS 0)下无挂载设备。配置内容如下:

  1. <domain type='kvm'>
  2. ...
  3. <devices>
  4. <controller type='pci' index='0' model='pcie-root'/>
  5. <controller type='pci' index='1' model='pcie-root-port'>
  6. <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
  7. </controller>
  8. <controller type='pci' index='2' model='pcie-root-port'>
  9. <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
  10. </controller>
  11. <controller type='pci' index='3' model='pcie-to-pci-bridge'>
  12. <model name='pcie-pci-bridge'/>
  13. <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
  14. </controller>
  15. <controller type='pci' index='4' model='pcie-root-port'>
  16. <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
  17. </controller>
  18. <controller type='scsi' index='0' model='virtio-scsi'>
  19. <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
  20. </controller>
  21. <controller type='virtio-serial' index='0'>
  22. <address type='pci' domain='0x0000' bus='0x03' slot='0x02' function='0x0'/>
  23. </controller>
  24. <controller type='usb' index='0' model='ehci'>
  25. <address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/>
  26. </controller>
  27. ...
  28. </devices>
  29. </domain>