1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openeuler-stratovirt

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
config_guidebook.md 67 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 4 месяцев назад 123faeb

StratoVirt Guidebook

1. General Setting

StratoVirt можно запустить только через аргументы командной строки.

1.1 Machine Config

Общая конфигурация машины, включая:

  • type: тип машины, доступны три типа машин: «none», «microvm», «q35» (платформа x86_64) и «virt» (платформа aarch64).
  • dump-guest-core: включение гостевой памяти в файл coredump или нет, значение по умолчанию — true.
  • mem-share: гостевая память доступна для совместного использования с другими процессами или нет. По умолчанию эта опция отключена.
  • accel: модуль ускорения, поддерживаемое значение kvm. (необязательно). Если не установлено, по умолчанию используется KVM.
  • usb: использовать ли USB. поддерживаемое значение off. (необязательно). Если не задано, по умолчанию отключено.

NB: тип машины «none» используется для получения возможностей stratovirt.

# cmdline
-machine [type=]name[,dump-guest-core={on|off}][,mem-share={on|off}]

1.2 CPU Config

1.2.1 CPU Number

StratoVirt поддерживает настройку количества VCPU (nr_vcpus).

Это позволяет вам установить максимальное количество VCPU, которое будет поддерживать виртуальная машина. Максимальное значение — 254, а минимальное разумное значение — 1.

По умолчанию после загрузки виртуальная машина подключит все настроенные вами процессоры. Для smp поддерживаются четыре свойства:

  • cpus: количество VCPU.
  • maxcpus: максимальное количество VCPU.
  • sockets: количество сокетов. (необязательно). Если не указано, его значение зависит от значения maxcpus. На машине arm, если вы запускаете microvm, значение socket должно быть пока равно единице.
  • dies: количество кристаллов. (необязательно). Если не указано, по умолчанию равен единице.
  • clusters: количество кластеров. (необязательно). Если не указано, по умолчанию равен единице.
  • cores: количество ядер. (необязательно). Если не указано, его значение зависит от значения maxcpus.
  • threads: количество потоков. (необязательно). Если не указано, его значение зависит от значения maxcpus.

NB: аргументы топологии процессора используются для взаимодействия с libvirt.

Если он настроен, сокеты * кристаллы * кластеры * ядра * потоки должны быть равны maxcpus, а maxcpus должен быть больше или равен cpus.

# cmdline
-smp [cpus=]n[,maxcpus=<maxcpus>][,sockets=<sockets>][,dies=<dies>][,clusters=<clusters>][,cores=<cores>][,threads=<threads>]

1.2.2 CPU Features

StratoVirt позволяет настраивать функции процессора.

В настоящее время поддерживаются следующие параметры:

  • CPU Family: Установите семейство процессоров для виртуальной машины, по умолчанию host, и это единственный поддерживаемый вариант в настоящее время.
  • pmu: Включает PMU armv8 для виртуальной машины. Должно быть off или on, по умолчанию off. (В настоящее время поддерживается только на aarch64)
  • sve: Включает функцию SVE для виртуальной машины. Должен быть off или on, по умолчанию off. (В настоящее время поддерживается только на aarch64)
# cmdline
-cpu host[,pmu={on|off}][,sve={on|off}]

1.3 Memory

1.3.1 Memory Size

StratoVirt поддерживает установку размера памяти виртуальной машины в командной строке.

Это позволяет установить размер памяти, который будет поддерживать виртуальная машина. Можно выбрать G в качестве единицы измерения (по умолчанию единица измерения — M). Размер памяти должен быть целым числом.

Размер памяти виртуальной машины по умолчанию составляет 256 МБ. Поддерживаемый размер памяти виртуальной машины составляет от [128 МБ, 512 ГБ].

# cmdline
-m [size=]<megs>[m|M|g|G]

-m 256m
-m 256
-m 1G

1.3.2 Memory Prealloc

Функция предварительного выделения памяти используется для предварительного выделения физической памяти виртуальной машины и создания её таблиц страниц. Используя эту функцию, количество ошибок страниц уменьшится, а производительность доступа к памяти виртуальной машины улучшится.

Примечание: Эта опция повлияет на время запуска виртуальной машины.

Вы можете использовать следующую командную строку для настройки предварительного распределения памяти.

-mem-prealloc

1.4 Backend file of memory

StratoVirt поддерживает настройку файла бэкенда памяти виртуальной машины.

Это позволяет указать путь к файлу бэкенда, который может быть либо каталогом, либо файлом. Путь должен быть абсолютным путём.

# cmdline
-mem-path <filebackend_path>

1.4.1 hugepages

Файл бэкенда памяти можно использовать, чтобы позволить гостю использовать hugetlbfs на хосте. Он поддерживает страницы памяти размером 2 Мбайт или 1 Гбайт. Следующие шаги показывают, как использовать огромные страницы:

# mount hugetlbfs в каталоге на хосте
$ mount -t hugetlbfs hugetlbfs /path/to/hugepages

# установите количество огромных страниц

*Примечание: В тексте запроса присутствуют фрагменты кода на языке программирования Shell, но они не были переведены.* **Параметры ядра**

```shell
# cmdline
-initrd <путь_к_initrd>

1.8 Глобальная конфигурация

Пользователи могут задать глобальную конфигурацию с помощью параметра -global.

Можно установить одно свойство:

  • pcie-root-port.fast-unplug: переключатель функции быстрого отключения, поддерживается только Kata.
-global pcie-root-port.fast-unplug={0|1}

1.9 Логирование

StratoVirt поддерживает вывод журнала в stderr и файл журнала.

Вы можете включить логирование StratoVirt с помощью:

# Вывод журнала в stderr
-D
# Вывод журнала в файл журнала
-D <путь_к_файлу_журнала>

Уровень логирования StratoVirt зависит от переменной среды STRATOVIRT_LOG_LEVEL. StratoVirt поддерживает пять уровней логирования: trace, debug, info, warn, error. По умолчанию уровень равен error. Если параметр -D не установлен, журналы по умолчанию выводятся в stderr.

1.10 Запуск в качестве демона

StratoVirt может работать как демон.

# cmdline
-daemonize

При запуске StratoVirt в качестве демона вам не разрешается связывать последовательный порт с stdio или выводить журнал в stdio.

Также вы можете восстановить номер pid StratoVirt в файле с помощью:

# cmdline
-pidfile <путь_к_pid_файлу>

1.11 SMBIOS

Спецификация SMBIOS определяет структуры данных и информацию, которая будет входить в структуры данных, связанные с системой. Наличие этих полей позволяет системным администраторам удалённо идентифицировать и управлять этими системами.

# cmdline
# тип 0: информация о BIOS, поддержка версии и даты выпуска строки.
-smbios type=0[,vendor=str][,version=str][,date=str]
# тип 1: Информация о системе, информация в этой структуре определяет атрибуты
# общей системы и предназначена для связи с группой Component ID системного MIF.
-smbios type=1[,manufacturer=str][,version=str][,product=str][,serial=str][,uuid=str][,sku=str][,family=str]
# тип 2: Информация о базовой плате, информация в этой структуре определяет атрибуты базовой платы системы
# (например, материнская плата, планарный, серверный блейд или другой стандартный системный модуль).
-smbios type=2[,manufacturer=str][,product=str][,version=str][,serial=str][,asset=str][,location=str]
# тип 3: Информация об оболочке системы, определяет атрибуты механической оболочки(ов) системы.
# Например, если система включала отдельную оболочку для своих периферийных устройств,
# будут возвращены две структуры: одна для основной системной оболочки и вторая для оболочки периферийного устройства.
-smbios type=3[,manufacturer=str][,version=str][,serial=str][,asset=str][,sku=str]
# тип 4: Информация о процессоре, определяет атрибуты одного процессора;
# отдельный экземпляр структуры предоставляется для каждого процессорного сокета/слота системы.
# Например, система с процессором IntelDX2 будет иметь один экземпляр структуры,
# а система с процессором IntelSX2 будет иметь структуру для описания основного процессора
# и вторую структуру для описания сопроцессора 80487.
-smbios type=4[,sock_pfx=str][,manufacturer=str][,version=str][,serial=str][,asset=str][,part=str][,max-speed=%d][,current-speed=%d]
# тип 17: Устройство памяти, эта структура описывает отдельное устройство памяти.
-smbios type=17[,loc_pfx=str][,bank=str][,manufacturer=str][,serial=str][,asset=str][,part=str][,speed=%d]

## 2. Конфигурация устройства

Для типа машины «microvm» поддерживаются только virtio-mmio и устаревшие устройства. Максимальное количество пользовательских создаваемых устройств составляет 11 на x86_64 и 160 на aarch64.

Для стандартной виртуальной машины (тип машины «q35» на x86_64, и «virt» на aarch64) вместо virtio-mmio поддерживаются устройства virtio-pci. Что касается мостов PCI, они пока не реализованы, в настоящее время существует только один корневой автобус с именем pcie.0. В результате можно настроить всего 32 устройства PCI.

### 2.1 iothread

Iothread используется устройствами для повышения производительности ввода-вывода. StratoVirt создаст несколько дополнительных потоков из-за конфигурации iothread, и эти потоки могут использоваться исключительно устройствами, что повышает производительность.

Примечание: настоятельно рекомендуется использовать iothread, если конкретное устройство его поддерживает, иначе есть риск того, что основной поток зависнет. **Virtio-blk**

Virtio block device — это виртуальное блочное устройство, которое обрабатывает запросы на чтение и запись в очереди virtio от гостя.

Для virtio block device поддерживаются четырнадцать свойств:
* id: уникальный идентификатор устройства в StratoVirt.
* file: путь к файлу бэкэнда на хосте.
* serial: серийный номер virtio блока (необязательно).
* readonly: является ли virtio блок устройством только для чтения (необязательно). Если не установлено, по умолчанию используется значение false.
* direct: открыть блочное устройство с режимом O_DIRECT (необязательно). Если не установлено, по умолчанию используется значение true.
* iothread: указать, какой поток io будет использоваться (необязательно). Если не указано, будет использоваться основной поток.
* throttling.iops-total: используется для ограничения операций ввода-вывода для блочного устройства (необязательно).
* discard: освободить неиспользуемое дисковое пространство (необязательно). «unmap/ignore» означает «включено/выключено». Если не установлено, по умолчанию используется значение ignore.
* detect-zeroes: оптимизировать запись нулей на диск (необязательно). «unmap» означает, что можно освободить дисковое пространство при использовании discard «unmap». Если discard установлен как «ignore», «unmap» detect-zeroes равнозначно «on». Если не установлено, по умолчанию используется значение off.
* if: тип диска, для блочного диска должно быть «none» (необязательно). Если не установлено, по умолчанию используется значение none.
* format: формат образа блока (необязательно). Возможные значения: «raw» или «qcow2». Если не установлено, по умолчанию используется «raw». NB: в настоящее время для microvm поддерживается только «raw».
* num-queues: атрибут num-queues контролирует количество очередей, которые будут использоваться для блочного устройства (необязательно). Максимальное количество поддерживаемых очередей — 32. Если не установлено, количество блоков по умолчанию — наименьшее из количества vCPU и максимального количества очередей (например, min(vcpu_count, 32)).
* bootindex: порядок загрузки блочного устройства (необязательно). Если не установлено, приоритет наименьший. Число колеблется от 0 до 255, чем меньше число, тем выше приоритет. Определяет порядок загрузочных устройств, которые прошивка будет использовать для загрузки гостевой ОС.
* aio: тип aio блочного устройства (необязательно). Возможные значения: «native», «io_uring» или «off». Если не установлено, используется «native» при значении «direct» true, в противном случае используется «off» по умолчанию.

Для virtio-blk-pci требуются ещё четыре свойства:
* bus: имя шины, к которой нужно подключиться.
* addr: включая номер слота и номер функции. Первое число представляет номер слота устройства, а второе — номер его функции.
* multifunction: открывать ли мультифункцию для устройства (необязательно). Если не установлено, по умолчанию используется значение false.
* queue-size: необязательный размер virtqueue для всех очередей (необязательно). Диапазон конфигурации составляет (2, 1024], и размер очереди должен быть степенью двойки. Размер очереди по умолчанию равен 256.

Если вы хотите загрузить виртуальную машину с virtio блоком в качестве rootfs, вам следует добавить «root=DEVICE_NAME_IN_GUESTOS» в параметры ядра. DEVICE_NAME_IN_GUESTOS будет от vda до vdz по порядку.

```shell
# virtio mmio block device.
-drive id=<drive_id>,file=<path_on_host>[,readonly={on|off}][,direct={on|off}][,throttling.iops-total=<limit>][,discard={unmap|ignore}][,detect-zeroes={unmap|on|off}]
-device virtio-blk-device,drive=<drive_id>,id=<blkid>[,iothread=<iothread1>][,serial=<serial_num>]
# virtio pci block device.
-drive id=<drive_id>,file=<path_on_host>[,readonly={on|off}][,direct={on|off}][,throttling.iops-total=<limit>][,discard={unmap|ignore}][,detect-zeroes={unmap|on|off}]
-device virtio-blk-pci,id=<blk_id>,drive=<drive_id>,bus=<pcie.0>,addr=<0x3>[,multifunction={on|off}][,iothread=<iothread1>][,serial=<serial_num>][,num-queues=<N>][,bootindex=<N>][,queue-size=<queuesize>]

StratoVirt также поддерживает vhost-user-blk для повышения производительности хранилища.

Вы можете использовать его, добавив новое устройство, ещё одно свойство поддерживается устройством vhost-user-blk, кроме virtio-blk.

* chardev: id для символьного устройства, это означает, что вам нужно сначала добавить chardev, а затем использовать его id, чтобы найти символьное устройство.

```shell
# vhost user blk mmio device
-chardev socket,id=<chardevid>,path=<socket_path>
-device vhost-user-blk-device,id=<blk_id>,chardev=<chardev_id>[,num-queues=<N>][,queue-size=<queuesize>]
# vhost Функция number должна быть установлена в ноль.

* queue-size: необязательный размер virtqueue для всех очередей. (необязательно) Диапазон конфигурации составляет [256, 4096], и размер очереди должен быть степенью двойки. Размер очереди по умолчанию равен 256.
```shell
# virtio mmio net device
-netdev tap,id=<netdevid>,ifname=<host_dev_name>
-device virtio-net-device,id=<net_id>,netdev=<netdev_id>[,iothread=<iothread1>][,mac=<macaddr>]
# virtio pci net device
-netdev tap,id=<netdevid>,ifname=<host_dev_name>[,queues=<N>]
-device virtio-net-pci,id=<net_id>,netdev=<netdev_id>,bus=<pcie.0>,addr=<0x2>[,multifunction={on|off}][,iothread=<iothread1>][,mac=<macaddr>][,mq={on|off}][,queue-size=<queuesize>]

StratoVirt также поддерживает vhost-net для повышения производительности в сети. Его можно настроить, указав свойство vhost, и поддерживается ещё одно свойство для устройства vhost-net.

  • vhostfd: fd для устройства vhost-net, его можно настроить при vhost=on. Если этот аргумент не указан при vhost=on, StratoVirt получает его, открывая /dev/vhost-net автоматически.
# virtio mmio net device
-netdev tap,id=<netdevid>,ifname=<host_dev_name>[,vhost=on[,vhostfd=<N>]]
-device virtio-net-device,id=<net_id>,netdev=<netdev_id>[,iothread=<iothread1>][,mac=<macaddr>]
# virtio pci net device
-netdev tap,id=<netdevid>,ifname=<host_dev_name>[,vhost=on[,vhostfd=<N>,queues=<N>]]
-device virtio-net-pci,id=<net_id>,netdev=<netdev_id>,bus=<pcie.0>,addr=<0x2>[,multifunction={on|off}][,iothread=<iothread1>][,mac=<macaddr>][,mq={on|off}]

StratoVirt также поддерживает vhost-user net для повышения производительности с помощью ovs-dpdk. При использовании vhost-user net следует открыть общую память (-mem-share=on) и огромные страницы (-mem-path ...), если используется vhost-user net.

# virtio mmio net device
-chardev socket,id=chardevid,path=socket_path
-netdev vhost-user,id=<netdevid>,chardev=<chardevid>
-device virtio-net-device,id=<net_id>,netdev=<netdev_id>[,iothread=<iothread1>][,mac=<macaddr>]
# virtio pci net device
-chardev socket,id=chardevid,path=socket_path
-netdev vhost-user,id=<netdevid>,chardev=<chardevid>[,queues=<N>]
-device virtio-net-pci,id=<net_id>,netdev=<netdev_id>,bus=<pcie.0>,addr=<0x2>[,multifunction={on|off}][,iothread=<iothread1>][,mac=<macaddr>][,mq={on|off}]

Как настроить устройство tap?

# На хосте
$ brctl addbr qbr0
$ ip tuntap add tap0 mode tap
$ brctl addif qbr0 tap0
$ ip link set qbr0 up
$ ip link set tap0 up
$ ip address add 1.1.1.1/24 dev qbr0

# Запустить StratoVirt
... -netdev tap,id=netdevid,ifname=tap0 ...

# В гостевой системе
$ ip link set eth0 up
$ ip addr add 1.1.1.2/24 dev eth0

# Теперь сеть доступна
$ ping 1.1.1.1

Примечание: Если вы хотите использовать несколько очередей, создайте устройство tap следующим образом:

# На хосте
$ brctl addbr qbr0
$ ip tuntap add tap1 mode tap multi_queue
$ brctl addif qbr0 tap1
$ ip link set qbr0 up
$ ip link set tap1 up
$ ip address add 1.1.1.1/24 dev qbr0

Как создать порт с помощью ovs-dpdk?

# Запуск демонов open vSwitch
$ ovs-ctl start
# Инициализация базы данных
$ ovs-vsctl init
# Инициализация dpdk
$ ovs-vsctl set Open_vSwitch . other_config:dpdk-init=true
# Настройка маски lcore для dpdk
$ ovs-vsctl set Open_vSwitch . other_config:dpdk-lcore-mask=0xf
# Настройка огромных страниц для dpdk-socket-mem (2G)
$ ovs-vsctl set Open_vSwitch . other_config:dpdk-socket-mem=1024
# Настройка PMD (Pull Mode Driver) маски CPU
$ ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0xf
# Добавление моста
$ ovs-vsctl add-br ovs_br -- set bridge ovs_br datapath_type=netdev
# Добавление порта
$ ovs-vsctl add-port ovs_br port1 -- set Interface port1 type=dpdkvhostuser
$ ovs-vsctl add-port ovs_br port2 -- set Interface port2 type=dpdkvhostuser
# Установка количества rxq/txq
$ ovs-vsctl set Interface port1 options:n_rxq=num,n_txq=num
$ ovs-vsctl set Interface port2 options:n_rxq=num,n_txq=num

2.4 Virtio-console

Устройство virtio console — это простое устройство для передачи данных между гостевой и хост-системой. Консольное устройство может иметь один или несколько портов. Эти порты могут быть обычными портами или консольными портами. Символьные устройства /dev/vport*p* в гостевой операционной системе Linux будут созданы после настройки порта (независимо от того, является ли он консольным портом или нет). Символьные устройства находятся на В запросе используется язык технической направленности, связанный с разработкой и тестированием программного обеспечения. Основной язык текста запроса — английский.

Перевод на русский язык:

/dev/hvc0 to /dev/hvc7 в гостевой системе Linux будет создан после настройки порта консоли. Для настройки virtio-консоли потребуется перенаправление chardev. Подробнее см. раздел 2.12 Chardev (#212-chardev).

Для virtconsole (порт консоли) и virtserialport (общий порт) можно задать три свойства:

  • id: уникальный идентификатор устройства.
  • chardev: символьное устройство этой консоли/общего порта.
  • nr: уникальный номер порта для этого порта. (необязательно) Если установлено, все virtserialports и virtconsoles должны быть установлены. nr = 0 разрешено только для virtconsole. По умолчанию nr для общего порта начинается с 1, а для порта консоли — с 0. Если не установлено, nr = 0 будет присвоен первому порту консоли в командной строке. И nr = 0 будет зарезервирован, если в командной строке нет порта консоли.

Для virtio-serial-pci требуется ещё четыре свойства:

  • bus: номер шины virtio-консоли.
  • addr: включая номер слота и номер функции. Первое число представляет номер слота устройства, второе — номер его функции.
  • multifunction: открывать ли мультифункцию для устройства. (необязательно) Если не задано, по умолчанию используется значение false.
  • max_ports: максимальное количество портов, которое мы можем иметь для устройства virtio-serial. Диапазон конфигурации [1, 31]. (необязательно) Если не установлено, по умолчанию равно 31.

Для virtio-serial-device требуются ещё два свойства:

  • bus: номер шины virtio-консоли.
  • addr: включая номер слота и номер функции. Первое число представляет номер слота устройства, второе — номер его функции.
# virtio mmio device using console port
-device virtio-serial-device[,id=<virtio-serial0>]
-chardev socket,path=<socket_path>,id=<virtioconsole1>,server,nowait
-device virtconsole,id=<console_id>,chardev=<virtioconsole1>,nr=0

# virtio mmio device using generic port
-device virtio-serial-device[,id=<virtio-serial0>]
-chardev socket,path=<socket_path>,id=<virtioserialport1>,server,nowait
-device virtserialport,id=<serialport_id>,chardev=<virtioserialport1>,nr=0

# virtio pci device
-device virtio-serial-pci,id=<virtio-serial0>,bus=<pcie.0>,addr=<0x3>[,multifunction={on|off},max_ports=<number>]
-chardev socket,path=<socket_path0>,id=<virtioconsole0>,server,nowait
-device virtconsole,id=<portid0>,chardev=<virtioconsole0>,nr=0
-chardev socket,path=<socket_path1>,id=<virtioconsole1>,server,nowait
-device virtserialport,id=<portid1>,chardev=<virtioconsole1>,nr=1

NB: В настоящее время поддерживается только одно virtio-устройство консоли. В microvm поддерживается только один порт.

2.5 Virtio-vsock

Virtio vsock — это устройство связи хост/гость, похожее на virtio-консоль, но имеющее более высокую производительность.

Если вы хотите использовать его, вам необходимо:

  • Конфигурация ядра хоста: CONFIG_VHOST_VSOCK=m.
  • Конфигурация гостевого ядра: CONFIG_VIRTIO_VSOCKETS=y.

И modprobe vhost_vsock на хосте.

Три свойства могут быть заданы для устройства virtio vsock:

  • vsock_id: уникальный идентификатор устройства в StratoVirt.
  • guest_cid: уникальный Context-ID на хосте для каждого гостя, он должен удовлетворять 3<=guest_cid<u32:MAX.
  • vhostfd: fd устройства vsock. (необязательно).

Для vhost-vsock-pci требуются ещё две характеристики:

  • bus: имя шины, к которой нужно подключиться.
  • addr: включая номер слота и номер функции. Первый номер представляет номер слота устройства, второй — номер функции устройства.
# virtio ммio устройство.
-device vhost-vsock-device,id=<vsock_id>,guest-cid=<N>

# virtio устройство pci.
-device vhost-vsock-pci,id=<vsock_id>,guest-cid=<N>,bus=<pcie.0>,addr=<0x3>[,multifunction={on|off}]

Можно установить только одно устройство virtio vsock для одной виртуальной машины.

Также можно использовать nc-vsock для тестирования virtio-vsock.

# В гостевой системе
$ nc-vsock -l port_num

# На хосте
$ nc-vsock guest_cid port_num

2.6 Serial

Serial — устаревшее устройство для виртуальных машин, это интерфейс связи, который соединяет гостя и хост.

Обычно мы используем serial как ttyS0 для вывода консольных сообщений в StratoVirt.

В StratoVirt есть два способа настроить serial и связать его с символьным устройством хоста. NB: Можно настроить только один serial. Требуется. См. раздел 2.12 Chardev

# Добавить chardev и перенаправить последовательный порт на chardev
-chardev backend,id=<chardev_id>[,path=<путь>,server,nowait]
-serial chardev:chardev_id

Или вы можете просто использовать -serial dev, чтобы связать последовательный интерфейс с символьным устройством.

# Упрощённые методы перенаправления
-serial stdio
-serial pty
-serial socket,path=<socket_path>,server,nowait
-serial socket,port=<порт>[,host=<хост>],server,nowait
-serial file,path=<file_path>

2.7 Virtio-balloon

Balloon — это устройство virtio, оно предлагает гибкий механизм памяти для виртуальной машины (VM).

Для virtio-balloon поддерживаются два свойства:

  • deflate_on_oom: Сжимать баллон при нехватке памяти у гостя. Если deflate_on_oom не было согласовано, драйвер НЕ ДОЛЖЕН использовать страницы из баллона, когда num_pages меньше или равно фактическому количеству страниц в баллоне. Если было согласовано deflate_on_oom, драйвер МОЖЕТ использовать страницы из баллона, если это требуется для стабильности системы (например, если память требуется приложениям, работающим внутри гостя). Эта функция может предотвратить OOM в гостевой системе.
  • free_page_reporting: сообщать о свободных гостевых страницах. Эту функцию можно использовать для повторного использования памяти.

Для virtio-balloon-pci требуются ещё два свойства:

  • bus: имя шины, к которой нужно подключиться.
  • addr: включая номер слота и номер функции. Первое число представляет номер слота устройства, а второе — номер его функции.
# Устройство mmio virtio balloon
-device virtio-balloon-device[,deflate-on-oom={true|false}][,free-page-reporting={true|false}]
# Устройство PCI virtio balloon
-device virtio-balloon-pci,id=<balloon_id>,bus=<pcie.0>,addr=<0x4>[,deflate-on-oom={true|false}][,free-page-reporting={true|false}][,multifunction={on|off}]

Примечание: избегайте совместного использования устройств balloon и vfio, устройство balloon недействительно, когда память — огромные страницы. Размер памяти balloon должен быть целым числом, кратным размеру гостевой страницы.

2.8 Virtio-rng

Virtio rng — это паравиртуализированный генератор случайных чисел, он предоставляет гостю аппаратное устройство rng.

Если вы хотите его использовать, вам потребуется:

  • Конфигурация ядра гостя: CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_VIA=y CONFIG_HW_RANDOM_VIRTIO=y

Поддерживаются пять свойств для virtio-rng:

  • filename: путь символьного устройства, генерирующего случайные числа на хосте.
  • period: период таймера для ограничения скорости потока символов. Единица измерения — миллисекунды.
  • max-bytes: максимальное количество байтов, которое символьное устройство генерирует со случайным числом за «период» времени.

Для virtio-rng-pci необходимы ещё два свойства:

  • bus: название шины, к которой необходимо подключиться.
  • addr: включая номер слота и номер функции. Первое число представляет собой номер слота устройства, а второе — номер его функции. Поскольку устройство virtio pci rng является однофункциональным устройством, номер функции следует установить равным нулю.

NB:

  • Ограниченная скорость будет преобразована в байты/сек. Например, если period=100, max-bytes=100; окончательный результат заключается в том, что максимальное количество байт, сгенерированных устройством rng, составляет 1000.
  • Ограниченная скорость должна быть между 64 (включительно) и 1000000000 (включительно), то есть: 64 <= max-bytes/period * 1000 <= 1000000000.
# Устройство rng-random mmio
-object rng-random,id=<objrng0>,filename=<random_file_path>
-device virtio-rng-device,rng=<objrng0>,max-bytes=<1234>,period=<1000>
# Устройство virtio pci rng
-object rng-random,id=<objrng0>,filename=<random_file_path>
-device virtio-rng-pci,id=<rng_id>,rng=<objrng0>[,max-bytes=<1234>][,period=<1000>],bus=<pcie.0>,addr=<0x1>[,multifunction={on|off}]

2.9 PCIe root port

Порт PCI Express на корневом комплексе, который сопоставляет часть иерархии через связанный виртуальный мост PCI-PCI.

Четыре параметра поддерживаются для pcie root port:

  • port: номер порта корневого порта.
  • bus: имя шины, к которой необходимо подключиться.
  • addr: включая номер слота и номер функции.
  • id: имя вторичной шины.
  • chassis: номер шасси. Взаимодействие с libvirt. Настроенный USB-контроллер может поддерживать только USB-клавиатуру и USB-планшет.

2.13.2 USB-клавиатура

USB-клавиатура — это клавиатура, которая использует протокол USB. Она должна быть подключена к USB-контроллеру. Клавиатура и светодиоды пока не поддерживаются.

Для USB-клавиатуры можно задать одно свойство:

  • id: уникальный идентификатор устройства.
-device usb-kbd,id=<kbd>

Примечание: Можно настроить только одну клавиатуру.

2.13.3 USB-планшет

Указательное устройство, которое использует абсолютные координаты. Оно должно быть подключено к USB-контроллеру.

Для USB-планшета можно задать одно свойство:

  • id: уникальный идентификатор устройства.
-device usb-tablet,id=<tablet>

Примечание: Можно настроить только один планшет.

2.13.4 USB-камера

Видеокамера на основе протокола USB video class. Должна быть подключена к USB-контроллеру.

Можно задать три свойства для USB-камеры:

  • id: уникальный идентификатор устройства;
  • backend: тип внутреннего устройства, либо «v4l2», либо «demo»;
  • path: путь к файлу, используемый для подключения к бэкэнду, требуется для «v4l2», но не для «demo». Например, /dev/video0.
-device usb-camera,id=<camera>,backend="v4l2",path="/dev/video0"
-device usb-camera,id=<camera>,backend="demo"

Примечание: Можно настроить только одну камеру.

Если вы хотите включить USB-камеру, см. раздел 4. Сборка с функциями.

2.13.5 USB-накопитель

Устройство хранения данных USB, основанное на классическом протоколе передачи данных только для массовых операций. Должно быть подключено к USB-контроллеру.

Три свойства можно задать для USB-накопителя:

  • id: уникальный идентификатор устройства;
  • file: путь к файлу образа бэкэнда;
  • media: тип носителя хранилища. Возможные значения: «диск» или «cdrom». Если не задано, по умолчанию используется «диск».
-device usb-storage,drive=<drive_id>,id=<storage_id>
-drive id=<drive_id>,file=<path_on_host>[,media={disk|cdrom}],aio=off,direct=false

Примечание: «aio=off, direct=false» должны быть настроены, другие значения aio/direct не поддерживаются.

2.13.6 USB-хост

Устройство USB-хоста, основанное на протоколе USB. Должно быть подключено к USB-контроллеру.

Шесть свойств можно задать для USB-хоста:

  • id: уникальный идентификатор устройства;
  • hostbus: номер шины USB-устройства хоста;
  • hostaddr: адрес номера USB-устройства хоста;
  • hostport: физический номер USB-устройства хоста;
  • vendorid: идентификатор поставщика USB-устройства хоста;
  • productid: идентификатор продукта USB-устройства хоста.
  • isobufs: количество буферов изохронной передачи. Если не указано, по умолчанию равно 4;
  • isobsize: размер буфера изохронной передачи. Если не указано, по умолчанию равен 32.

Пропустить через устройство хоста, идентифицированное по шине и адресу:

-device usb-host,id=<hostid>,hostbus=<bus>,hostaddr=<addr>[,isobufs=<number>][,isobsize=<size>]

Пропустите через устройство хоста, идентифицированное по шине и физическому порту:

-device usb-host,id=<hostid>,hostbus=<bus>,hostport=<port>[,isobufs=<number>][,isobsize=<size>]

Пропустите через устройство хоста, идентифицированное по идентификатору поставщика и продукта:

-device usb-host,id=<hostid>,vendorid=<vendor>,productid=<product>[,isobufs=<number>][,isobsize=<size>]

Примечание:

  1. Комбинация идентификатора поставщика и идентификатора продукта имеет приоритет над комбинацией номера шины и физического номера порта.
  2. Комбинация номера шины и физического порта имеет приоритет перед комбинацией номера шины и адреса.

См. раздел 4. Сборка с функциями, если вы хотите включить USB-хост.

2.14 Virtio SCSI-контроллер

Virtio SCSI-контроллер — это PCI-устройство, к которому можно подключить SCSI-устройство.

Шесть свойств можно задать для Virtio-SCSI-контроллера:

  • id: уникальный идентификатор устройства;
  • bus: номер шины устройства;
  • addr: включая номер слота и номер функции;
  • iothread: указывает, какой поток iothread будет использоваться, если не указан, будет использоваться основной поток (необязательно);
  • num-queues: атрибут num-queues определяет количество очередей запросов, которые будут использоваться для SCSI-контроллера. Если не установлено, используется значение по умолчанию — 1 очередь блоков. Поддерживается максимум 32 очереди (необязательно);
  • queue-size: необязательный размер virtqueue для всех очередей. Диапазон конфигурации составляет (2, 1024], а размер очереди должен быть степенью двойки. По умолчанию. Размер очереди равен 256.
-device virtio-scsi-pci,id=<scsi_id>,bus=<pcie.0>,addr=<0x3>[,multifunction={on|off}][,iothread=<iothread1>][,num-queues=<N>][,queue-size=<queuesize>]

2.15 Virtio Scsi HardDisk

Virtio Scsi HardDisk — это виртуальное блочное устройство, которое обрабатывает запросы на чтение и запись в очереди virtio от гостя.

Для virtio-scsi hd можно задать десять свойств.

  • file: путь к файлу образа бэкэнда.
  • id: уникальный идентификатор устройства.
  • bus: имя шины scsi, поддерживается только $scsi_controller_name + ".0".
  • scsi-id: номер идентификатора (target) четырёхуровневого иерархического адреса scsi (хост, канал, цель, lun). Диапазон конфигурации [0, 255]. Конфигурация загрузочного диска scsi [0, 31].
  • lun: номер lun (lun) четырёхуровневого иерархического адреса scsi (хост, канал, цель, lun). Диапазон конфигурации [0, 255]. Диапазон конфигурации загрузочного диска scsi [0, 7].
  • serial: серийный номер устройства virtio scsi. (необязательно)
  • readonly: является ли устройство scsi доступным только для чтения или нет. По умолчанию false. (необязательно)
  • direct: открыть блочное устройство с режимом O_DIRECT. (необязательно) Если не установлено, по умолчанию true.
  • aio: тип aio блочного устройства (необязательно). Возможные значения: native, io_uring или off. Если не задано, по умолчанию native, если direct истинно, иначе по умолчанию off.
  • bootindex: порядок загрузки устройства scsi. (необязательно) Если не установлен, приоритет наименьший. Число варьируется от 0 до 255, чем меньше число, тем выше приоритет. Определяет порядок загрузочных устройств, которые прошивка будет использовать для загрузки гостевой ОС.
-device virtio-scsi-pci,bus=pcie.1,addr=0x0,id=scsi0[,multifunction=on,iothread=iothread1,num-queues=4]
-drive file=path_on_host,id=drive-scsi0-0-0-0[,readonly=true,aio=native,direct=true]
-device scsi-hd,bus=scsi0.0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0[,serial=123456,bootindex=1]

2.16 Display

Stratovirt поддерживает несколько методов отображения, включая GTK и VNC, что позволяет пользователям взаимодействовать с виртуальной машиной.

Также поддерживается отображение на OpenHarmony OS (OHOS), но требуется реализация клиентской программы.

2.16.1 GTK

Графический интерфейс, нарисованный с помощью инструментария gtk. Подробнее см. на сайте GTK.

Можно задать два свойства для GTK.

  • appname: строка имени программы, которая будет отображаться в строке заголовка окна.
  • full-screen: если настроено, начальное окно будет занимать весь экран.

Пример конфигурации:

-display gtk[,appname=<application_name>,full-screen={on|off}]

Примечание: перед использованием gtk необходимо убедиться, что инструментарий gtk установлен.

См. раздел 4. Сборка с функциями, если вы хотите включить GTK.

2.16.2 VNC

VNC может предоставить пользователям способ удалённого входа в виртуальные машины.

Чтобы использовать VNC, необходимо настроить значение ip и порта. IP-адрес можно установить на указанное значение или 0.0.0.0, что означает, что отслеживаются все IP-адреса на сетевой карте хоста.

-vnc 0.0.0.0:0
-vnc <IP:port>

Шифрование TLS является необязательной конфигурацией. Можно задать три свойства для зашифрованной передачи:

  • тип сертификата;
  • id: уникальный объектный идентификатор;
  • dir: каталог сертификатов. Вы должны поместить в этот каталог легальный институциональный сертификат, сертификат сервера и закрытый ключ для шифрования сертификата.
-object tls-creds-x509,id=<vnc-tls-creds0>,dir=</etc/pki/vnc>

Аутентификация является необязательной настройкой, она зависит от службы saslauth. Чтобы использовать эту функцию, вы должны убедиться, что служба saslauthd работает нормально, и настроить поддерживаемый механизм аутентификации в /etc/sasl2/stratovirt.conf.

Пример конфигурации для файла /etc/sasl2/stratovirt.conf:

# Использование службы saslauthd
pwcheck_method: saslauthd
# Механизм аутентификации
mech_list: plain

Можно задать три свойства для аутентификации:

  • authz-simple;
  • id: уникальный объектный идентификатор;
  • identity: указать имя пользователя, который может войти в систему.
-object authz-simple,id=authz0,identity=username

Пример конфигурации:

-object **authz-simple, id=authz0, identity=username**

-object tls-creds-x509, id=vnc-tls-creds0, dir=/etc/pki/vnc
-vnc 0.0.0.0:0, tls-creds=vnc-tls-creds0, sasl=on, sasl-authz=authz0

Note: 1. Только один клиент может быть подключён одновременно. Последующие подключения клиентов приведут к сбою. 2. Шифрование TLS можно настроить отдельно, но аутентификацию необходимо использовать вместе с шифрованием.

Пожалуйста, обратитесь к [4. Сборка с функциями] (docs/build_guide.md), если вы хотите включить VNC.

2.16.2 Сервер OHUI

Сервер OHUI поддерживает отображение на OHOS. Он опирается на UDS для связи с клиентом OHUI. По сути, он работает как VNC. Клиент получает действия клавиатуры и мыши и отправляет их на сервер, а также отображает изображение виртуальной машины на экране. Сервер обрабатывает действия клавиатуры и мыши, а также передаёт изображение виртуальной машины.

Пример конфигурации:

[-object iothread,id=<threadID>]
-display ohui[,iothread=<threadID>,socks-path=</path/to/dir>]

Примечание: «socks-path» указывает, где находится файл UDS. По умолчанию это /tmp.

2.17 Virtio-fs

Virtio-fs — это общая файловая система, которая позволяет виртуальным машинам получать доступ к дереву каталогов на хосте. В отличие от существующих подходов, она разработана для обеспечения локальной семантики файловой системы и производительности.

2.17.1 Устройство virtio fs

Три свойства могут быть установлены для устройства virtio fs.

  • chardevid: идентификатор символьного устройства
  • device_id: уникальный идентификатор устройства
  • mount_tag: тег монтирования общего каталога, который можно монтировать в гостевой системе
# vhost user fs mmio device
-chardev socket,id=<chardevid>,path=<socket_path>
-device vhost-user-fs-device,id=<device id>,chardev=<chardevid>,tag=<mount tag>
# vhost user fs pci device
-chardev socket,id=<chardevid>,path=<socket_path>
-device vhost-user-fs-pci,id=<device id>,chardev=<chardevid>,tag=<mount tag>

2.17.2 vhost_user_fs

Примечание: двоичный файл vhost_user_fs StratoVirt был удалён. Поскольку существует новая реализация Rust virtiofsd на «https://gitlab.com/virtio-fs/virtiofsd», она помечена как стабильная, и существующий проект должен рассмотреть возможность её использования вместо неё.

Как настроить совместное использование файлов на основе StratoVirt и virtiofsd?

host# Настройте сервер virtiofsd, см. «https://gitlab.com/virtio-fs/virtiofsd/-/blob/main/README.md»

host# stratovirt \
        -machine type=q35,dump-guest-core=off,mem-share=on \
        -smp 1 \
        -m 1024 \
        -kernel <ваш образ> \
        -append root=/dev/vda console=ttyS0 reboot=k panic=1 random.trust_cpu=on rw \
        -drive file=<ваш путь к файлу>,if=pflash,unit=0 \
        -qmp unix:/tmp/qmp2.socket,server,nowait \
        -drive id=drive_id,file=<ваш образ>,direct=on \
        -device virtio-blk-pci,drive=drive_id,bug=pcie.0,addr=1,id=blk -serial stdio -disable-seccomp \
        -chardev socket,id=virtio_fs,path=/path/to/virtiofsd.sock,server,nowait \
        -device vhost-user-fs-pci,id=device_id,chardev=virtio_fs,tag=myfs,bus=pcie.0,addr=0x7

guest# mount -t virtiofs myfs /mnt

2.18 virtio-gpu

virtio-gpu — это виртуализированная видеокарта, которая позволяет виртуальным машинам отображать с её помощью. Обычно используется в сочетании с VNC, окончательные изображения отображаются на клиенте VNC.

Пример конфигурации:

-device virtio-gpu-pci,id=<ваш id>,bus=pcie.0,addr=0x2.0x0[,max_outputs=<ваш max_outputs>][,edid=true|false][,xres=<ваша ожидаемая ширина>][,yres= <ваша ожидаемая высота>][,max_hostmem=<максимальный объём памяти, который может использовать графическая карта>]

Помимо необходимой информации о слоте, для virtio-gpu поддерживаются пять дополнительных свойств.

  • max_outputs: количество экранов, поддерживаемых текущей видеокартой. Максимальное значение — 16 (можно переключиться с помощью ctrl + alt + , подробности см. в разделе «Переключение клиента VNC»).
  • edid: функция Edid, ядро виртуальной машины может проверять эту функцию для HiDPi. Рекомендуется установить значение true.
  • xres/yres: размер окон входа.
  • max_hostmem: максимальный объём памяти, которую может занимать видеокарта на хосте, выражается в байтах. Рекомендуется устанавливать не менее 256 МиБ, иначе это повлияет на поддерживаемые конечные разрешения.

Примечание:

  1. Поддерживается только 2D virtio-gpu.
  2. Live Миграция не поддерживается.

Пожалуйста, обратитесь к 4. Сборка с функциями, если вы хотите включить virtio-gpu.

2.19 ivshmem-scream

ivshmem-scream — это виртуальная звуковая карта, которая использует общую память Intel-VM для передачи аудиоданных.

Для устройства ivshmem-scream поддерживаются девять свойств:

  • id: уникальный идентификатор устройства.
  • memdev: конфигурация внутреннего запоминающего устройства, используемого ivshmem.
  • interface: настройка интерфейсов воспроизведения и записи звука, в настоящее время может быть установлен на ALSA, PulseAudio или Demo.
  • playback: путь для хранения аудио. Когда интерфейс установлен на Demo, воспроизведение является обязательным.
  • record: путь получения аудио. Когда интерфейс установлен на Demo, запись обязательна.
  • bus: номер шины устройства.
  • addr: включая номер слота и номер функции.
  • share: общая память должна быть установлена в положение «on».
  • size: размер общей памяти, рекомендуется 2M.

Пример конфигурации:

-device ivshmem-scream,id=<scream_id>,memdev=<object_id>,interface=<interfaces>[,playback=<playback path>][,record=<record path>],bus=pcie.0,addr=0x2.0x0
-object memory-backend-ram,id=<object_id>,share=on,size=2M

Пожалуйста, обратитесь к 4. Сборка с функциями, если вы хотите включить scream.

2.20 ramfb

Ramfb — это простое устройство отображения. Оно используется в системе Windows на aarch64.

Поддерживаются два свойства для устройства ramfb:

  • id: уникальный идентификатор устройства.
  • install: при установке системы Windows установка значения true автоматически приведёт к нажатию клавиши Enter, чтобы пропустить этап, на котором необходимо вручную нажать любую клавишу для загрузки с компакт-диска или DVD.

Пример конфигурации:

-device ramfb,id=<ramfb id>[,install=true|false]

Примечание: поддерживается только на aarch64.

Пожалуйста, обратитесь к 4. Сборка с функциями, если вы хотите включить ramfb.

2.21 pvpanic

pvpanic — это виртуальное устройство PCI. Оно используется для предоставления виртуальной машине возможности обнаруживать сбои или отказы гостевой операционной системы.

Четыре свойства поддерживаются для устройства pvpanic:

  • id: уникальный идентификатор устройства.
  • bus: номер шины устройства.
  • addr: номер слота.
  • supported-features: поддерживаемые функции, 0–3 относятся к None, panicked, crashload и panicked and crashload соответственно. Рекомендуется значение 3.

Пример конфигурации:

-device pvpanic,id=<pvpanic_pci>,bus=<pcie.0>,addr=<0x7>[,supported-features=<0|1|2|3>]

Пожалуйста, обратитесь к 4. Сборка с функциями, если вы хотите включить pvpanic.

3. Trace

Пользователи могут указать файл конфигурации, который перечисляет события для трассировки.

Можно установить одно свойство:

  • events: файл со списком событий для отслеживания.
-trace file=<file>

4. Seccomp

StratoVirt использует seccomp(2) для ограничения системных вызовов в процессе StratoVirt по умолчанию. Это оказывает небольшое влияние на производительность StratoVirt.

Если вы хотите отключить seccomp, вы можете запустить StratoVirt с помощью -disable-seccomp.

# cmdline
-disable-seccomp

5. Snapshot и Restore

StratoVirt поддерживает создание моментального снимка приостановленной виртуальной машины в качестве шаблона виртуальной машины. Этот шаблон можно использовать для быстрого запуска новой виртуальной машины. Быстрый запуск пропускает стадию загрузки ядра и инициализации пользовательского пространства, чтобы загрузить виртуальную машину за очень короткое время.

5.1 Восстановление из шаблона виртуальной машины

Восстановите из шаблона виртуальной машины с помощью следующей команды:

$ ./stratovirt \
    -machine microvm \
    -kernel path/to/vmlinux.bin \
    -append "console=ttyS0 pci=off reboot=k quiet panic=1 root=/dev/vda" \
    -drive file=path/to/rootfs,id=rootfs,readonly=off,direct=off \
    -device virtio-blk-device,drive=rootfs,id=rootfs \
    -qmp unix:path/to/socket,server,nowait \
    -serial stdio \
    -incoming file:path/to/template
  • incoming: путь к шаблону.

См. раздел «Snapshot и Restore» (snapshot.md) для получения подробной информации.

6. Ozone

Ozone — это облегчённый защищённый «песочниц» для StratoVirt, он обеспечивает безопасную среду для StratoVirt путём ограничения ресурсов StratoVirt с использованием «пространства имён». Пожалуйста, запустите ozone с правами суперпользователя.

6.1 Использование

Ozone можно запустить с помощью следующих команд:

$ ./ozone \
    -name stratovirt_ozone \
    -exec_file

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/openeuler-stratovirt.git
git@gitlife.ru:oschina-mirror/openeuler-stratovirt.git
oschina-mirror
openeuler-stratovirt
openeuler-stratovirt
master