PVH and Linux
The only things needed to make this work as PVH are:
- Get the latest version of Linux, see  for details. The steps are:
cd $HOME git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git cd linux
- Compile with CONFIG_XEN_PVH=y:
- Based on your current distro.
cp /boot/config-`uname -r `$HOME/linux/.config make menuconfig
Where one will select
Processor type and features ---> Linux guest support --->Support for running as a PVH guest (NEW)
- Or from scratch:
You should see: "Support for running as a PVH guest (XEN_PVH) [N/y] (NEW)" In case you missed it:
Processor type and features ---> Linux guest support --->
Xen guest support (selecting that will now show you):
Support for running as a PVH guest (NEW)
- If you prefer to edit .config, these should be enabled:
CONFIG_HYPERVISOR_GUEST=y CONFIG_PARAVIRT=y CONFIG_PARAVIRT_GUEST=y CONFIG_PARAVIRT_SPINLOCKS=y CONFIG_XEN=y CONFIG_XEN_PVH=y
You will also have to enable the block, network drivers, console, etc which are in different submenus.
- Install it. Usually doing:
make modules_install && install
is suffice. It should generate the initramfs.cpio.gz and the kernel and stash them in /boot directory.
- Launch it with pvh=1 in your guest config (for example):
extra="console=hvc0 debug kgdboc=hvc0 nokgdbroundup initcall_debug debug" kernel="/boot/vmlinuz-3.13+" ramdisk="/boot/initramfs-3.13+.cpio.gz" memory=1024 vcpus=4 name="pvh" vif = [ 'mac=00:0F:4B:00:00:68' ] vfb = [ 'vnc=1, vnclisten=0.0.0.0,vncunused=1'] disk=['phy:/dev/sdb1,xvda,w'] pvh=1 on_reboot="preserve" on_crash="preserve" on_poweroff="preserve
using 'xl'. Xend 'xm' does not have PVH support.
It will bootup as a normal PV guest, but 'xen-detect' will report it as an HVM guest.
Items that have not been tested extensively or at all:
- Migration (xl save && xl restore for example).
- 32-bit guests (won't even present you with a CONFIG_XEN_PVH option)
- PCI passthrough
- Running it in dom0 mode (as the patches for that are not yet in Xen upstream). If you want to try that, you can merge/pull Mukesh's branch:
cd $HOME/xen git pull git://oss.oracle.com/git/mrathor/xen.git dom0pvh-v7
And use on the Xen command line the dom0pvh=1 bootup parameter. Remember to recompile and install the new version of Xen. The patches in Linux do not contain the necessary code to setup guests.
- Memory ballooning
- Multiple VBDs, NICs, etc.
Things that are broken:
- CPUID filtering. There are no filtering done at all which means that certain cpuid flags are exposed to the guest. The x2apic will cause a crash if the NMI handler is invoked. The APERF will cause inferior scheduling decisions.
- Does not work with AMD hardware.
- Does not work with 32-bit guests.
If you encounter errors, please email with the following (please note that the guest config has on_reboot="preserve", on_crash="preserve" - which you should have in your guest config to contain the memory of the guest):
- xl dmesg
- xl list
- xenctx -s $HOME/linux/System.map -f -a -C <domain id>
(xenctx is sometimes found in /usr/lib/xen/bin/xenctx)
- The console output from the guest
- Anything else you can think off.
Stash away your vmlinux file (it is too big to send via email) - as we might need it later on.
That is it!