kb:linux:generalites:gpu_passthrough_avec_qemu
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
kb:linux:generalites:gpu_passthrough_avec_qemu [2019/07/05 18:27] – créée beu | kb:linux:generalites:gpu_passthrough_avec_qemu [2020/03/30 08:14] (Version actuelle) – beu | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
:!: ATTENTION CETTE DOCUMENTATION EST EN COURS DE REDACTION :!: | :!: ATTENTION CETTE DOCUMENTATION EST EN COURS DE REDACTION :!: | ||
+ | ====== GPU Passthrough avec QEMU ====== | ||
+ | |||
+ | ===== Prérequis ===== | ||
+ | |||
+ | === Hardware : === | ||
+ | |||
+ | * Une carte mère supportant le choix de la carte graphique par défaut | ||
+ | * Un CPU compatible VT-d | ||
+ | * Deux cartes graphiques dans votre PC (exemple : votre iGPU et votre GPU NVIDIA) | ||
+ | * un [[https:// | ||
+ | |||
+ | === Software : === | ||
+ | |||
+ | * qemu en version 4.0 ou supperieur, sinon voir [[https:// | ||
+ | * ovmf | ||
+ | * [[https:// | ||
+ | * Un iso de [[https:// | ||
+ | * l'iso des [[https:// | ||
+ | |||
+ | === Autre : === | ||
+ | |||
+ | * Une maîtrise des systèmes Windows et Linux. | ||
+ | * Des compétences/ | ||
+ | * Du temps et de la patience. Vraiment! | ||
+ | |||
+ | ===== Ma configuration : ===== | ||
+ | |||
+ | Voici dans quels conditions ont été réalisé cette page : | ||
+ | |||
+ | * Carte mère: ASUS Z170 Gaming | ||
+ | * CPU: Intel i5 7600K | ||
+ | * RAM: 16Go | ||
+ | * GPU: Nvidia GEFORCE 1070 | ||
+ | * Stockage : SSD NVMe pour l' | ||
+ | * OS: Archlinux | ||
+ | |||
+ | |||
+ | ===== Configuration de l'Host ===== | ||
+ | |||
+ | En partant du principe que votre OS est installer. | ||
+ | |||
+ | Il faut commencer par aller dans votre BIOS/EFI, et activer la virtualisation, | ||
+ | |||
+ | Ensuite branchez votre Dummy plug sur votre GPU, et vos écrans sur votre iGPU. | ||
+ | |||
+ | Ensuite configurer votre GRUB en ajoutant l' | ||
+ | |||
+ | Ensuite il faut demander a votre initramfs de charger les pilotes vfio en ajoutant les modules **vfio_pci**, | ||
+ | |||
+ | Recharger vos configurations : | ||
+ | |||
+ | <code bash> | ||
+ | # mkinitcpio -P && grub-mkconfig -o < | ||
+ | </ | ||
+ | |||
+ | Redémarrez, | ||
+ | |||
+ | <code bash> | ||
+ | # for iommu_group in $(find / | ||
+ | </ | ||
+ | |||
+ | vous devriez obtenir quelque chose comme ceci : | ||
+ | |||
+ | < | ||
+ | IOMMU group 7 | ||
+ | [RESET] 00: | ||
+ | IOMMU group 5 | ||
+ | 00:17.0 SATA controller [0106]: Intel Corporation Q170/ | ||
+ | IOMMU group 3 | ||
+ | 00:14.0 USB controller [0c03]: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller [8086:a12f] (rev 31) | ||
+ | IOMMU group 11 | ||
+ | [RESET] 03: | ||
+ | IOMMU group 1 | ||
+ | 00:01.0 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x16) [8086:1901] (rev 05) | ||
+ | [RESET] 01: | ||
+ | 01:00.1 Audio device [0403]: NVIDIA Corporation GP104 High Definition Audio Controller [10de:10f0] (rev a1) | ||
+ | IOMMU group 8 | ||
+ | [RESET] 00: | ||
+ | IOMMU group 6 | ||
+ | [RESET] 00: | ||
+ | IOMMU group 4 | ||
+ | 00:16.0 Communication controller [0780]: Intel Corporation 100 Series/C230 Series Chipset Family MEI Controller #1 [8086:a13a] (rev 31) | ||
+ | IOMMU group 12 | ||
+ | [RESET] 04: | ||
+ | IOMMU group 2 | ||
+ | [RESET] 00: | ||
+ | IOMMU group 10 | ||
+ | [RESET] 00: | ||
+ | IOMMU group 0 | ||
+ | 00:00.0 Host bridge [0600]: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers [8086:591f] (rev 05) | ||
+ | IOMMU group 9 | ||
+ | 00:1f.0 ISA bridge [0601]: Intel Corporation Z170 Chipset LPC/eSPI Controller [8086:a145] (rev 31) | ||
+ | 00:1f.2 Memory controller [0580]: Intel Corporation 100 Series/C230 Series Chipset Family Power Management Controller [8086:a121] (rev 31) | ||
+ | 00:1f.3 Audio device [0403]: Intel Corporation 100 Series/C230 Series Chipset Family HD Audio Controller [8086:a170] (rev 31) | ||
+ | 00:1f.4 SMBus [0c05]: Intel Corporation 100 Series/C230 Series Chipset Family SMBus [8086:a123] (rev 31) | ||
+ | </ | ||
+ | |||
+ | Et il vous faudra identifier votre GPU et de noter des valeurs pour tard, pour moi c'est : | ||
+ | |||
+ | < | ||
+ | 01:00.0 - 10de:1b81 (GPU) | ||
+ | 01:00.1 - 10de:10f0 (Audio) | ||
+ | </ | ||
+ | |||
+ | Il faut aussi que ce soit les seuls dans leur groupe IOMMU. Si ce n'est pas le cas, il faudra bouger votre GPU sur un autre port PCI. | ||
+ | |||
+ | Ensuite faut définir au noyau quel carte graphique on réserve a la VM : | ||
+ | |||
+ | <code file / | ||
+ | blacklist nouveau | ||
+ | blacklist nvidia | ||
+ | options kvm ignore_msrs=1 # Pour éviter les crashs de certaines app dans le guest | ||
+ | options vfio-pci ids=10de: | ||
+ | </ | ||
+ | |||
+ | Redémarrez et tapez la commande : | ||
+ | |||
+ | < | ||
+ | # lspci -k | ||
+ | </ | ||
+ | |||
+ | afin de vérifier l' | ||
+ | |||
+ | <code file [highlight_lines_extra=" | ||
+ | .... | ||
+ | 01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1070] (rev a1) | ||
+ | Subsystem: ASUSTeK Computer Inc. GP104 [GeForce GTX 1070] | ||
+ | Kernel driver in use: vfio-pci | ||
+ | Kernel modules: nouveau | ||
+ | 01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1) | ||
+ | Subsystem: ASUSTeK Computer Inc. GP104 High Definition Audio Controller | ||
+ | Kernel driver in use: vfio-pci | ||
+ | Kernel modules: snd_hda_intel | ||
+ | .... | ||
+ | </ | ||
+ | |||
+ | On va ensuite configurer pulseaudio pour qu'il supporte le fait que le son remonte depuis la VM. | ||
+ | |||
+ | Pour cela, copier votre cookie Pulseaudio dans le compte root : | ||
+ | |||
+ | <code bash> | ||
+ | # cp ~/ | ||
+ | </ | ||
+ | |||
+ | ===== Configuration du Guest ===== | ||
+ | |||
+ | Démarrez votre VM sans la carte graphique, et tout les modules necessaires. Par exemple avec la commande : | ||
+ | |||
+ | <code bash> | ||
+ | qemu-system-x86_64 \ | ||
+ | -machine q35, | ||
+ | -cpu host, | ||
+ | -drive if=pflash, | ||
+ | -drive if=pflash, | ||
+ | -overcommit mem-lock=on \ | ||
+ | -overcommit cpu-pm=on \ | ||
+ | -pidfile / | ||
+ | -monitor telnet: | ||
+ | -enable-kvm \ | ||
+ | -name guest=Windows, | ||
+ | -smp 3, | ||
+ | -m 8G \ | ||
+ | -mem-prealloc \ | ||
+ | -global ICH9-LPC.disable_s3=1 \ | ||
+ | -global ICH9-LPC.disable_s4=1 \ | ||
+ | -no-user-config \ | ||
+ | -nodefaults \ | ||
+ | -rtc base=localtime, | ||
+ | -global kvm-pit.lost_tick_policy=discard \ | ||
+ | -boot strict=on \ | ||
+ | -no-hpet \ | ||
+ | -netdev type=user, | ||
+ | -device virtio-net-pci, | ||
+ | -device ich9-intel-hda, | ||
+ | -device hda-output \ | ||
+ | -device ioh3420, | ||
+ | -device vfio-pci, | ||
+ | -device vfio-pci, | ||
+ | -drive | ||
+ | -device virtio-scsi-pci, | ||
+ | -device scsi-hd, | ||
+ | -device ivshmem-plain, | ||
+ | -object memory-backend-file, | ||
+ | -spice disable-ticketing, | ||
+ | -device virtio-serial-pci \ | ||
+ | -chardev spicevmc, | ||
+ | -device virtserialport, | ||
+ | -device virtio-mouse-pci, | ||
+ | -device virtio-keyboard-pci, | ||
+ | -usb \ | ||
+ | -device intel-iommu \ | ||
+ | -audiodev pa, | ||
+ | -vga std -display sdl | ||
+ | </ | ||
+ | |||
+ | Installez votre Windows 10. Je vous conseille : | ||
+ | * de mettre un mot de passe a votre session (Attention a bien mettre l' | ||
+ | * Désactiver l' | ||
+ | * Activer RDP | ||
+ | * D' | ||
+ | |||
+ | Une fois fait, télécharger (sur votre guest) les pilotes spécific [[https:// | ||
+ | |||
+ | Installez aussi Visual C++. | ||
+ | |||
+ | Une fois fait, télécharger la dernieres release de [[https:// | ||
+ | |||
+ | |||
+ | |||
+ | Éteignez la VM et lancez la sans l' | ||
+ | |||
+ | < | ||
+ | -vga none -display none | ||
+ | </ | ||
+ | |||
+ | Et normalement, | ||
+ | |||
+ | |||
+ |
kb/linux/generalites/gpu_passthrough_avec_qemu.1562351246.txt.gz · Dernière modification : 2019/07/05 18:27 de beu