# Libvirt
Libvirt — это программное обеспечение для управления StratoVirt, которое позволяет запускать и управлять 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`. Для платформы aarch66 также следует добавить `gic` в список параметров.
```
<features>
    <acpi/>
</features>
```
Для платформы aarch64:
```
<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>
```

- **Количество потоков ввода-вывода**:

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