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.
źródło
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
pci-stub
navfio-pci
(tak, przyjmują ten samids=
parametr w ten sam sposób) w/etc/initramfs-tools/modules
/etc/modules
: gist.github.com/anonymous/5d19ae3c22653a282e90 , szczególniepci-stub
~/windows_start.bash
, wlspci -k
, widziszKernel driver in use: vfio-pci
dla urządzeń01:00.0
i01:00.1
? Jeśli nie,vfio-pci
sterownik nie jest używany na tych urządzeniach.Odpowiedzi:
Jesteś blisko
Używanie obu
pci-stub
ivfio-pci
Można
pci-stub
zarezerwować urządzenie PCI (takie jak GPU), aby zapobiec przechwyceniu go przez sterownik karty graficznej, ponieważ sterownik karty graficznej (jaknouveau
lubfglrx
) nie puści urządzenia.W rzeczywistości w moim teście musiałem
pci-stub
najpierwvfio-pci
zająć kartę graficzną PCI, ponieważ nie zrobiłbym tego przy rozruchu, co jest jednym z problemów, których doświadczyłeś. Podczas rozładunku jeden sterownik (pci-stub
) i ładowanie drugiego (vfio-pci
) w jego miejsce może wydawać się dla niektórych brzydki ,pci-stub
ivfio-pci
są niezawodne tag team, który skutkuje udanym maszynie wirtualnej z trybu Przez GPU. Moje testy nie przyniosły sukcesu przy użyciu tylko jednego lub drugiego.Teraz musisz zwolnić urządzenie PCI
pci-stub
i przekazać jevfio-pci
. Ta część skryptu powinna już to robić:Uwaga: „
vfiobind
” jest potrzebne tylko razJak zauważono w tym komentarzu , prawdą jest, że przełączenie z
pci-stub
navfio-pci
musi być wykonane tylko raz po uruchomieniu. To prawda, ale w rzeczywistościvfiobind
wielokrotne uruchamianie funkcji „ ” jest nieszkodliwe, chyba że maszyna wirtualna używa obecnie uszkodzonego urządzenia PCI.Jeśli maszyna wirtualna korzysta z urządzenia, operacja odblokowania zostanie zablokowana ( proces „stan D” ). Można to naprawić, wyłączając lub zabijając maszynę wirtualną, po czym rozpięcie prawdopodobnie się powiedzie.
Możesz uniknąć tego niepotrzebnego dodatkowego rozpinania i ponownego wiązania, zmieniając swoją
vfiobind()
funkcję na następującą:Sprawdź
lspci -k
pomyślnevfio-pci
dołączenie sterownikaSprawdź,
vfio-pci
czy przejął za pomocąlspci -k
. Ten przykład pochodzi z mojej równoważnej konfiguracji:Jeśli nie widzisz
Kernel driver in use: vfio-pci
, coś poszło nie tak z częścią skryptu, którą wkleiłem powyżej.Konfiguracja przejścia QEMU
Zmagałem się trochę z czarnym wyświetlaczem.
We wcześniejszej wersji skryptu określono:
Spróbuj pozwolić QEMU zdecydować, jakiej wirtualnej magistrali i adresu użyć:
Powinieneś także przekazać flagi
-nographic
i-vga none
doqemu-system-x86_64
. Domyślnie QEMU ujawnia emulowaną kartę graficzną maszynie wirtualnej, a maszyna wirtualna może używać tego innego urządzenia wideo do wyświetlania zamiast planowanej fizycznej karty NVIDIA.Jeśli nadal pojawia się pusty ekran, spróbuj również dodać
-nodefaults
flagę, co wyklucza domyślny port szeregowy, port równoległy, konsolę wirtualną, urządzenie monitorujące, adapter VGA, urządzenie dyskietek i urządzenie CD-ROM.Teraz twoje
qemu-system-x86_64
polecenie powinno być w stanie uruchomić maszynę wirtualną z urządzeniami PCI01:00.0
i01:00.1
przejść, a podłączony ekran01:00.0
powinien coś pokazywać.Odniesienie / konfiguracja próbki
Mój test nie jest identyczny z twoim, ale udało mi się uzyskać działające przejście grafiki i przejście USB za pomocą tego
qemu-system-x86_64
polecenia, po zajęciu wszystkich odpowiednich urządzeń PCIpci-stub
zvfio-pci
:Odpowiednie przedmioty z
lspci -k
:Obserwowany wynik:
źródło
pci-stub
się z kartą za pomocą initramfs, a następnie ponowne wiązanievfio-pci
, NAWET JEŚLI nadal będzie działać. Nie wspominając już o tym, że powoduje to, że skrypt zawiera kroki, które muszą zostać uruchomione tylko raz, więc będą bezbłędnie uruchamiane wielokrotnie, jeśli wykonasz „cykle zasilania” na maszynie wirtualnej.vfio-pci
przy rozruchu. W moim teście rezerwowanie z,pci-stub
a następnie przełączanie navfio-pci
nie powiodło się.vfio-pci
po uruchomieniu skryptu, co jest dobre, ale nic innego się nie zmieniło. Ekran podłączony do NVIDIA jest nadal czarny i nie ma błędów w terminalu. Czy mógłbym jeszcze spróbować rozwiązać problem? Moim największym problemem jest to, że nawet teraz nie rozumiem, co jest nie tak. Spróbuję innych ustawień z twojej przykładowej konfiguracji, może coś będzie działać.-nographic
flagę i / lub-nodefaults
flagę doqemu-system-x86_64
? Te flagi wyłączają emulowane urządzenie graficzne, które QEMU domyślnie udostępnia, co, mam nadzieję, zmusiłoby twój GeForce GTX 650 Ti do bycia jedyną opcją graficzną.