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:14]
dexter74 [Etape 2: Obtentions des informations]
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>​ 
 +Article en cours de modification. 
 +</​note>​
  
-<​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-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** 
  
  
-====== ​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 tous il existe ​2 Type 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 ​appeler vendeur**:**périphérique ​. Celle-ci ​es composé en deux partie séparé ​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>​
  
-===== 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=== ===  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 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>+
  
 +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é
  
-=== Prise en Charge de la Virtualisation ===  +<​code>​AMD-Vi:​ Interrupt remapping enabled</​code>​ 
-<note>**lscpu | grep "Virtualisation"** \\ +L'​interruption de l'​assignement du matériel est activée (Enable), sans ce paramètre on ne pourra pas faire le VFIO. 
-\\ + 
-Virtualisation :      AMD-V+=== 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 ​ ==== 
 + 
 +<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>​ </​note>​
  
-Tous les Pré-Requis son bon.+Lister tout, en saisissant dans un [[:​terminal]] la [[:​commande_shell|commande]] suivante:
  
-===== Etape 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 vos carte-graphiques soit installer 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éserver 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 -v | grep "​VGA\|Audio\|Kernel driver in usesnd_hda_intel\|Kernel driver in usenouveau\|Kernel driver in usenouveaufb\|Kernel driver in useradeon"​ +
- </​note>​  +
-  ​+
  
 ^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​  | ^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes  ​  |
Ligne 67: Ligne 79:
 |  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 device | 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) | 
-**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) \\+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__** :!: 
 + 
 +===== VFIO ===== 
 + 
 +^   ​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 ​       | Encoursderedaction | VFIO (GUEST) | 
 + 
 +FIXMEMise en forme 
 +<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>​  
 +  #Aucune Guillemet  
 +  #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 help>####################​ **/​etc/​vfio-pci.cfg** ####################​ 
 +  Exemple 
 + <​file>​ DEVICES="​0000:​02:​00.0 0000:​02:​00.1"​ 
 +#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) 
 +#Un espace entre chaque adresse (sauf la première collé à la guillemet) 
 + </​file>​ 
 +</​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>​ 
 + 
 +**É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 
 + 
 +Ensuite faire un : 
 + <​code>​update-grub</​code>​ 
 +Redémarrer 
 + 
 +==== 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> ​    
 + 
 +FIXMEManque quelques infos. En cours 
 + 
 +===== Script VFIO avec Qemu (Samba & Synergy) =====
  
 +[[https://​pastebin.com/​1uxiBfx6|Script qemu (Samba / Synergy)]]
  
 +Fix Synergy: (Bouton Suivant / Précédent / touch alt+gr)
  
 +Éditer le fichier **synergy.conf** FIXMEChemin exact
 +  * Dans la section "​screens"​ de la machine virtuelle ajouter en bas.<​file>​altgr = alt</​file>​
 +  * Dans la section "​options"​ de la machine virtuelle ajouter en bas.<​file>​
 +mousebutton(6) = keystroke(WWWBack)
 +mousebutton(7) = keystroke(WWWForward) </​file>​
  
-===== Etape 3Activation des Modules ​ =====+---- 
 +//​Contributeurs[[:​utilisateurs:​dexter74]] //
  • vfio.1462320898.txt.gz
  • Dernière modification: Le 04/05/2016, 02:14
  • par dexter74