Le VFIO 1) PASSTHROUGH consiste à décharger le pilote d’un matériel – carte graphique, USB, souris… – pour l’assigner, par exemple, à une machine virtuelle.
Cette technique suppose des pré-requis. Elle nécessite du matériel plus ou moins facile à réaliser. FIXMEIndiquer où il faut le fabriquer ?
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.
Il existe deux types d’adresse :
Saisissez dans un terminal la commande suivante:
dmesg | grep "AMD-Vi\|Intel VT-d"
Vous devriez obtenir
AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40
Qui indique que le module IOMMU a bien été trouvé
AMD-Vi: Interrupt remapping enabled
L'interruption de l'assignement du matériel est activée (Enable), sans ce paramètre on ne pourra pas faire le VFIO.
Saisissez dans un terminal la commande suivante:
lscpu | grep "Virtualization"
Devrait répondre
Virtualization : AMD-V
Tous les Pré-Requis sont donc bons.
Lister tout, en saisissant dans un terminal la commande suivante:
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"
Nvidia inclus: : Autant ne proposer que cette ligne, non?
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"
La Sortie HDMI à une seconde adresse VendorID:DeviceID
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 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) |
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)
lscpu | grep name
pci_stub vfio vfio_iommu_type1 vfio_pci kvm kvm_amd kvm_intel <-- effacer cette ligne par exemple si vous avez un processeur AMD
sudo update-initramfs -u
Après avoir redémarré votre machine, vérifiez la bonne mise en place du vfio en saisissant dans un terminal:
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"
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
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
Exemple
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
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)
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 | 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 |
ivrs_ioapic[9]=00:14.0 ivrs_ioapic[10]=00:00.2
Éditer /etc/default/grub (Modifier la ligne selon votre cas) pour remplacer la ligne
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
par
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ivrs_ioapic[9]=00:14.0 ivrs_ioapic[10]=00:00.2"
en adaptant selon le résultat obtenu précédemment
Ensuite faire un :
update-grub
Redémarrer
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
FIXMEManque quelques infos. En cours
Fix Synergy: (Bouton Suivant / Précédent / touch alt+gr)
Éditer le fichier synergy.conf FIXMEChemin exact
altgr = alt
mousebutton(6) = keystroke(WWWBack) mousebutton(7) = keystroke(WWWForward)
Contributeurs: dexter74