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:25]
dexter74 [Etape 3: Activation des Modules]
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)** \\ +Vous devriez obtenir 
-\\ +<​code>​AMD-Vi: Found IOMMU at 0000:​00:​00.2 cap 0x40 </code> 
-L'​interruption de l'​assignement du matériel ​es activé ​(Enable) , sans ce paramètre on 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 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>  ​
  
-===== Etape 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:
  
 +^   ​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 =====
  
-**Editer /​etc/​modules** (Supprimer le module kvm_XXX qui correspond pas à votre processeur.) \\ +^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Notes    |
-  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   ​|+
 |  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 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) |
-On peux voir que le "​**Kernel __Driver__**"​ est "​**vfio-pci**" ​ +
-\\+
  
 +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
  
-/!\ Ignorer le "​**Kernel __Modules__** /!\  +Ensuite faire un : 
-====== VFIO ======+ <​code>​update-grub<​/code> 
 +Redémarrer
  
-^   ​Slots ^ ​ Type ^ Désignation  ​ ^ VendorID:​DeviceID ​    ^ Kernel Driver  ​       ^ Remarques  ​ ^ +==== Intel ==== 
- ​00:​14.2 Audio device AMD/ATI Intel HDA | 1002:​4383 | snd_hda_intel | Carte-mère    +FIXME 
-|  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) | +===== Vérification Finale ===== 
-|  02:00.1 | Audio device | R9-270x (HDMI)   ​| 1002:​aab0 | vfio-pci  ​       | VFIO (GUEST) | +<code bash>​dmesg ​grep "Found IOMMU\|remapping\|vfio"<​/code> 
-\\ +<​code>​ 
-**ON NE PEUX ET DOIT VFIO QUE LE MATERIEL DONT LES PILOTES SONT VFIO-PCI (02:00.0 et 02:00.1) ** \\ +   1.597597] AMD-ViFound IOMMU at 0000:00:00.2 cap 0x40 
-CAS Special: Si on Unbind le matériel à chaud si le pilote l'​accepte bien-sûre ! +[    ​1.597598] AMD-Vi: Interrupt remapping enabled ​   
-\\ +[    1.597712] AMD-ViLazy IO/TLB flushing enabled 
-\\ +</code    
-<note>####################​ **/​etc/​vfio-pci.cfg** ####################​ \\ + 
-  #​Exemple:​ DEVICES="​0000:​02:​00.0 0000:​02:​00.1"​ \\ +FIXMEManque quelques infosEn cours 
-  #​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\\ +===== Script VFIO avec Qemu (Samba & Synergy=====
-  #Un espace entre chaque adresse (sauf la première collé à la guillemet) ​ \\ +
-</​note>​+
  
 +[[https://​pastebin.com/​1uxiBfx6|Script qemu (Samba / Synergy)]]
  
-<note help>####################​ **/etc/​modprobe.d/​vfio.conf ####################​ \\ +Fix Synergy: (Bouton Suivant ​Précédent ​touch alt+gr)
-  #Exemple: vfio-pci ids=1002:​6810,​1002:​aab0 \\ +
-  #vfio-pci ids=<​ADRESSE VendorID:​DeviceID><​Virgule><​ADRESSE VendorID:​DeviceID>​ \\ +
-  #Aucune Guillemet \\ +
-  #Exemple: options</note>+
  
-\\+É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>​
  
 +----
 +//​Contributeurs:​ [[:​utilisateurs:​dexter74]] //
  • vfio.1462321549.txt.gz
  • Dernière modification: Le 04/05/2016, 02:25
  • par dexter74