/
BHYVE

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:

bhyve -H -P -s 0,amd_hostbridge \ -s 31,lpc \ -l bootrom,/usr/share/bhyve/uefi-rom.bin \ -c 2 -m 2G \ -s 3:0,ahci-cd,/kvm/ISO/SW_DVD9_Win_Server_STD_CORE_2019_1809.2_64Bit_Russian_DC_STD_MLF_X22-18461.ISO \ -s 4:0,virtio-blk,/dev/zvol/dsk/rpool/kvm/disk00 \ -s 7:0,virtio-net-viona,net0 \ -s 28,fbuf,vga=off,tcp=0.0.0.0:5900,w=1024,h=768,wait \ -s 30,xhci,tablet \ win

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

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

-s 4:0,ahci,hd:/vms/zfstest/ahci.data,nmrr=1 root@ztest:~# diskinfo TYPE DISK VID PID SIZE RMV SSD - c2t0d0 Virtio Block Device 100G no no - c1t0d0 Virtio Block Device 8G no no - c3t0d0 Virtio Block Device 8G no no - c4t0d0 Virtio Block Device 8G no no SATA c5t0d0 BHYVE SATA DISK 50G no yes <=== SSD!

NVME

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

-s 4:0,nvme,/path/to/file.data

Первое число указывает слот 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):

!!!! X64 Exception Type - 000000000000000E CPU Apic ID - 00000000 !!!! RIP - 00000000BFBE5FC0, CS - 0000000000000028, RFLAGS - 0000000000010202 ExceptionData - 0000000000000000 RAX - 00000040BF23BB98, RCX - 00000040BF23BB98, RDX - 0000000000000000 RBX - 00000000BFBE3C25, RSP - 00000000BFBDD048, RBP - 00000000BFBDD060 RSI - 00000000BFBDD230, RDI - 00000040BF23BB98 R8 - 0000000000000000, R9 - 0000000000000001, R10 - 00000000BF9F7F8D R11 - 00000000BFBDCE90, R12 - 0000000000000000, R13 - 0000000000000000 R14 - 0000000000000000, R15 - 0000000000000000 DS - 0000000000000008, ES - 0000000000000008, FS - 0000000000000008 GS - 0000000000000008, SS - 0000000000000008 CR0 - 0000000080000033, CR2 - 00000040BF23BB98, CR3 - 00000000BFB7C000 CR4 - 0000000000000668, CR8 - 0000000000000000 DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 - 0000000000000000 DR3 - 0000000000000000, DR6 - 00000000FFFF0FF0, DR7 - 0000000000000400 GDTR - 00000000BFB66E98 000000000000003F, LDTR - 0000000000000000 IDTR - 00000000BF2EE018 0000000000000FFF, TR - 0000000000000000 FXSAVE_STATE - 00000000BFBDCCA0 !!!! Find PE image /export/ws/smartos-live/projects/illumos-extra/uefi-edk2/ uefi-edk2-a36132939e-64/Build/BhyveX64/RELEASE_ILGCC/X64/MdeModulePkg/Core/ Dxe/DxeMain/DEBUG/DxeCore.dll (ImageBase=00000000BFBDE000, EntryPoint=00000000BFBDE260) !!!!

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

root@ztest:~# psrinfo -pv The physical processor has 2 cores and 4 virtual processors (0-3) The core has 2 virtual processors (0-1) The core has 2 virtual processors (2-3) x86 (GenuineIntel 20655 family 6 model 37 step 5 clock 2393 MHz) Intel(r) Core(tm) i3 CPU M 370 @ 2.40GHz The physical processor has 2 cores and 4 virtual processors (4-7) The core has 2 virtual processors (4-5) The core has 2 virtual processors (6-7) x86 (GenuineIntel 20655 family 6 model 37 step 5 clock 2393 MHz) Intel(r) Core(tm) i3 CPU M 370 @ 2.40GHz The physical processor has 2 cores and 4 virtual processors (8-11) The core has 2 virtual processors (8-9) The core has 2 virtual processors (10-11) x86 (GenuineIntel 20655 family 6 model 37 step 5 clock 2393 MHz) Intel(r) Core(tm) i3 CPU M 370 @ 2.40GHz The physical processor has 2 cores and 4 virtual processors (12-15) The core has 2 virtual processors (12-13) The core has 2 virtual processors (14-15) x86 (GenuineIntel 20655 family 6 model 37 step 5 clock 2393 MHz) Intel(r) Core(tm) i3 CPU M 370 @ 2.40GHz The physical processor has 2 cores and 4 virtual processors (16-19) The core has 2 virtual processors (16-17) The core has 2 virtual processors (18-19) x86 (GenuineIntel 20655 family 6 model 37 step 5 clock 2393 MHz) Intel(r) Core(tm) i3 CPU M 370 @ 2.40GHz The physical processor has 2 cores and 4 virtual processors (20-23) The core has 2 virtual processors (20-21) The core has 2 virtual processors (22-23) x86 (GenuineIntel 20655 family 6 model 37 step 5 clock 2393 MHz) Intel(r) Core(tm) i3 CPU M 370 @ 2.40GHz The physical processor has 2 cores and 4 virtual processors (24-27) The core has 2 virtual processors (24-25) The core has 2 virtual processors (26-27) x86 (GenuineIntel 20655 family 6 model 37 step 5 clock 2393 MHz) Intel(r) Core(tm) i3 CPU M 370 @ 2.40GHz The physical processor has 2 cores and 4 virtual processors (28-31) The core has 2 virtual processors (28-29) The core has 2 virtual processors (30-31) x86 (GenuineIntel 20655 family 6 model 37 step 5 clock 2393 MHz) Intel(r) Core(tm) i3 CPU M 370 @ 2.40GHz root@ztest:~# psrinfo 0 on-line since 04/23/2021 21:07:09 1 on-line since 04/23/2021 21:07:10 2 on-line since 04/23/2021 21:07:10 3 on-line since 04/23/2021 21:07:10 4 on-line since 04/23/2021 21:07:10 5 on-line since 04/23/2021 21:07:10 6 on-line since 04/23/2021 21:07:10 7 on-line since 04/23/2021 21:07:10 8 on-line since 04/23/2021 21:07:10 9 on-line since 04/23/2021 21:07:10 10 on-line since 04/23/2021 21:07:11 11 on-line since 04/23/2021 21:07:11 12 on-line since 04/23/2021 21:07:11 13 on-line since 04/23/2021 21:07:11 14 on-line since 04/23/2021 21:07:11 15 on-line since 04/23/2021 21:07:12 16 on-line since 04/23/2021 21:07:12 17 on-line since 04/23/2021 21:07:12 18 on-line since 04/23/2021 21:07:12 19 on-line since 04/23/2021 21:07:13 20 on-line since 04/23/2021 21:07:13 21 on-line since 04/23/2021 21:07:13 22 on-line since 04/23/2021 21:07:14 23 on-line since 04/23/2021 21:07:28 24 on-line since 04/23/2021 21:07:29 25 on-line since 04/23/2021 21:07:29 26 on-line since 04/23/2021 21:07:30 27 on-line since 04/23/2021 21:07:31 28 on-line since 04/23/2021 21:07:31 29 on-line since 04/23/2021 21:07:32 30 on-line since 04/23/2021 21:07:33 31 on-line since 04/23/2021 21:07:33

 

Related content