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 04/05/2016, 02:53]
dexter74 [FIX IOMMU]
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 ]=- ======
  
- ===== IInformations:​===== ​+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.
  
-<note help>LE VFIO Passthrought consiste à décharger le pilote d'un matériel (Carte graphique , usb , souris ...) pour ensuite l'​assigner à une machine virtuel par exemple ! \\ +Cette technique suppose ​des pré-requis. Elle nécessite ​du matériel plus ou moins facile à réaliser. ​FIXMEIndiquer où il faut le fabriquer ?​
-Il existe ​des pré-requis ​du matériel plus ou moins facile à réaliser. ​En cas de soucis crée un topic </​note>​+
  
-\\ +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.
  
-====== II) Pré-Requis:​ ====== +FIXME 
- +<​note>​ 
-<​note>​- La Fonction **IOMMU** du Bios. (Activer le 64 bits si vous avez dans le bios) \\  +Article ​en cours de modification.
-- La Prise en compte du IOMMU par linux. \\ +
-- Un processeur ayant la prise en charge la virtualisation. \\  +
-- Deux Carte-graphique ou 1 Apu + Carte-graphique à côté) \\  +
-- 2 Entrée vidéo sur l'​écran (1 pour le linux (host) et 1 pour la Machine virtuel (Guest) \\ +
-- Connaitre son matériel . (Référence des 2 GPU serai bien par exemple)</​note>​ +
-\\ +
-**Voilà pour les Pré-requis** +
- +
- +
-====== III) Obtentions des Informations Matériels ​ ====== +
-  +
-<note important>​**Avant tous il existe 2 Type d'​adresse:​** \\ +
-- L'​adresse ​de l'​emplacement du matériel sur la carte-mère\\ +
-- L'​adresse VendorID**:​**DeviceID ou plus souvent appeler vendeur**:​**périphérique . Celle-ci es composé en deux partie séparé par un **:**+
 </​note>​ </​note>​
  
  
-===== Etape 1: Vérification de la prise en charge de IOMMU / Virtualisation processeur ​ ===== 
-\\ 
-<note important>​**/​!\ En cas d'​erreur IOAPIC ou  IVRS table y'à 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=== 
-<​note>​**dmesg | grep "​AMD-Vi\|Intel VT-d"​** \\ 
-\\ 
-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 es Activer (Enable)** \\ 
-\\ 
-L'​interruption de l'​assignement du matériel es activé (Enable) , sans ce paramètre on pourra pas faire le VFIO.</​note>​ 
  
  
-=== Prise en Charge de la Virtualisation ===  
-<​note>​**lscpu | grep "​Virtualisation"​** \\ 
-\\ 
-Virtualisation : ​     AMD-V 
-</​note>​ 
  
-Tous les Pré-Requis son bon.+===== Pré-requis =====
  
-===== Etape 2Obtentions des informations ​ =====+  * 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.
  
-<note important>​**Vérifier que vos carte-graphiques soit installer dans le bon ordre sur la carte-mère.** \\ +===== Obtention des informations sur le matériel ===== 
-**Port PCI Express 1:** Carte-graphique réserver au système d'​exploitation Linux. (**__HOST__**) \\ +  
-**Port PCI Express 2:** Carte-graphique pour le système d'​exploitation invité ​(**__GUEST__** / Windows) \\</​note>​+Il existe deux types d’adresse :​ 
 +  ​l’adresse de l’emplacement 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 de deux parties séparées par deux points « : ».
  
-<note help> +==== Étape 1Vérification de la prise en charge de IOMMU Virtualisation processeur ​ ====
- ​**Lister Tout:** \\ +
-  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"​ +
- </note>  +
-  +
  
-^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​  | +<note important>​En cas d'​erreur IOAPIC ou  IVRS table, il y a un Fix à appliquer dans [[:grub-pc|GRUB]].\\ 
-|  00:14.2 | Audio device | AMD/ATI Intel HDA | 1002:​4383 | snd_hda_intel | Carte-mère  ​  | +Cette page ne propose pour le moment que celui pour les processeurs ​**AMD**\\ 
-|  01:00.0 | VGA (GPU) | GTX-260  ​ | 10de:​05e2 | nouveau  ​       | Linux (HOTE)  ​  | +En effet, au moment de l'​écriture de cette page, son rédacteur [[:​utilisateurs:​dexter74]] possède uniquement cette marque</​note>​
-|  02:00.0 | VGA (GPU | R9-270x (Video)  ​ | 1002:​6810 | radeon  ​       | VFIO (GUEST) | +
-|  02:00.1 | Audio device | R9-270x (HDMI)  ​ | 1002:​aab0 | snd_hda_intel | VFIO (GUEST) | +
-\\ +
-**Ma Carte-graphique es branché en HDMI et donc le signale Vidéo/ Son on été séparer** \\ +
-On pourra pas interdire le pilote ** " snd_hda_intel"​ ** car il es présent sur la carte-son lié à la fois à la carte-mère et à la sortie son inclus dans le HDMI. (Sortie HDMI) \\+
  
 +===  Prise en Charge de IOMMU===
 +Saisissez dans un [[:​terminal]] la [[:​commande_bash|commande]] suivante:
 +<code bash>​dmesg | grep "​AMD-Vi\|Intel VT-d" </​code>​
  
 +Vous devriez obtenir
 +<​code>​AMD-Vi:​ Found IOMMU at 0000:​00:​00.2 cap 0x40 </​code>​
 +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.
  
-===== Etape 3Activation des Modules ​ =====+=== Prise en Charge de la Virtualisation ​==
 +Saisissez dans un [[:terminal]] la [[:​commande_shell|commande]] suivante: 
 +<code bash>​lscpu | grep "​Virtualization"​ </​code>​
  
-**Connaitre la marque de son processeur:** +Devrait répondre 
-  lscpu | grep name +<​code>​Virtualization      ​AMD-V</​code>​
- \\ +
- \\+
  
 +Tous les Pré-Requis sont donc bons.
  
 +==== Étape 2: Obtentions des informations ​ ====
  
 +<note important>​Vérifier que les cartes graphiques soient installées dans le bon ordre sur la carte-mère.
 +  * **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)
 +</​note>​
  
 +Lister tout, en saisissant dans un [[:​terminal]] la [[:​commande_shell|commande]] suivante:
  
-**Editer /​etc/​modules** (Supprimer le module kvm_XXX qui correspond pas à votre processeur.) ​\\ +<code bash>​lspci -nnv | 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"</​code>​
-  pci_stub +
-  vfio +
-  vfio_iommu_type1 +
-  vfio_pci +
-  kvm +
-  kvm_amd +
-  kvm_intel +
-===                  Redémarrage du pc === +
- +
  
-**Vérification:**  \\ +Nvidia inclusFIXME: Autant ne proposer que cette ligne, non? 
-  lspci -| 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"​+<code bash>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"​</​code>​
  
 +:!: La Sortie HDMI à une seconde adresse VendorID:​DeviceID :!:
  
-\\ +^   ​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  ​  |
 |  01:00.0 | VGA (GPU) | GTX-260  ​ | 10de:​05e2 | nouveau  ​       | Linux (HOTE)  ​  | |  01:00.0 | VGA (GPU) | GTX-260  ​ | 10de:​05e2 | nouveau  ​       | Linux (HOTE)  ​  |
-|  02:00.0 | VGA (GPU | R9-270x (Video)  ​ | 1002:​6810 | ​vfio-pci         | VFIO (GUEST) | +|  02:00.0 | VGA (GPU | R9-270x (Video)  ​ | 1002:​6810 | ​radeon         | VFIO (GUEST) | 
-|  02:00.1 | Audio device | R9-270x (HDMI)  ​ | 1002:​aab0 | ​vfio-pci  ​       ​| 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) |
-On peux voir que le "​**Kernel __Driver__**"​ est "​**vfio-pci**" ​ +
-\\+
  
 +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 4: Redémarrage et vérification ====
  
 +Après avoir redémarré votre machine, vérifiez la bonne mise en place du vfio en saisissant dans un [[:​terminal]]:​
 +<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:
  
 +^   ​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  ​  |
 +|  01:00.0 | VGA (GPU) | GTX-260  ​ | 10de:​05e2 | nouveau  ​       | Linux (HOTE)  ​  |
 +|  02:00.0 | VGA (GPU | R9-270x (Video)  ​ | 1002:​6810 | 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) |
  
 +Ici on peut voir que le "​**Kernel __Driver__**"​ est "​**vfio-pci**"​.
  
 +:!: Ignorer le "​**Kernel __Modules__** :!:
  
-/!\ Ignorer le "​**Kernel __Modules__** /!\  +===== VFIO =====
-====== VFIO ======+
  
 ^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​  | ^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​  |
Ligne 126: Ligne 124:
 |  01:00.0 | VGA (GPU) | GTX-260  ​ | 10de:​05e2 | nouveau  ​       | Linux (HOTE)  ​  | |  01:00.0 | VGA (GPU) | GTX-260  ​ | 10de:​05e2 | nouveau  ​       | Linux (HOTE)  ​  |
 |  02:00.0 | VGA (GPU | R9-270x (Video)  ​ | 1002:​6810 | vfio-pci  ​       | VFIO (GUEST) | |  02:00.0 | VGA (GPU | R9-270x (Video)  ​ | 1002:​6810 | vfio-pci  ​       | VFIO (GUEST) |
-|  02:00.1 | Audio device | 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 ​       | Encoursderedaction | VFIO (GUEST) |
  
- +FIXMEMise en forme 
-<note help>####################​ **/​etc/​modprobe.d/​vfio.conf** ####################​  +<note help>####################​ **/​etc/​modprobe.d/​vfio.conf** ####################​ 
-   ​Exemplevfio-pci ids=1002:​6810,​1002:​aab0 ​+   ​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: options+  #​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 
 +</​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:**  +Ensuite faire un 
-<note>dmesg | grep AMD-Vi + <code>update-grub</code> 
-  [0.251399] [Firmware Bug]: AMD-Vi: IOAPIC[9] not in IVRS table          <= SouthBridge Inconnus (Erreur 9) \\ +Redémarrer
-  [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+
  
 +==== Intel ====
 +FIXME
 +  ​
 +===== Vérification Finale =====
 +<code bash>​dmesg | grep "Found IOMMU\|remapping\|vfio"</​code>​
 +<​code>​
 +[    1.597597] AMD-Vi: Found IOMMU at 0000:​00:​00.2 cap 0x40
 +[    1.597598] AMD-Vi: Interrupt remapping enabled ​  
 +[    1.597712] AMD-Vi: Lazy IO/TLB flushing enabled
 +</​code> ​   ​
  
-<​note>​lspci | grep "​SMBus\|IOMMU"</​note>​ +FIXMEManque quelques infosEn cours
-^ 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**+
  
 +===== Script VFIO avec Qemu (Samba & Synergy) =====
  
 +[[https://​pastebin.com/​1uxiBfx6|Script qemu (Samba / Synergy)]]
  
-**Editer ​/etc/default/​grub** (Modifier la ligne selon votre cas) \\ +Fix Synergy: (Bouton Suivant ​Précédent ​touch alt+gr) 
-Avant: ​ \\ + 
-  ​GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" ​ +Éditer le fichier ​**synergy.conf** FIXMEChemin exact 
-Après : \\ +  ​* Dans la section ​"screens" ​de la machine virtuelle ajouter en bas.<​file>​altgr = alt</​file>​ 
-  ​GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ivrs_ioapic[9]=00:​14.0 ivrs_ioapic[10]=00:​00.2"​ +  ​* Dans la section ​"options"​ de la machine virtuelle ajouter en bas.<​file>​ 
- \\ +mousebutton(6) ​keystroke(WWWBack) 
-Ensuite faire un : +mousebutton(7) = keystroke(WWWForward) </​file>​ 
-  ​update-grub  + 
-\\ +---- 
-Redémarrer +//​Contributeurs:​ [[:​utilisateurs:​dexter74]] //
-\\ +
-   +
-====== Vérification Finale ======+
  • vfio.1462323186.txt.gz
  • Dernière modification: Le 04/05/2016, 02:53
  • par dexter74