StratoVirt можно запустить только через аргументы командной строки.
Общая конфигурация машины, включая:
kvm
. (необязательно). Если не установлено, по умолчанию используется KVM.off
. (необязательно). Если не задано, по умолчанию отключено.NB: тип машины «none» используется для получения возможностей stratovirt.
# cmdline
-machine [type=]name[,dump-guest-core={on|off}][,mem-share={on|off}]
StratoVirt поддерживает настройку количества VCPU (nr_vcpus).
Это позволяет вам установить максимальное количество VCPU, которое будет поддерживать виртуальная машина. Максимальное значение — 254, а минимальное разумное значение — 1.
По умолчанию после загрузки виртуальная машина подключит все настроенные вами процессоры.
Для smp
поддерживаются четыре свойства:
maxcpus
. На машине arm, если вы запускаете microvm, значение socket должно быть пока равно единице.maxcpus
.maxcpus
.NB: аргументы топологии процессора используются для взаимодействия с libvirt.
Если он настроен, сокеты * кристаллы * кластеры * ядра * потоки должны быть равны maxcpus
, а maxcpus
должен быть больше или равен cpus
.
# cmdline
-smp [cpus=]n[,maxcpus=<maxcpus>][,sockets=<sockets>][,dies=<dies>][,clusters=<clusters>][,cores=<cores>][,threads=<threads>]
StratoVirt позволяет настраивать функции процессора.
В настоящее время поддерживаются следующие параметры:
host
, и это единственный поддерживаемый вариант в настоящее время.off
или on
, по умолчанию off
. (В настоящее время поддерживается только на aarch64)off
или on
, по умолчанию off
. (В настоящее время поддерживается только на aarch64)# cmdline
-cpu host[,pmu={on|off}][,sve={on|off}]
StratoVirt поддерживает установку размера памяти виртуальной машины в командной строке.
Это позволяет установить размер памяти, который будет поддерживать виртуальная машина.
Можно выбрать G
в качестве единицы измерения (по умолчанию единица измерения — M
). Размер памяти должен быть целым числом.
Размер памяти виртуальной машины по умолчанию составляет 256 МБ. Поддерживаемый размер памяти виртуальной машины составляет от [128 МБ, 512 ГБ].
# cmdline
-m [size=]<megs>[m|M|g|G]
-m 256m
-m 256
-m 1G
Функция предварительного выделения памяти используется для предварительного выделения физической памяти виртуальной машины и создания её таблиц страниц. Используя эту функцию, количество ошибок страниц уменьшится, а производительность доступа к памяти виртуальной машины улучшится.
Примечание: Эта опция повлияет на время запуска виртуальной машины.
Вы можете использовать следующую командную строку для настройки предварительного распределения памяти.
-mem-prealloc
StratoVirt поддерживает настройку файла бэкенда памяти виртуальной машины.
Это позволяет указать путь к файлу бэкенда, который может быть либо каталогом, либо файлом. Путь должен быть абсолютным путём.
# cmdline
-mem-path <filebackend_path>
Файл бэкенда памяти можно использовать, чтобы позволить гостю использовать hugetlbfs на хосте. Он поддерживает страницы памяти размером 2 Мбайт или 1 Гбайт. Следующие шаги показывают, как использовать огромные страницы:
# mount hugetlbfs в каталоге на хосте
$ mount -t hugetlbfs hugetlbfs /path/to/hugepages
# установите количество огромных страниц
*Примечание: В тексте запроса присутствуют фрагменты кода на языке программирования Shell, но они не были переведены.* **Параметры ядра**
```shell
# cmdline
-initrd <путь_к_initrd>
Пользователи могут задать глобальную конфигурацию с помощью параметра -global.
Можно установить одно свойство:
-global pcie-root-port.fast-unplug={0|1}
StratoVirt поддерживает вывод журнала в stderr и файл журнала.
Вы можете включить логирование StratoVirt с помощью:
# Вывод журнала в stderr
-D
# Вывод журнала в файл журнала
-D <путь_к_файлу_журнала>
Уровень логирования StratoVirt зависит от переменной среды STRATOVIRT_LOG_LEVEL
.
StratoVirt поддерживает пять уровней логирования: trace
, debug
, info
, warn
, error
. По умолчанию уровень равен error
.
Если параметр -D не установлен, журналы по умолчанию выводятся в stderr.
StratoVirt может работать как демон.
# cmdline
-daemonize
При запуске StratoVirt в качестве демона вам не разрешается связывать последовательный порт с stdio или выводить журнал в stdio.
Также вы можете восстановить номер pid StratoVirt в файле с помощью:
# cmdline
-pidfile <путь_к_pid_файлу>
Спецификация 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.
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
Устройство virtio console — это простое устройство для передачи данных между гостевой и хост-системой. Консольное устройство может иметь один или несколько портов. Эти порты могут быть обычными портами или консольными портами. Символьные устройства /dev/vport*p* в гостевой операционной системе Linux будут созданы после настройки порта (независимо от того, является ли он консольным портом или нет). Символьные устройства находятся на В запросе используется язык технической направленности, связанный с разработкой и тестированием программного обеспечения. Основной язык текста запроса — английский.
Перевод на русский язык:
/dev/hvc0 to /dev/hvc7 в гостевой системе Linux будет создан после настройки порта консоли. Для настройки virtio-консоли потребуется перенаправление chardev. Подробнее см. раздел 2.12 Chardev (#212-chardev).
Для virtconsole (порт консоли) и virtserialport (общий порт) можно задать три свойства:
Для virtio-serial-pci требуется ещё четыре свойства:
Для virtio-serial-device требуются ещё два свойства:
# 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 поддерживается только один порт.
Virtio vsock — это устройство связи хост/гость, похожее на virtio-консоль, но имеющее более высокую производительность.
Если вы хотите использовать его, вам необходимо:
И modprobe vhost_vsock
на хосте.
Три свойства могут быть заданы для устройства virtio vsock:
3<=guest_cid<u32:MAX
.Для vhost-vsock-pci требуются ещё две характеристики:
# 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
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 поддерживаются два свойства:
Для virtio-balloon-pci требуются ещё два свойства:
# Устройство 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.
Если вы хотите его использовать, вам потребуется:
Поддерживаются пять свойств для virtio-rng:
Для virtio-rng-pci необходимы ещё два свойства:
NB:
# Устройство 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:
USB-клавиатура — это клавиатура, которая использует протокол USB. Она должна быть подключена к USB-контроллеру. Клавиатура и светодиоды пока не поддерживаются.
Для USB-клавиатуры можно задать одно свойство:
-device usb-kbd,id=<kbd>
Примечание: Можно настроить только одну клавиатуру.
Указательное устройство, которое использует абсолютные координаты. Оно должно быть подключено к USB-контроллеру.
Для USB-планшета можно задать одно свойство:
-device usb-tablet,id=<tablet>
Примечание: Можно настроить только один планшет.
Видеокамера на основе протокола USB video class. Должна быть подключена к USB-контроллеру.
Можно задать три свойства для USB-камеры:
-device usb-camera,id=<camera>,backend="v4l2",path="/dev/video0"
-device usb-camera,id=<camera>,backend="demo"
Примечание: Можно настроить только одну камеру.
Если вы хотите включить USB-камеру, см. раздел 4. Сборка с функциями.
Устройство хранения данных USB, основанное на классическом протоколе передачи данных только для массовых операций. Должно быть подключено к USB-контроллеру.
Три свойства можно задать для USB-накопителя:
-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 не поддерживаются.
Устройство USB-хоста, основанное на протоколе USB. Должно быть подключено к USB-контроллеру.
Шесть свойств можно задать для USB-хоста:
Пропустить через устройство хоста, идентифицированное по шине и адресу:
-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>]
Примечание:
См. раздел 4. Сборка с функциями, если вы хотите включить USB-хост.
Virtio SCSI-контроллер — это PCI-устройство, к которому можно подключить SCSI-устройство.
Шесть свойств можно задать для Virtio-SCSI-контроллера:
-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 можно задать десять свойств.
O_DIRECT
. (необязательно) Если не установлено, по умолчанию true.native
, io_uring
или off
. Если не задано, по умолчанию native
, если direct
истинно, иначе по умолчанию off
.-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), но требуется реализация клиентской программы.
Графический интерфейс, нарисованный с помощью инструментария gtk. Подробнее см. на сайте GTK.
Можно задать два свойства для GTK.
Пример конфигурации:
-display gtk[,appname=<application_name>,full-screen={on|off}]
Примечание: перед использованием gtk необходимо убедиться, что инструментарий gtk установлен.
См. раздел 4. Сборка с функциями, если вы хотите включить GTK.
VNC может предоставить пользователям способ удалённого входа в виртуальные машины.
Чтобы использовать VNC, необходимо настроить значение ip и порта. IP-адрес можно установить на указанное значение или 0.0.0.0
, что означает, что отслеживаются все IP-адреса на сетевой карте хоста.
-vnc 0.0.0.0:0
-vnc <IP:port>
Шифрование TLS является необязательной конфигурацией. Можно задать три свойства для зашифрованной передачи:
-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
Можно задать три свойства для аутентификации:
-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.
Сервер OHUI поддерживает отображение на OHOS. Он опирается на UDS для связи с клиентом OHUI. По сути, он работает как VNC. Клиент получает действия клавиатуры и мыши и отправляет их на сервер, а также отображает изображение виртуальной машины на экране. Сервер обрабатывает действия клавиатуры и мыши, а также передаёт изображение виртуальной машины.
Пример конфигурации:
[-object iothread,id=<threadID>]
-display ohui[,iothread=<threadID>,socks-path=</path/to/dir>]
Примечание: «socks-path» указывает, где находится файл UDS. По умолчанию это /tmp.
Virtio-fs — это общая файловая система, которая позволяет виртуальным машинам получать доступ к дереву каталогов на хосте. В отличие от существующих подходов, она разработана для обеспечения локальной семантики файловой системы и производительности.
Три свойства могут быть установлены для устройства virtio fs.
# 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>
Примечание: двоичный файл 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
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 поддерживаются пять дополнительных свойств.
Примечание:
Пожалуйста, обратитесь к 4. Сборка с функциями, если вы хотите включить virtio-gpu.
ivshmem-scream — это виртуальная звуковая карта, которая использует общую память Intel-VM для передачи аудиоданных.
Для устройства ivshmem-scream поддерживаются девять свойств:
Пример конфигурации:
-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.
Ramfb — это простое устройство отображения. Оно используется в системе Windows на aarch64.
Поддерживаются два свойства для устройства ramfb:
Пример конфигурации:
-device ramfb,id=<ramfb id>[,install=true|false]
Примечание: поддерживается только на aarch64.
Пожалуйста, обратитесь к 4. Сборка с функциями, если вы хотите включить ramfb.
pvpanic — это виртуальное устройство PCI. Оно используется для предоставления виртуальной машине возможности обнаруживать сбои или отказы гостевой операционной системы.
Четыре свойства поддерживаются для устройства pvpanic:
Пример конфигурации:
-device pvpanic,id=<pvpanic_pci>,bus=<pcie.0>,addr=<0x7>[,supported-features=<0|1|2|3>]
Пожалуйста, обратитесь к 4. Сборка с функциями, если вы хотите включить pvpanic.
Пользователи могут указать файл конфигурации, который перечисляет события для трассировки.
Можно установить одно свойство:
-trace file=<file>
StratoVirt использует seccomp(2) для ограничения системных вызовов в процессе StratoVirt по умолчанию. Это оказывает небольшое влияние на производительность StratoVirt.
Если вы хотите отключить seccomp, вы можете запустить StratoVirt с помощью -disable-seccomp.
# cmdline
-disable-seccomp
StratoVirt поддерживает создание моментального снимка приостановленной виртуальной машины в качестве шаблона виртуальной машины. Этот шаблон можно использовать для быстрого запуска новой виртуальной машины. Быстрый запуск пропускает стадию загрузки ядра и инициализации пользовательского пространства, чтобы загрузить виртуальную машину за очень короткое время.
Восстановите из шаблона виртуальной машины с помощью следующей команды:
$ ./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
См. раздел «Snapshot и Restore» (snapshot.md) для получения подробной информации.
Ozone — это облегчённый защищённый «песочниц» для StratoVirt, он обеспечивает безопасную среду для StratoVirt путём ограничения ресурсов StratoVirt с использованием «пространства имён». Пожалуйста, запустите ozone с правами суперпользователя.
Ozone можно запустить с помощью следующих команд:
$ ./ozone \
-name stratovirt_ozone \
-exec_file
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )