Ceci est une ancienne révision du document !


VFIO PASSTHROUGHT

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 !
Il existe des pré-requis , du matériel plus ou moins facile à réaliser. En cas de soucis crée un topic


II) Pré-Requis:

- 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 virtuelle (Guest)
- Connaitre son matériel . (Référence des 2 GPU serait bien par exemple)


Voilà pour les Pré-requis

III) Obtentions des Informations Matériels

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 :


/!\ 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)


Prise en Charge de IOMMU

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.

Prise en Charge de la Virtualisation

lscpu | grep "Virtualisation"

Virtualisation : AMD-V

Tous les Pré-Requis sont bons.

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) \\
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"
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 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)

Connaitre la marque de son processeur:

lscpu | grep name



Éditer /etc/modules (Supprimer le module kvm_XXX qui ne correspond pas à votre processeur.)

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
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" .

/!\ 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 device R9-270x (HDMI) 1002:aab0 vfio-pci VFIO (GUEST)
#################### /etc/modprobe.d/vfio.conf ####################
 Exemple: vfio-pci ids=1002:6810,1002:aab0 
#vfio-pci ids=<ADRESSE VendorID:DeviceID><Virgule><ADRESSE VendorID:DeviceID> 
#Aucune Guillemet 
#Exemple: options
#################### /etc/vfio-pci.cfg ####################
Exemple: 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)

FIX IOMMU

AMD:

dmesg | grep AMD-Vi
[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) \\
L'erreur 9 correspond au SMBus et l'erreur 10 au IOMMU.
lspci | grep "SMBus\|IOMMU"
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


dmesg | grep "Found IOMMU\|remapping\|vfio"

  [    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
  
  <Manque quelque infos de ma part !   


Script VFIO avec Qemu (Samba & Synergy

Script qemu (Samba / Synergy)

http://pastebin.com/1uxiBfx6


Fix Synergy: (Bouton Suivant / Précédent / touch alt+gr)

Editer le fichier synergy.conf

Dans la Section "screens" de la machine virtuel ajouter en bas.
altgr = alt
Dans la Section" options"  de la machine virtuel ajouter en bas.
mousebutton(6) = keystroke(WWWBack)
mousebutton(7) = keystroke(WWWForward)		
  • vfio.1471120248.txt.gz
  • Dernière modification: Le 13/08/2016, 22:30
  • par 92.144.254.135