VM Feature Identification
When you control your own hypervisor, you are aware of the features you are using, since you have configured the system and the VMs. However, if you are using a service provider for your hosting or cloud, you need to do some detective work to determine the hypervisor mode and features employed.
MODE DETECTION
The output of the dmesg command contains many useful bits of information about the processor mode:
HVM-type:
If your VM is either HVM or PVHVM, look for:
[ 0.000000] Hypervisor detected: Xen HVM
and:
[ 0.000000] Booting paravirtualized kernel on Xen HVM
If it is actually PVHVM, you could see messages like:
[ 0.127240] Xen: using vcpuop timer interface
or:
[ 1.424040] Initialising Xen virtual ethernet driver.
or:
[ 0.000000] Xen HVM callback vector for event delivery is enabled
indicating that PV drivers are being utilized within the HVM machine.
Also, some newer versions might have:
[ 0.000000] xen: PV spinlocks enabled
indicating that PV spinlocks are used, so an HVM VM with this message must be PVHVM.
PV-type:
If your VM is PV or PVH, look for:
[ 0.000000] Booting paravirtualized kernel on Xen
Note the lack of reference to HVM, as seen in the messages above.
This message indicates that PV timers are in use:
[ 0.000000] Xen: using vcpuop timer interface
If PV network drivers are in use, you might see:
[ 0.432488] Initialising Xen virtual ethernet driver.
OTHER HINTS
- Disk names: names in the format xvdXN (e.g., xvda1, or xvdc3) indicates that the PV disk driver is in use.
- Network drivers: a network driver of vif is a PV driver
DECODE INDIVIDUAL FEATURES
Brendan Gregg has written a Perl-based script called xen-features.pl which can be retrieved from git here.
It takes the value stored in /sys/hypervisor/properties/features and decodes it into output like:
Xen features: 00000705 enabled: writable_page_tables enabled: auto_translated_physmap enabled: hvm_callback_vector enabled: hvm_safe_pvclock enabled: hvm_pirqs
REFERENCES
- A truly great article by Brendan Gregg