My VM is Lighter (and Safer) than your Container


My VM is Lighter (and Safer) than your Container

引言

这篇Paper是SOSP‘17上面一个关于轻量级VM的一篇文章,LightVM号称可以在2.3ms启动一个VM,

LightVM can boot a VM in 2.3ms, comparable to fork/exec on Linux (1ms), and two orders of magnitude faster than Docker. LightVM can pack thousands of LightVM guests on modest hardware with memory and CPU usage comparable to that of processes.

LightVM主要的改进主要就是两个方面:1. 使用Unikernel大大减少了虚拟机的体积,而不是直接使用完整的通用操作系统,如Linux;2. 优化了Xen存在的一个性能问题,就是XenStore在虚拟机数量增加的时候会出现性能的问题;在这篇Paper的题目中就是使得VM可以在一些方面可以和容器相媲美的,所以LightVM有以下的设计目标:

  • 快速启动,传统的虚拟机的启动就类似于一个机器的启动,需要以秒计的时间,LightVM目标将这个时间降低到毫米级;
  • 高密度,在一台机器上面可以部署超过1000台的虚拟机;
  • 暂定/恢复的能力;

Lightweight VMS

这里就是主要讨论了两种类型的VM:Unikernels和Tinyx。基本的思路就是删除完整的系统中无用的功能来使得VM镜像的体积大大减小。

  • Unikernels,Unikernel是近年来出现的一种新的Kernel的架构,其基本的特点就是简单,一般都是为了运行单个的进程设计的。Unikernel的这个特点正好和LightVM的需求对应。目前出现的Unikernel的实现有很多,而且实现个有特点,也不仅仅和一般的Kernel一样使用C语言实现,还有使用一些函数式的编程语言如OCaml实现的Mirage的。在Paper中,使用的一个Unikernel的镜像的大小只有480KB,而且只需要不到4MB的内存就能正常运行;

  • Tinyx,Tinyx是基于Linux的修改版本。估计使用基于Linux修改的一个好处就是保持一些应用的兼容性。它也是为运行单个的应用设计的,

    The Tinyx build system takes two inputs: an application to build the image for (e.g., nginx) and the platform the image will be running on (e.g., a Xen VM). The system separately builds a ￿lesystem/distribution and the kernel itself. distribution, Tinyx includes the application, its dependencies, and BusyBox (to support basic functionality).
    

    在LightVM中实现的镜像的大小也只有1MB多。

Xen的改进

Xen的基本的架构如下:

lightvm-xen

XenStore是Xen中一个类似于数据库的一个组件,它主要包含了domain之间的一些共享信息、配置等的数量。作者咋测试中发现了XenStore在虚拟机数量增长的时候在XenStore的操作上面消耗了大量的时间,

lightvm-xenstore

为了解决这个问题,作者提出的部分就是去除Xen里面的XenStore,提出了一种no XenStore的设计。去除XenStore之后必须有另外的机制来实现XenStore的功能,LightVM使用的方式是基于下面的观察:虽然很多数据被保存在XenStore中,比如VM’s id等,这些实际上已经保存在hypervisor中。在这里,作者在去除了XenStore之后使用一个特殊的设备内存页来保存相关的VM的一些设备的信息,

... to keep track of a VM’s information about any devices, such as block and networking, that it may have. We also include a hypercall to write to and read from this memory page, and make sure that, for security reasons, the page is shared read-only with guests, with only Dom0 allowed to request modi￿cations.

lightvm-noxs

除了上面的优化,LightVM的另外一个优化是将VM启动的过程拆分为prepare步骤,这部分是通用的,它可以提前执行。这里有点像对象迟一样的优化。后台守护进程预先创建号一些VM shells放在一个池子中,在需要的时候取出。然后执行的就是execute步骤,这一步负责创建VM各自不同的部分,

lightvm-split

评估

具体信息可以参看[1].

lightvm-perf

参考

  1. Filipe Manco, Costin Lupu, Florian Schmidt, Jose Mendes, Simon Kuenzer, Sumit Sati, Kenichi Yasukata, Costin Raiciu, and Felipe Huici. 2017. My VM is Lighter (and Safer) than your Container. In Proceedings of SOSP ’17: ACM SIGOPS 26th Symposium on Operating Systems Principles, Shanghai, China, October 28, 2017 (SOSP ’17), 16 pages. https://doi.org/10.1145/3132747.3132763 .