Choice of Toolstacks
One really great feature of the Xen Project hypervisor is that there are several choices of toolstacks that can be used to manage it. Before the introduction of libxenlight, there was a complicated and inefficient toolstack situation. The issue was that xend, xapi, libvirt, etc. all needed to manage many common low-level operations, which led to code duplication, inefficiences, bugs, and wasted effort (e.g fixing the same bug in all of the toolstacks). Further, the default toolstack at the time (xend) was difficult to understand, modify, and extend.
Each toolstack exposes an API, which will run different tools. The figure below gives a very brief overview over the choices you have, which commercial products use which stack and examples of hosting vendors using specific APIs.
Libxenlight is a small lower-level library, written in C. It is simple to understand; and easy to modify, and extend. Libxl is (or will be) shared by all Xen Project toolstacks. It was created to provide a simple and robust API for all the toolstacks to use (instead all of the toolstacks each implementing this common functionality). It was also created to be a common codebase to do Xen operations.
libxl Design Principles
- Implement mechanisms, not policies
- Hide xenstore, libxenctrl, and libxenguest from higher levels
- Be as simple as possible
- Man Pages (including pages for XL)
- Libxl improvements (in Xen 4.2)
- Stefano's libxenlight [video] and [slides] at Xen Summit NA 2010.
Choice of Toolstacks
This section describes the various toolstacks (and the console that is used to run it).
Default / XL
xl was designed to be backwards compatible with the xm CLI for xend.
- XL vs Xend Feature Comparison
- Open source projects interfacing/using the default stack (page is deprecated)
- Commercial products interfacing/using the default stack (page is deprecated)
- Projects and Products employing Xen Project software
- Xen Project Management Tools - Duplicates some of the info above
XAPI / XE
It has Free Software licence. The now-abandoned XCP project was an attempt to provide a community-developed, Open Source style distribution of XAPI which would be available in distros.
libvirt / VIRSH
Libvirt is a virtualization API/toolkit used to manage various virtualization technologies. Originally designed to interface with xm, there is a libxenlight port of libvirt.
- libvirt Xen Project hypervisor driver
- Applications using libvirt
- libvirt Xen Project architecture
- You can use virsh to manage xen virtual servers: here are some basic commands using virsh
- Virsh & managing Xen DomUs on openSUSE 11.2
Default / XEND (Deprecated in Xen 4.1; Removed in 4.5)
XEND is the previous toolstack and continues to be included as part of the Xen source releases. However as of Xen 4.1 XEND is now deprecated and will likely be removed in a future release. It is recommended that new deployments use one of the other toolstacks discussed above.
xl was designed to be command line compatible with the xm CLI to xend and this should provide the easiest upgrade path.
Command Line Interface (CLI) Tools
The table shows the command line tools to use with each of the toolstacks.
Note: xl does not have a toolstack/cli split since the toolstack is the cli. Hence it appears under both headings.
Note: xm has been removed in Xen 4.5.
Toolstack Feature Comparison
|Purpose-built for Xen||✓||✓||✗|
|Basic VM Operations||✓||✓||✓|
|Flexible, Advanced Storage Types||✗||✓||✗|
|Built-in advanced performance monitoring (RRDs)||✗||✓||✗|
|Host Plugins (XAPI)||✗||✓||✗|
The power and flexibility of the management of Xen Project is an important feature. Users have a choice to use xl, XAPI, libvirt, or another toolstack to manage their Xen system(s).
- xl is very lightweight and is a great choice for develpers or users who are most comfortable with Unix like CLI tools.
- XAPI is a powerful toolstack that provides domain life-cycle management, pool-awareness (multiple Xen systems added to a central logical pool), and many other advanced features available with Xen Project software.
- libvirt is a generalized virtualization layer for managing various virtualization technlogies with a common toolkit (or toolstack).