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.
The output of the dmesg command contains many useful bits of information about the processor mode:
If your VM is either HVM or PVHVM, look for:
[ 0.000000] Hypervisor detected: Xen HVM
[ 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
[ 1.424040] Initialising Xen virtual ethernet driver.
[ 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.
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.
- 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
- A truly great article by Brendan Gregg