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 09/09/2019, 09:13] – [VFIO PASSTHROUGHT] le_petit_chat_noirvfio [Le 17/09/2026, 16:35] (Version actuelle) – Typo + orthographe (guillemet est masculin entre autres) nany
Ligne 1: Ligne 1:
-{{tag> Virtualisation qemu}}+{{tag> Virtualisation qemu dexter74 vfio}}
 ---- ----
-====== VFIO PASSTHROUGHT ======+====== -=[ VFIO PASSTHROUGH ]=- ======
  
-Le VFIO ((Virtual Function I/O)) PASSTHROUGH  consiste à décharger le pilote d'un matériel (Carte graphique , usb , souris ...) pour ensuite l'assigner à une machine virtuelle par exemple. \\ +Le VFIO ((Virtual Function Input/Output)) PASSTHROUGH consiste à décharger le pilote dun matériel – carte graphique, USB, souris… – pour lassignerpar exemple, à une machine virtuelle.
-Cette technique demande des pré-requiset nécessite du matériel plus ou moins facile à réaliser. FIXME mettre en place ou il faut le fabriquer?\\ +
-\\ +
-L'intérêt du passthrough est par exemple de pouvoir bénéficier de l'accélération 3D d'une carte graphique sur la machine virtuelle, ou encore la meilleur gestion d'une souris ou un clavier spécifique sur cette machine virtuelle+
  
-===== Pré-Requis =====+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 ?
  
-  * Avoir activé la Fonction **IOMMU** du Bios. (Activer le 64 bits si vous avez dans le bios) +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.
-  * Avoir activé la Prise en compte du IOMMU par linux. +
-  * Le processeur doit prendre en charge la virtualisation. +
-  * Avoir deux Carte-graphiques ou 1 [[Wpfr>Accelerated_processing_unit|Apu]] et une Carte-graphique  +
-  * Avoir 2 Entrées 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)+
  
-===== Obtentions des Informations Matériels  =====+FIXME 
 +<note> 
 +Article en cours de modification. 
 +</note> 
 + 
 + 
 + 
 + 
 + 
 +===== 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, connaître la référence des deux GPU disponibles. 
 + 
 +===== Obtention des informations sur le matériel =====
    
-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 de deux parties séparées par deux points **:**+  * 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 « ».
  
-==== Étape 1: Vérification de la prise en charge de IOMMU / Virtualisation processeur  ====+==== É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]].\\ <note important>En cas d'erreur IOAPIC ou  IVRS table, il y a un Fix à appliquer dans [[:grub-pc|GRUB]].\\
Ligne 29: Ligne 39:
 En effet, au moment de l'écriture de cette page, son rédacteur [[:utilisateurs:dexter74]] possède uniquement cette marque</note> En effet, au moment de l'écriture de cette page, son rédacteur [[:utilisateurs:dexter74]] possède uniquement cette marque</note>
  
-===  Prise en Charge de IOMMU=== +=== Prise en Charge de IOMMU === 
-Saisissez dans un [[:terminal]] la [[:commande_bash|commande]] suivante:+Saisissez dans un [[:terminal]] la [[:commande_bash|commande]] suivante :
 <code bash>dmesg | grep "AMD-Vi\|Intel VT-d" </code> <code bash>dmesg | grep "AMD-Vi\|Intel VT-d" </code>
  
-Vous devriez obtenir +Vous devriez obtenir
 <code>AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40 </code> <code>AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40 </code>
 Qui indique que le module IOMMU a bien été trouvé Qui indique que le module IOMMU a bien été trouvé
  
 <code>AMD-Vi: Interrupt remapping enabled</code> <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.+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 ===  +=== Prise en Charge de la Virtualisation === 
-Saisissez dans un [[:terminal]] la [[:commande_shell|commande]] suivante: +Saisissez dans un [[:terminal]] la [[:commande_shell|commande]] suivante : 
-<code bash>lscpu | grep "Virtualisation" </code>+<code bash>lscpu | grep "Virtualization" </code>
  
 Devrait répondre Devrait répondre
-<code>Virtualisation :      AMD-V</code>+<code>Virtualization :      AMD-V</code>
  
 Tous les Pré-Requis sont donc bons. Tous les Pré-Requis sont donc bons.
  
-==== Étape 2: Obtentions des informations  ====+==== É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. <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 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) +  * **Port PCI Express 2 :** Carte graphique pour le système d'exploitation invité. (**__GUEST__** / Windows)
 </note> </note>
  
-Lister tout, en saisissant dans un [[:terminal]] la [[:commande_shell|commande]] suivante:+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> <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>
  
-Nvidia inclus: FIXMEAutant ne proposer que cette ligne, non?+Nvidia inclus : FIXME Autant ne proposer que cette ligne, non ?
 <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> <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 :!: :!: 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 | radeon         | VFIO (GUEST) | +|  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 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) |
  
 Ici la carte graphique est branchée en HDMI et donc les signaux Vidéo / Son ont été séparés.\\ 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) +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  ====+==== Étape 3 : Activation des Modules ====
  
-  - Connaitre la marque de son processeur: <code>+  - Connaître la marque de son processeur : <code>
 lscpu | grep name</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   - [[: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
Ligne 84: Ligne 94:
 vfio_pci vfio_pci
 kvm kvm
-kvm_amd +kvm_amd
 kvm_intel  <-- effacer cette ligne par exemple si vous avez un processeur AMD kvm_intel  <-- effacer cette ligne par exemple si vous avez un processeur AMD
-</file>   +</file> 
-  - Mettre à jour le chargement des modules: <code>sudo update-initramfs -u </code>  +  - Mettre à jour le chargement des modules : <code>sudo update-initramfs -u </code>  
  
-==== Étape 4: Redémarrage et vérification ====+==== É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]]: Après avoir redémarré votre machine, vérifiez la bonne mise en place du vfio en saisissant dans un [[:terminal]]:
Ligne 95: Ligne 105:
 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" 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> </code>
-Vous devriez obtenir un tableau proche de:+Vous devriez obtenir un tableau proche de :
  
-^   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   | vfio-pci | VFIO (GUEST) | 
-|  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) |
  
-Ici 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__** :!: :!: Ignorer le "**Kernel __Modules__** :!:
Ligne 110: Ligne 120:
 ===== VFIO ===== ===== VFIO =====
  
-^   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   | vfio-pci | VFIO (GUEST) | 
-|  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       | Encoursderedaction | VFIO (GUEST) |+|  02:00.1 | Audio HDMI2 | R9-270x (HDMI)   | 1043:aab0         | Encoursderedaction | VFIO (GUEST) |
  
 FIXME Mise en forme FIXME Mise en forme
-<note help>#################### **/etc/modprobe.d/vfio.conf** #################### +<note help>#################### **/etc/modprobe.d/vfio.conf** ####################
    Exemple     Exemple 
 <file>options vfio-pci ids=1002:6810,1002:aab0 ,1043:aab0 <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 +  #Aucun 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
Ligne 132: Ligne 142:
  <file> DEVICES="0000:02:00.0 0000:02:00.1"  <file> DEVICES="0000:02:00.0 0000:02:00.1"
 #Attention au Guillemet (Début et fin de toutes les adresse) #Attention au Guillemet (Début et fin de toutes les adresse)
-#Chaque début d'adresse commence par __**0000:**__ (Attention au : après les 0000) +#Chaque début dadresse commence par 0000: (Attention au : après les 0000) 
-#Un espace entre chaque adresse (sauf la première collé à la guillemet)+#Une espace entre chaque adresse (sauf la première collée au guillemet)
  </file>  </file>
 </note> </note>
Ligne 145: Ligne 155:
 [0.251403] [Firmware Bug]: AMD-Vi: IOAPIC[10] not in IVRS table         <= Northbridge Inconnus (Erreur 10) \\ [0.251403] [Firmware Bug]: AMD-Vi: IOAPIC[10] not in IVRS table         <= Northbridge Inconnus (Erreur 10) \\
 </code> </code>
-L'erreur 9 correspond au SMBus et l'erreur 10 au IOMMU.+Lerreur 9 correspond au SMBus et lerreur 10 au IOMMU.
  
 <code bash>lspci | grep "SMBus\|IOMMU"</code> <code bash>lspci | grep "SMBus\|IOMMU"</code>
  
-^ Slot    ^ Type     ^ Désignation     ^ Code Erreur   ^Base           ^Erreur     Slot | +^ 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: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    +|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> <code>ivrs_ioapic[9]=00:14.0 ivrs_ioapic[10]=00:00.2</code>
Ligne 161: Ligne 171:
 en adaptant selon le résultat obtenu précédemment en adaptant selon le résultat obtenu précédemment
  
-Ensuite faire un :+Ensuite faire un :
  <code>update-grub</code>  <code>update-grub</code>
 Redémarrer Redémarrer
  
 ==== Intel ==== ==== Intel ====
-FIXME +FIXME
      
 ===== Vérification Finale ===== ===== Vérification Finale =====
Ligne 180: Ligne 190:
 ===== Script VFIO avec Qemu (Samba & Synergy) ===== ===== Script VFIO avec Qemu (Samba & Synergy) =====
  
-[[http://pastebin.com/1uxiBfx6|Script qemu (Samba / Synergy)]]+[[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)
Ligne 191: Ligne 201:
  
 ---- ----
-//Contributeurs: [[:utilisateurs:dexter74]] //+//Contributeurs : [[:utilisateurs:dexter74]]//