#  libvirt
Libvirt是StratoVirt的管理软件,它是通过创建命令行来运行StratoVirt和发送QMP命令来管理StratoVirt。目前,支持五个virsh命令来管理StratoVirt: 
`virsh create`, `virsh destroy`, `virsh suspend`, `virsh resume` 和 `virsh console`.


## 配置
通过下列方式来配置StratoVirt:

- 内存:

```
<memory unit='GiB'>8</memory>
or
<memory unit='MiB'>8192</memory>
```

- CPU:

CPU拓扑还没有支持,请仅配置VCPU的个数。
```
<vcpu>4</vcpu>
```
- 架构:

`arch`的可选值为: `aarch64` 和 `x86_64`。在X86平台, 支持的机型是 `q35`;在aarch64平台, 支持的机型是 `virt`.
```
<os>
	<type arch='x86_64' machine='q35'>hvm</type>
</os>
```

- 内核和命令行:

`/path/to/standard_vm_kernel` 是标准虚拟机内核的路径.
```
<kernel>/path/to/standard_vm_kernel</kernel>
<cmdline>console=ttyS0 root=/dev/vda reboot=k panic=1 rw</cmdline>
```

- 特性:

由于在标准虚拟机中使用acpi,因此必须配置acpi特性。
```
<features>
    <acpi/>
</features>
```
对于aarch64平台,由于使用了gicv3,因此 `gic` 也应该被加入到特性中。
```
<features>
    <acpi/>
    <gic version='3'/>
</features>
```

- 模拟器:

为了给libvirt设置模拟器, `/path/to/StratoVirt_binary_file` 是StratoVirt二进制的文件路径。
```
<devices>
    <emulator>/path/to/StratoVirt_binary_file</emulator>
</devices>
```

- balloon设备
```
<controller type='pci' index='4' model='pcie-root-port' />
<memballoon model='virtio'>
    <alias name='balloon0'/>
    <address type='pci' domain='0x000' bus='0x04' slot='0x00' function='0x00'/>
</memballoon>
```

- pflash设备

可以通过以下的配置加入pflash设备。
`/path/to/pflash` 是pflash设备文件路径。
```
<loader readonly='yes' type='pflash'>/path/to/pflash</loader>
<nvram template='/path/to/OVMF_VARS'>/path/to/OVMF_VARS</nvram>
```

- io线程个数

```
<iothreads>1</iothreads>
```

- 磁盘设备:

```
<controller type='pci' index='1' model='pcie-root-port' />
<disk type='file' device='disk'>
    <driver name='qemu'  type='raw' iothread='1'/>
    <source file='/path/to/rootfs'/>
    <target dev='hda' bus='virtio'/>
    <iotune>
        <total_iops_sec>1000</total_iops_sec>
    </iotune>
    <address type='pci' domain='0x000' bus='0x01' slot='0x00' function='0x00'/>
</disk>
```

- 网卡设备

```
<controller type='pci' index='2' model='pcie-root-port' />
<interface type='ethernet'>
    <mac address='de:ad:be:ef:00:01'/>
    <source bridge='qbr0'/>
    <target dev='tap0'/>
    <model type='virtio'/>
    <address type='pci' domain='0x000' bus='0x02' slot='0x00' function='0x00'/>
</interface>
```

- 串口设备

为了使用 `virsh console` 命令,virtio串口设备可以通过使用重定向 `pty` 配置。
```
<controller type='pci' index='3' model='pcie-root-port' />
<controller type='virtio-serial' index='0'>
    <alias name='virt-serial0'/>
    <address type='pci' domain='0x000' bus='0x03' slot='0x00' function='0x00'/>
</controller>
<console type='pty'>
    <target type='virtio' port='0'/>
    <alias name='console0'/>
</console>
```

- vhost-vsock设备

```
<controller type='pci' index='6' model='pcie-root-port' />
<vsock model='virtio'>
    <cid auto='no' address='3'/>
    <address type='pci' domain='0x000' bus='0x00' slot='0x06' function='0x00'/>
</vsock>
```

- 随机数设备

```
<controller type='pci' index='5' model='pcie-root-port' />
<rng model='virtio'>
    <rate period='1000' bytes='1234'/>
    <backend model='random'>/path/to/random_file</backend>
    <address type='pci' domain='0x000' bus='0x05' slot='0x00' function='0x00'/>
</rng>
```

- 直通设备

```
<controller type='pci' index='7' model='pcie-root-port' />
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
    <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</source>
</hostdev>
```