Inhaltsverzeichnis
Virtualisierung PCI-Passthrough
Verschiedene Hardware Plattformen stellen den virtuellen Maschinen, sprich den Gast-Systemen, die Möglichkeit, direkt auf verschiedene Hardware-Komponenten zugreifen zu können, zur Verfügung. Dieser Prozess ist bei Virtualisierung auch unter dem Namen PCI-Passthrough bekannt.
Es wird hier unter AMD und Intel-basierten Systemen unterschieden.
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
AMD basierte Systeme
Um die PCI-Passthrough Unterstützung bei AMD basierten System nutzen zu können, ist die Aktivierung von IOMMU im BIOS des Servers erforderlich, wie nachfolgendes Bild veranschaulicht:
Da standardmäßig die Unterstützung für AMD IOMMU auch im Kernel von CentOS deaktiviert ist, muss diese noch aktiviert werden.
Zuerst soll jedoch überprüft werden, ob die AMD IOMMU tatsächlich deaktiviert ist, was mit nachfolgendem Befehl durchgeführt werden kann:
# dmesg | grep AMD-Vi AMD-Vi disabled by default: pass amd_iommu=on to enable
Um AMD IOMMU nun im Kernel von CentOS zu aktivieren, müssen die Startparameter, welche beim Booten dem Kernel in der Konfigurationsdatei
- /boot/grub/grub.conf
mitgegeben werden, wie nachfolgen dargestellt ergänzt werden:
Booteintrag, OHNE AMD IOMMU Unterstützung:
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/vg_vh-LogVol02 # initrd /initrd-[generic-]version.img #boot=/dev/ddf1_raid1 default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS Linux (2.6.32-71.29.1.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-71.29.1.el6.x86_64 ro root=/dev/mapper/vg_vh-LogVol02 rd_DM_UUID=ddf1_raid1 rd_LVM_LV=vg_vh/LogVol02 rd_LVM_LV=vg_vh/LogVol00 rd_NO_LUKS rd_NO_MD LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=de-latin1-nodeadkeys rhgb quiet crashkernel=auto initrd /initramfs-2.6.32-71.29.1.el6.x86_64.img title CentOS (2.6.32-71.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_vh-LogVol02 rd_DM_UUID=ddf1_raid1 rd_LVM_LV=vg_vh/LogVol02 rd_LVM_LV=vg_vh/LogVol00 rd_NO_LUKS rd_NO_MD LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=de-latin1-nodeadkeys rhgb quiet initrd /initramfs-2.6.32-71.el6.x86_64.img
Um die AMD IOMMU Unterstützung zu aktivieren muss nachfolgende Zeile um den Eintrag
... amd_iommu=on
ergänzt werden, wonach die komplette Zeile dann wie folgt dargestellt, aussehen sollte:
... title CentOS Linux (2.6.32-71.29.1.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-71.29.1.el6.x86_64 ro root=/dev/mapper/vg_vh-LogVol02 rd_DM_UUID=ddf1_raid1 rd_LVM_LV=vg_vh/LogVol02 rd_LVM_LV=vg_vh/LogVol00 rd_NO_LUKS rd_NO_MD LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=de-latin1-nodeadkeys rhgb quiet crashkernel=auto amd_iommu=on initrd /initramfs-2.6.32-71.29.1.el6.x86_64.img ...
WICHTIG - Jetzt ist ein Neustart des Server erforderlich !!!
Nach einem erfolgreichen Neustart des Serevrs, kann die nochmalige Eingabe des nachfolgenden Befehls zur Überprüfung genutzt werden, ob AMD IOMMU nun auch im Kernel aktiviert wurde. Die Ausgabe sollte wie folgt aussehen:
# dmesg | grep AMD-Vi AMD-Vi: Enabling IOMMU at 0000:00:00.2 cap 0x40 AMD-Vi: Initialized for Passthrough Mode AMD-Vi: Enabling IOMMU at 0000:00:00.2 cap 0x40
Intel basierte Systeme
Für die Aktivierung von PCI-Passthrogh für Intel basierte Systeme, ist wie bei
vorzugehen, jedoch ist hier die nachfolgende Zeile um den Eintrag
... intel_iommu=on
zu ergänzen, wonach die komplette Zeile dann wie folgt dargestellt, aussehen sollte:
... title CentOS Linux (2.6.32-71.29.1.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-71.29.1.el6.x86_64 ro root=/dev/mapper/vg_vh-LogVol02 rd_DM_UUID=ddf1_raid1 rd_LVM_LV=vg_vh/LogVol02 rd_LVM_LV=vg_vh/LogVol00 rd_NO_LUKS rd_NO_MD LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=de-latin1-nodeadkeys rhgb quiet crashkernel=auto intel_iommu=on initrd /initramfs-2.6.32-71.29.1.el6.x86_64.img ...
Zur Überprüfung, ob die Intel IOMMU Unterstützung aktiv ist, kann nachfolgender Befehl genutzt werden:
# dmesg | grep -e DMAR -e IOMMU DMAR:DRHD base: 0x000000feb03000 flags: 0x0 IOMMU feb03000: ver 1:0 cap c9008020e30260 ecap 1000
USB: /etc/libvirt/qemu.conf
HINWEIS - Falls es Probleme mit einem USB-Device geben sollte, kann nachfolgende Konfiguration diese Probleme beheben !!!
Um ein Gerät, welches via USB angeschlossen ist und durch ein Gast-System genutzt werden soll, erfolgreich zu betrieben, können nachfolgende Konfigurationseinstellungen erforderlich sein, um die Stabilität, des via USB angeschlossenen Gerätes zu gewährleisten.
Möglicherweise kann es zu einer unvorhergesehenen Beendigung der virtuellen Maschine mit nachfolgender Fehlermeldung in der LOG-Datei
/var/log/libvirt/qemu/<Name der virtuellen Maschine>.log
kommen (nur relevanter Ausschnitt):
... qemu-kvm: /builddir/build/BUILD/qemu-kvm-0.12.1.2/hw/usb.c:345: usb_packet_complete: Assertion `p->owner != ((void *)0)' failed. 2012-02-25 07:56:06.026: shutting down ...
Eine mögliche Lösung ist ein
- UPGRADE auf CentOS in der Version 6.3 und das damit verbundene
- UPGRADE des libvirtd bzw der libvirt-Bibliotheken auf die die Version 0.9.10 / Release 21.el6_3.3