QEMU с пропуском GPU не запустится

Я запускаю Ubuntu и пытаюсь настроить QEMU с прохождением GPU. Я следил за этими проводниками:

https://www.pugetsystems.com/labs/articles/Multiheaded-NVIDIA-Gaming-using-Ubuntu-14-04-KVM-585/#Step5Createascripttoruneachvirtualmachine

http://www.howtogeek.com/117635/how-to-install-kvm-and-create-virtual-machines-on-ubuntu/

Мои /etc/modules :

 lp rtc pci_stub vfio vfio_iommu_type1 vfio_pci kvm kvm_intel 

Мой /etc/default/grub :

 GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1" GRUB_CMDLINE_LINUX="" 

Мой графический процессор:

 $ lspci -nn | grep NVIDIA 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106 [GeForce GTX 650 Ti] [10de:11c6] (rev a1) 01:00.1 Audio device [0403]: NVIDIA Corporation GK106 HDMI Audio Controller [10de:0e0b] (rev a1) $ lspci -nn | grep -i graphic 00:02.0 VGA compatible controller [0300]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller [8086:0152] (rev 09) 

Мои /etc/initramfs-tools/modules :

 pci_stub ids=10de:11c6,10de:0e0b 

Кажется, что pci_stub работает:

 $ dmesg | grep pci-stub [ 0.541737] pci-stub: add 10DE:11C6 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000 [ 0.541750] pci-stub 0000:01:00.0: claimed by stub [ 0.541755] pci-stub: add 10DE:0E0B sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000 [ 0.541760] pci-stub 0000:01:00.1: claimed by stub 

Мой /etc/vfio-pci1.cfg :

 0000:01:00.0 0000:01:00.1 

Мой ~/windows_start.bash : http://pastebin.com/F7fq2Szt

После запуска сценария bash vfio-pci используется в качестве драйвера:

 $ lspci -k | grep -C 3 -i nvidia Kernel driver in use: ahci 00:1f.3 SMBus: Intel Corporation 7 Series/C210 Series Chipset Family SMBus Controller (rev 04) Subsystem: ASRock Incorporation Motherboard 01:00.0 VGA compatible controller: NVIDIA Corporation GK106 [GeForce GTX 650 Ti] (rev a1) Subsystem: Gigabyte Technology Co., Ltd Device 3557 Kernel driver in use: vfio-pci 01:00.1 Audio device: NVIDIA Corporation GK106 HDMI Audio Controller (rev a1) Subsystem: Gigabyte Technology Co., Ltd Device 3557 Kernel driver in use: vfio-pci 03:00.0 PCI bridge: ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge (rev 03) 

Версия программного обеспечения:

 $ kvm --version QEMU emulator version 2.5.0, Copyright (c) 2003-2008 Fabrice Bellard $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.3 LTS Release: 14.04 Codename: trusty 

Проблема в том, что при запуске windows_start.bash запускается терминал QEMU, но ничего не происходит. Монитор, подключенный к графическому процессору NVIDIA, черный, он должен быть включен QEMU, но это не так. Что я делаю не так? Как я могу его отладить? Что еще я могу попытаться получить через GPU?

Я проверил использование этого руководства, и, похоже, мой GPU не поддерживает UEFI, так что, может быть, это причина, по которой он терпит неудачу? Это все еще странно, многие люди добились успеха, используя еще более старые графические процессоры, поэтому должен быть способ.

EDIT: Я просто пытался запустить vm с libvirt используя virt-manager , как это предложил @Deltik. Вот как выглядит мой конфиг: http://pastebin.com/W46kNcrh

Результат был почти таким же, как и раньше, – он начал, показал черный экран в окне virt-manager и ничего больше не произошло. Не было ошибок в консоли отладки (которую я начал с запуска virt-manager --debug ). Я также пробовал тот же подход в Arch Linux и в более новой версии Ubuntu, это не имело никакого значения.

Я дал щедрость @Deltik, потому что он дал мне несколько хороших советов, но я все еще не мог заставить его работать. Кажется, что эту задачу невозможно завершить, по крайней мере, с моим текущим оборудованием.

  • Windows 7 Virtual PC + Linux Ubuntu
  • Пропуск USB для QEMU получает ошибку «qemu: не удалось добавить USB-устройство»
  • Как запустить Mac OS X в Windows Virtual PC?
  • Как найти IP-адрес виртуальной машины с помощью VMware Fusion?
  • Внедрение PCI-Passthrough с Linux-KVM на Debian
  • Как заставить виртуальные машины VirtualBox использовать DNS хоста?
  • Не удается загрузить после изменения размера жесткого диска VHD в VirtualBox
  • Как получить поддержку AVX в QEMU?
  • One Solution collect form web for “QEMU с пропуском GPU не запустится”

    Вы близки.

    Используя как pci-stub и vfio-pci

    Вполне возможно использовать pci-stub для резервирования устройства PCI (например, вашего GPU), чтобы предотвратить захват графического драйвера, поскольку графический драйвер (например, nouveau или fglrx ) не отпустит устройство.

    Фактически, в моем тесте, мне нужно было сначала требовать графическую карту PCI с pci-stub потому что vfio-pci не будет делать этого при загрузке, что является одной из проблем, которые вы испытали. Хотя разгрузка одного драйвера ( pci-stub ) и загрузка другого ( vfio-pci ) на своем месте может показаться уродливым для некоторых , pci-stub и vfio-pci являются надежной командой тегов, что приводит к успешной виртуальной машине с транзитом GPU. Мое тестирование не нашло успеха, используя только один или другой.

    Теперь вам нужно выпустить PCI-устройство из pci-stub и передать его на vfio-pci . Эта часть вашего скрипта должна делать это уже:

     configfile=/etc/vfio-pci1.cfg vfiobind() { dev="$1" vendor=$(cat /sys/bus/pci/devices/$dev/vendor) device=$(cat /sys/bus/pci/devices/$dev/device) if [ -e /sys/bus/pci/devices/$dev/driver ]; then echo $dev > /sys/bus/pci/devices/$dev/driver/unbind fi echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id } modprobe vfio-pci cat $configfile | while read line;do echo $line | grep ^# >/dev/null 2>&1 && continue vfiobind $line done и configfile=/etc/vfio-pci1.cfg vfiobind() { dev="$1" vendor=$(cat /sys/bus/pci/devices/$dev/vendor) device=$(cat /sys/bus/pci/devices/$dev/device) if [ -e /sys/bus/pci/devices/$dev/driver ]; then echo $dev > /sys/bus/pci/devices/$dev/driver/unbind fi echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id } modprobe vfio-pci cat $configfile | while read line;do echo $line | grep ^# >/dev/null 2>&1 && continue vfiobind $line done 

    Предостережение: « vfiobind » требуется только один раз

    Как отмечено в этом комментарии , верно, что переключение с pci-stub на vfio-pci необходимо выполнить только один раз после загрузки. Это верно, но на самом деле безопасно запускать функцию « vfiobind » несколько раз, если только виртуальная машина не использует поврежденное устройство PCI.

    Если виртуальная машина использует устройство, операция unbind будет заблокирована ( процесс «D state» ). Это можно устранить, отключив или уничтожив виртуальную машину, после чего отмена, вероятно, будет успешной.

    Вы можете избежать этого ненужного дополнительного отсоединения и перезаписи, изменив vfiobind() следующим образом:

     vfiobind() { dev="$1" vendor=$(cat /sys/bus/pci/devices/$dev/vendor) device=$(cat /sys/bus/pci/devices/$dev/device) if [ -e /sys/bus/pci/devices/$dev/driver/module/drivers/pci\:vfio-pci ]; then echo "Skipping $dev because it is already using the vfio-pci driver" continue; fi if [ -e /sys/bus/pci/devices/$dev/driver ]; then echo "Unbinding $dev" echo $dev > /sys/bus/pci/devices/$dev/driver/unbind echo "Unbound $dev" fi echo "Plugging $dev into vfio-pci" echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id echo "Plugged $dev into vfio-pci" } 

    Проверьте lspci -k для успешного приложения vfio-pci driver

    Убедитесь, что vfio-pci перешел на использование lspci -k . Этот пример из моей эквивалентной настройки:

     01:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 760] (rev a1) Subsystem: eVga.com. Corp. Device 3768 Kernel driver in use: vfio-pci 01:00.1 Audio device: NVIDIA Corporation GK104 HDMI Audio Controller (rev a1) Subsystem: eVga.com. Corp. Device 3768 Kernel driver in use: vfio-pci 

    Если вы не видите Kernel driver in use: vfio-pci , что-то пошло не так с частью вашего скрипта, которую я вставил выше.

    Конфигурация passthrough QEMU

    Я немного потрудился с черным дисплеем.

    В более ранней версии вашего скрипта вы указали:

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

    Попробуйте QEMU решить, какую виртуальную шину и адрес использовать:

     -device vfio-pci,host=01:00.0,multifunction=on,x-vga=on \ -device vfio-pci,host=01:00.1 \ 

    Вы также должны передать -nographic и -vga none для qemu-system-x86_64 . По умолчанию QEMU отображает эмулированную графическую карту для виртуальной машины, и виртуальная машина может использовать это другое видеоустройство для отображения вместо вашей предполагаемой физической карты NVIDIA.

    Если вы все еще получаете пустой экран, попробуйте добавить флаг -nodefaults , который исключает стандартный последовательный порт, параллельный порт, виртуальную консоль, мониторное устройство, адаптер VGA, гибкое устройство и устройство CD-ROM.

    Теперь ваша команда qemu-system-x86_64 должна иметь возможность запускать вашу виртуальную машину с устройствами PCI 01:00.0 и 01:00.1 и дисплей, подключенный к 01:00.0 должен что-то показывать.

    Справочная / выборочная конфигурация

    Мой тест не идентичен вашему, но мне удалось получить сквозную графику работы и прошивку USB с помощью этой команды qemu-system-x86_64 после того, как заявили все соответствующие устройства PCI из pci-stub с vfio-pci :

     qemu-system-x86_64 \ -enable-kvm \ -name node51-Win10 \ -S \ -machine pc-i440fx-2.1,accel=kvm,usb=off \ -cpu host,kvm=off \ -m 16384 \ -realtime mlock=off \ -smp 8,sockets=8,cores=1,threads=1 \ -uuid 5c4a3e8a-6e8e-449f-9361-29fcdc35358d \ -nographic \ -no-user-config \ -nodefaults \ -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/node51-Win10.monitor,server,nowait \ -mon chardev=charmonitor,id=monitor,mode=control \ -rtc base=localtime,driftfix=slew \ -global kvm-pit.lost_tick_policy=discard \ -no-hpet \ -no-shutdown \ -global PIIX4_PM.disable_s3=0 \ -global PIIX4_PM.disable_s4=0 \ -boot strict=on \ -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 \ -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 \ -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 \ -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 \ -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 \ -drive file=/dev/zd16,if=none,id=drive-virtio-disk0,format=raw,cache=none,aio=native \ -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \ -drive file=/media/isos/Win10_English_x64.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw \ -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 \ -device ide-cd,bus=ide.1,unit=1,drive=drive-ide0-1-1,id=ide0-1-1 \ -netdev tap,fd=24,id=hostnet0,vhost=on,vhostfd=25 \ -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:11:bf:dd,bus=pci.0,addr=0x3 \ -chardev pty,id=charserial0 \ -device isa-serial,chardev=charserial0,id=serial0 \ -device usb-tablet,id=input0 \ -device intel-hda,id=sound0,bus=pci.0,addr=0x4 \ -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \ -device vfio-pci,host=01:00.1,id=hostdev0,bus=pci.0,addr=0x9 \ -device vfio-pci,host=00:12.0,id=hostdev1,bus=pci.0,addr=0x8 \ -device vfio-pci,host=00:12.2,id=hostdev2,bus=pci.0,addr=0xa \ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 \ -device vfio-pci,host=01:00.0,x-vga=on \ -vga none \ -msg timestamp=on 

    Соответствующие элементы из lspci -k :

     00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller Subsystem: Gigabyte Technology Co., Ltd Device 5004 Kernel driver in use: vfio-pci 00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller Subsystem: Gigabyte Technology Co., Ltd Device 5004 Kernel driver in use: vfio-pci 01:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 760] (rev a1) Subsystem: eVga.com. Corp. Device 3768 Kernel driver in use: vfio-pci 01:00.1 Audio device: NVIDIA Corporation GK104 HDMI Audio Controller (rev a1) Subsystem: eVga.com. Corp. Device 3768 Kernel driver in use: vfio-pci 

    Наблюдаемый результат:

    Фотография наблюдаемого результата

    Interesting Posts

    Является ли разница в скорости, которую я получаю от установки моего SSD в режиме RAID, незначительна?

    Перенос брекетов между компьютерами Mac

    Безопасная отправка электронной почты с помощью Thunderbird?

    Предварительный просмотр второго экрана в главном

    Как вставить вкладку между кнопками в диалоговом окне Mac OS X

    Как я могу запускать команды в PowerShell с разрешениями администратора?

    Почему непривилегированный пользователь не может изменять права собственности на файл?

    Как использовать вкладки с программой «Экран» Linux?

    Какова мощность выхода USB-порта?

    Почему мой $ PATH отличается от исполняемого скрипта?

    Java String.equals против ==

    В Chrome отключено подключение IPv6, таймауты в Firefox

    Как сообщить Windows 7 о том, чтобы никогда не запускать восстановление при запуске

    Как интерпретировать результаты команды `ls -l`?

    Если Windows постоянно предупреждает меня, что моя батарея ноутбука нуждается в замене, может быть, это ошибка ОС?

    Давайте будем гением компьютера.