On 13 Apr 2016, at 16:30, Daniel J Williams <djwillia@xxxxxxxxxx> wrote:
Hi All,
I'm excited to announce that Solo5/Mirage unikernels can now run on Linux/KVM without needing QEMU! Instead they run on a new "unikernel monitor" called `ukvm`.
`ukvm` is a small, specialized monitor that fills the role of QEMU in
a normal Linux/KVM/QEMU system. `ukvm` will run (as a user process) on any (x86) Linux with the KVM module and start a Solo5/Mirage unikernel in a hardware-isolated "VM". The goal of `ukvm` is to be a small, modular monitor, in which its functionality and interfaces are minimal and customized to the unikernel that is being built. It has the potential to provide a thinner interface to the guest unikernel (thinner than either a container or a VM), a simpler I/O interface (e.g., packet send rather than virtio), and better performance due to its simplicity (e.g., fast boot).
So far, we have a small monitor implementation that is not yet modular, but demonstrates some dramatically simple interfaces and a fast boot time.
This is awesomely exciting, Dan!
The ukvm source is refreshingly easy to read as well, and it avoids much of the headache of trying to manage a full hypervisor toolstack (and often working around it).
This got me wondering -- would you be interested in Mac support? We've been doing some work on xhyve recently as part of Docker for Mac [1], and the Hypervisor.framework in OSX is similar to /dev/kvm in UKC. xhyve is a very thin library layer over the Hypervisor.framework, but it does currently use virtio.
We could go even thinner than that with a unikernel-tailored shared memory interface rather than virtio, and run unikernels on Macs "in production" (that is, consider applications like secure key stores or backup VMs that you want outside the TCB of the desktop).
I've packaged it in a Docker container so it's easier to try out.
A few comments on the packaging:
- there are ocaml/opam base images available for a variety of distros on the Hub, which may be useful to you rather than using the Ubuntu PPAs. These come pre-installed with OPAM with an `opam` user.
- instead of individual pins, you can also create a git repository that has a `packages/` subdirectory and has all the pinned packages. This cluster of pins can be added to your working set via `opam repo add <name> <url>`. For example, see https://github.com/mirage/mirage-dev
I don't have a Linux box handy at the moment with KVM, but will take it out for a spin soon. I'm keen to see this integrated as a supported backend in our main tree!
Anil |