ReLoad

Thierry Jaouen ~ WikiBlog
"Rien à foutre d'être lu, tant que je peux me relire."

Outils pour utilisateurs

Outils du site


blog:2015:02:08:xen_pci_passthrough

Xen PCI Passthrough

Xen avec le toolstack “XL” (qui vient avec Debian Jessie par défaut).

Le but est d'importer une carte PCI dans une machine virtuelle.
Dans un premier exemple, c'est une carte WIFI.

~~READMORE~~

Identifier le matériel

Repérer la carte PCI:

# lspci -k
...
03:00.0 Network controller: Intel Corporation Wireless 7260 (rev 73)
        Subsystem: Intel Corporation Dual Band Wireless-AC 7260
        Kernel driver in use: iwlwifi
...

A chaud

Si nécessaire:

# modprobe xen-pciback

Ajouter dans la liste des assignables:

# xl pci-assignable-add 03:00.0

… ce qui retire la carte de l'environnement du Dom0.
(Dans mon cas, ma carte wifi s'est arrêté normalement !)

Ajouter a chaud dans une machine virtuelle:

# xl pci-attach my-hotspot 03:00.0

… et on voit la carte apparaître dans les logs de la machine virtuelles!

Persistant au reboot

C'est bien beau à chaud, mais dans la vraie vie, on installe le matériel a froid et on fait en sorte qu'il refonctionne a chaque redémarrage.

Méthode 1

:!: la méthode 2 est mieux, mais c'est un avis perso :-)

Au niveau du Dom0, il faut bricoler dans “/etc/modprobe.d” pour modifier la manière dont va être chargé le pilote de la carte:

Dans “/etc/modprobe.d/pciback-wifi.local.conf” (par exemple), faire en sorte d'avoir:

install iwlwifi /sbin/modprobe xen-pciback ; /sbin/modprobe --first-time --ignore-install iwlwifi
options xen-pciback hide=(0000:03:00.0)

Dans la conf de la machine virtuelle, ajouter (dans /etc/xen/my-hotspot.cfg par exemple) :

# carte wifi
pci=['03:00.0']

Au prochain reboot, on peut voir que:

# xl pci-assignable-list
0000:03:00.0

ou si le DomU est déjà en service:

# xl pci-list my-hotspot
Vdev Device
00.0 0000:03:00.0

Et que:

# lspci -k
03:00.0 Network controller: Intel Corporation Wireless 7260 (rev 73)
      Subsystem: Intel Corporation Dual Band Wireless-AC 7260
      Kernel driver in use: pciback

… et oui, le pilote de la carte wifi a été modifié.

Méthode 2

La méthode ci-dessus est celle qui semble recommandé par Google (notre Ami), mais elle ne fonctionne pas toujours.

Par exemple, si on a plusieurs cartes PCI, on fait comment ?

Autre situation sur laquelle j'ai buté un peu: et si le pilote de la carte est chargé pendant la première phase de boot, c'est à dire bien avant Xen…

Cette situation s'est présenté avec une carte réseau “Intel e1000”…
Le pilote étant chargé au boot, la méthode “1” est sans effet.

La seule technique viable dans *toutes* les situations, c'est :

  1. Blacklister les cartes PCI
  2. Si nécessaire, mettre a jour le noyau de boot (“initramfs”)
  3. Charger le module “xen-pciback” avec les cartes a marquer “passthrough”

Donc, en partant d'une situation où je veux activer le “passthrough” pour “1 carte WIFI” et “1 carte réseau e1000”, il faut faire:

Dans “/etc/modprobe.d/” , composer les fichiers des pilotes a blacklister:

# cat iwlwifi.conf 
blacklist iwlwifi

# cat e1000e.conf 
blacklist e1000e

Composer le fichier définissant les paramètres associés au module “xen-pciback” :

# cat pciback.local.conf 
options xen-pciback hide=(0000:03:00.0)(0000:00:19.0)

Où:

# lspci
... 00:19.0 Ethernet controller: Intel Corporation Ethernet ...
... 03:00.0 Network controller: Intel Corporation Wireless ...

Maintenant, à cause du pilote “e1000e” (et pas du pilote wifi), on doit mettre a jour “initramfs” :

# depmod -ae
# update-initramfs -u -k `uname -r` -v

Et dans “/etc/modules”, ajouter:

xen-pciback

Pour le DomU, une ligne comme ça suffira:

pci=['03:00.0','00:19.0']

On peut rebooter le Dom0 et constater ensuite que le DomU a bien les 2 cartes PCI dans son giron.

Sources:

blog/2015/02/08/xen_pci_passthrough.txt · Dernière modification : 2015/02/08 22:18 de thierry