LINUX.ORG.RU

kvm passthrough второй запуск

 , ,


1

1

Купил тут себе китайскую мамку с xeon'ом на 2011 сокете.

Пытаюсь настроить пророс видеокарты GTX 560Ti в виртуалку.
Сначала думал вообще не работает, вроде все нормально, никаких ошибок, но вывода на экран нет.
[ 2.370785] VFIO - User Level meta-driver version: 0.3
[ 2.373230] vfio-pci 0000:02:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none
[ 2.386758] vfio_pci: add [10de:1200[ffff:ffff]] class 0x000000/00000000
[ 2.403468] vfio_pci: add [10de:0e0c[ffff:ffff]] class 0x000000/00000000
[ 29.590458] vfio-pci 0000:02:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none
[ 118.666714] vfio-pci 0000:02:00.0: enabling device (0000 -> 0003)


Потом понял, что оно стартует но только один раз. Запускаю простейший скрипт

qemu-system-x86_64 -enable-kvm -m 1024 -cpu host,kvm=off \
-smp 4,sockets=1,cores=4,threads=1 \
-device vfio-pci,host=02:00.0,x-vga=on -device vfio-pci,host=02:00.1 \
-vga none

Вижу вывод биоса. Тушу это дело. Пытаюсь запустить повторно - тишина.

В dmesg вот такая фигня

vfio-pci 0000:02:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xffff


Подсовывание биоса через romfile не работает. Сообщение об ошибке перестает появляться, но просто не пашет. Биос точно правильный, и сам дампил и с сайта производителя качал.
Если ребутнуться, то опять работает, но только один раз до рестарта виртуалки.

Так сейчас удалось несколько раз запустить и потушить виртуалку. Если тушить ее нормально через power off винде то не клинит. Но если вырубить форсом, больше не запустишь до ребута хоста.

Так что теперь вопрос, как реактивировать устройство после некорректной остановки виртуалки.

owlmind ()

Какое видео у хоста? Куда пробрасываешь? Какой чипсет (I440FX/Q35) используешь? Какой биос (seabios/ovfm) используешь?

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

Можно попробовать удалить

echo 1 > /sys/bus/pci/devices/0000:02:00.0/remove
echo 1 > /sys/bus/pci/devices/0000:02:00.1/remove
echo 1 > /sys/bus/pci/rescan
и добавить опять, так делают с радеонами, например.

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

У хоста 8600 GT.


01:00.0 0300: 10de:0402 (rev a1) (prog-if 00 [VGA controller])
Flags: bus master, fast devsel, latency 0, IRQ 26
Memory at f6000000 (32-bit, non-prefetchable) [size=16M]
Memory at b0000000 (64-bit, prefetchable) [size=256M]
Memory at f4000000 (64-bit, non-prefetchable) [size=32M]
I/O ports at e000 [size=128]
Expansion ROM at 000c0000 [disabled] [size=128K]
Capabilities: [60] Power Management version 2
Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [78] Express Endpoint, MSI 00
Capabilities: [100] Virtual Channel
Capabilities: [128] Power Budgeting <?>
Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>
Kernel driver in use: nouveau
Kernel modules: nouveau

02:00.0 0300: 10de:1200 (rev a1) (prog-if 00 [VGA controller])
Subsystem: 19da:1209
Flags: fast devsel, IRQ 25
Memory at f8000000 (32-bit, non-prefetchable) [size=32M]
Memory at c0000000 (64-bit, prefetchable) [size=128M]
Memory at c8000000 (64-bit, prefetchable) [size=64M]
I/O ports at d000 [size=128]
Expansion ROM at fa000000 [disabled] [size=512K]
Capabilities: [60] Power Management version 3
Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [78] Express Endpoint, MSI 00
Capabilities: [b4] Vendor Specific Information: Len=14 <?>
Capabilities: [100] Virtual Channel
Capabilities: [128] Power Budgeting <?>
Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>
Kernel driver in use: vfio-pci
Kernel modules: nouveau


Чипсет I440FX. Биос seabios. Моя видеокарта не поддерживает uefi.

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

Можно попробовать удалить

Не помогло. При первом старте виртуалки в логах вот такая запись
vfio-pci 0000:02:00.0: enabling device (0000 -> 0003)

И тогда работает. При последующих даже после удаления/добавления и биндинг/анбиндинг vfio это сообщение больше не выскакивает. Только
vfio-pci 0000:02:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem
повторяется. Ну и не работает больше до ребута хоста.

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

Моя видеокарта не поддерживает uefi.

Так а ты пробовал переделывать его, тебе же посоветовали:

You have to use the GF1xx UEFI table.

Я удачно переделал и использую для G210, а это карта постарее твоей.

Чипсет I440FX. Биос seabios

Однозначно стоит попробовать q35 и ovfm-pure-EFI, если сможешь переделать видеобиос.

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

Так а ты пробовал переделывать его, тебе же посоветовали:
Я удачно переделал и использую для G210, а это карта постарее твоей.

Попробовал, не взлетает, я даже несколько вариантов попробовал, благо kvm дает возможность подсунуть видео-биос не прошивая его. Так как на эти карточки он просто не влезает, к сожалению с gtx560 (GF114) в плане GOP все плохо. Вопрос не в старее или новее, вопрос в дизайне эти конкретных карт.

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

Ты пробовал не vfio, а через классический pci-assign?

У меня когда-то HD7870 совсем никак не хотел через vfio работать, а вот через pci-assign работал идеально.

Вот пример:

    -device pci-assign,host=02:00.0 \
    -device pci-assign,host=02:00.1 \

Для этого тебе придется отдать устройства в stub.

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

ты затуши через ctrl-c, а не acpi.

Так как раз через acpi нормально тушится, правда тоже через раз, а вот любая нештатная остановка виртуалки все ломает.

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

через pci-assign работал идеально.

Насколько я читал там с этим еще хуже было. Вроде попытка повторно запускать виртуалку с проброшеным устройством вообще вешало хост.
Как раз из-за всех эти проблем и был разработан менее кривой vfio.
Или это все уже не актуально?

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

Попробуй нажать перезагрузка и затушить в момент инициализации seabios.

steemandlinux ★★★★★ ()
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от owlmind

Я уже не помню, кажется я как-то решал эту проблему, однозначно могу сказать, что между разными загрузками wm — я хост не перезагружал.

Bruce_Lee ★★ ()

карточка просто не ресетится до конца.

anonymous ()

помоему я такое решал тупо отключая карту в винде, был написан скрипт и он отключал карту при выключении винды или тупо вручную. это было когда вфио еще не работало нормально, потом его дипили и я отказался от этого костыля

Novell-ch ★★★★★ ()

наверное можно подхачить pci passtrough часть в kvm и собрать трассу регистров, к каким драйвер обращается, чтобы зарезетить карту. А потом проделывать эту процедуру при старте.

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