Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
vfio [Le 17/09/2016, 02:55]
90.112.251.197 [VFIO]
vfio [Le 12/09/2022, 09:09] (Version actuelle)
82.65.161.11 typo
Ligne 1: Ligne 1:
-====== VFIO PASSTHROUGHT ​======+{{tag> Virtualisation qemu dexter74 vfio}} 
 +---- 
 +====== ​-=[ VFIO PASSTHROUGH ]=- ======
  
 +Le VFIO ((Virtual Function Input/​Output)) PASSTHROUGH consiste à décharger le pilote d’un matériel – carte graphique, USB, souris… – pour l’assigner,​ par exemple, à une machine virtuelle.
  
-{{tag>​VFIO passthrought qemu}} +Cette technique suppose des pré-requis. Elle nécessite du matériel plus ou moins facile à réaliser. FIXMEIndiquer où il faut le fabriquer ?​
- ===== I) Informations:​===== ​+
  
-<note help>LE VFIO PASSTHROUGH consiste à décharger le pilote d'un matériel (Carte graphique , usb , souris ...) pour ensuite ​l'​assigner à une machine virtuelle ​par exemple ! \\ +L’intérêt du //​passthrough//​ est notamment de pouvoir bénéficier de l’accélération 3D d’une carte graphique sur la machine virtuelle, ou encore d’une meilleure gestion d’une souris ou d’un clavier spécifique sur cette machine virtuelle.
-Il existe des pré-requis ​du matériel plus ou moins facile à réaliser. En cas de soucis crée un topic </​note>​+
  
-\\ +FIXME 
 +<​note>​ 
 +Article en cours de modification. 
 +</​note>​
  
-====== II) Pré-Requis:​ ====== 
  
-<​note>​- La Fonction **IOMMU** du Bios. (Activer le 64 bits si vous avez dans le bios) \\  
-- La Prise en compte du IOMMU par linux. \\ 
-- Un processeur ayant la prise en charge la virtualisation. \\  
-- Deux Carte-graphiques ou 1 Apu et une Carte-graphique \\  
-- 2 Entrée vidéo sur l'​écran (1 pour le linux (host) et 1 pour la Machine virtuelle (Guest) \\ 
-- Connaitre son matériel . (Référence des 2 GPU serait bien par exemple)</​note>​ 
-\\ 
-**Voilà pour les Pré-requis** 
  
  
-====== ​IIIObtentions des Informations Matériels ​ ​======+ 
 +===== Pré-requis ​===== 
 + 
 +  * Avoir activé la fonction **IOMMU**((Input/​Output Memory Management Unit)) du BIOS – donc au niveau du matériel. Activer le mode « 64 bits » s’il est disponible dans le BIOS. 
 +  * Avoir activé la prise en compte du IOMMU par Linux – donc au niveau du logiciel (le système d’exploitation hôte ici). 
 +  * Avoir activé la prise en charge de la virtualisation par le processeur – cela suppose que le processeur intègre un mode de virtualisation. 
 +  * Disposer de deux cartes graphiques, ou d’une paire formée d’une [[Wpfr>​Accelerated_processing_unit|Apu]] et d’une carte graphique. 
 +  * Disposer de deux entrées vidéo sur l’écran :​ une pour le système Linux hôte (//Host//) et une pour la machine virtuelle invitée (//​Guest//​). 
 +  * Disposer des caractéristiques techniques de son matériel. En l’occurrence,​ connaitre la référence des deux GPU disponibles. 
 + 
 +===== Obtention des informations sur le matériel ​=====
    
-<note important>​**Avant tout, il existe ​2 Types d'​adresse ​:** \\ +Il existe ​deux types d’adresse : 
-- L'adresse de l'emplacement du matériel sur la carte-mère. \\ +  ​l’adresse de lemplacement du matériel sur la carte mère ; 
-- L'adresse ​VendorID**:**DeviceID ​ou plus souvent appelée ​vendeur**:**périphérique. Celle-ci est composée ​en deux parties séparées par un **:** +  * l’adresse **VendorID:DeviceID**ou plus souvent appelée **vendeur:périphérique**. Celle-ci est composée ​de deux parties séparées par deux points « ».
-</​note>​+
  
 +==== Étape 1: Vérification de la prise en charge de IOMMU / Virtualisation processeur ​ ====
 +
 +<note important>​En cas d'​erreur IOAPIC ou  IVRS table, il y a un Fix à appliquer dans [[:​grub-pc|GRUB]].\\
 +Cette page ne propose pour le moment que celui pour les processeurs **AMD**. \\
 +En effet, au moment de l'​écriture de cette page, son rédacteur [[:​utilisateurs:​dexter74]] possède uniquement cette marque</​note>​
  
-===== Étape 1: Vérification de la prise en charge de IOMMU / Virtualisation processeur ​ ===== 
-\\ 
-<note important>​**/​!\ En cas d'​erreur IOAPIC ou  IVRS table, il y a un Fix à appliquer dans GRUB. /!\**  \\ 
-**Fix AMD:** OUI trouvé par moi \\ 
-** Fix Intel**: Non Trouvé car j'ai que des processeur AMD (dexter74)</​note>​ 
-\\ 
 ===  Prise en Charge de IOMMU=== ===  Prise en Charge de IOMMU===
-<note>**dmesg | grep "​AMD-Vi\|Intel VT-d"** \\ +Saisissez dans un [[:​terminal]] la [[:​commande_bash|commande]] suivante: 
-\\ +<code bash>dmesg | grep "​AMD-Vi\|Intel VT-d" ​</​code>​ 
-AMD-Vi:** Found IOMMU** at 0000:​00:​00.2 cap 0x40       **<IOMMU Trouvé** \\ + 
-AMD-Vi: ​**Interrupt remapping enabled**                           **<= L'​interruption de l'​attribution du matériel est activée (Enable)** \\ +Vous devriez obtenir 
-\\ +<​code>​AMD-Vi: Found IOMMU at 0000:​00:​00.2 cap 0x40 </code> 
-L'​interruption de l'​assignement du matériel est activée (Enable), sans ce paramètre on ne pourra pas faire le VFIO.</note>+Qui indique que le module ​IOMMU a bien été trouvé 
 + 
 +<​code>​AMD-Vi: Interrupt remapping enabled</code> 
 +L'​interruption de l'​assignement du matériel est activée (Enable), sans ce paramètre on ne pourra pas faire le VFIO. 
 + 
 +=== Prise en Charge de la Virtualisation === 
 +Saisissez dans un [[:​terminal]] la [[:​commande_shell|commande]] suivante: 
 +<code bash>​lscpu | grep "​Virtualization" ​</code> 
 + 
 +Devrait répondre 
 +<​code>​Virtualization : ​     AMD-V</​code>​ 
 + 
 +Tous les Pré-Requis sont donc bons.
  
 +==== Étape 2: Obtentions des informations ​ ====
  
-=== Prise en Charge de la Virtualisation ===  +<​note ​important>Vérifier que les cartes graphiques soient installées dans le bon ordre sur la carte-mère. 
-<​note>​**lscpu | grep "​Virtualisation"​** \\ +  ​* **Port PCI Express 1:** Carte graphique réservée au système d'​exploitation Linux. (**__HOST__**) 
-\\ +  * **Port PCI Express 2:** Carte graphique pour le système d'​exploitation invité . (**__GUEST__** / Windows)
-Virtualisation      AMD-V+
 </​note>​ </​note>​
  
-Tous les Pré-Requis sont bons.+Lister tout, en saisissant dans un [[:​terminal]] la [[:​commande_shell|commande]] suivante:
  
-===== Étape 2Obtentions des informations ​ =====+<code bash>​lspci -nnv | grep "​VGA\|Audio\|Kernel driver in usesnd_hda_intel\|Kernel driver in use: nouveau\|Kernel driver in use: nouveaufb\|Kernel driver in use: radeon"</​code>​
  
-<note important>**Vérifier que les cartes graphiques soient installées dans le bon ordre sur la carte-mère.** ​\\ +Nvidia inclus: FIXME: Autant ne proposer que cette ligne, non? 
-**Port PCI Express 1:** Carte graphique réservée au système d'​exploitation Linux. (**__HOST__**) ​\\ +<code bash>lspci -nnv | grep "VGA\|Audio\|Kernel driver in usesnd_hda_intel\|Kernel driver in use: nouveau\|Kernel driver in usenvidia\|Kernel driver in use: nouveaufb\|Kernel driver in use: radeon"​</code>
-**Port PCI Express 2:** Carte graphique pour le système d'​exploitation invité . (**__GUEST__** / Windows) ​\\</note>+
  
-<note help> +:!: La Sortie HDMI à une seconde adresse VendorID:​DeviceID ​:!:
- ​**Lister Tout:** \\ +
-  lspci -nnv | grep "​VGA\|Audio\|Kernel driver in usesnd_hda_intel\|Kernel driver in use: nouveau\|Kernel driver in use: nouveaufb\|Kernel driver in use: radeon"​ +
-   +
-  Nvidia inclus: +
-  lspci -nnv | grep "​VGA\|Audio\|Kernel driver in use: snd_hda_intel\|Kernel driver in use: nouveau\|Kernel driver in use: nvidia\|Kernel driver in use: nouveaufb\|Kernel driver in use: radeon"​ +
- +
-/!\ La Sortie HDMI à une seconde adresse VendorID:​DeviceID ​/!+
- </​note>​  +
-   +
-  ​+
  
 ^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​  | ^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​  |
Ligne 77: Ligne 81:
 |  02:00.1 | Audio HDMI1 | R9-270x (HDMI)  ​ | 1002:​aab0 | snd_hda_intel | VFIO (GUEST) | |  02:00.1 | Audio HDMI1 | R9-270x (HDMI)  ​ | 1002:​aab0 | snd_hda_intel | VFIO (GUEST) |
 |  02:00.1 | Audio HDMI2 | R9-270x (HDMI)  ​ | 1043:​aab0 ​       | snd_hda_intel | VFIO (GUEST) | |  02:00.1 | Audio HDMI2 | R9-270x (HDMI)  ​ | 1043:​aab0 ​       | snd_hda_intel | VFIO (GUEST) |
-\\ 
-**Ma Carte graphique est branchée en HDMI et donc les signaux Vidéo / Son ont été séparés** \\ 
-On ne pourra pas interdire le pilote ** " snd_hda_intel"​ ** car il est présent sur la carte son lié à la fois à la carte-mère et à la sortie son inclus dans le HDMI. (Sortie HDMI) \\ 
  
 +Ici la carte graphique est branchée en HDMI et donc les signaux Vidéo / Son ont été séparés.\\
 +On ne pourra pas interdire le pilote ** " snd_hda_intel"​ ** car il est présent sur la carte son lié à la fois à la carte-mère et à la sortie son inclus dans le HDMI. (Sortie HDMI)
  
 +==== Étape 3: Activation des Modules ​ ====
  
 +  - Connaitre la marque de son processeur: <​code>​
 +lscpu | grep name</​code>​
 +  - [[:​tutoriel:​comment_modifier_un_fichier|Éditer]] avec les droits d'​administration le fichier **/​etc/​modules** pour y supprimer le module kvm_XXX qui ne correspond pas à votre processeur.<​file>​pci_stub
 +vfio
 +vfio_iommu_type1
 +vfio_pci
 +kvm
 +kvm_amd
 +kvm_intel ​ <-- effacer cette ligne par exemple si vous avez un processeur AMD
 +</​file>​
 +  - Mettre à jour le chargement des modules: <​code>​sudo update-initramfs -u </​code>  ​
  
-===== Étape ​3Activation des Modules ​ =====+==== Étape ​4Redémarrage et vérification ​====
  
-**Connaitre ​la marque de son processeur:** +Après avoir redémarré votre machine, vérifiez ​la bonne mise en place du vfio en saisissant dans un [[:​terminal]]
-  ​lscpu ​| grep name +<code bash> 
- \\ +lspci -v | grep "VGA\|Audio\|Kernel driver in use: snd_hda_intel\|Kernel driver in use: nouveau\|Kernel driver in use: nouveaufb\|Kernel driver in use: radeon\|Kernel driver in use: vfio-pci"​ 
- \\+</​code>​ 
 +Vous devriez obtenirun tableau proche de:
  
- 
- 
- 
- 
-**Éditer /​etc/​modules** (Supprimer le module kvm_XXX qui ne correspond pas à votre processeur.) \\ 
-  pci_stub 
-  vfio 
-  vfio_iommu_type1 
-  vfio_pci 
-  kvm 
-  kvm_amd 
-  kvm_intel 
-=== Redémarrage du pc === 
-  
- 
-**Vérification:​** ​ \\ 
-  lspci -v | grep "​VGA\|Audio\|Kernel driver in use: snd_hda_intel\|Kernel driver in use: nouveau\|Kernel driver in use: nouveaufb\|Kernel driver in use: radeon"​ 
- 
- 
-\\ 
 ^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​ | ^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​ |
 |  00:14.2 | Audio device | AMD/ATI Intel HDA | 1002:​4383 | snd_hda_intel | Carte-mère  ​  | |  00:14.2 | Audio device | AMD/ATI Intel HDA | 1002:​4383 | snd_hda_intel | Carte-mère  ​  |
Ligne 117: Ligne 113:
 |  02:00.1 | Audio HDMI1 | R9-270x (HDMI)  ​ | 1002:​aab0 | vfio-pci  ​       | VFIO (GUEST) | |  02:00.1 | Audio HDMI1 | R9-270x (HDMI)  ​ | 1002:​aab0 | vfio-pci  ​       | VFIO (GUEST) |
 |  02:00.1 | Audio HDMI2 | R9-270x (HDMI)  ​ | 1043:​aab0 ​       | snd_hda_intel | VFIO (GUEST) | |  02:00.1 | Audio HDMI2 | R9-270x (HDMI)  ​ | 1043:​aab0 ​       | snd_hda_intel | VFIO (GUEST) |
-\\ 
-On peut voir que le "​**Kernel __Driver__**"​ est "​**vfio-pci**"​ .  
-\\ 
  
 +Ici on peut voir que le "​**Kernel __Driver__**"​ est "​**vfio-pci**"​.
  
 +:!: Ignorer le "​**Kernel __Modules__** :!:
  
- +===== VFIO =====
- +
- +
- +
- +
- +
-/!\ Ignorer le "​**Kernel __Modules__** /!\  +
-====== VFIO ======+
  
 ^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​  | ^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​  |
Ligne 139: Ligne 127:
 |  02:00.1 | Audio HDMI2 | R9-270x (HDMI)  ​ | 1043:​aab0 ​       | Encoursderedaction | VFIO (GUEST) | |  02:00.1 | Audio HDMI2 | R9-270x (HDMI)  ​ | 1043:​aab0 ​       | Encoursderedaction | VFIO (GUEST) |
  
-<note help>####################​ **/​etc/​modprobe.d/​vfio.conf** ####################​  +FIXMEMise en forme 
-   ​Exempleoptions vfio-pci ids=1002:​6810,​1002:​aab0 ​+<note help>####################​ **/​etc/​modprobe.d/​vfio.conf** ####################​ 
 +   ​Exemple ​ 
 +<​file>​options vfio-pci ids=1002:​6810,​1002:aab0 ,1043:aab0
   #vfio-pci ids=<​ADRESSE VendorID:​DeviceID><​Virgule><​ADRESSE VendorID:​DeviceID> ​   #vfio-pci ids=<​ADRESSE VendorID:​DeviceID><​Virgule><​ADRESSE VendorID:​DeviceID> ​
   #Aucune Guillemet ​   #Aucune Guillemet ​
-  #Exemple: 1002:6810 (R9-270x - GPU ) , 1002:aab0 (R9-270x -  HDMI1) 1043:​aab0 (R9-270x -  HDMI2)+  #Exemple: 1002:6810 (R9-270x - GPU ) , 1002:aab0 (R9-270x - HDMI1) ​1043:aab0 (R9-270x - HDMI2)
   options vfio-pci ids=1002:​6810,​1002:​aab0,​1043:​aab0   options vfio-pci ids=1002:​6810,​1002:​aab0,​1043:​aab0
 +</​file>​
 </​note>​ </​note>​
  
 <note help>####################​ **/​etc/​vfio-pci.cfg** ####################​ <note help>####################​ **/​etc/​vfio-pci.cfg** ####################​
-  ExempleDEVICES="​0000:​02:​00.0 0000:​02:​00.1"​ +  Exemple 
-  #Attention au Guillemet (Début et fin de toutes les adresse) + <​file> ​DEVICES="​0000:​02:​00.0 0000:​02:​00.1"​ 
-  #Chaque début d'​adresse commence par __**0000:​**__ (Attention au : après les 0000) +#Attention au Guillemet (Début et fin de toutes les adresse) 
-  #Un espace entre chaque adresse (sauf la première collé à la guillemet)+#Chaque début d'​adresse commence par __**0000:​**__ (Attention au : après les 0000) 
 +#Un espace entre chaque adresse (sauf la première collé à la guillemet) 
 + </​file>​
 </​note>​ </​note>​
  
 +===== FIX IOMMU =====
  
 +==== AMD ====
 +<code bash >dmesg | grep AMD-Vi</​code>​
 +<​code>​
 +[0.251399] [Firmware Bug]: AMD-Vi: IOAPIC[9] not in IVRS table          <= SouthBridge Inconnus (Erreur 9) \\
 +[0.251403] [Firmware Bug]: AMD-Vi: IOAPIC[10] not in IVRS table         <= Northbridge Inconnus (Erreur 10) \\
 +</​code>​
 +L'​erreur 9 correspond au SMBus et l'​erreur 10 au IOMMU.
  
 +<code bash>​lspci | grep "​SMBus\|IOMMU"</​code>​
  
 +^ Slot    ^ Type     ^ Désignation ​    ^ Code Erreur ​  ​^Base ​          ​^Erreur ​    ^ Slot |
 +|00:00.2 | IOMMU | Advanced Micro Devices, Inc. [AMD/ATI] RD990 I/O Memory Management Unit | 10 | ivrs_ioapic ​ |  [10]=      |  00:​00.2 ​   |
 +|00:14.0 | SMBus  | Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller (rev 42)        | 9 | ivrs_ioapic ​ |  [9]=        |  00:​14.0 ​   |
  
 +<​code>​ivrs_ioapic[9]=00:​14.0 ivrs_ioapic[10]=00:​00.2</​code>​
  
-====== FIX IOMMU ======+**Éditer /​etc/​default/​grub** (Modifier la ligne selon votre cas) pour remplacer la ligne 
 +<​file>​GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"​ </​file>​ 
 +par 
 +<​file>​GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ivrs_ioapic[9]=00:14.0 ivrs_ioapic[10]=00:​00.2"</​file>​ 
 +en adaptant selon le résultat obtenu précédemment
  
-**AMD:​** ​ 
-<​note>​dmesg | grep AMD-Vi 
-  [0.251399] [Firmware Bug]: AMD-Vi: IOAPIC[9] not in IVRS table          <= SouthBridge Inconnus (Erreur 9) \\ 
-  [0.251403] [Firmware Bug]: AMD-Vi: IOAPIC[10] not in IVRS table         <= Northbridge Inconnus (Erreur 10) \\ 
-  L'​erreur 9 correspond au SMBus et l'​erreur 10 au IOMMU. 
- </​note> ​ 
- 
- 
-<​note>​lspci | grep "​SMBus\|IOMMU"</​note>​ 
-^ Slot    ^ Type     ^ Désignation ​                                                                                                           ^ Code Erreur |  
-|00:00.2 | IOMMU | Advanced Micro Devices, Inc. [AMD/ATI] RD990 I/O Memory Management Unit | 10                 ​| ​ 
-|00:14.0 | SMBus  | Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller (rev 42)        | 9                   | 
-\\ 
-^Base           ​^Erreur ​    ^ Slot | 
-| ivrs_ioapic ​ |  [10]=      |  00:​00.2 ​   |  
-| ivrs_ioapic ​ |  [9]=        |  00:​14.0 ​   |  
- \\ 
-**Ce qui donne : ivrs_ioapic[9]=00:​14.0 ivrs_ioapic[10]=00:​00.2** 
- 
- 
- 
-**Éditer /​etc/​default/​grub** (Modifier la ligne selon votre cas) \\ 
-Avant: ​ \\ 
-  GRUB_CMDLINE_LINUX_DEFAULT="​quiet splash" ​ 
-Après : \\ 
-  GRUB_CMDLINE_LINUX_DEFAULT="​quiet splash ivrs_ioapic[9]=00:​14.0 ivrs_ioapic[10]=00:​00.2"​ 
- \\ 
 Ensuite faire un : Ensuite faire un :
-  ​update-grub ​ + <​code>​update-grub</​code>​
-\\+
 Redémarrer Redémarrer
-\\+ 
 +==== Intel ==== 
 +FIXME
   ​   ​
-====== Vérification Finale ​====== +===== Vérification Finale ===== 
-\\ +<code bash>dmesg | grep "Found IOMMU\|remapping\|vfio"​</​code>​ 
-**dmesg | grep "Found IOMMU\|remapping\|vfio"​** +<​code>​ 
-    [    1.597597] AMD-Vi: Found IOMMU at 0000:​00:​00.2 cap 0x40 +[    1.597597] AMD-Vi: Found IOMMU at 0000:​00:​00.2 cap 0x40 
-    [    1.597598] AMD-Vi: Interrupt remapping enabled ​   +[    1.597598] AMD-Vi: Interrupt remapping enabled ​   
-    [    1.597712] AMD-Vi: Lazy IO/TLB flushing enabled +[    1.597712] AMD-Vi: Lazy IO/TLB flushing enabled 
-    ​ +</​code> ​   
-    <Manque quelque infos de ma part !    +
-\\+
  
-====== Script VFIO avec Qemu (Samba & Synergy) ======+FIXMEManque quelques infos. En cours
  
-Script ​qemu (Samba ​Synergy) +===== Script ​VFIO avec Qemu (Samba ​Synergy) ​=====
-  http://​pastebin.com/​1uxiBfx6+
  
-\\+[[https://​pastebin.com/​1uxiBfx6|Script qemu (Samba / Synergy)]]
  
 Fix Synergy: (Bouton Suivant / Précédent / touch alt+gr) Fix Synergy: (Bouton Suivant / Précédent / touch alt+gr)
  
-Éditer le fichier synergy.conf +Éditer le fichier ​**synergy.conf** FIXMEChemin exact 
-  Dans la section "​screens"​ de la machine virtuelle ajouter en bas. +  ​Dans la section "​screens"​ de la machine virtuelle ajouter en bas.<​file>​altgr = alt</​file>​ 
-  ​altgr = alt +  ​Dans la section "​options"​ de la machine virtuelle ajouter en bas.<​file>​ 
-  Dans la section "​options"​ de la machine virtuelle ajouter en bas. +mousebutton(6) = keystroke(WWWBack) 
-  mousebutton(6) = keystroke(WWWBack) +mousebutton(7) = keystroke(WWWForward) ​</​file>​
-  mousebutton(7) = keystroke(WWWForward)  +
- +
- +
- +
  
 +----
 +//​Contributeurs:​ [[:​utilisateurs:​dexter74]] //
  • vfio.1474073742.txt.gz
  • Dernière modification: Le 17/09/2016, 02:55
  • par 90.112.251.197