**Libvirt**

Libvirt — это один из менеджеров для StratoVirt, он управляет StratoVirt путём создания командных строк для запуска StratoVirt и выдачи команд через QMP. В настоящее время для управления StratoVirt поддерживаются пять команд virsh: `virsh create`, `virsh destroy`, `virsh suspend`, `virsh resume` и `virsh console`.

**Конфигурация**

StratoVirt можно настроить следующими способами:

- память:
```
<memory unit='GiB'>8</memory>
или
<memory unit='MiB'>8192</memory>
```

- ЦП:
Топология ЦП не поддерживается, пожалуйста, настройте только количество 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>
```

- Баллон
```
<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>
```

- Iothread
```
<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-порт' />
<controller type='virtio-serial' index='0'>
    <alias name='virt-serial0'/>
    <адрес 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>
```

- RNG:
```
<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>
```

- VFIO:
```
<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>