Menu

Proxmox: Passthrough ou Accès direct

17 décembre 2016 - Virtualisation
Proxmox: Passthrough ou Accès direct

 


I.   Présentation

 

 

Le but est de montrer comment attribuer une carte graphique physiquement dans le serveur Proxmox, à une machine virtuelle. Cela permet d’avoir les performances de la carte graphique.

Voici schématiquement comment cela fonctionne:

Fonctionnement du passthrough

 

Nous allons donc voir comment on peut mettre cela en place sous Proxmox.

 


II.   Pré-requis

 

 

Votre serveur doit avoir les pré-requis suivant:

 

Tout d’abord rendez-vous dans le BIOS/UEFI pour activer dans mon cas les IOMMU:

UEFI: IOMMU

Voila maintenant passons à la configuration du Proxmox.

 


III.   Configuration de Proxmox

 

ATTENTION: Il vous faudra deux cartes graphique sur votre serveur. Une pour l’affichage de votre Proxmox et la deuxième que l’on va dédier à une VM. Dans mon cas j’utilise la sortie HDMI d’une AMD RADEON HD 5450 et je vais dédier une NVIDIA GTX650 à ma VM.

 

Nous allons modifier le fichier grub par défaut:

nano /etc/default/grub

 

Et changer la ligne suivante:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

Par celle-la:

CPU INTEL : GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=onvfio_iommu_type1.allow_unsafe_interrupts=1"

CPU AMD : GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1"

 

On va mettre à jour le grub:

update-grub

 

Puis on redémarre.

 


IV.   Vérifications

 

Une fois redémarré, nous allons vérifier si nous avons bien les instructions de virtualisation. Pour cela nous allons regarder dans le fichier dmesg:

dmesg | grep "AMD-Vi\|Intel VT-d"
[ 1.123089] AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40
[ 1.123090] AMD-Vi: Interrupt remapping enabled
[ 1.123203] AMD-Vi: Lazy IO/TLB flushing enabled

 

Deux choses sont indispensables:

 

Nous allons également vérifier si notre carte graphique est bien vu par Proxmox:

nano lspci | grep VGA

01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM]
02:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)

 

Nous pouvons passons à la configuration de notre VM

 


V.   Configuration de la VM

 

 

Installer votre VM comme d’habitude ou prenez en une déjà installée.

RECOMMANDATION: Activé la connexion à distance dans le cas où vous n’auriez pas d’affichage de votre VM

 

Voici ce que doit contenir le fichier de votre VM: Où VMID = numéro de votre VM par exemple 138

 

nano /etc/pve/qemu-server/VMID.conf

args: -cpu host,kvm=off
balloon: 0
bios: seabios
bootdisk: virtio0
cores: 3
cpu: host
hostpci0: 02:00,pcie=1,x-vga=on
hotplug: disk,network,usb,memory,cpu
ide2: none,media=cdrom
machine: q35
memory: 4096
name: W10-NVIDIA-PASSTHROUGH
net0: e1000=1A:28:09:DF:64:17,bridge=vmbr0
numa: 1
ostype: win8
scsihw: virtio-scsi-pci
smbios1: uuid=ff55a7ae-42f5-4f15-8cf2-4e82b77e0756
sockets: 2
usb0: host=7-1
usb1: host=7-2
vcpus: 2
vga: none
virtio0: DATAS:138/vm-138-disk-1.raw,cache=writeback,size=32G

 

En gras souligné ce sont les éléments à rajouter ou modifier.

Il ne vous reste plus qu’à démarrer votre vM:

qm start VMID

 

Ou par l’interface graphique comme vous préféré.

 


VI.   La VM

 

 

Une fois dans votre VM téléchargé et installé les drivers de votre carte graphique et normalement vous avez cela:

Carte graphique en Passthrough dans la VM

 


VII.   Aller plus loin

 

Maintenant que nous avons notre carte graphique pour notre VM nous pouvons brancher un écran derriere celle-ci. Mais il va nous manquer deux choses… le clavier et la souris. Oui c’est mieux non ?? 😀

Alors nous allons procéder de la même manière. Il suffit de repérer les numéro de BUS de notre matériel:

lsusb

Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 003: ID 04f3:02f4 Elan Microelectronics Corp. 2.4G Cordless Mouse
Bus 007 Device 002: ID 413c:2107 Dell Computer Corp.
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

 

Alors ici nous avons en BUS 007 deux matériels : Devices 002 = clavier et Devices 003 = souris

Nous allons affiner notre recherche:

lsusb -t

/: Bus 09.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/: Bus 08.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
/: Bus 07.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/4p, 12M
|__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbfs, 1.5M
|__ Port 2: Dev 3, If 0, Class=Human Interface Device, Driver=usbfs, 1.5M
/: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/5p, 12M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/5p, 12M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/4p, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/5p, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/5p, 480M

 

Nous avons donc notre clavier en Bus 07 Port 1 et notre souris en Bus 07 Port 2.

Voici comment les rajouter dans notre fichier de configuration de notre VM:

usb0: host=7-1
usb1: host=7-2

 


VIII.   Conclusion

 

Le fait qu’une VM peut directement utiliser une ressource physique et très intéressant du point de vue des performances. Bien sûr nous n’auront jamais 100% des performance de la carte mais de l’ordre de 90-95% ce qui est très acceptable.

 


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *