[Topic Unique] VGA/PCI Passthrough et VFIO sous GNU/Linux

VGA/PCI Passthrough et VFIO sous GNU/Linux [Topic Unique] - Logiciels - Linux et OS Alternatifs

Marsh Posté le 22-12-2013 à 18:43:07    

MAJ du 11/01/15
Grâce à tybobab, voici un tutoriel qui devrait grandement vous simplifier la vie si vous souhaitez faire du VFIO avec votre carte graphique (matériel compatible)
Tout d'abord celà fonctionne sur une Fedora 21 workstation, je n'ai pas testé d'autre distribution, et contrairement à tybobab, j'utilise virt-manager
ça se passe dans un terminal.

Code :
  1. sudo -i


Code :
  1. dnf update
  2. yum install @virtualization


 

Code :
  1. cd /etc/yum.repos.d/
  2. wget https://fedorapeople.org/groups/vir [...] eview.repo
  3. dnf install nano
  4. dnf update


 
On va ensuite édité le grub

Code :
  1. nano /etc/default/grub


 
Pour y ajouter sur la ligne  
 

Code :
  1. GRUB_CMDLINE_LINUX="rhgb intel_iommu=on quiet"


 
On va regénérer le grub maintenant

Code :
  1. grub2-mkconfig -o /boot/grub2/grub.cfg


 
Création du fichier vfio-bind avec nano

Code :
  1. nano /usr/bin/vfio-bind


 
Voici le contenu à coller dans ce fichier
 

Code :
  1. #!/bin/bash
  2. modprobe vfio-pci
  3. for dev in "$@"; do
  4.         vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
  5.         device=$(cat /sys/bus/pci/devices/$dev/device)
  6.         if [ -e /sys/bus/pci/devices/$dev/driver ]; then
  7.                 echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
  8.         fi
  9.         echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
  10. done


On donne ensuite les autorisations nécessaire à ce fichier avec

Code :
  1. chmod 755 /usr/bin/vfio-bind


Blocage ensuite du driver de la carte graphique, attention celle-ci sera inutilisable sous GNU/Linux ensuite.

Code :
  1. nano /etc/modprobe.d/blacklist.conf


Selon votre carte graphique, AMD ou nVidia
le contenu du fichier sera different
dans mon cas, pour une carte AMD

Code :
  1. blacklist radeon


Maintenant, vous rebootez avec  

Code :
  1. reboot


Dans un terminal ensuite, vous lancez  

Code :
  1. sudo vfio-bind 0000:01:00.0 0000:01:00.1


et normalement avec une commande

Code :
  1. lspci -k


le module utilisé sera vfio-pci
 
Merci à tybobab, sans qui ce tutoriel n'aurait jamais vu le jour
 
 
MAJ du 18/04/14
[Topic Unique] VGA/PCI Passthrough et VFIO sous GNU/Linux
 
Lien proposé par tybobab
http://linuxfr.org/users/chrisk/jo [...] fonctionne
 
Lien proposé par jo popo
http://edencomputing.com/index.php [...] u-support/
 
 
MAJ du 11/01/14
 
! Les Pré-requis pour ce projet, sont un CPU et un chipset compatible avec le Vt-d et le VT-x !
 
Le projet est de faire cohabiter plusieurs OS à l'aide de VM, ça c'est déjà connu, on peut le faire avec Virtualbox ou autre Vmware...
Mais ce dont on va parler ici, c'est du Qemu-KVM ou autre Xen, tout ça sur du GNU/Linux.
Mon expérience se base sur Debian Jessie, mais je pense qu'on peut adapter ça pour de l'Arch, Ubuntu, ou encore CentOS...
 
Le but est de cumulé les avantages des OS, attention aux trolls...
GNU/Linux: stabilité, exigence matériel légère ...
MS Windows: Jeux 3D, logiciel d'imagerie ...
MacOS: panel de logiciel de création....
 
Bref, partant du principe que chaque OS à des avantages et des inconvénients
On va sélectionner chaque OS en fonction de ses avantages, pour résumer
 
On va partir sur un système de base (aussi appelé Dom0 pour Xen), un OS GNU/Linux léger comme Debian
On va créer une machine virtuelle Windows8.1 à laquelle on va dédier une carte graphique (sous réserve que votre installation en possède une, en plus du chipset intégré)
 
Voici comment faire dans le cas de ma configuration:
 
Je pars d'une Debian Jessie, fraîchement installée, on se connecte en super-utilisateur
 

Code :
  1. echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf


On "blacklist" le module radeon (ou fglrx, dans le cas d'un pilote propriétaire AMD) (ou nouveau nvidia, dans le cas d'une carte graphique nVidia)
 

Code :
  1. update-initramfs -u


 
lspci afin de nous montrer la carte graphique à donner à notre future VM Windows8.1

Code :
  1. 01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cayman PRO [Radeon HD 7950] <-- radeon 7950
  2. 01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cayman/Antilles HDMI Audio [Radeon HD 7900 Series] <-- radeon 7950 audio


 
lspci -n

Code :
  1. 01:00.0 0300: 1002:679a <-- radeon 7950
  2. 01:00.1 0403: 1002:aaa0 <-- radeon 7950 audio


 

Code :
  1. nano /etc/default/grub


Code :
  1. pci-stub.ids=1002:679a,1002:aaa0 vfio_iommu_type1.allow_unsafe_interrupts=1


 

Code :
  1. update-grub


 

Code :
  1. echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/vfio_iommu_type1.conf


 

Code :
  1. nano /usr/bin/vfio-bind


 

Code :
  1. #!/bin/bash
  2. modprobe vfio-pci
  3. for dev in "$@"; do
  4.         vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
  5.         device=$(cat /sys/bus/pci/devices/$dev/device)
  6.         if [ -e /sys/bus/pci/devices/$dev/driver ]; then
  7.                 echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
  8.         fi
  9.         echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
  10. done


 

Code :
  1. chmod 755 /usr/bin/vfio-bind


 

Code :
  1. vfio-bind 0000:01:00.0 0000:01:00.1


 

Code :
  1. apt-get install virt-manager qemu


 
WIP
 
 
 
Post original:
Bonjour les copains et copines :)
 
Voilà je viens de me monter ma nouvelle config dans le but avoué d'en faire une station de virtualisation de Bureau/Serveur/Jeux
 
4770S / Q87m-vPro pour la compatibilité VT-x VT-d
HD7950 pour le PCI Passthrough avec le VT-d
 
OS CentOS 6.5, car il possède ce que je recherche pour un Dom0, il est très léger.
 
[root@localhost NHiX]# xl list
Name                                        ID   Mem VCPUs State Time(s)
Domain-0                                     0  1023     2     r-----    1829.7
windows8                                     3  8191     4     -b----    3875.3
gnu                                          4  2043     2     -b----      13.5
 
Donc 1Go de RAM pour mon Dom0 ce qui me parait suffisant
8Go pour Windows 8.1 x64, juste pour Battlefield 4 xD
2Go pour ma VM Debian, qui s'occupe de la partie serveur/stockage
 
Le réseau fonctionne entre les VM, merci copain Xum :)
 
Mais je souhaiterai profiter de mon équipement logitech sur mon DomU windows8.
L'idée est de dédier par le biais d'un PCI assignable-add quelques ports USB, enfin surtout ceux où se trouve mon G13, Clavier et souris, et ainsi pouvoir installer les drivers sous mon DomU windows8... Mais vous allez me dire, tu n'auras plus de clavier souris dans ton Dom0, ce à quoi je répondrai, oui mais avec Synergy ça devrait marcher.
Synergy étant un KVM logiciel multiOS, qui fonctionne avec un Synergy Server et un ou plusieurs clients
Hélas lors de mes multiples tests, celui-ci ne trouve ni serveur, ni client, même sur un autre PC :/
 
Bref, je ne suis pas loins du but, juste cette histoire de Synergy qui me bloque :(
 
EDIT: Changement du titre pour Qemu-KVM
EDIT du 18/04/14: Changement du titre pour [Topic Unique] VGA/PCI Passthrough et VFIO sous GNU/Linux


Message édité par NHiX le 11-01-2015 à 11:18:50
Reply

Marsh Posté le 22-12-2013 à 18:43:07   

Reply

Marsh Posté le 23-12-2013 à 18:38:44    

Bonjour,
 
J'utilise globalement la même configuration (i7 4770s et HD7850, enfin en ce moment je me suis rabattu sur mon ancienne HD6850 qui me pose moins de problème) avec des VMs Debian et une VM Windows 8.1 avec PCI-Passthrough (mais en cours de remplacement par de l'Ubuntu + XBMC + Steam, je ne joue pas à BF4...). La principale différence est que j'utilise qemu-kvm sur l'hôte Debian.
 
As-tu besoin du clavier/souris sur ton Dom0 ? Dans mon cas, l'hôte ne sert qu'à ça, il est sous la TV, il n'y a pas de serveur X et je l'administre via SSH + Virt-Manager depuis mon laptop. Donc je passe un contrôleur PCI et lorsque la VM est démarrée je n'ai plus de clavier/souris.
 
Si tu en as effectivement besoin, je n'ai pas utilisé Synergy depuis longtemps, mais je ne vois pas pourquoi ça ne fonctionnerait pas. Je laisse d'autres personnes t'aider sur ce sujet.
La dernière option est le KVM hard. Je m'étais pris ce simple commutateur : http://www.ldlc.com/fiche/PB00118277.html pour une machine de test.
Un peu cher pour ce que c'est, mais il ne prend pas de place et fait le boulot, avec commutation par raccourci clavier (reconnu sans soucis sous Linux).

Reply

Marsh Posté le 23-12-2013 à 19:55:46    

Tu as surement raison finalement, et mon Dom0 est juste là pour soutenir mes DomU.
Je débutes sur du GNU/Linux, Xen, PCI Passthrough... Tu as trouvé des tutos bien expliqués ?
Il faut que je me renseigne sur virt-manager ;)
Sinon effectivement un KVM hard et je ne serais pas ennuyé ;)

Reply

Marsh Posté le 23-12-2013 à 20:25:53    

l'administration via ssh ne serait pas suffisante sinon, tout simplement ?


Message édité par Misssardonik le 23-12-2013 à 20:26:06

---------------
Que va-t-il se passer cette gelgamar ? vous le découvrirez janamont à 20h
Reply

Marsh Posté le 23-12-2013 à 20:48:50    

Oui, via SSH avec xm ou xl, tu dois pouvoir tout gérer sous Xen (pour ma part c'est avec virsh avec qemu).
Et si je ne me trompe pas, ta carte-mère dispose d'une connexion type IPMI qui permet de t'y connecter en cas de soucis ?
Petite question au passage, pourrais-tu me dire combien de contrôleurs USB il y a sur cette carte-mère (en faisant un lspci sur le Dom0) ?
 
Pour Xen et le PCI Passthrough, je n'ai pas de tutos particuliers, mais ça ne manque pas sur le net.
J'ai ce sujet dans mes bookmarks : http://www.overclock.net/t/1205216 [...] al-machine si ça peut te servir (ça concerne Fedora, mais les principes sont les mêmes sur CentOS je suppose).

Reply

Marsh Posté le 03-01-2014 à 10:55:48    

Pardon pour le retard  
ma carte mère à effectivement une connexion de type IPMI, mais comme je suis un noob je ne sais pas comment ça fonctionne :/
 
de mémoire, il y a 2 contrôleurs USB... mais je te dirai ça quand je serai chez moi ;)
Sinon je pense finalement faire comme toi, passez à Qemu-KVM à la place de Xen, ça m'a l'air plus simple, mais je ne trouve pas de tuto pour expliquer le fonctionnement du pci-passthrough avec Qemu-kvm
 

Reply

Marsh Posté le 03-01-2014 à 18:11:40    

Bonjour,
 
Pas de soucis.
Pour l'IPMI, je ne peux pas t'aider, je ne l'ai pas sur ma carte mère (Asrock H87).
Il semblerait que deux contrôleurs USB soient la norme sous Haswell, c'est ce que j'ai également. J'en avais trois sur ma carte SandyBridge, c'était plus pratique quand on en passe à plusieurs VM.
 
Concernant Qemu-KVM, je ne suis pas sûr que ce soit vraiment plus simple que Xen. Le PCI-Passtrough est plus ancien sur Xen, donc sûrement plus rodé...
Et en ce moment il y a d'important changement côté Qemu (remplaçant de l'ancienne méthode pci-assign pour passer les périphériques par vfio-pci qui est plus propre). Pour te donner une idée, avec l'ancienne méthode, pas de soucis pour passer une Radeon 7850 à une VM Windows, je n'y suis pas arrivé avec la nouvelle. Par contre avec une Radeon 6850 j'arrive à faire du VFIO dans une VM Linux.
Bref, ce sont des techniques assez récentes et qui évoluent beaucoup.
Un sujet que je suis de près : https://bbs.archlinux.org/viewtopic [...] 162768&p=1. Il concerne Archlinux, mais il y a pleins d'infos si tu t'intéresses au sujet.

Reply

Marsh Posté le 03-01-2014 à 18:44:51    

Merci pour ta réponse
Oui je m'intéresse beaucoup à ce sujet
Disons que j'ai toujours bien aimé GNU/Linux et j'avoue que la seule chose qui me faisait hésiter c'est l'accélération via le GPU pour mes jeux Windows, là je pense avoir trouvé le meilleur moyen pour concilier les deux ;)
Je teste dès ce soir Qemu-KVM :)

Reply

Marsh Posté le 03-01-2014 à 20:02:35    

nhix@mint16 ~ $ lspci | grep USB
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 05)
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 05)
00:1d.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1 (rev 05)

 

Dans Virt-manager, il faut préféré quelle option Qemu ou KVM ?

 

Mince mon expérience avec KVM va tourner court
Erreur lors du démarrage du domaine: internal error: Invalid device 0000:01:00.1 driver file /sys/bus/pci/devices/0000:01:00.1/driver is not a symlink


Message édité par NHiX le 03-01-2014 à 20:17:05
Reply

Marsh Posté le 04-01-2014 à 22:57:54    

Ma version de Qemu est la 1.5.0, enfin celle fournie de base dans une LinuxMint 16, peut-être que mes problèmes viennent de cette "vieille" version ?
 

Code :
  1. qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: vfio: Device does not support requested feature x-vga
  2. qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: vfio: failed to get device 0000:01:00.0
  3. qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: Device initialization failed.
  4. qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: Device 'vfio-pci' could not be initialized


 
Merci toma222 mais malgré le sudo vfio-bind 0000:01:00.0 0000:01:00.1  
 

Code :
  1. #!/bin/bash
  2. modprobe vfio-pci
  3. for dev in "$@"; do
  4.         vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
  5.         device=$(cat /sys/bus/pci/devices/$dev/device)
  6.         if [ -e /sys/bus/pci/devices/$dev/driver ]; then
  7.                 echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
  8.         fi
  9.         echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
  10. done


Message édité par NHiX le 04-01-2014 à 23:08:23
Reply

Marsh Posté le 04-01-2014 à 22:57:54   

Reply

Marsh Posté le 06-01-2014 à 12:30:10    

Bonjour,
 
Je te souhaite bonne continuation dans ton projet :)
 
J'ai essayé de faire la même chose (ASROCK Z77-Extreme4 + i7 3770 + 16 GO DDR3 + nvidia GTX460 1GB) mais impossible de faire marcher la nvidia sous windows (je m'y attendais mais j'ai quand même testé :). Il faudra que je test avec une radeon.
Je vais suivre de pres ton projet ;)

Reply

Marsh Posté le 06-01-2014 à 16:24:23    

Merci tybobab ;)
 
Si mon projet abouti, je ferai un tutoriel afin de simplifier les choses :)
Concernant la GTX460, elle me semble opérationnelle avec Xen

Reply

Marsh Posté le 07-01-2014 à 14:15:58    

Il me semble qu'il faut la flasher en quadro pour que ca marche :) (ma source : http://wiki.xen.org/wiki/Xen_VGA_P [...] _Adapters)


Message édité par tybobab le 07-01-2014 à 14:16:35
Reply

Marsh Posté le 09-01-2014 à 18:01:43    

Si je comprend bien une fois après avoir fait les manips
on rentre un  

Code :
  1. update-initramfs -u


pour prendre en compte le blacklistage du module
 
ensuite un lspci -k nous donne:

Code :
  1. 01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti PRO [Radeon HD 7950]
  2. Subsystem: PC Partner Limited / Sapphire Technology Device e210
  3. Kernel driver in use: vfio-pci
  4. 01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti XT HDMI Audio [Radeon HD 7970 Series]
  5. Subsystem: PC Partner Limited / Sapphire Technology Device aaa0
  6. Kernel driver in use: vfio-pci


 
Là, ça me semble prêt pour être assigné à une VM ?


Message édité par NHiX le 09-01-2014 à 18:12:26
Reply

Marsh Posté le 09-01-2014 à 23:09:54    

Alors, dernière nouvelle sur ma Debian Jessie, j'arrive à passer ma carte graphique, avec Virt-Manager, à la voir dans la VM, je me dis, c'est gagné !
 
Et bien non :(
 
Car si je vois bien ma carte graphique, ma VM plante juste après :/
damned!

Reply

Marsh Posté le 10-01-2014 à 16:05:57    

Salut NHiX :)
 
Regarde ce topic/tuto : http://forums.linuxmint.com/viewto [...] 2&t=112013
Tu pourras peut-être trouver des infos complémentaires

Reply

Marsh Posté le 10-01-2014 à 16:16:23    

Merci tybobab :)
Je connais le tuto, vraiment bien fait, mais plutôt réservé pour Xen

Reply

Marsh Posté le 10-01-2014 à 16:18:20    

Je suis en train d'acquerir une HD7770, quand je la recevrai, je te donnerai un feedback :)


Message édité par tybobab le 10-01-2014 à 16:25:47
Reply

Marsh Posté le 10-01-2014 à 16:28:39    

Pour Synergy, tu installes Synergy2 ou Synergy-plus ?

Reply

Marsh Posté le 10-01-2014 à 16:41:19    

NHiX a écrit :

Merci tybobab :)
Je connais le tuto, vraiment bien fait, mais plutôt réservé pour Xen


 
Ah oui c'est vrai...désolé :)
 
Je commencerai mes tests sur KVM (je le préfère à Xen).

Reply

Marsh Posté le 10-01-2014 à 17:25:09    

Concernant Synergy, j'utilise Synergy-plus, mais je crois que c'est plus un accès rapide à Synergy2 ;)
 
J'avais testé Xen, mais il n'est pas compatible avec mon UEFI, enfin dans sa version 4.3, peut-être que la prochaine version sera ok avec ce satané d'UEFI :)
 
Si tu veux tester Xen dans de bonne condition, je te conseille CentOS 6.5, vraiment une très bonne distro, très légère pour en faire son Dom0
 
Mais je préfère tout comme toi, KVM, pour de futurs projets, peut-être une virtualisation de mon Raspberry Pi, afin d'y tester de nouvelle version d'OpenELEC ou Raspbian sans tout casser le physique qui sert de media-center à Madame :)
Ou alors de la virtualisation de MacOS X, ou même de RiscOS ou autre...

Reply

Marsh Posté le 10-01-2014 à 19:25:00    

[:lardoncru:1]


---------------
"By the time I pay my scientist, all the people in my lab, my developers, the lab rats, it's a wash. Well, why you do it then, baby Billy? Well, cause I'm selfless"
Reply

Marsh Posté le 10-01-2014 à 19:59:17    

Bonsoir,
 
Comme je l'avais précisé à NHiX, pour ceux qui s'intéressent au Passthrough avec Qemu, ce post sur le forum Archlinux est à suivre :
https://bbs.archlinux.org/viewtopic.php?id=162768.
Il décrit la nouvelle méthode pour passer des cartes graphiques à des VMs en utilisant vfio-pci (plus propre que l'ancienne méthode pci-assign) en faisant du primary passthrough (sans carte virtuelle). C'est encore experimental et nécessite encore de patcher le kernel et qemu, mais ça devrait permettre de passer même des cartes Nvidia.
De mon côté j'ai de bons résultats avec une Radeon 6850 mais pas avec une 7850 (qui passait avec pci-assign) pour le moment.

Reply

Marsh Posté le 10-01-2014 à 20:00:40    

Reply

Marsh Posté le 10-01-2014 à 20:21:43    

Là où je bloque c'est sur l'attribution de la carte graphique en passthrough à la VM Windows :(
Si vous savez comment faire ?
 
J'ai suivi ce tutoriel, mais adapté sur ma Debian Jessie
https://bbs.archlinux.org/viewtopic [...] 162768&p=1
 
Preparing the GPU so we can bind it to vfio
 
For the next step we need to:
 
Blacklist radeon or nouveau or nvidia or fglrx on /etc/modprobe.d/blacklist.conf
 
Example, blacklisting the opensource radeon module:

Code :
  1. echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf


Use pci-stub
 
In my case since i have 2 radeon cards blacklisting the radeon module is not an option, so i use pci-stub.
 
NOTE: If pci-stub was built as a module, you'll need to modify /etc/mkinitcpio.conf and add pci-stub in the MODULES section, after that you need to update your initramfs like this.

Code :
  1. mkinitcpio -p linux-mainline


NB: ce que j'ai remplacé sur ma Debian Jessie par  

Code :
  1. update-initramfs -u


 
lspci

Code :
  1. 01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cayman PRO [Radeon HD 7950] <-- radeon 7950
  2.     01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cayman/Antilles HDMI Audio [Radeon HD 7900 Series] <-- radeon 7950 audio


 
lspci -n

Code :
  1. 01:00.0 0300: 1002:679a <-- radeon 7950
  2.     01:00.1 0403: 1002:aaa0 <-- radeon 7950 audio


Now add this to your grub cfg file:

Code :
  1. pci-stub.ids=1002:679a,1002:aaa0


dmesg | grep pci-stub

Code :
  1. [    2.096151] pci-stub: add 1002:679a sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
  2.     [    2.096160] pci-stub 0000:01:00.0: claimed by stub
  3.     [    2.096165] pci-stub: add 1002:AAA0 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
  4.     [    2.096174] pci-stub 0000:01:00.1: claimed by stub
  5.     [    2.096178] pci-stub: add 1B21:1042 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000


Setting up vfio and kvm modules
 
If your board doesn't enable interrupt remapping, you need to add this to your grub cfg:

Code :
  1. vfio_iommu_type1.allow_unsafe_interrupts=1


ne pas oublier ensuite un update-grub
 
Or if vfio-pci was built as a module ( default on arch )

Code :
  1. echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/vfio_iommu_type1.conf


Some applications like Passmark Performance Test and SiSoftware Sandra crash the VM without this:

Code :
  1. echo "options kvm ignore_msrs=1" >> /etc/modprobe.d/kvm.conf


Binding a device to vfio-pci
 
Assuming the kernel, qemu and seabios are built and working, lets bind some devices.
You can use this script to make life easier:

Code :
  1. #!/bin/bash
  2. modprobe vfio-pci
  3. for dev in "$@"; do
  4.         vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
  5.         device=$(cat /sys/bus/pci/devices/$dev/device)
  6.         if [ -e /sys/bus/pci/devices/$dev/driver ]; then
  7.                 echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
  8.         fi
  9.         echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
  10. done


 
Save it as /usr/bin/vfio-bind

Code :
  1. chmod 755 /usr/bin/vfio-bind


Bind the GPU:

Code :
  1. vfio-bind 0000:01:00.0 0000:01:00.1


J'en suis ici, et je ne sais pas comment recompiler un noyau ou Qemu avec leurs options :(
 
J'obtiens:

Code :
  1. qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: vfio: Device does not support requested feature x-vga
  2.     qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: vfio: failed to get device 0000:01:00.0
  3.     qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: Device initialization failed.
  4.     qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: Device 'vfio-pci' could not be initialized


 
Et pourtant mon lspci -k

Code :
  1. 01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti PRO [Radeon HD 7950]
  2.    Subsystem: PC Partner Limited / Sapphire Technology Device e210
  3.    Kernel driver in use: vfio-pci
  4. 01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti XT HDMI Audio [Radeon HD 7970 Series]
  5.    Subsystem: PC Partner Limited / Sapphire Technology Device aaa0
  6.    Kernel driver in use: vfio-pci


Message édité par NHiX le 11-01-2014 à 09:09:54
Reply

Marsh Posté le 10-01-2014 à 20:53:39    

http://imagik.fr/thumb/68466.jpeg[size=9]imagik[/size]
Voilà ce que j'obtiens sous une VM Debian 7, bizarre


Message édité par NHiX le 10-01-2014 à 20:56:17
Reply

Marsh Posté le 10-01-2014 à 21:07:33    

Concernant l'erreur vfio: Device does not support requested feature x-vga, c'est normal, le noyau doit être compilé avec l'option CONFIG_VFIO_PCI_VGA, qui n'est pas activé par défaut sur la plupart des distribs car encore experimental.
Ce que je te conseille si tu ne veux pas te lancer dans la compilation (et application de patchs), c'est plutôt que de faire du Primary VGA Passthrough (x-vga=on), c'est de faire du Secondary VGA Passthrough (tu ne mets pas l'option x-vga et tu mets une carte virtuelle).
Sur ta capture d'écran, c'est quand tu démarres avec quelles options ? Parce que ta carte vidéo semble vue.

Reply

Marsh Posté le 10-01-2014 à 21:23:23    

Ok je vais tester ça, mais en fait je me sers de Virt-manager comme un sale nOOb :(
sinon en ligne de commande avec Qemu, ça donne quoi ?
un truc comme ça ?
 

Code :
  1. qemu-system-x86_64 -enable-kvm -M q35 -m 8192 -cpu host \
  2. -smp 6,sockets=1,cores=4,threads=1 \
  3. -bios /home/nhix/VM/seabios.1.7.4 -vga none \
  4. -device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
  5. -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,romfile=/home/nhix/VM/7950.rom \
  6. -device vfio-pci,host=01:00.1,bus=root.1,addr=00.1
  7. -drive file=/home/nhix/VM/Windows8.1,id=disk,format=raw -device ide-hd,bus=ahci.0,drive=disk


 
A la rigueur, il va falloir que je passe par la case compilation du kernel avec les options qui vont bien ;)
Il n'y a pas un lien où quelqu'un l'a déjà fait ?
qui se propose ?
svp xD


Message édité par NHiX le 10-01-2014 à 21:23:55
Reply

Marsh Posté le 10-01-2014 à 21:35:57    

En commande qemu ça devrait donner quelque chose comme ça :
 

Code :
  1. qemu-system-x86_64 -enable-kvm -M q35 -m 8192 \
  2. -smp 6,sockets=1,cores=4,threads=1 \
  3. -bios /home/nhix/VM/seabios.1.7.4 \
  4. -device cirrus-vga,id=video0,bus=pcie.0,addr=0x1 \
  5. -vnc 127.0.0.1:8 \
  6. -device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
  7. -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on \
  8. -device vfio-pci,host=01:00.1,bus=root.1,addr=00.1 \
  9. -drive file=/home/nhix/VM/Windows8.1,id=disk,format=raw -device ide-hd,bus=ahci.0,drive=disk


 
A vérifier. J'ai volontairement retirer le -cpu host car ça me pose problème.
Logiquement tu dois pouvoir t'en sortir uniquement avec Virt-Manager si ça fonctionne en Secondary Passthrough.
 
Pour la compilation du kernel, je l'ai fait récemment sous Debian. Par contre pour il faut probablement compiler la version git de Qemu également.
 

Reply

Marsh Posté le 10-01-2014 à 21:47:26    

mince encore une question de nOOb, j'ai un soucis sur la ligne -drive ....
J'obtiens

Code :
  1. qemu-system-x86_64: -device ide-hd,bus=ahci.0,drive=disk: Bus 'ahci.0' not found


Je sais, j'ai honte

 

EDIT:
Problème rélgé.

Code :
  1. -drive file=/home/nhix/VM/Windows8.1,if=none,id=disk,format=raw -device ide-hd,bus=ide.0,unit=0,drive=disk -usbdevice tablet
 

Par contre, j'ai ce message dans le terminal

Code :
  1. ehci warning: guest updated active QH
 

Et le plus important ma VM semble s'eteindre, enfin plus d'affichage, l'écran devient noir via TightVNC
Je n'arrive pas à la relancer, enfin si mais toujours l'écran noir, même en passant sur la sortie carte graphique dédiée à la VM :(
On n'est pas loin du but pourtant je pense...

 


NB: Voici mon "win"

Code :
  1. qemu-system-x86_64 -enable-kvm -M q35 -m 8192 \
  2. -smp 6,sockets=1,cores=4,threads=1 \
  3. -bios /home/nhix/VM/seabios.1.7.4 \
  4. -device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
  5. -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on \
  6. -vnc 127.0.0.1:8 \
  7. -device vfio-pci,host=01:00.1,bus=root.1,addr=00.1 \
  8. -drive file=/home/nhix/VM/Windows8.1,if=none,id=disk,format=raw -device ide-hd,bus=ide.0,unit=0,drive=disk -usbdevice tablet
 

Le Bios Seabios utilisé
http://code.coreboot.org/p/seabios [...] n-1.7.4.gz

 

Ensuite pour se connecter, dans un terminal

Code :
  1. vncviewer localhost:8



Message édité par NHiX le 10-01-2014 à 22:04:13
Reply

Marsh Posté le 10-01-2014 à 22:12:24    

!!!!!!! ATTENTION MA METHODE ACTUELLE N'INCLUS PAS LES PATCHS !!!!!!!
 
 
J'ouvre un nouveau post, c'est un peu le bordel... lol
 
Je vais tenter une compilation de Seabios
On va récupérer:
http://www.fileswap.com/dl/VgLPyZwOkl/
Ceux sont des patchs à inclure pour la compilation de Seabios
 
Donc, on installe:

Code :
  1. apt-get install iasl git


 
On va cloner le dépôt git avec:

Code :
  1. git clone git://git.seabios.org/seabios.git
  2. cd seabios


On va copier les patchs dans le dépôt cloné, et ensuite lancer la compilation avec  

Code :
  1. make


 
normalement si tout est ok, vous devez avoir dans ~/seabios/out/bios.bin qui est notre version compilée de Seabios :)
Il n'y a plus qu'à tester :)
 
Maintenant Qemu:
git://git.qemu.org/qemu.git le dépôt Git
 

Code :
  1. cd ~
  2. git clone git://git.qemu.org/qemu.git
  3. cd qemu
  4. git submodule update --init pixman
  5. git submodule update --init dtc
  6. apt-get install pkg-config zlib1g-dev libglib2.0-dev1
  7. ./configure


 
Mais le make ne fonctionne pas, si quelqu'un connait la solution, je met le post à jour ensuite


Message édité par NHiX le 10-01-2014 à 22:41:57
Reply

Marsh Posté le 10-01-2014 à 22:43:00    

Pas mal d'edit, pardon, je vais refaire le premier post, avec un tutoriel le plus complet possible, une fois que la solution sera trouvée, si il y a des volontaires pour tester sur leurs config ;)

Reply

Marsh Posté le 11-01-2014 à 15:38:20    

Update du premier post !

Reply

Marsh Posté le 12-01-2014 à 16:59:38    

Salut NHiX :)
 
J'aurai la radeon vendredi prochain donc je ferai mes tests durant le week end :) Je pense tester sur Fedora avec KVM

Reply

Marsh Posté le 13-01-2014 à 22:02:40    

Drapwal,
 
Bien envie de voir ce que donne le passthrough vers ta vm Windows ;)


---------------
:o
Reply

Marsh Posté le 13-01-2014 à 22:12:06    

Pour le moment malheureusement, ça ne fonctionne pas, peut-être avec une prochaine version de Qemu...
En tout les cas le tutoriel, c'est un début :)

Reply

Marsh Posté le 13-01-2014 à 22:15:51    

Il semblerait que le passthrough pur fonctionne non ?  
 
L'ennui est les perf en jeux non ?


---------------
:o
Reply

Marsh Posté le 13-01-2014 à 22:21:10    

Le passthrough fonctionne, en tout les cas, j'arrive bien à "passer" ma carte graphique à ma VM Windows, mais celle-ci au démarrage plante, et plus rien ne s'affiche sur mon écran ainsi que sur mon VNC/Spice :/
 
Les problèmes peuvent être multiple, mais je cherche des personnes sous Debian avec mon matériel, et chez qui ça fonctionne :)

Reply

Marsh Posté le 13-01-2014 à 23:13:22    

Ca plante dès l'installation de ta VM ou à partir du moment où tu as installé les pilotes Catalysts ?
Quand ta VM est lancé, c'est bien vfio-pci qui gère ta carte graphique ?

Reply

Marsh Posté le 16-01-2014 à 16:01:44    

Salut NHiX,
 
As-tu trouvé la cause de ton problème de plantage de la VM ?
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed