There’s been a lot of good progress in the Xen on ARM with virtualisation extensions port since I first blogged about it here.
Thanks to some recent work, mainly by Stefano Stabellini, we are now able to start our first guest domain, including paravirtual console disk and network devices!
The main implementation work here has been to implement support for the core pieces of infrastructure will underpins the PV drivers, primarily that is event channels and grant tables all of which Stefano has implemented recently. One of our key design goals with this port of Xen was to make good use of the hardware virtualisation extensions, and at the same time implement paravirtualisation where it offers obvious benefits. For example we wanted to use paravirtualised device drivers for I/O as they provide significant performance benefits compared to emulated devices.
Sadly this has come too late for the 4.2 release (which has been frozen for a while and is now in the release candidate stage). Therefore I have created a git branch of Xen to track the ARM patches which are destined for 4.3. You can find it on xenbits and read more in the announcement mail.
The port remains very much a work in progress, and in particular we have not yet settled on a final ABI (and therefore offer no forward or backward compatibility for guest kernels). Our aim is to target initial support for Xen on ARM systems with virtualisation extensions at the 4.3 release.
The Linux patches have been posted upstream but are also still a work in progress so at the moment there is no particular convenient place to get them all. I’ve pushed the tree which I am using to the arm-wip branch of my kernel tree on xenbits, this tree is compatible with the Xen tree published above.
I’ve also pushed the lightweight xcbuild tool which we are using to a branch on xenbits. This is a simple tool which will build a basic guest. It expects to be given a zImage format kernel with an appended DTB as the first and only argument and a guest root filesystem already available on /dev/loop0. A suitable kernel should be built using the kernel’s CONFIG_ARM_APPENDED_DTB option and the vexpress-virt.dtb present in the kernel tree by concatenating the two together. For example:
cat zImage vexpress-virt.dtb > kernel
losetup /dev/loop0 domU.img
Obviously this is just a stop gap until we get the standard Xen toolstack up and running on ARM. A reasonable option for domU.img is the armv5t_min_VE_V7.image from the Third Party IP supplied by ARM, although any ARM root filesystem should do.
We’ve come a long way with this port in the last six months and we seem to be well on track to have a useful and functional port in time for 4.3 (I sure hope those words don’t come back to haunt me!). Obviously there is still plenty of stuff to do so if you’re interested in development of this port then be sure to try it and join us on xen-devel.