LINUX.ORG.RU

vfio: Device does not support requested feature x-vga

 , ,


1

1

TL;DR: делаю kvm-виртуалку, хочу с помощью vfio пробросить туда видюху.

Ну собсна делал по этой инструкции: https://bbs.archlinux.org/viewtopic.php?id=162768

И столкнулся с такой же проблемой: https://bbs.archlinux.org/viewtopic.php?pid=1329752#p1329752

Только наряду с usb(с которым всё ок), пробрасываю дискретную карточку nvidia NVS 4200M. Собственно возникают больший сомнения, что дело в железе, которое якобы что-то не support'ит.

Как вообще с таким бороться? Я конечно понимаю, что x-vga это экспериментальная штуковина, но всё-таки..

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

вы чудовищным образом правы, она там not set, пошёл пересобирать ядро, после результата отпишусь тогда тут же.

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

это всё дебиан, а я на него расчитывал... =)

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

вобщем пересобрал ядро, но в иксах при запуске кему всё покрывается артефактами(цветные пиксели), что-то очень долго обдумывается, затем иногда появляется приглашение "(qemu)" в отдельном окне.

Никакой положенно надписи что нечего грузить нету, что делать - не ясно =)

скрипт запуска, если что:

#! /bin/sh
IS_TAP0_EXISTS=`ifconfig | grep -c tap0`
if [ $IS_TAP0_EXISTS = 0 ] ; then
    tunctl -t tap0 && ifconfig tap0 0.0.0.0 promisc up && brctl addif br0 tap0 && echo 'Success: tap0 interface created.' || echo 'Error: tap0 interface is not created.'
else
    echo 'Success: tap0 interface already exists.'
fi

#init kvm-qemu
qemu-system-x86_64 \
-boot menu=on \
-enable-kvm \
-M q35 \
-m 1024 \
-cpu host \
-rtc base=localtime \
-smp 6,sockets=1,cores=6,threads=1 \
-bios /usr/share/qemu/bios.bin \
-acpitable file=/usr/share/seabios/q35-acpi-dsdt.aml \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root \
-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x6 \
-drive file='/root/win7',id=disk,format=raw \
-drive file='/mnt/data/Downloads/Complete/7600/ru_windows_7_ultimate_x64_dvd_x15-65952.iso',id=isocd1,readonly=on \
-drive file='virtio-win-0.1-74.iso',id=isocd2,readonly=on \
-device ide-cd,bus=ide.1,drive=isocd1,bootindex=1 \
-device ide-cd,bus=ide.2,drive=isocd2,bootindex=2 \
-device ide-hd,bus=ide.0,drive=disk,bootindex=3 \
-netdev tap,ifname=tap0,id=hostnet0,script=no,downscript=no -device virtio-net-pci,netdev=hostnet0,mac=52:54:00:26:7F:96,id=net0 \
-device vfio-pci,host=01:00.0,bus=root,addr=00.0,multifunction=on,x-vga=on \
-device vfio-pci,host=01:00.1,bus=root,addr=00.1 \
-vga none \
-nographic
всё делается из под рута.

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

Да.

Если запускать без

-vga none \
-nographic
, то всё ок, даже удается поставить дрова на нвидию, но работать соглашается только «стандартный vga-контроллер».

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

Ты вроде в качестве единственной видеокарточки гостя пытаешься использовать проброшенную? А если не отключать эмулируемую карточку, а видео пробросить как обычное pci-устройство, чтоб она в госте была второй?

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

Читай внимательнее, так и выходит, если пускать без

-vga none \
-nographic

Но при этом гость(виндо7) отказывается её юзать.

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

Нужно пересобрать ядро, отревертив коммиты, отключающие использование VGA arbiter для i915, а именно этот и этот (реверт реверта, все правильно). Иначе ничего работать не будет. В той теме на bbs.archlinux.org это упоминается. Еще одно «но»: при включении VGA arbiter на хосте отвалится direct rendering. Для себя я решил эту проблему, скрыв наличие vgaarb от юзерспейса следующим способом:

diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c
index af02597..e516a7c 100644
--- a/drivers/gpu/vga/vgaarb.c
+++ b/drivers/gpu/vga/vgaarb.c
@@ -1299,7 +1299,7 @@ static int __init vga_arb_device_init(void)
        struct pci_dev *pdev;
        struct vga_device *vgadev;
 
-       rc = misc_register(&vga_arb_device);
+       rc = /*misc_register(&vga_arb_device)*/0;
        if (rc < 0)
                pr_err("vgaarb: error %d registering device\n", rc);
 
Deleted
()
Ответ на: комментарий от Deleted

Спасибо, весьма неочевидное решение. Ну, ушёл пересобирать ядро снова, когда(и если) сделаю - отпишусь.

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

Хм, собрал, запускаю скрипт - ничего не происходит, ни окна с кему-шеллом, ни чего-то ещё. ЧЯДНТ?

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

Да, мой косяк. А под xen не пробовал? Вроде бы встречал отзывы, что у nvidia получалось даже работать первым адаптером, что с радиком у меня никогда не получалось. И, может быть, даже без дополнительных патчей.

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

Пробовал, причем не один раз. У меня даже тут несколько тем про него есть.. Потому и решил попробовать по свежей статье заюзать квм, мне его издревле советовали, но vfio появилась не так давно.

Сложно в ксене всё как-то.

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

Ну собрал, только одно изменение: теперь нет артефактов при запуске(если таковой состоялся) кему.

Только сам он с проброшенной карточкой и включенными -vga none и -nographic не запускается ни в какую - в процессах висит, но новых окон не создается.

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

Только сам он с проброшенной карточкой и включенными -vga none и -nographic не запускается ни в какую - в процессах висит, но новых окон не создается.

Так это для -nographic (disable graphical output and redirect serial I/Os to console) нормальное состояние. Нужно теперь после запуска смотреть, что там дискретная карточка показывает.

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

Нужно теперь после запуска смотреть, что там дискретная карточка показывает.

А как это сделать? Ну кроме VNC.

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

Так бы сразу и написал. Видео вывести тебе с нее никак не получится. Что ты хочешь получить-то в итоге? Считать что-то на видеокарте в виртуалке что-ли?

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

Ну это тоже(матлабовский модуль что-то такое могёт), но в основном задумывалось тестить игрушку(в процессе написания) и в винде и в лине - таким вот кривоватым, но дающим большое удобство методом.

Я не знал, что ничего вывести не получится.. Это великая печаль.

Я думал, что запустив виртуалку с карточкой, эта же карточка сможет отдавать картинку «вовне» - а-ля ютобовская трансляция с локалхоста на локалхост =), только как-то напрямую.

А если подключить отдельный монитор, тоже не получится её(видюху) таким образом взлететь?

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

Я не знаю точно, как устроено гибридное видео в ноутбуках, но подозреваю, что аппаратно там реализован вывод видео только с интегрированной карты. Вывод с дискретной карты реализуется в программно где-то в драйверах (всякие DMA-BUF и прочее). Условно говоря, дискретная карта рисует во фреймбуффер интегрированной. Соответственно, в ситуации, когда дискретное видео как PCIe устройство прокинуто в виртуалку, этот механизм работать не будет. В QEMU ничего подобное не реализовано и вряд-ли когда-то будет. Поэтому проброс видеокарт актуален только для десктопов, когда можно физически подключить монитор к дискретной карте.

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

Ну раз в кему нельзя, значит нельзя. Обидно =( А в xen|esxi?

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