Friday, January 17, 2014

XenServer: code highlights from 2013 [feedly]

XenServer: code highlights from 2013
http://feedly.com/e/VLN8JujQ

For me, the biggest event of 2013 was undoubtably the open-sourcing of xenserver in JuneBy volume, about 99% of xenserver was already open-source (xen, Linux, CentOS, xapi etc), nevertheless it was great to finally see the code for xencenter and the Windows PV drivers: win-xeniface, win-xennet, win-xenvif, win-xenvbd and even the awesome test system, xenrt finally open-sourced.

Of course, the action certainly didn't stop there. Not only were the Windows PV drivers open-sourced, but Paul, Ben and Owen completely overhauled them to make them compatible with upstream xen. Previously the drivers relied on a customisation contained within the xenserver patch queue. Now the drivers should work well, on every xen system.

Virtualising graphics... the right way

In another exciting development, Paul's work on creating multiple device emulators for HVM guests enabled safe sharing of physical GPUs among VMs, a feature we call vGPU. Just as xen allows its components to be isolated in separate VM containers (known as dom0 disaggregation), it's exciting to see the isolation being taken to the level of individual virtual PCI devices. (I'm hoping to try writing my own virtual PCI device sometime in 2014)

User interfaces

Continuing with the Windows theme, at the top of the xenserver stack, the XenCenter interface has received several great usability enhancements. It has been redesigned to simplify the user experience for navigation between different views of resources and for viewing different types of notifications. This was all thanks to the hard work of Tina (expect another blog on this subject soon!)

Scaling up

2013 was also a great year for xenserver scalability. It's quite a challenge making a system as complex as xenserver scale well: you have to have a deep understanding of the whole system in order to find -- and fix -- all the important bottlenecks. Thanks to the laser-like focus of Felipe, the storage datapath has been extensively analysed and understood. Meanwhile large increases in basic system resources such as David's new event channel ABI, reducing the number of grant references needed by disabling receive-side copy and absorbing upstream xen goodness such as Wei's patch to use poll(2) in consoled have led to big improvements in VM density.

XenServer: the distro

The xenserver distro is the foundation upon which everything else is -- literally -- based. Anyone who has downloaded one of the regular development snapshot builds (thanks to Craig and Peter for organising those) should have noticed that it has been recently rebased on top of CentOS 6.4 with a shiny new Linux 3.x kernel and xen 4.3. This means that we have access to new hardware drivers, access to more modern tools (e.g. newer versions of python) and lots of other great stuff.

(No-one likes) patch queues

Speaking of the distro, I have to mention the "patch queue problem". Patch queues are a sequence of source code customisations applied to an "upstream" (e.g. the official xen-4.3 release) to produce the version we actually use. Patch queues are important tools for distro builders. They can be used for good (e.g. backporting important security fixes) and for evil (e.g. forward-porting stuff that shouldn't exist: "technical debt" in its most concrete form). Every time a new upstream release comes out, the patch queue needs careful rebasing against the new release -- this can be very time-consuming. In recent years, the xenserver xen patch queue had grown to such a large size that it was almost blocking us from moving xenserver to more recent versions of xen. I'm happy to report that the past year has seen heroic efforts from Andy, Malcolm and David to reduce it to more manageable levels. Andy tells me that while it took more than 1 year (!) to rebase and fix xenserver from xen 3.4 to 4.1; and then -- a still surprising -- 3 months to get from 4.1 to 4.2; it recently only took 3 days to rebase from 4.2 to 4.3! Phew!

Build and packaging

Our goal is to get to a world where the xenserver.iso is simply a respin of a base (CentOS) distro with an extra repo of packages and overrides on top. Therefore in 2013 we made a concerted effort to clean up our xenserver distro build and packaging more generally. Thanks to Euan, Jon and Frediano we're now using standard build tools like mock and rpmbuild. In the past we cut corners by either leaving files unpackaged (bad) or applying large patch queues in the packages (terrible, as we've seen already). To help sort this out, Euan created a set of experimental RPM and .deb packages for the toolstack, shook out the bugs and forced us to fix things properly. As a result we've found and fixed lots of portability problems in the upstream software (e.g. hard-coded CentOS paths which break on Debian), which should make the lives of other distro package maintainers easier.

As a side-benefit, we've also been able to release bleeding-edge packages containing prototypes of new features, such as ceph storage released as a tech preview in July, based on libvirt and Richard Jones' excellent OCaml bindings

New toolstack version

Next on my list, xenserver picked up a refreshed version of xapi with lots of improvements, my personal favourites being Rob's port of xenopsd to libxl; enhanced disk copying APIs tailored for cloud use-cases (thanks to Zheng, Si, Dave); and support for enabling host GRO (thanks again to Rob) and more IPv6 (thanks to both Rob and Euan).

Keen dom0 watchers will notice that "xapi" has split into multiple daemons including a stand-alone host network configuration daemon and a stand-alone statistics collection and monitoring daemon. These services are designed to be usable independently (even without the xapi mothership installed) and, since they use many of the OCaml libraries for high-performance type-safe I/O from the openmirage project, are candidates for running as specialised xen kernels in a fully-disaggregated dom0.

Last, but certainly not least, xenserver gained many, many bug-fixes making it into an even-more robust platform to which you can trust your infrastructure. Working on xenserver in 2013 was really fun and I'm looking forward to (the rest of) 2014!

No comments:

Post a Comment