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édentesRévision précédente
Prochaine révision
Révision précédente
vfio [Le 21/08/2016, 20:19] – [Étape 2: Obtentions des informations] 90.112.251.197vfio [Le 17/09/2026, 16:35] (Version actuelle) – Typo + orthographe (guillemet est masculin entre autres) nany
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. FIXME Indiquer 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> 
-====== II) Pré-Requis: ====== +Article en cours de modification.
- +
-<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** +
- +
- +
-====== III) Obtentions des Informations Matériels  ====== +
-  +
-<note important>**Avant tout, il existe 2 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 en deux parties séparées par un **:**+
 </note> </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=== 
-<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 est activée (Enable)** \\ 
-\\ 
-L'interruption de l'assignement du matériel est activée (Enable), sans ce paramètre on ne pourra pas faire le VFIO.</note> 
  
  
-=== Prise en Charge de la Virtualisation ===  
-<note>**lscpu | grep "Virtualisation"** \\ 
-\\ 
-Virtualisation :      AMD-V 
-</note> 
  
-Tous les Pré-Requis sont bons.+===== Pré-requis =====
  
-===== Étape 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, connaître la référence des deux GPU disponibles.
  
-<note important>**Vérifier que les cartes graphiques soient installées dans le bon ordre sur la carte-mère.** \\ +===== Obtention des informations sur le matériel ===== 
-**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>+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 1 Vé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" +
-   +
-  Nvidia inclus: +
-  lspci -vv | 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"+
  
- </note>  +<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>
  
-^   Slots ^  Type ^ Désignation   ^ VendorID:DeviceID     ^ Kernel Driver         ^ Notes    | +=== Prise en Charge de IOMMU === 
-|  00:14.2 | Audio device | AMD/ATI Intel HDA | 1002:4383 | snd_hda_intel | Carte-mère    | +Saisissez dans un [[:terminal]] la [[:commande_bash|commande]] suivante 
- 01:00.0 | VGA (GPU) | GTX-260   | 10de:05e2 | nouveau         | Linux (HOTE)    | +<code bash>dmesg grep "AMD-Vi\|Intel VT-d" </code>
- 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 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) \\+
  
 +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'assignation du matériel est activée (Enabled), 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>
  
-===== Étape 3Activation des Modules  =====+Devrait répondre 
 +<code>Virtualization      AMD-V</code>
  
-**Connaitre la marque de son processeur:** +Tous les Pré-Requis sont donc bons.
-  lscpu | grep name +
- \\ +
- \\+
  
 +==== É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 :
  
 +<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>
  
-**Éditer /etc/modules** (Supprimer le module kvm_XXX qui ne correspond pas à votre processeur.) \\ +Nvidia inclus : FIXME Autant ne proposer que cette ligne, non ? 
-  pci_stub +<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>
-  vfio +
-  vfio_iommu_type1 +
-  vfio_pci +
-  kvm +
-  kvm_amd +
-  kvm_intel +
-=== Redémarrage du pc === +
- +
  
-**Vérification:**  \\ +:!La Sortie HDMI à une seconde adresse VendorID:DeviceID :!:
-  lspci -v | grep "VGA\|Audio\|Kernel driver in usesnd_hda_intel\|Kernel driver in usenouveau\|Kernel driver in usenouveaufb\|Kernel driver in useradeon"+
  
 +^   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   | radeon         | 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) |
  
-\\ +Ici la carte graphique est branchée en HDMI et donc les signaux Vidéo Son ont été séparés.\\ 
-^   Slots ^  Type ^ Désignation   ^ VendorID:DeviceID     ^ Kernel Driver         ^ Notes  +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)
-|  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 device | R9-270x (HDMI)   | 1002:aab0 | vfio-pci         | VFIO (GUEST) | +
-\\ +
-On peut voir que le "**Kernel __Driver__**" est "**vfio-pci**"  +
-\\+
  
 +==== Étape 3 : Activation des Modules ====
  
 +  - Connaître 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 obtenir un 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__** :!:
  
 +===== VFIO =====
  
-/!\ Ignorer le "**Kernel __Modules__** /!\  +^   Slots ^  Type ^ Désignation   ^ VendorID:DeviceID     Kernel Driver ^ Notes        ^ 
-====== VFIO ======+|  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         | Encoursderedaction | VFIO (GUEST) |
  
-^   Slots ^  Type ^ Désignation   ^ VendorID:DeviceID     ^ Kernel Driver         ^ Notes    | +FIXME Mise en forme 
-|  00:14.2 | Audio device | AMD/ATI Intel HDA | 1002:4383 | snd_hda_intel | Carte-mère    | +<note help>#################### **/etc/modprobe.d/vfio.conf** #################### 
-|  01:00.0 | VGA (GPU) | GTX-260   | 10de:05e2 | nouveau         | Linux (HOTE)    | +   Exemple  
-|  02:00.0 | VGA (GPU | R9-270x (Video)   | 1002:6810 | vfio-pci         | VFIO (GUEST) | +<file>options vfio-pci ids=1002:6810,1002:aab0 ,1043:aab0
-|  02:00.1 | Audio device | R9-270x (HDMI)   | 1002:aab0 | vfio-pci         | VFIO (GUEST) | +
- +
- +
-<note help>#################### **/etc/modprobe.d/vfio.conf** ####################  +
-   Exemplevfio-pci ids=1002:6810,1002:aab0 +
   #vfio-pci ids=<ADRESSE VendorID:DeviceID><Virgule><ADRESSE VendorID:DeviceID>    #vfio-pci ids=<ADRESSE VendorID:DeviceID><Virgule><ADRESSE VendorID:DeviceID> 
-  #Aucune Guillemet  +  #Aucun 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 dadresse commence par 0000: (Attention au : après les 0000) 
 +#Une espace entre chaque adresse (sauf la première collée au 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 ==== 
-<note>lspci | grep "SMBus\|IOMMU"</note> +FIXME
-^ 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 : +
-  update-grub  +
-\\ +
-Redémarrer +
-\\+
      
-====== 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) ======+FIXME Manque 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** FIXME Chemin 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]]//