Table des matières
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 :
- Blacklister les cartes PCI
- Si nécessaire, mettre a jour le noyau de boot (“initramfs”)
- 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: