LightVM is a virtualization solution based on Xen that is optimized to offer fast boot-times regardless of the number of active VMs. This is achieved by replacing Xenstore with a new distributed solution called NoXS (no Xenstore) which provides a shared page for each device containing all the information needed for device initialization.
LightVM uses the new Chaos toolstack which currently implements
operations such as instantiation, saving, restoring and
migration. Chaos can also be used in Xen environments based on
Xenstore, making it a streamlined alternative for the
toolstack. VMs management is assisted by the XenDevD daemon for proper
Currently, LightVM relies on Linux kernel for dom0, while for unprivileged domains one can use both Linux and Mini-OS based guests.
LightVM environment consists of multiple components, each of them
having its own repository. The Xen repository provides the Xen
hypervisor, on top of which the virtualized domains will be running,
and the libraries needed by Chaos toolstack. The toolstack uses
library for interacting with the hypervisor on domain creation,
shutdown and inspection, and for migrating domains data to remote
hosts. If deployed in a Xenstore-based environment, the toolstack will
also need the
libxenstore library for communicating with the
The Linux repository provides the changes needed for building both
dom0 and domU domains. Inside dom0, Chaos will make use of the
/dev/xen/noxs_backend device when requesting to the backend drivers
the creation of devices configured for the target guest domains. With
NoXS, besides the backend drivers for network and block devices, the
sysctl backend driver is in charge with providing all the system-wise
information and events (such as shutdown events) needed by the guest
domains. On the guest side, the
sysctl front driver will receive the
information and will trigger the actions implied by the events.
The XenDevD repository provides the source code for the XenDevD daemon and the libraries needed for communication with Chaos. XenDevD daemon listens for udev events in order to carry out the userland operations for devices initialization (e.g. adding vifs to bridges). Some devices may require userland operations before their creation, in which case Chaos will initiate the requests directly to the daemon and will wait for these operations to complete. For example, block devices that are file based will need to be mounted using loop devices; Chaos will provide the name of the file being mounted and the daemon will reply with the loop device path on success.
The Chaos repository contains the source code for toolstack: the tool
used in domain creation, shutdown and inspection, the daemon used for
receiving migrating domains and the daemon used in split
instantiation. Similarly to
libxl library for most of its
functionality, the common functionality of Chaos tools is provided by
Besides Linux domU domains, LightVM also supports Mini-OS based applications. The Mini-apps repository provides a set of applications examples that can be used to demonstrate the functionality and performance of NoXS based environments.
- Repo: https://github.com/sysml/xen
- Branch: noxs-4.8.1 based on Xen 4.8.1
- Branch: noxs-4.8.0 based on Xen 4.8.0
- Build and installation steps are the same ones used for upstream Xen. Be sure to provide a custom installation path before building if a different location is desired.
$ ./configure --prefix=<my Xen distribution directory> $ make dist-xen $ make dist-tools
- Repo: https://github.com/sysml/linux
- Branch: noxs
- Build: Add CONFIG_XEN_NOXS=y in the config file in addition to using the Xen config flags for building Linux domains.
Prepare the userspace headers which will be used by the Chaos toolstack:
$ make headers_install INSTALL_HDR_PATH=<my Linux headers>
- Repo: https://github.com/sysml/xendevd
- Branch: noxs
- Build: Before running make command, update the Makefile to refer to the headers and libraries installed in the previously configured Xen distribution directory:
-CFLAGS += -Iinc -Wall -g -O3 -LDFLAGS += -lxenstore +CFLAGS += -Iinc -Wall -g -O3 -I<Xen source tree>/<my Xen distribution directory>/include +LDFLAGS += -lxenstore -L<Xen source tree>/<my Xen distribution directory>/lib
- Repo: https://github.com/sysml/chaos
- Branch: master
- Build: Before building, configure the variables in the config.in file to refer to the previously configured environment paths. For build, simply run the make command. NoXS can be enabled by using the CONFIG_H2_XEN_NOXS flag:
$ make CONFIG_H2_XEN_NOXS=y
- Repo: https://github.com/sysml/mini-os
- Build: Enable NoXS by setting
$ make CONFIG_NOXS=y
- Repo: https://github.com/sysml/mini-apps
- Build requirements: the Mini-OS applications need the Newlib and Lwip libraries provided by the Mini-OS toolchain.
- Build: In the target application directory:
$ cd daytime $ make XEN_ROOT=... MINIOS_ROOT=... NEWLIB_ROOT=... LWIP_ROOT=... <Mini-OS specific flags>
- Repo: https://github.com/sysml/toolchain
- For build details, follow the indications in the toolchain README