A large body of research has shown that specialization of applications, network I/O frameworks and operating systems can lead to great performance benefits, with several research papers confirming that specialization can yield large gains (e.g., an order of magnitude) compared to standard, general-purpose OSes and network subsystems. One salient example of this is the relatively recent rise of unikernels, custom virtual machines targeting a single application and based on a minimalistic OS, but they’re certainly not the only one: researchers and engineers in a wide range of fields such as NFV, IoT, embedded devices and the automotive industry are constantly tweaking, trimming and optimizing systems down to a minimum in order to extract the best, most efficient possible performance. The obvious, painful downside to specializing OSes or virtual machine images is the significant amount of expert time needed to port applications to the underlying minimalistic OSes, and the subsequent tinkering needed to arrive at an optimal solution.
Unikraft is an open-source, Xen sub-project under the auspices of the Linux foundation that allows users to quickly create custom OSes tailored to particular applications and supporting multiple platforms (e.g., Xen, KVM, bare metal, etc.). Unikraft breaks down an OS’ functionality into a set of fine-granularity libraries (e.g., memory allocators, schedulers, filesystems, drivers, network stacks, etc.), along with the ability to leverage standard, existing libraries (e.g., libc, openssl, etc.). Unikraft then provides a build tool based on a menu that allows users to pick and choose the relevant libraries for a particular application, making it relatively painless to build specialized OSes and to tweak their performance.
- Background on what Unikraft is and how it is put together
- “Hello world” Unikraft application walk-through
- How to write a simple application
- How to “add” the application to the Unikraft system
- How to signal library dependencies for the application
- How to configure the application and its libraries through Unikraft’s menu
- How to build and run the application
- Exercise: optimizing an image’s performance
- Trying out different schedulers, memory allocators, etc.
- Trying out different options in the underlying libraries (e.g., network stack options)
- Using Unikraft’s profiling tools to determine performance issues
- Debugging Unikraft images on different platforms (Xen, KVM, etc.)
- Developing and contributing to Unikraft
- Creating a dummy Unikraft library and building an application that uses it
- How to get involved with contributions to the project
The Hackathon is aimed at researchers, students, and people from industry alike. To be able to fully benefit from it, you should have at least a basic understanding of “make”, C programming, and a Linux development environment.
Felipe Huici <email@example.com>
Simon Kuenzer <firstname.lastname@example.org>
Florian Schmidt <email@example.com>
Costin Lupu <firstname.lastname@example.org>
Source code repo: http://xenbits.xen.org/gitweb/unikraft/unikraft.git
Xen sub-project Unikraft webpage: https://www.xenproject.org/developers/teams/unikraft.html
Xen sub-project Unikraft wiki: https://wiki.xenproject.org/wiki/Category:Unikraft
NEC’s Unikraft webpage: http://sysml.neclab.eu/projects/unikraft/