# 总线配置<a name="ZH-CN_TOPIC_0184192750"></a>

## 概述<a name="section147381981320"></a>

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

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

>![](public_sys-resources/icon-note.gif) **说明：**   
>总线的配置相对比较繁琐，若不需要精确控制设备拓扑结构，可以使用Libvirt自动生成的缺省总线配置。  

## 元素介绍<a name="section11205101961617"></a>

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

controller：控制器元素，表示一个总线。

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

-   子元素model：控制器具体型号的名称。
    -   属性name：指定控制器具体型号的名称，和父元素controller中的属性model对应。


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

<a name="table191911761111"></a>
<table><thead align="left"><tr id="row2208179119"><th class="cellrowborder" valign="top" width="15.690000000000001%" id="mcps1.2.4.1.1"><p id="p17201217141114"><a name="p17201217141114"></a><a name="p17201217141114"></a>type属性值</p>
</th>
<th class="cellrowborder" valign="top" width="28.52%" id="mcps1.2.4.1.2"><p id="p1520817171119"><a name="p1520817171119"></a><a name="p1520817171119"></a>model属性值</p>
</th>
<th class="cellrowborder" valign="top" width="55.78999999999999%" id="mcps1.2.4.1.3"><p id="p1120517141112"><a name="p1120517141112"></a><a name="p1120517141112"></a>简介</p>
</th>
</tr>
</thead>
<tbody><tr id="row720101781119"><td class="cellrowborder" rowspan="3" valign="top" width="15.690000000000001%" headers="mcps1.2.4.1.1 "><p id="p172011751118"><a name="p172011751118"></a><a name="p172011751118"></a>pci</p>
</td>
<td class="cellrowborder" valign="top" width="28.52%" headers="mcps1.2.4.1.2 "><p id="p19202176114"><a name="p19202176114"></a><a name="p19202176114"></a>pcie-root</p>
</td>
<td class="cellrowborder" valign="top" width="55.78999999999999%" headers="mcps1.2.4.1.3 "><p id="p520417161112"><a name="p520417161112"></a><a name="p520417161112"></a>PCIe根节点，可挂载PCIe设备或控制器</p>
</td>
</tr>
<tr id="row34183091319"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p5413016139"><a name="p5413016139"></a><a name="p5413016139"></a>pcie-root-port</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p104130141319"><a name="p104130141319"></a><a name="p104130141319"></a>只有一个slot，可以挂载PCIe设备或控制器</p>
</td>
</tr>
<tr id="row3266142571311"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p7266122511139"><a name="p7266122511139"></a><a name="p7266122511139"></a>pcie-to-pci-bridge</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p13266142517138"><a name="p13266142517138"></a><a name="p13266142517138"></a>PCIe转PCI桥控制器，可挂载PCI设备</p>
</td>
</tr>
<tr id="row3942151816165"><td class="cellrowborder" rowspan="2" valign="top" width="15.690000000000001%" headers="mcps1.2.4.1.1 "><p id="p1296875715235"><a name="p1296875715235"></a><a name="p1296875715235"></a>usb</p>
</td>
<td class="cellrowborder" valign="top" width="28.52%" headers="mcps1.2.4.1.2 "><p id="p199601718161616"><a name="p199601718161616"></a><a name="p199601718161616"></a>ehci</p>
</td>
<td class="cellrowborder" valign="top" width="55.78999999999999%" headers="mcps1.2.4.1.3 "><p id="p4960718181613"><a name="p4960718181613"></a><a name="p4960718181613"></a>USB 2.0控制器，可挂载USB 2.0设备</p>
</td>
</tr>
<tr id="row166823191418"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p0612321419"><a name="p0612321419"></a><a name="p0612321419"></a>nec-xhci</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p161123171414"><a name="p161123171414"></a><a name="p161123171414"></a>USB 3.0控制器，可挂载USB 3.0设备</p>
</td>
</tr>
<tr id="row4208152615123"><td class="cellrowborder" valign="top" width="15.690000000000001%" headers="mcps1.2.4.1.1 "><p id="p8209326151213"><a name="p8209326151213"></a><a name="p8209326151213"></a>scsi</p>
</td>
<td class="cellrowborder" valign="top" width="28.52%" headers="mcps1.2.4.1.2 "><p id="p1520972631215"><a name="p1520972631215"></a><a name="p1520972631215"></a>virtio-scsi</p>
</td>
<td class="cellrowborder" valign="top" width="55.78999999999999%" headers="mcps1.2.4.1.3 "><p id="p520922617123"><a name="p520922617123"></a><a name="p520922617123"></a>virtio类型SCSI控制器，可以挂载块设备，如磁盘，光盘等</p>
</td>
</tr>
<tr id="row16488195941212"><td class="cellrowborder" valign="top" width="15.690000000000001%" headers="mcps1.2.4.1.1 "><p id="p1748811598122"><a name="p1748811598122"></a><a name="p1748811598122"></a>virtio-serial</p>
</td>
<td class="cellrowborder" valign="top" width="28.52%" headers="mcps1.2.4.1.2 "><p id="p174881059161214"><a name="p174881059161214"></a><a name="p174881059161214"></a>virtio-serial</p>
</td>
<td class="cellrowborder" valign="top" width="55.78999999999999%" headers="mcps1.2.4.1.3 "><p id="p748825916121"><a name="p748825916121"></a><a name="p748825916121"></a>virtio类型串口控制器，可挂载串口设备，如pty串口</p>
</td>
</tr>
</tbody>
</table>

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

<a name="table1200165711314"></a>
<table><thead align="left"><tr id="row202004570319"><th class="cellrowborder" valign="top" width="15.370000000000001%" id="mcps1.2.4.1.1"><p id="p172015573318"><a name="p172015573318"></a><a name="p172015573318"></a>类型type属性值</p>
</th>
<th class="cellrowborder" valign="top" width="23.52%" id="mcps1.2.4.1.2"><p id="p17202111511010"><a name="p17202111511010"></a><a name="p17202111511010"></a>含义</p>
</th>
<th class="cellrowborder" valign="top" width="61.11%" id="mcps1.2.4.1.3"><p id="p32016571036"><a name="p32016571036"></a><a name="p32016571036"></a>对应地址属性</p>
</th>
</tr>
</thead>
<tbody><tr id="row19201145719315"><td class="cellrowborder" valign="top" width="15.370000000000001%" headers="mcps1.2.4.1.1 "><p id="p1620115571339"><a name="p1620115571339"></a><a name="p1620115571339"></a>pci</p>
</td>
<td class="cellrowborder" valign="top" width="23.52%" headers="mcps1.2.4.1.2 "><p id="p202310814107"><a name="p202310814107"></a><a name="p202310814107"></a>地址类型为PCI地址，表示该设备在PCI总线网络中的挂载位置。</p>
</td>
<td class="cellrowborder" valign="top" width="61.11%" headers="mcps1.2.4.1.3 "><p id="p1320110578310"><a name="p1320110578310"></a><a name="p1320110578310"></a>domain：PCI设备的域号</p>
<p id="p22594251151"><a name="p22594251151"></a><a name="p22594251151"></a>bus：PCI设备的bus号</p>
<p id="p162261129459"><a name="p162261129459"></a><a name="p162261129459"></a>slot：PCI设备的device号</p>
<p id="p124103331054"><a name="p124103331054"></a><a name="p124103331054"></a>function：PCI设备的function号</p>
<p id="p1447013400512"><a name="p1447013400512"></a><a name="p1447013400512"></a>multifunction：controller元素可选，是否开启multifunction功能</p>
</td>
</tr>
<tr id="row1020113571236"><td class="cellrowborder" valign="top" width="15.370000000000001%" headers="mcps1.2.4.1.1 "><p id="p52017571238"><a name="p52017571238"></a><a name="p52017571238"></a>usb</p>
</td>
<td class="cellrowborder" valign="top" width="23.52%" headers="mcps1.2.4.1.2 "><p id="p423198161015"><a name="p423198161015"></a><a name="p423198161015"></a>地址类型为USB地址，表示该设备在USB总线中的位置。</p>
</td>
<td class="cellrowborder" valign="top" width="61.11%" headers="mcps1.2.4.1.3 "><p id="p92011257837"><a name="p92011257837"></a><a name="p92011257837"></a>bus：USB设备的bus号</p>
<p id="p19705183371613"><a name="p19705183371613"></a><a name="p19705183371613"></a>port：USB设备的port号</p>
</td>
</tr>
<tr id="row92018571731"><td class="cellrowborder" valign="top" width="15.370000000000001%" headers="mcps1.2.4.1.1 "><p id="p820117571731"><a name="p820117571731"></a><a name="p820117571731"></a>drive</p>
</td>
<td class="cellrowborder" valign="top" width="23.52%" headers="mcps1.2.4.1.2 "><p id="p123208121020"><a name="p123208121020"></a><a name="p123208121020"></a>地址类型存储设备地址，表示所属的磁盘控制器，及其在总线中的位置。</p>
</td>
<td class="cellrowborder" valign="top" width="61.11%" headers="mcps1.2.4.1.3 "><p id="p3201357231"><a name="p3201357231"></a><a name="p3201357231"></a>controller：指定所属控制器号</p>
<p id="p1389922903710"><a name="p1389922903710"></a><a name="p1389922903710"></a>bus：设备输出的channel号</p>
<p id="p621944515379"><a name="p621944515379"></a><a name="p621944515379"></a>target：存储设备target号</p>
<p id="p567815011374"><a name="p567815011374"></a><a name="p567815011374"></a>unit：存储设备lun号</p>
</td>
</tr>
</tbody>
</table>

## 配置示例<a name="section3607103519359"></a>

该示例给出一个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）下无挂载设备。配置内容如下：

```
<domain type='kvm'>
    ...
    <devices>
        <controller type='pci' index='0' model='pcie-root'/>
	<controller type='pci' index='1' model='pcie-root-port'>
	    <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
	</controller>
	<controller type='pci' index='2' model='pcie-root-port'>
	    <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
	</controller>
	<controller type='pci' index='3' model='pcie-to-pci-bridge'>
	    <model name='pcie-pci-bridge'/>
	    <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
	</controller>
	<controller type='pci' index='4' model='pcie-root-port'>
	    <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
	</controller>
	<controller type='scsi' index='0' model='virtio-scsi'>
	    <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
	</controller>
	<controller type='virtio-serial' index='0'>
	    <address type='pci' domain='0x0000' bus='0x03' slot='0x02' function='0x0'/>
	</controller>
	<controller type='usb' index='0' model='ehci'>
	    <address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/>
	</controller>
	...
	</devices>
</domain>
```

