论文学习笔记(一): Xen and the Art of Virtualization
原文:Xen and the Art of Virtualization
首先说几个名词解释:
- Xen: 它并不是Virtual Machine(VM),而是Virtual Machine Monitor(VMM),或者叫它supervisor。它是虚拟机的管理者或者监视者,并不是虚拟机本身。
- VMM:管理虚拟机的内存,CPU和各种资源的调度,与实体机交互。
- GuestOS:就是虚拟机,Host是主机
剩下的名词边学边解释。
Abstract:
Xen的优势:可允许多个OS共同分享一个常规的硬件,这里的常规指的是不用经过特殊改造,普通的硬件。这种分享是安全的,资源受管理的,并且不牺牲功能或者性能(在Xen出现以前,其他的VMM要不就不安全,要么就会牺牲功能或性能)。
Introduction:
机器分割实现多系统并发操作有几个难点:(机器分割指CPU、内存等的分块,一部分处理一个VM)
1. VM必须相互隔离:不隔离可能会相互影响,性能、安全性等
2. 不同操作系统都需要支持不同流行应用程序的异构性
3. 虚拟化带来的性能开销很小
Xen实现隔离的方法
整个OS粒度上复用物理资源。
XEN: APPROACH & OVERVIEW
-
x86架构不支持 full virturalization
- 部分超级指令(supervisor instructions)在特权不足时会静默失败,而不会导致陷阱(trap)
- 有效的虚拟化x86的MMU也很困难
- MMU:Memory Management Unit, 内存管理单元
- 上述问题可以被解决,但是要牺牲性能
-
para-virtualization:
- 通过提供与底层硬件相似但不完全相同的虚拟机抽象,解决了full virtualization的问题。
- 不对二进制程序接口(application binary interface ,ABI)进行修改,但是对guestOS进行少许修改
- 设计原则:
- 虚拟化现有标准ABI所需的所有架构功能,以达到对应用程序二进制文件的支持。
- 完整支持多任务操作系统,这可以让单VM实例虚拟化复杂的服务器配置。
- 在x86这种不能协调运行OS的机器架构上,半虚拟化是实现高性能和强隔离的必须条件
- 即使在协作机器架构上,将资源虚拟化的效果完全隐藏在guestOS之外也可能会带来正确性和性能风险。
-
Xen和Denali的区别不表。
x86的半虚拟化接口列表 -
内存管理
- x86没有software TLB(下文称作STLB)
- Translation Lookaside Buffer, 一块用来存放常用页的缓存区,不用再在内存查找常用地址,以此来提升性能 。
- x86通过hardware TLB(下文称作HTLB)遍历页表。由于没有STLB的标记,所以切换地址空间都需要完整刷新HTLB。因此,Xen制定了两个规则:
- 让guestOS管理页表,Xen最小限度的涉及其中,所以能保证安全性和隔离性
- Xen存在于每页地址空间顶部中,因此避免了在进入和离开管理程序时的TLB刷新(用空间换时间的思想)
- 每次guestOS有新的页表处理的时候,大概率都是因为有新的进程出现。guestOS会从自己的内存空间分配并初始化页表,并将他们给Xen保留并注册
- guestOS没有对页表的写权,所有写权需要由Xen认证
- 分段处理也是相似的虚拟化处理 ,它授权段表的更新。
- 段表的优先处理权在Xen之下
- 段表不允许进入Xen保留的内存区域
- x86没有software TLB(下文称作STLB)
-
CPU
- 大部分CPU只支持两个优先级,而x86架构的CPU支持 4个,从0(最高)到3(最低),被称为rings
- 0被hostOS占用
- 3被app占用
- 1,2暂时被空置,所以Xen可以占据1。这样Xen和Apps就相互独立了。
- 错误处理略。核心思想是错误跑出给Xen,Xen处理这些问题。
- 大部分CPU只支持两个优先级,而x86架构的CPU支持 4个,从0(最高)到3(最低),被称为rings
-
I/O处理
- 核心思想是“与硬件中断”相似。给Xen发送非同步消息。
- 非同步消息的频繁唤起会极大的造成资源消耗。
Detailed Design
本文介绍到此为止,更多的详细介绍,比如性能比较,详细设计请参考原文