CPU-Virtualisierungsfunktionen nutzbar?
Wie lässt sich herausfinden, ob die Hardware-Virtualisierungsfunktionen meines Prozessors tatsächlich freigeschaltet sind?
Wie lässt sich herausfinden, ob die Hardware-Virtualisierungsfunktionen meines Prozessors tatsächlich freigeschaltet sind?
Windows-Tools wie AMD CPUInfo oder Intels Processor Identification Utility (siehe Soft-Link) und die von Linux nach Eingabe von cat /proc/cpuinfo
angezeigten Daten liefern lediglich die Information, ob der eingebaute Prozessor AMD-V beziehungsweise Secure Virtual Machines (SVM) oder Intels VT-x (alias Virtual Machine Extensions, VMX) grundsätzlich unterstützt. Unter Linux finden sich dann in der Datei cpuinfo entweder die Kürzel svm
oder vmx
.
Auch wenn ein SVM- oder VMX-tauglicher Prozessor im System steckt, kann das BIOS die Nutzung dieser Funktionen unterbinden (siehe c't 10/07, S. 154). Nicht jedes BIOS-Setup bietet dabei die nötige Option, um diese Blockade wieder aufzuheben. Dann lassen sich beispielsweise keine virtuellen Windows-Maschinen unter Xen betreiben. Tools wie guest64check.exe von VMware zeigen diese Blockade nicht an.
Um auf einem AMD-Prozessor eine SVM zu starten, beschreibt die Hypervisor-Software das Bit 12 des sogenannten Extended Feature Enable Register (EFER) mit dem Wert 1. Beim EFER handelt es sich um ein Machine Specific Register (MSR) der AMD-Prozessoren (MSR 0xc0000080, andere Schreibweise: C000_0080). Das BIOS kann das Beschreiben des erwähnten EFER-Bits verhindern; diese Blockadefunktion dient wohl unter anderem dazu, den Start abgeschotteter virtueller Maschinen ausschließlich mit einem digitalen Schlüssel zu ermöglichen, den wiederum ein eventuell vorhandenes Trusted Platform Module (TPM) prüft. Bei Intel-Prozessoren funktioniert das ähnlich (dazu unten mehr).
Die SVM-Blockade steckt bei AMD-CPUs im Virtual Machine Control Register (VM_CR), wobei es sich um das MSR 0xc0010114 handelt. Interessant sind die Bits Nummer 3 und 4: Enthält Bit 4 den Wert 0, so ist der Zugriff auf das EFER-Bit 12 zulässig und SVMs lassen sich starten. Für die SVM-Sperre setzt das BIOS hingegen den Wert von Bit 4 des VM_CR auf 1 und verhindert das Überschreiben dieses Bits durch gleichzeitiges Setzen des Bits 3. Der binäre Inhalt des EAX-Abschnitts des MSR 0xc0010114 lautet dann „11000“ (Bits 4-3-2-1-0), in hexadezimaler Schreibweise 0x18. Achtung: Das VM_CR dient noch zur Steuerung weiterer Funktionen - wenn (je nach Systemkonfiguration) noch andere Bits gesetzt sind, ändert sich der Hexadezimalwert des Registers, dann muss man die Inhalte von Bit 4 und 3 einzeln heraussuchen.
Unter Windows lässt sich der Inhalt des MSR 0xc0010114 mit dem Utility HWDIRECT (siehe Soft-Link) auslesen; dazu genügt die Shareware-Version dieses Programms, die sich nach dem Entpacken des ZIP-Archivs direkt starten lässt. Von sich aus kennt HWDIRECT das gesuchte Register nicht, man muss es zunächst (im Bereich MSR Read/Write) mit Hilfe der Schaltfläche Add eintragen. Wenn im VM_CR dann lediglich Nullen stehen (und der vorhandene Prozessor SVMs unterstützt), sollten SVMs funktionieren.
Unter Linux helfen die Programme aus den msr-tools weiter (siehe Soft-Link); sie funktionieren bei manchen Distributionen allerdings erst, nachdem man das Kernel-Modul msr
manuell geladen hat (modprobe msr
). Anschließend wirft der mit Root-Rechten auszuführende Befehl rdmsr 0xc0010114
den Inhalt des VM_CR-Registers aus - auch hier bedeutet der Wert 0, dass SVMs funktionieren sollten. Wer sich nicht mit Bitpfriemelei quälen will, kann unter Linux auch einfach einen Xen-Kernel ausführen und anschließend die Statusmeldungen durchsuchen (xm dmesg|grep -e VMX -e SVM
) oder (sofern KVM im Kernel aktiviert ist) ausprobieren, ob kvm-amd
oder kvm-intel
laden.
Bei Intel-Prozessoren mit VT-x steckt der VMX-Blocker im Register IA32_Feature_Control (MSR 0x0000003a, Bits [2:0]). Enthält der EAX-Teil dieses Registers den Wert 1, dann funktioniert VT-x nicht. Die Werte 0, 0b101 (0x5) oder 0b111 (0x7) bedeuten, dass sich VT-x nutzen lässt. Auslesen lässt sich das unter Linux mit rdmsr 0x3a
oder mit HWDIRECT ähnlich wie oben beschrieben.
Manchmal verändert ein reguläres BIOS-Update den Zustand der SVM/VMX-Bremse - zum Guten oder zum Schlechten. Findige Tüftler haben im Forum des Herstellers Parallels einen EFI-Patch veröffentlicht, mit dem sich auf einigen Macs die VMX-Sperre lösen lassen soll, siehe Soft-Link. Dort finden Sie auch Verweise auf die Dokumente von AMD und Intel, die die erwähnten MSRs beschreiben.