Używam Ubuntu i próbuję skonfigurować QEMU z przejściem przez GPU. Śledziłem te przewodniki:
https://www.youtube.com/watch?v=w-hOr44oBAI
http://www.howtogeek.com/117635/how-to-install-kvm-and-create-virtual-machines-on-ubuntu/
Mój /etc/modules
:
lp
rtc
pci_stub
vfio
vfio_iommu_type1
vfio_pci
kvm
kvm_intel
Mój /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=""
Mój GPU:
$ 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)
Mój /etc/initramfs-tools/modules
:
pci_stub ids=10de:11c6,10de:0e0b
pci_stub
wydaje się działać:
$ 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
Mój /etc/vfio-pci1.cfg
:
0000:01:00.0
0000:01:00.1
Mój ~/windows_start.bash
: http://pastebin.com/F7fq2Szt
Po uruchomieniu skryptu bash vfio-pci
jest używany jako sterownik:
$ 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)
Wersje oprogramowania:
$ 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
Problem polega na tym, że kiedy uruchamiam windows_start.bash
, uruchamia się terminal QEMU, ale nic się nie dzieje. Monitor podłączony do procesora graficznego NVIDIA jest czarny, powinien być włączony przez QEMU, ale tak nie jest. Co ja robię źle? Jak mogę to debugować? Co jeszcze mogę spróbować osiągnąć przez GPU?
Sprawdziłem za pomocą tego przewodnika i wygląda na to, że mój procesor graficzny nie obsługuje interfejsu UEFI, więc może to jest przyczyną niepowodzenia? To wciąż dziwne, wiele osób odniosło sukces przy użyciu nawet starszych GPU, więc musi być jakiś sposób.
EDYCJA: Właśnie próbowałem uruchomić vm przy libvirt
użyciu virt-manager
, jak sugeruje @Deltik. Oto jak wygląda moja konfiguracja: http://pastebin.com/W46kNcrh
Wynik był prawie taki sam jak wcześniej - zaczął się, pokazał czarny ekran w virt-manager
oknie i nic więcej się nie wydarzyło. W konsoli debugowania nie było błędów (które zacząłem od uruchomienia virt-manager --debug
). Próbowałem również tego samego podejścia w Arch Linux i nowszej wersji Ubuntu, nie miało to żadnego znaczenia.
Dałem nagrodę @Deltik, ponieważ dał mi kilka dobrych rad, ale nadal nie byłem w stanie sprawić, by działało. Wydaje się, że tego zadania nie można wykonać, przynajmniej na moim obecnym sprzęcie.
pci-stub
na vfio-pci
(tak, przyjmują ten sam ids=
parametr w ten sam sposób) w/etc/initramfs-tools/modules
/etc/modules
: gist.github.com/anonymous/5d19ae3c22653a282e90 , szczególniepci-stub
~/windows_start.bash
, w lspci -k
, widzisz Kernel driver in use: vfio-pci
dla urządzeń 01:00.0
i 01:00.1
? Jeśli nie, vfio-pci
sterownik nie jest używany na tych urządzeniach.
pci-stub
ivfio-pci
w tym samym czasie. są to dwa moduły jądra, które w zasadzie służą do tego samego - przekazywania pci (-e). KAŻDY z nich odpowiada RÓŻNEMU „urządzeniu” qemu: powinieneś brać udziałvfio-pci
tylko wtedy, gdy używasz nowszego-device vfio-pci
, LUBpci-stub
tylko jeśli używasz starszego-device pci-assign