LINUX.ORG.RU

История изменений

Исправление feanor, (текущая версия) :

Стоит таки попробовать pcie_acs_override=downstream, настораживает то, что используется nouveau для хостовой системы, оно может давать интересные побочные эффекты вроде тех, что мешают тебе в данный момент.

Однако сообщение «vfio: error, group 1 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.» нагугливает весьма утомительные решения, вроде этого: http://forums.gentoo.org/viewtopic-t-994568.html?sid=9d10dce2cb5294abe24ddf59... .

Всё ещё не помешал бы вывод lspci и lspci -n . Также стоит пока сосредоточиться на пробросе только VGA устройства, без звуковых карт, которые встроены в видеокарту. То есть передавать PCI-Stub только саму видеокарту без дополнительных звуковых и соответственно в Qemu пока тоже пробрасывать только одно устройство. Когда получится пробрасывать это одно то тогда следует браться за следующие.

Также может полезно будет увидеть все параметры, с которыми у тебя запускается qemu-system-x86_64, например такие параметры у меня:

qemu-system-x86_64 -runas feanor -enable-kvm -M q35 -m 4096 -cpu host -smp 6,sockets=1,cores=6,threads=1 -vga none \
-bios /usr/share/qemu/bios.bin \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=06:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \

Запускать машину необходимо от рута, после этого она сама сбросит привилегии из-за опции -runas (сброс привилегий необязателен, но желателен), необходимо использовать чипсет q35, который поддерживает PCI-E, соответственно создается виртуальная PCI-E шина ioh3420, к которой подключается проброшенный через vfio девайс. Здесь также важно указание файла с биосом для виртуальной машины и -vga none, которое отключается дефолтную эмуляцию Cirrus видеокарты в Qemu.

Полная команда выглядит так: http://pastebin.com/EprPywD6 (в данном примере происходит проброс NVIDIA в гостя на хосте с AMD чипсетом), флаг -cpu host,kvm=off - workaround поведения драйвера nvidia и не требуется для других карт (тебе он не нужен).

Основная проблема в том, что вообще проброс VGA PCI-E устройств почти никак не документирован (-device secondary-vga, например, почти нигде не упоминается), настраивается это всё диким гуглением и участием в списках рассылки Qemu, где также можно задавать вопросы (но там естественно надо указывать dmesg, lspci, /proc/config.gz, опции запуска qemu, конфиг загрузчика и т.д.).

Исходная версия feanor, :

Стоит таки попробовать pcie_acs_override=downstream, настораживает то, что используется nouveau для хостовой системы, оно может давать интересные побочные эффекты вроде тех, что мешают тебе в данный момент.

Однако сообщение «vfio: error, group 1 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.» нагугливает весьма утомительные решения, вроде этого: http://forums.gentoo.org/viewtopic-t-994568.html?sid=9d10dce2cb5294abe24ddf59... .

Всё ещё не помешал бы вывод lspci и lspci -n . Также стоит пока сосредоточиться на пробросе только VGA устройства, без звуковых карт, которые встроены в видеокарту. То есть передавать PCI-Stub только саму видеокарту без дополнительных звуковых и соответственно в Qemu пока тоже пробрасывать только одно устройство. Когда получится пробрасывать это одно то тогда следует браться за следующие.

Также может полезно будет увидеть все параметры, с которыми у тебя запускается qemu-system-x86_64, например такие параметры у меня:

qemu-system-x86_64 -runas feanor -enable-kvm -M q35 -mem-path /guestmem -m 4096 -cpu host -smp 6,sockets=1,cores=6,threads=1 -vga none \
-bios /usr/share/qemu/bios.bin \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=06:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \

Запускать машину необходимо от рута, после этого она сама сбросит привилегии из-за опции -runas (сброс привилегий необязателен, но желателен), необходимо использовать чипсет q35, который поддерживает PCI-E, соответственно создается виртуальная PCI-E шина ioh3420, к которой подключается проброшенный через vfio девайс. Здесь также важно указание файла с биосом для виртуальной машины и -vga none, которое отключается дефолтную эмуляцию Cirrus видеокарты в Qemu.

Полная команда выглядит так: http://pastebin.com/EprPywD6 (в данном примере происходит проброс NVIDIA в гостя на хосте с AMD чипсетом), флаг -cpu host,kvm=off - workaround поведения драйвера nvidia и не требуется для других карт (тебе он не нужен).

Основная проблема в том, что вообще проброс VGA PCI-E устройств почти никак не документирован (-device secondary-vga, например, почти нигде не упоминается), настраивается это всё диким гуглением и участием в списках рассылки Qemu, где также можно задавать вопросы (но там естественно надо указывать dmesg, lspci, /proc/config.gz, опции запуска qemu, конфиг загрузчика и т.д.).