LINUX.ORG.RU

vga passthrough — почему так проблемно?

 ,


0

1

Пробую пробросить видеокарту в гостевую ОС в такой вот аппаратной конфигурации:

1. Motherboard (есть в списке VT-d): Intel DZ77BH-55K, работает в режиме UEFI с прошивкой версии BHZ7710H.86A.0057.2012.0208.1904

2. Процессор (есть в списке VT-d): Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz

3. Видеокарта (есть в списке VT-d): NVIDIA Corporation GF100GL [Quadro 4000] [10de:06dd] (rev a3)

В качестве основной используется интегрированное в процессор видеоядро. ОС — gentoo с ядром 3.18.11 и конфигом от дебиана с небольшими изменениями (модули для поддержки AHCI собраны статически).

Системы виртуализации. Пробовал разное

1. Qemu (kvm) с режимом pci-assign.

qemu-system-x86_64 \
    -boot c \
    -M q35 \
    -m 2048 \
    -smp 4 \
    -usbdevice tablet \
    -enable-kvm \
    -usb \
    -device usb-ehci,id=ehci \
    -drive file=./debian.img,id=mydisk \
    -device virtio-net-pci,netdev=mynet0 -netdev user,id=mynet0 \
    -bios /usr/share/seabios/bios.bin \
    -device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
    -device pci-assign,host=01:00.0 \
    -device pci-assign,host=01:00.1 \
    -vga none \
    -curses

Итог — зависание при старте. Если отключить устройство 01:00.0 (это видеокарта) — то стартует нормально.

2. То же самое, но с vfio-pci. Конфиг аналогичный, строка для видеокарты (и ее звуковухи)

-device vfio-pci,host=0000:01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \
-device vfio-pci,host=0000:01:00.1,bus=root.1,addr=00.1 \

Результат — висим на старте без каких бы то ни было сообщений.

3. Xen 4.5 с тулстеком xl.

name = "debian-domU"
builder = "hvm"
memory = 1024
vcpus = 2
disk = [ "tap:qcow2:/mnt/Storage/vm/debian/debian.img,xvda,w" ]
vif = [ 'mac=00:16:3e:ff:ab:cd,bridge=br0' ]
vnc = 1
vnclisten = '127.0.0.1'
vncdisplay = 10
boot = "cd"
#gfx_passthru=1
pci = [ "0000:01:00.0" "0000:01:00.1"]

с gfx_passthru=0 стартует нормально, с 1 — сыпет ошибки

libxl: error: libxl_dm.c:1499:device_model_spawn_outcome: domain 4 device model: spawn failed (rc=-3)
libxl: error: libxl_create.c:1322:domcreate_devmodel_started: device model did not start: -3
libxl: error: libxl_dm.c:1603:kill_device_model: Device Model already exited

вывод dmesg, связанный с IOMMU

[    0.000000] Intel-IOMMU: enabled
[    0.028942] dmar: IOMMU 0: reg_base_addr fed90000 ver 1:0 cap c0000020e60262 ecap f0101a
[    0.028949] dmar: IOMMU 1: reg_base_addr fed91000 ver 1:0 cap c9008020660262 ecap f0105a
[    0.029032] IOAPIC id 2 under DRHD base  0xfed91000 IOMMU 1
[    0.973877] IOMMU 0 0xfed90000: using Queued invalidation
[    0.973878] IOMMU 1 0xfed91000: using Queued invalidation
[    0.973880] IOMMU: Setting RMRR:
[    0.973890] IOMMU: Setting identity map for device 0000:00:02.0 [0xbb800000 - 0xbf9fffff]
[    0.974193] IOMMU: Setting identity map for device 0000:00:14.0 [0xba22e000 - 0xba249fff]
[    0.974212] IOMMU: Setting identity map for device 0000:00:1a.0 [0xba22e000 - 0xba249fff]
[    0.974228] IOMMU: Setting identity map for device 0000:00:1d.0 [0xba22e000 - 0xba249fff]
[    0.974237] IOMMU: Prepare 0-16MiB unity mapping for LPC
[    0.974245] IOMMU: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff]
[    1.034974] AMD IOMMUv2 driver by Joerg Roedel <joerg.roedel@amd.com>
[    1.035504] AMD IOMMUv2 functionality not available on this system

В общем, какой-то no luck. Собственно, прошу помощи.

★★★★★

Последнее исправление: demidrol (всего исправлений: 1)

Ответ на: комментарий от backburner

да, забыл сказать — дебиан в гостевой системе грузится с параметром console=ttyS0, grub тоже настроен на то, чтобы использовать ttyS0 в качестве устройства вывода. Так вот, в случае подключенной видеокарты на последовательном порту qemu — молчание, т.е. оно не доходит даже до бутлоадера.

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

повесь 01:00.00 и 01:00.01 на драйвер pci_stub иначе потом нельзя будет драйвер отлепить.

потом используй pci_vfio, он хоть умеет правильный ресет делать для nvidia.

если нет вывода в serial, то ещё есть monitor консоль и можно seabios пересобрать, чтобы он выводил инфу.

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

спасибо за советы, но похоже, что проблема была в арбитре pci-e (добавил патч для него и для драйвера i915). Вроде работает, и даже не зависает, если в виндах установлен нвидиевский драйвер (без него после резета ВМ — хост-система фризится)

demidrol ★★★★★
() автор топика

Было что-то такое. Решилось прописыванием в grub intel_iommu=on.

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