BHYVE

Запускаем гипервизор:

VM="freebsd" while :; do bhyvectl --vm=$VM --destroy bhyve -H -P -s 0,amd_hostbridge \ -s 31,lpc -l bootrom,/usr/share/bhyve/uefi-csm-rom.bin \ -c 2 \ -m 4G \ -s 3:0,virtio-blk,/dev/zvol/dsk/rpool/vms/freebsd/freebsd-disk0 \ -s 7:0,virtio-net-viona,free0 \ -s 29,fbuf,vga=off,rfb=0.0.0.0:5900,w=1024,h=768,wait \ -s 2,ahci-cd,/vms/freebsd/freebsd.iso \ $VM status=$? bhyvectl --vm=$VM --destroy [ ${status} -ne 0 ] && break done

 

FrameBuffer

Включаем VNC строкой -s 29,fbuf,vga=off,rfb=0.0.0.0:5900,w=1024,h=768,wait, где:

  • 29 - номер на шине (можно брать любой свободный)

  • fbuf - устройство framebuffer

  • vga=off - выключить VGA (в противном случае упадёт в корку)

  • rfb - протокол (VNC), можно tcp

  • 0.0.0.0:5900 - где слушать порт

  • w, h - размер окна (1024x768 в этом примере)

  • wait - ожидать прихода клиентов

Для работы графики требуется bootrom uefi-rom.bin:

-l bootrom,/usr/share/bhyve/uefi-rom.bin

Диски

Для явного указания размера сектора (секторов) делаем так:

-s 3:0,virtio-blk,/dev/zvol/dsk/rpool/bhyve/dilos/disk0,sectorsize=512/4096

В этом примере диск будет 512E, по умолчанию у нас 512 байт на сектор (как в kvm)

Конфиг под win:

xhci,tablet синхронизирует перемещение указателя мыши VNC-клиента с гостевой системой.

Для AHCI есть возможность эмулировать SSD, для этого после имени файла нужно дописать nmrr=1 (Nominal Media Rotational Rate или RPM, по умолчанию 0):

NVME

Для эмуляции NVMe нужно указать драйвер в строке вида:

Первое число указывает слот PCI, их может быть только 32 штуки (0-31), последняя 31 принадлежит lpc. Второе число указывает на функцию PCI (0-7). Для добавления ещё NVME просто увеличиваем второе число до 7.

Нумерация устройств

Общий формат это -s [bus:]:slot:func.

  • bus - шина, может быть от 0 до 255, по умолчанию если не указано 0

  • slot - номер слота на шине от 0 до 31

  • func - функция устройства, может быть от 0 до 7

Если указывать несколько шин (bus), то при запуске bhyve выводит ошибку, что такая конфигурация запрещена для MPtable, запустить можно путём отключения этой особенности (опция -Y).

virtio-blk

Общее количество дисков virtio может быть 64, на 65 паникует bootrom (uefi-csm-rom.bin):

Топология CPU

Есть возможность задать количество процессоров, ядер, тредов. На текущий момент общее количество виртуалных процессоров не может превышать 32 (VM_MAXCPU в файле uts/i86pc/sys/vmm.h). При этом оно должно точно совпадать с произведением количества сокетов, ядре и потоков:

cpus = sockets * cores * threads

Если это не так, то будет выдаваться ошибка топологии: “bhyve: invalid cpu topology 'cpus=32,sockets=8,cores=2'

Синтаксис следующий:

-c cpus=32,sockets=8,cores=2,threads=2

Если какой-то параметр не указан, то подразумевается 1. Результат виртуальной машины описанной выше топологии: