【每周论文】Xen and the Art of Virtualization

这篇论文发表自SOSP 2003,出自剑桥大学计算技术实验室。

在当时一台物理机的成本很高,为了提高机器的资源利用率,一台物理机上通常会运行着好多程序,当其中有一个程序导致了机器崩溃会影响到在其上运行的其他程序,所以就有人提出来,将一台物理机通过一些技术将其分割为很多台机器来为不同的应用提供服务,这就是虚拟化技术。

现在已经有了很多虚拟化基础来对物理机的资源进行切分,有一些需要专门的硬件支持,有一些则不能支持现在商用的操作系统,有一些为了保证100%的二进制兼容性而牺牲了性能,其他则有一部分牺牲了安全性等。市面上很少能提供资源隔离或性能的保证,大部分只是尽力而为并冒着拒绝服务的风险。

那将一台物理机的资源进行分割来运行多个操作系统真的有那么难吗?它有一下几个难点:

  1. 虚拟机之前要保证相互隔离,这个隔离是指一个虚拟机在执行程序时不应该影响到其他的虚拟机的性能。
  2. 要支持不同类型的操作系统,因为不同的应用适用的操作系统可能不同。
  3. 由于虚拟化导致的额外性能开销要足够的小

基于以上的背景,本文提出了Xen,它是一种X86架构下的虚拟机监视器,它允许多个商用操作系统在不牺牲性能和功能的前提下以一种安全并且资源可控的方式来共享硬件资源。Xen的目标是在现代服务器上支持100台虚拟机同时在线。

Xen没有采用全虚拟化(Full Virtualization),而是采用了半虚拟化(Paravirtualization)的方式,这种方式要求对guest OS(运行在Xen上的操作系统)进行一些修改。

以下是几条设计的原则:

  1. 支持未经修改的应用程序,因此需要对现有的ABI(Application Binary Interface)需要的功能进行虚拟化。
  2. 支持完全多任务系统
  3. 半虚拟化,这有助于获得很高的性能和很强的资源隔离。
  4. 隐藏资源虚拟化带来的影响。


这里写图片描述

上图是Xen的结构图。它的核心思想就是,对原有的系统结构加入了一个抽象层。它分为三层,从底层到上层分别是物理层、Xen Hypervisor、操作系统实例层。物理层是计算机的硬件,包括CPU、网卡、物理内存等;Xen Hypervisor层负责为上层的操作系统提供虚拟化的硬件资源,并对硬件资源进行管理和分配;Xen之上就是各个操作系统的实例,最左边的OS很特殊,在启动Xen的时候,最左边的OS则自动被启动,称其为Domain0,其中运行着Xen Control Software,它控制着各个OS的启动、终止和监控。