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


Voilà pour les Pré-requis

III) Obtentions des Informations Matériels

Avant tous il existe 2 Type d'adresse:
- L'adresse de l'emplacement 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 :


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


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 es Activer (Enable)

L'interruption de l'assignement du matériel es activé (Enable) , sans ce paramètre on pourra pas faire le VFIO.

Prise en Charge de la Virtualisation

lscpu | grep "Virtualisation"

Virtualisation : AMD-V

Tous les Pré-Requis son bon.

Vérifier que vos carte-graphiques soit installer dans le bon ordre sur la carte-mère.
Port PCI Express 1: Carte-graphique réserver 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 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)

Connaitre la marque de son processeur:

lscpu | grep name



Editer /etc/modules (Supprimer le module kvm_XXX qui 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 peux 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

Editer /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.1471119236.txt.gz
  • Dernière modification: Le 13/08/2016, 22:13
  • par 92.144.254.135