Ошибка прерывания при попытке запустить вложенный bhyve из гостя FreeBSD kvm

Вопрос или проблема

У меня есть виртуальная машина FreeBSD, которая работает на Linux KVM, и когда я пытаюсь запустить виртуальную машину bhyve, я получаю следующую ошибку:

vm exit[0]
    причина      SVM
    rip     0x000000000f49eac0
    длина_инструкции 2
    код_выхода    0x7b
    информация_выхода1   0x511021d
    информация_выхода2   0xf49eac2
Ошибка прерывания

Я запускаю KVM с помощью команды:

/usr/sbin/bhyve -A -D -H -P -S -u -w -c 1 -m 250m -s 0,amd_hostbridge \
      -s 5,virtio-blk,FreeBSD-14.0-RELEASE-amd64-bootonly.iso \
      -s 7,virtio-blk,guest.img \
      -s 29,virtio-rnd -s 21,virtio-net,tap0 -s 31,lpc \
      -l com1,stdio \
      -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd test

Виртуальная машина FreeBSD – это свежая установка FreeBSD-14.1-RELEASE-amd64-memstick.img, которая подготовлена с помощью следующего скрипта:

pkg install -y bhyve-firmware
truncate -s 16G guest.img
fetch https://download.freebsd.org/releases/ISO-IMAGES/14.0/FreeBSD-14.0-RELEASE-amd64-bootonly.iso
kldload vmm

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

Также я здесь привожу virt-manager xml виртуальной машины FreeBSD:

<domain type="kvm">
  <name>freebsd</name>
  <uuid>88888888-8888-8888-8888-888888888888</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://freebsd.org/freebsd/14.0"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit="KiB">1048576</memory>
  <currentMemory unit="KiB">1048576</currentMemory>
  <vcpu placement="static">1</vcpu>
  <os>
    <type arch="x86_64" machine="pc-i440fx-noble">hvm</type>
  </os>
  <features>
    <acpi/>
    <apic/>
    <vmport state="off"/>
  </features>
  <cpu mode="host-passthrough" check="none" migratable="on"/>
  <clock offset="utc">
    <timer name="rtc" tickpolicy="catchup"/>
    <timer name="pit" tickpolicy="delay"/>
    <timer name="hpet" present="no"/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled="no"/>
    <suspend-to-disk enabled="no"/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2"/>
      <source file="/var/local/freebsd.qcow2"/>
      <target dev="vda" bus="virtio"/>
      <boot order="2"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
    </disk>
    <controller type="usb" index="0" model="ich9-ehci1">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x7"/>
    </controller>
    <controller type="usb" index="0" model="ich9-uhci1">
      <master startport="0"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x0" multifunction="on"/>
    </controller>
    <controller type="usb" index="0" model="ich9-uhci2">
      <master startport="2"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x1"/>
    </controller>
    <controller type="usb" index="0" model="ich9-uhci3">
      <master startport="4"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x2"/>
    </controller>
    <controller type="ide" index="0">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
    </controller>
    <controller type="virtio-serial" index="0">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x06" function="0x0"/>
    </controller>
    <controller type="pci" index="0" model="pci-root"/>
    <interface type="network">
      <mac address="52:52:52:52:52:52"/>
      <source network="default"/>
      <model type="virtio"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0"/>
    </interface>
    <serial type="pty">
      <target type="isa-serial" port="0">
        <model name="isa-serial"/>
      </target>
    </serial>
    <console type="pty">
      <target type="serial" port="0"/>
    </console>
    <input type="mouse" bus="ps2"/>
    <input type="keyboard" bus="ps2"/>
    <sound model="ac97">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/>
    </sound>
    <audio id="1" type="none"/>
    <memballoon model="virtio">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x08" function="0x0"/>
    </memballoon>
  </devices>
</domain>

Ответ или решение

При попытке запустить виртуальную машину Bhyve в гостевой системе FreeBSD, работающей на хосте Linux с KVM, вы столкнулись с ошибкой "Abort trap". Это сообщение об ошибке указывает на проблемы с платформой виртуализации, особенно в контексте вложенной виртуализации. Давайте рассмотрим проблему более подробно и предложим возможные решения.

Анализ проблемы

Ошибка, с которой вы столкнулись, связана с выходом из виртуальной машины (vm exit) и, в частности, с причиной "SVM" (Secure Virtual Machine). Ваша команда для запуска bhyve выглядит корректной, однако есть несколько факторов, которые стоит учесть:

  1. Настройки KVM: Убедитесь, что на вашем хост-системе включена поддержка вложенной виртуализации. Для этого проверьте, загружены ли необходимые модули и правильно ли настроены параметры вашей системы:

    dmesg | grep -e svm -e vmx

    Если результаты показывают, что вложенная виртуализация не активна, ее нужно включить:

    echo 'options KVM nested=1' >> /etc/modprobe.d/kvm.conf
  2. Параметры запуска bhyve: Параметры, использованные вами при запуске, выглядят в целом приемлемыми, но стоит попробовать некоторые изменения:

    • Убедитесь, что выбрана правильная архитектура процессора и никаких конфликтов с совместимостью. Возможно, стоит уменьшить количество ядер или уменьшить объем оперативной памяти.
    • Проверьте, может ли ваша версия bhyve по умолчанию использовать UEFI. Это может вызвать проблемы, если вы используете BIOS.
  3. Совместимость оборудования: Некоторые процессоры могут не поддерживать работу с вложенной виртуализацией, либо же работа с bhyve в этой конфигурации может быть нестабильной. Убедитесь, что у вас поддерживается и включено:

    • Вложенная виртуализация (Intel VT-x или AMD-V).
    • Поддержка второго уровня адресации (EPT или NPT).
  4. Ошибки в конфигурации виртуальных сетей: Проверьте настройки сети в вашем виртуальном окружении. Иногда неправильные конфигурации или проблемы со шлюзами могут приводить к подобным сбоям.

Решение

Вот несколько шагов, которые помогут решить проблему с "Abort trap":

  • Обновите ПО: Убедитесь, что все ваши пакеты и ядро FreeBSD обновлены до последних версий. Возможно, это исправит известные проблемы со стабильностью.

  • Попробуйте альтернативные параметры: Измените параметры запуска вашей команды bhyve. Уберите или измените флаги -u (это может вызвать конфликты с нишей, если используются смешанные модули):

    /usr/sbin/bhyve -A -D -H -P -S -c 1 -m 250m ...
  • Тестирование другой конфигурации: Попробуйте использовать другую версию FreeBSD или другой образ ISO для запуска bhyve, чтобы исключить возможность поврежденного образа.

Заключение

Ошибки "Abort trap", возникающие при запуске вложенной виртуализации bhyve в FreeBSD на KVM, могут возникать по многим причинам, включая конфликты конфигурации, несовместимость оборудования и настройки системы. Следуя приведенным выше рекомендациям, вы можете диагностировать и, возможно, устранить возникшую проблему. Если ошибка продолжает появляться, рассмотрите возможность дублирования вашего окружения на другой системе для исключения проблем с текущей аппаратной или программной конфигурацией.

Оцените материал
Добавить комментарий

Капча загружается...