This document discusses OSv, an operating system designed for cloud workloads. Some key points:
- OSv is a unikernel that provides a lightweight virtualized environment optimized for individual applications and services. It aims to improve performance over traditional virtual machines.
- OSv uses application-specific static linking to include only necessary libraries, resulting in very small and fast to load "VM images". It can run existing Linux applications and services.
- Early tests show OSv providing significant improvements over Docker in network throughput and latency for network-intensive applications. It also allows new approaches to memory and process management.
- The ultimate goals of OSv include replacing virtual machines, further optimizing container-
10. Anatomy of a μservice
Hardware
“Stuff”
[Java] Virtual Machine
μservice code
11. How are we doing it today?
Hardware
pkg1
[Java] Virtual Machine
μservice code
pkgN………….
“OS”Linux kernel
Puppet, Chef
Huge VM image
12. Is there a better way?
vHardware
Hardware
[Java] Virtual Machine
libFS, libC, libJVM
μservice code
Application-specific
static linking
Tiny VM image AKA
unikernel
Hardware-assisted virtualization
13. What the heck is a FOOkernel?
• What OS design courses have taught us?
– microkernels vs. monolithic kernels
• What did they left behind?
– exokernels, nano
• What they should’ve taught us instead:
– unikernels, anykernels
14. Unikernels
• “Unikernels: library operating systems for the
cloud” came out in 2013
• A “library” operating system
• A kernel that can only support one process
15. Anykernels
• Programming discipline for kernel code reuse
• “The Design and Implementation of the
Anykernel and Rump Kernels” by A. Kantee
• Capabilities
– NetBSD filesystems as Linux processes
– User-space TCP/IP stack
16. OSv from Cloudius Systems
• A unikernel for “POSIX” and memory managed
platforms (JVM, Go, Lua)
• Anykernel’ish
– E.g. ZFS
• Runs on top of KVM, Xen, VirtualBox, VMWare
• Looks like an app to the host OS
• Small, fast and easy to manage at scale
17. OSv manifesto
• Run existing Linux applications
• Run existing Linux applications faster
• Make boot time ~= exec time
• Explore APIs beyond POSIX
• Leverage memory managed platforms (JVM, Go)
• Stay open
18. What’s inside?
single address space in “kernel mode”
“kernel threads”
“user threads”
diskZFS virtioC++ kernel
code
dynamic linker
libjvm.soifconfig.so
TCP/IP
iface
19. Anything it can’t do?
• A 100% replacement for a Linux kernel
– No fork()ing
• No process isolation
• The least amount of device drivers ever
20. Virtualization vs. performance
• Network-intensive apps:
– unmodified: 25% gain in throughput
47% decrease in latency
– non-POSIX APIs use for Memcached:
290% increase in performance
• Compute-intensive apps:
– YMMV
21. Van Jacabson’s net channels
socket
TCP
IP
iface
socket
TCP
IP
iface
lock
lock
lock
Traditional TCP/IP stack
app thread kernel (IRQ)
send/recv
socket
TCP
IP
iface
channel
classifier
iface
lock
OSv TCP/IP stack
app thread kernel (IRQ)
send/recv
22. Memory management in UNIX
OS Memory
Process Memory
JVM Heap
Process Memory
JVM Heap
28. But what about Docker?
Jailed FS, net, etc.
Hardware
[Java] Virtual Machine
libFS, libC, libJVM
μservice code
Application-specific
static linking
Docker image
Common, shared kernel
29. Docker != LXC
• $ docker run roman/PetClinic
• Socially-driven image sharing
Ubuntu 14.04
Canonical
Tomcat
Pivotal
Go
Google
PetClinic
Roman
PetClinic
service #N
service #1
$ docker run
30. Why should it work this time?
• Unikernels/exokernels back in ’90
• JVM-on-bare-metal (Azul, BEA, etc.) back in ‘00
• Things they didn’t have back then
– HW-assisted virtualization (KVM, XEN, etc.)
– Elastic infrastructure oriented architectures
– CloudFoundry
31. Elastic, next generation datacenter
• Commodity, rack-provisioned Hardware
• Commodity, JeOS to get to Docker++
– CoreOS, SmartOS
• Docker++ as a common backed
• OSv (really KVM, XEN)
• “GitHub” for μservies images
34. Guinea pigs so far
• Cloudius
– Memcached
– Apache Cassandra
– Redis
• Pivotal
– Hadoop ecosystem
35. Where do we need your help?
• All of the above ;-)
• CloudFoundry integration
– $ cf push roman/petclinic ?
– Docker registry as a backend for BuildPacks ?
– Two-level scheduling for Hadoop ecosystem
36. Questions?
By @cloud_opinion
Imagine no platforms
I wonder if you can
No need for PAAS or IAAS
A brotherhood of bare metal
Imagine there is no VM
It's easy if you try
No host below us
Above us only apps