Advertisement
Drthrax74

Guide VFIO Passthrough en Français

Mar 1st, 2018
520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 13.38 KB | None | 0 0
  1. ########################
  2. # Information Hardware #
  3. ########################
  4.  
  5. $sudo lscpi -vnn
  6.     02:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Curacao XT [Radeon R7 370 / R9 270X/370 OEM] [1002:6810] (prog-if 00 [VGA controller])
  7.         Kernel driver in use: radeon
  8.         Kernel modules: radeon, amdgpu
  9.  
  10.     02:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series] [1002:aab0]
  11.         Kernel driver in use: amdgpu
  12.         Kernel modules: snd_hda_intel
  13.  
  14.  
  15. GPU         Type    Dev_ID:Ven_ID     Adresse slot       Pilote
  16. R9-270x     VGA     1002:6810         02:00.0            radeon,amdgpu
  17. R9-270x     Audio   1002:aab0         02:00.1            radeon,amdgpu
  18.  
  19.  
  20. ########################################################################################################################################################################
  21.  
  22.  
  23. ######################
  24. # Activer IOMMU Bios #
  25. ######################
  26.  
  27.  
  28. ############################
  29. # Installation de Qemu-KVM #
  30. ############################
  31.  
  32. sudo apt install qemu-kvm --yes && qemu-system-x86_64 --version
  33.  
  34. Si la version est supérieur à la 2.50 , c'est bon .
  35.  
  36.  
  37. #######################################
  38. # Prise en charge du IOMMU dans Linux #
  39. #######################################
  40.  
  41. /etc/default/grub
  42.  
  43. #Options indispensables:
  44.        # iommu=1                                   Activation IOMMU
  45.        # intel_iommu=on                            Activation IOMMU pour Intel
  46.        # pcie_acs_override=downstream              Prise en charge du IOMMU (DéGroupe carte-graphique liée, Kernel avec l'ACS override est requis)
  47.         # snd_hda_intel.blacklist=1                 Blacklist le pilote HD Audio Realtek
  48.         # nouveau.blacklist=1                       Blacklist le Pilote Nvidia
  49.         # radeon.blacklist=1                        Blacklist le Pilote AMD
  50.         # amdgpu.blacklist=1                        Blacklist le Pilote AMD
  51.         # nomdemonpilote.blacklist=1                Blacklist le Pilote "nomdemonpilote" , valeur 1 => Activer (Traduction: Activation de la blacklist du pilote nomdemonpilote)
  52.  
  53.  
  54. #Ligne à edite          GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
  55. #Remplacer par          GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=1 intel_iommu=on pcie_acs_override=downstream radeon.blacklist=1 amdgpu.blacklist=1"
  56.  
  57.  
  58. ##########################
  59. # Activation des modules #
  60. ##########################
  61.  
  62. #Fichier à éditer: /etc/initramfs-tools/modules
  63.  
  64. #Inserer ceci
  65. pci_stub  
  66. vfio  
  67. vfio_iommu_type1  
  68. vfio_pci  
  69. vfio_virqfd  
  70. kvm  
  71. kvm_intel  
  72.  
  73. ####################################
  74. # Interdire le lancement du pilote #
  75. ####################################
  76.  
  77. #Pour activer le blacklistage du pilote supprimer le # de la ligne qu'on souhaite interdire.
  78.  
  79. #Dans mon cas "amdgpu" et "radeon"
  80.  
  81. # Nvidia
  82. #blacklist nouveau
  83. #blacklist nvidia
  84. #blacklist nvidiafb
  85.  
  86. # AMD
  87. blacklist radeon
  88. blacklist amdgpu
  89.  
  90. # HD Audio
  91. #blacklist snd_hda_intel
  92.  
  93.  
  94.  
  95. ######################################################
  96. # Attribution des périphériques (GPU) au module VFIO #
  97. ######################################################
  98.  
  99. #Fichier à éditer: /etc/modprobe.d/vfio.conf
  100.     #Rappel: AMD_R9270x_Video_et_audio     1002:6810,1002:aab0
  101.     #Syntaxe: <Ven_ID:Dev_ID>,Ven_ID:Dev_ID>
  102.  
  103.  
  104.  
  105. options vfio-pci ids=1002:6810,1002:aab0
  106.  
  107.  
  108.  
  109.  
  110. ##################################
  111. # Applications des modifications #
  112. ##################################
  113. sudo update-grub && sudo update-initramfs -u
  114.  
  115.  
  116.  
  117. ##################################
  118. # Vérification des groupes IOMUU #
  119. ##################################
  120.  
  121. #Taper ce code dans le terminal:
  122.  
  123. #!/bin/bash
  124. shopt -s nullglob
  125. for d in /sys/kernel/iommu_groups/*/devices/*; do
  126. n=${d#*/iommu_groups/*}; n=${n%%/*}
  127. printf 'IOMMU Group %s ' "$n"
  128. lspci -nns "${d##*/}"
  129. done;
  130.  
  131.  
  132.  
  133.  
  134. IOMMU Group 11 00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I219-V [8086:15b8] (rev 31)
  135.     IOMMU Group 12 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:128b] (rev a1)
  136.     IOMMU Group 12 01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)
  137. -----
  138.     IOMMU Group 13 02:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Curacao XT [Radeon R7 370 / R9 270X/370 OEM] [1002:6810]
  139.     IOMMU Group 13 02:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series] [1002:aab0]
  140. IOMMU Group 14 05:00.0 USB controller [0c03]: ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller [1b21:1242]
  141. IOMMU Group 15 06:00.0 Non-Volatile memory controller [0108]: Samsung Electronics Co Ltd Device [144d:a804]
  142. IOMMU Group 1 00:01.0 PCI bridge [0604]: Intel Corporation Sky Lake PCIe Controller (x16) [8086:1901] (rev 05)
  143.  
  144.  
  145.  
  146. Le groupe 12: Contient ma première carte (non utilisé dans mon cas)
  147. Le Groupe 13: Ce groupe ne comporte que ma carte-graphique qui comporte 2 adresses de type slots (02:00.0 et 02:00.1)
  148.               Dans ce groupe y'à aucun autre périphérique dont c'est bon.
  149.               Le kernel ACS permet de corriger les problèmes liée aux regroupement de matériel dans un groupe. (GPU + Ethernet par exemple)
  150.               Dans mon cas j'ai le kernel ACS qui ma corrigier le problème. (suite de mon tutorial)
  151.  
  152.  
  153.  
  154.  
  155. #########################
  156. # Kernel avec patch ACS #
  157. #########################
  158. https://queuecumber.gitlab.io/linux-acs-override/
  159.  
  160. Télécharger la dernière version STABLE et installer le puis rebooter le pc.
  161.  
  162. $ uname -a
  163.    Linux Drthrax-Fixe 4.15.7-acso #1 SMP Thu Mar 1 01:10:00 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
  164.    Note: acso > kernel ACS
  165.  
  166.  
  167. #######################
  168. # Vérification Finale #
  169. #######################
  170.  
  171.  
  172. $ dmesg | grep -i "vfio-pci 0000:02\|DMAR: IOMMU enabled\|DMAR: Intel(R) Virtualization Technology for Directed I/O"
  173.    [    0.000000] DMAR: IOMMU enabled
  174.    [    0.628662] DMAR: Intel(R) Virtualization Technology for Directed I/O
  175.    [    2.824563] vfio-pci 0000:02:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none
  176.    [    4.979415] vfio-pci 0000:02:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none
  177.    [  131.482858] vfio-pci 0000:02:00.0: enabling device (0000 -> 0003)
  178.    [  131.502849] vfio-pci 0000:02:00.1: enabling device (0000 -> 0002)
  179.    [  417.803435] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  180.    [  784.692836] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  181.    [  827.520964] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  182.    [  915.437161] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  183.    [ 1022.709420] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  184.    [ 1045.617629] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  185.    [ 1059.897525] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  186.    [ 1073.937732] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  187.    [ 1087.861624] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  188.    [ 1101.269669] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  189.    [ 1225.266337] vfio-pci 0000:02:00.1: enabling device (0400 -> 0402)
  190.  
  191. On voit que le vfio-pci gère les adresses de ma carte-graphique (0000:02:00.0 et 0000:02:00.1)
  192.  
  193.  
  194. $ sudo lspci -nnv  
  195.    02:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Curacao XT [Radeon R7 370 / R9 270X/370 OEM] [1002:6810] (prog-if 00 [VGA controller])
  196.         Subsystem: ASUSTeK Computer Inc. Curacao XT [Radeon R7 370 / R9 270X/370 OEM] [1043:0464]
  197.         Kernel driver in use: vfio-pci
  198.         Kernel modules: radeon, amdgpu
  199.  
  200.    02:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series] [1002:aab0]
  201.         Kernel driver in use: vfio-pci
  202.         Kernel modules: snd_hda_intel
  203.  
  204. On peux voir dans le kernel Driver le terme vfio-pci, celui-ci gère le matériel et donc tous est bon.
  205.  
  206.  
  207. #####################
  208. # Création du ponts #
  209. #####################
  210. Le ponts permettra à la machine virtuelle d'obtenir une adresse IP venant de votre Box (DHCP) et donc d'accéder au réseau local.
  211. Cet étape est complémentaire, je souhaite avoir une ip qui est gérer par ma box pour l'ouverture de port.
  212.  
  213.  
  214.  
  215.  
  216. Terminale: sudo apt-get install bridge-utils
  217.  
  218. /etc/network/interfaces
  219.  
  220. ##############################################
  221. # Init"ialisation des interfaces au démarrage #
  222. ##############################################
  223. auto lo
  224. auto enp0s31f6
  225. auto br0
  226.  
  227. ##########################################
  228. # Configuration de l'Adresse de bouclage #
  229. ##########################################
  230. iface lo inet loopback
  231.  
  232. ##################################################
  233. # Configuration de la carte-reseau Ethernet host #
  234. ##################################################
  235. iface enp0s31f6 inet manual
  236.  
  237. # Configuration du pont
  238. iface br0 inet static
  239.     address 192.168.1.30
  240.     broadcast 192.168.1.255
  241.     netmask 255.255.255.0
  242.     gateway 192.168.1.1
  243.     network 192.168.1.0
  244.     dns-nameservers 192.168.1.1
  245.     bridge_ports enp0s31f6
  246.     bridge_maxwait 0
  247.     bridge_fd 0
  248.  
  249.  
  250. #bridge_stp off             # désactiver le protocole Spanning Tree
  251. #bridge_waitport 0          # pas de délais avant qu'un port soit disponible
  252. #bridge_fd 0                # pas de délais de transfert
  253. #bridge_ports none          # si vous ne voulez ponter aucun port
  254. #bridge_ports regex eth*    # utiliser une expression régulière pour définir les ports
  255.  
  256. #https://wiki.debian.org/fr/BridgeNetworkConnections#Configurer_le_pontage_dans_.2Fetc.2Fnetwork.2Finterfaces
  257.  
  258.  
  259. # Afficher liste pont   : brctl show
  260. # Supprimer pont        : brctl delbr br0
  261. # Démarrer le pont      : ifup br0
  262. # Arrêter le pont       : ifdown br0
  263.  
  264.  
  265. ######################
  266. # Qemu - Explication #
  267. ######################
  268.  
  269. Chaque ligne dois se terminer avec un Espace et un anti-slash si vous souhaiter clarifier le code.
  270. Auncun saut de ligne est autorisé dans Qemu.
  271.  
  272.  
  273. #Meilleur prise en charge de la Carte-Son
  274. export QEMU_AUDIO_TIMER_PERIOD=10
  275.  
  276.  
  277. qemu-system-x86_64 \
  278. -name "Nom de ma machine" \                                          #Définir un nom à la machine
  279. -bios 'usr/share/qemu/bios.bin' \                                    #Charger le Bios (Bios UEFI > OVMF)
  280. -enable-kvm \                                                        #Requis pour une bonne prise en charge du processeur
  281. -cpu host \                                                          #Prise en charge du processeur.
  282. -smp cpus=,maxcpus=,cores=,threads=,sockets= \                       #Ressource CPU Attribué
  283. -vga none \                                                          #Attribuer une carte graphique (cirrus) ou Aucune (none)
  284. -boot c \                                                            #Ordre de démarrage (c étant un disque dur et d un lecteur cd)
  285. -m 4096 \                                                            #Quantité de mémoire-vive attribué
  286. -k FR \                                                              #Langue du clavier (FR = AZERTY)
  287. -rtc base=localtime \                                                #Fuseau horaire du bios (Indispensable pour pouvoir avec l'heure correcte)
  288. -usb \                                                               #Activer la prise en charge de l'USB
  289. -device ich9-ahci,id=ahci \                                          #Prise en charge de l'ahci (SATA)
  290. -net nic,macaddr='00:50:18:28:4c:23' -net bridge,br=br0 \            #Création d'une carte-réseau, utilisant une adresse mac et le pont créer "br0".
  291. -soundhw hda \                                                       #Prise en charge du son en créeant une carte-son.
  292. -device vfio-pci,host=02:00.0,multifunction=on,x-vga=on              #GPU Vidéo (adresse SLOT) | x-vga= (ON Envoie le signale vidéo sur la sortie de la carte-graphique | OFF: Envoie le signale vidéo sur la carte-graphique virtuel (-vga cirrus))
  293. -device vfio-pci,host=02:00.1 \                                      #GPU AUDIO
  294.                                                                      # Les paramètres ,multifunction=on,x-vga=on sont pour la vidéo et pas pour l'audio.
  295. -drive file=/dev/....,cache=none,media=disk,index=0 \                #Montage du disque dur avec l'index 0 (C:\)
  296. -drive file=/dev/....,cache=none,media=disk,index=1 \                #Montage du disque dur avec l'index 1 (D:\)
  297. -drive file=/path/windows.iso,format=raw,media=cdrom,index=3 \       #Montage d'un fichier dans le lecteur cd-rom (E:\)
  298. -usbdevice host:Ven_ID:Dev_ID \                                      #Attribuer les USB via leur adresses. (désactivera dans linux) , utiliser la commande lsusb pour pouvoir les trouvers.
  299.                
  300.  
  301.  
  302.                                    
  303. #############################
  304. # Erreur 43 - Pilote Nvidia #
  305. #############################
  306.  
  307. Le pilote graphique après installation ne s'initailise pas correctemnt, ce correctif est nécessaire.
  308. Utiliser ces paramètres pour faire marcher correctement le pilote:
  309.    -cpu host,kvm=off,hv_vendor_id=SomeString
  310.    -device vfio-pci,host=02:00.0,multifunction=on,x-vga=on
  311.    -vga none
  312.  
  313.  
  314. L'option x-vga doit être sur ON et vga sur none (aucune) et la ligne cpu doit être écrite avec ces paramètres. (ne pas oublier enable-kvm vu que l'option -cpu host est active)
  315.  
  316.  
  317. teste74@hotmail.fr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement