LINUX.ORG.RU
ФорумAdmin

Трудности с пробросом видеокарты в виртуалку

 , , ,


2

4

Всем привет.

Не работает видеокарта в виртуалке

Железо: Gigabyte GA-EX58-UD3R; Xeon X5660; Radeon HD7770

Хост - Ubuntu Server 18.04.3 LTS; гость - десятка

Что делал:

  1. Включил в биосе vt-d
  2. В etc/default/grub добавил «intel_iommu=on» и «allow_unsafe_interrupts=1» иначе vfio не запускался.
  3. В /etc/modules добавил vfio, vfio_iommu_type1, vfio_pci, vfio_virqfd
  4. В /etc/modprobe.d/vfio.conf добавил:
softdep radeon pre: vfio-pci
softdep snd_hda_intel pre: vfio-pci
options vfio-pci ids=1002:683d,1002:aab0

1002:683d,1002:aab0 - id видеокарты и hdmi звука соответственно

В конфиг виртуальной машины добавил:

<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
  </source>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x010' function='0x0' multifunction='on'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
  </source>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x010' function='0x1'/>
</hostdev>

Видеокарта видна в системе, но при попытке установки дров система стабильно виснет.

Что можно сделать? Кроме как забить на попытки пробросить видеокарту, конечно)


В конфиг виртуальной машины добавил:

Зачем? Правь настройки через virt-manager - иначе можешь накосячить с ID шин и карт.

o-
()
Ответ на: комментарий от o-

Это Ubuntu Server. Не хотелось бы гуи для virt-manager ставить, ибо вряд ли поможет. Это только на крайний случай

Конфиг запуска виртуалки:

sudo qemu-system-x86_64 \
-machine q35,accel=kvm \
-enable-kvm \
-cpu host,kvm=off,check \
-smp cpus=4,sockets=1,cores=4,threads=1 \
-m 6G \
-device piix3-usb-uhci \
-device usb-tablet \
-drive file='/mnt/ssd/vmd/win10.img' \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on \
-device vfio-pci,host=01:00.1,bus=root.1,addr=00.1 \
-vnc :0

Тем временем попробовал другую видеокарту HD7450. Плохо, что та же серия, но что нашёл. Стабильный BSOD при установке драйвера в винде. Примерно то же самое.

Aster
() автор топика

Уверен, что модуль vfio-pci подгрузился раньше radeon? В dmesg пишется, что vfio хапнул твой девайс?

У меня ядро грузится с параметрами intel_iommu=on iommu=pt.

Если виртуалка на q35-м чипсете, попробуй его поменять на i440fx. В ветке 2.0 в одной из версий здорово поломали проброс на чипсете q35. И починили это как бы уже не в 4-ой версии.

Если ничего не поможет, обновлять qemu.

anonymous
()
Ответ на: комментарий от anonymous

Я протупил: у тебя чипсет q35. Меняй на i440fx. Либо апгрейд qemu до 4-й ветки, либо даунгрейд на раннюю 2-ю.

anonymous
()
Ответ на: комментарий от Aster

Libvirt легко управляется удаленно, в том числе и с gui. Это даже не x11, а свой протокол. К сокету подключиться можно и через ssh.

boowai ★★★★
()
Ответ на: комментарий от boowai

К сокету подключиться можно и через ssh.

Причём virt-manager это умеет.

AnDoR ★★★★★
()
Ответ на: комментарий от Aster

Попробуйте отключить эмулируемую видеокарту - добавьте опцию «-vga none» и удалите «-vnc :0»

No
()
Ответ на: комментарий от Aster

Не хотелось бы гуи для virt-manager ставить

Его надо ставить на клиент, а не на сервер.

anonymous
()
Ответ на: комментарий от Aster

Решил попытать счастья на другой платформе. Gigabyte ga-970a-d3 + AMD FX8120 Поменял intel_iommu=on на amd_iommu=on и убрал allow_unsafe_interrupts=1. vfio не ругается.

То же самое на обоих картах. BSOD, зависание или даже зависание хоста при установке дров в госте.

Как то печально с пробросом видеокарты.

Aster
() автор топика
Ответ на: комментарий от Aster

Проброс на чипсете q35 починили только в 4.0, насколько я помню. С каким-то обновлением qemu перестали запускаться виртуалки - черный экран и загрузка цпу 100%. При установке с нуля всё хорошо до момента установки драйвера. Пока чипсет не поменял, ничего так с места и не сдвинулось.

На q35 вернулся только в версии 4.0. В версии 3.0 проброс так и не работал. В 3.1, по-моему, тоже.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, anonymous

На i440fx всё заработало, бублик в оффтопике крутится. Вернулся на Xeon X5660, ибо он холоднее. Тоже всё норм. Не знаю, сколько бы сам это выяснял. Перед пробросом специально на q35 поменял, видеокарте же pcie нужна.

Что интересно, если убрать VNC, то система с одной проброшенной видеокартой не грузится…

Aster
() автор топика
Ответ на: комментарий от Aster

Для пущей упоротости добавил «options kvm_intel nested=1» и cpu mode=‘host-passthrough’. В виртуалке запустил BlueStacks (андроид эмулятор). Заработало, как ни странно, и вполне шустро. На этом настройку виртуальной машины можно заканчивать)

Aster
() автор топика
Ответ на: комментарий от Aster

Если vnc не использовать, то нужно грузить вм в uefi режиме (поставить ovmf). И биос видеокарточки должен поддерживать загрузку в uefi-режиме.

anonymous
()

(1) обновили ли initramfs после установки опций, чтобы модули vfio, vfio_iommu_type1, vfio_pci попали в него ? (2) добавли ли в строку загрузки хост-ОС rd.driver.pre=vfio-pci video=efifb:off ? (3) проверили ли отработку vfio командой lspci -nnk -d 1002: ?

anonymous
()
Ответ на: комментарий от anonymous

(4) в некоторых дистрибах опция options vfio-pci ids=1002:683d,1002:aab0 отрабатывает криво, могут взяться оба номера, или только первый или только последний почему-то, если так, то имеет смысл оставить точно один номер - видеокарту (5) нужно проверить, что видеокарта попала в отдельную IOMMU GROUP

anonymous
()
Ответ на: комментарий от anonymous

Не почему-то, а по вполне конкретной причине: к моменту загрузки модуля vfio-pci, уже загрузился родной драйвер устройства. В такой ситуации vfio не сможет осуществить привязку устройства на себя.

Без опции softdep, vfio обычно грузится после видеодрайвера, но до звукового. Соответственно, привязка получается для hdmi-audio, а видео в пролёте.

anonymous
()
Ответ на: комментарий от anonymous

Ещё, кстати: (6) нужно проверить, что в initramfs добавлены все нужные модули по зависимостям для модулей vfio* (иногда это необходимо); например: modinfo vfio-pci | grep dep modinfo vfio_virqfd | grep dep и прочие.

anonymous
()
Ответ на: комментарий от anonymous

(7) нужно взять поновее микрокод для видеокарты, т.к. на старых микрокодах vgapassthrough может не поддерживаться; в Linux пакеты linux-firmware , libclc .

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.