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. Результат виртуальной машины описанной выше топологии: