虚拟化技术展望
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
虚拟化技术的类型 现在不只存在一种虚拟化技术。 事实上有多种方法可以使用不同层次的抽象来实现 同样的结果。 本章介绍Linux上三种最常用虚拟化技术的优点和弱点。 业届有时使用不 同的术语来描述同一个虚拟化技术。 虚拟化技术和游戏 一篇虚拟化技术的文章如果没有提到复合式大型电玩模拟器(MAME)就不是一篇完整的 文章。 MAME, 就如名字一样, 是一个能够模拟以往arcade游戏的机器模拟器(全部)。 做 一个补充, 整个机器是被虚拟的, 包括声音和图形还有控制硬件。 MAME是一个非常棒的 应用程序, 你也可以通过仔细阅读源码来了解它是如何实现的。 硬件模拟器 无可否认, 最复杂的虚拟化技术是硬件模拟器。 在这个方法中, 首先在主机系统上 创建硬件VM, 然后模拟硬件的功能, 如图1显示: 图1。 硬件模拟器: 使用VM模拟需要的硬件 硬件模拟器的主要问题是速度极慢。 因为每一个指令在底层硬件都需模拟, 所以速 度慢了100倍,高保真模拟还包含了循环校验, 用于模拟CPU的管道和缓存行为, 实际速度 会慢了1000倍。 硬件模拟有自己的优点。 比如, 使用硬件模拟, 你能够在基于ARM处理器的主机上模 拟运行基于PowerPC未经任何修改的操作系统。 你甚至能在每个不同模拟处理器上运行多 个虚拟机。 硬件模拟器最有意思的一个应用是firmware(固件)和硬件协作开发。 firmware开发 人员无需等待最新硬件的推出, 他们可以使用目标硬件的虚拟机来验证实际代码中的许多
当代虚拟化技术和产品介绍 获得产品和技术 Bochs和QEMU: 是PC模拟器,允许如Windows或Linux运行在linux操作系统的用户空间。 VMware: 是一个流行的全虚拟化解决方案, 能够虚拟无需修改的操作系统。 z/VM: 是一个最新的基于64位z/架构的虚拟机操作系统。 z/VM提供全虚拟化和支持大多的 操作系统, 包括Linux。Xen: 是一个开源的半虚拟化解决方案, 需修改客户机的操作系统, 通过与hypervisor的协 作能获得接近于原始系统的性能。 User-mode Linux: 是另外一个开源的半虚拟化解决方案。 每一个客户操作系统是主机操作系统的一个 标准进程。 coLinux, 或协作Linux: 是一个提供两个操作系统共同分享底层硬件的虚拟化解决方案。 Linux-Vserver: 是一个linux上的操作系统级的虚拟解决方案, 每一个客户服务器都被安全的隔离开 来。 OpenVZ: 是一个操作系统级的虚拟化解决方案, 支持检查点和动态迁移。 Linux KVM: 是第一个整合到Linux主线内核的虚拟化技术。 Linux内核在载入一个内核可加载模 块(kvm)后, 内核自身成为了一个Hypervisor程序, 如果有合适的Fra Baidu bibliotek件支持(Intel VT或 AMD SVM处理器), 系统可运行未修改过的linux和windows客户机操作系统。
处理器虚拟化 另外一个早期使用的虚拟化技术, 仿真处理器, 也叫做P-code(or pseudo-code)机。 P-code是一种机器语言, 运行在虚拟机上而不是实际的硬件。 知名的P-code语言在1970 年由加州大学圣地亚哥分校的Pascal系统项目组开发。 它可以把Pascal程序编译成Pcode代码, 然后在具有P-code功能的虚拟机上运行。 P-code程序具有高度可移植性, 能 够运行在任何具有P-code功能的虚拟机上。 1960年的BCPL语言(基本组合程序设计语言, Basic Combined Programming Language)也使用了同样的概念, 它是C语言的前身。 编译器首先把BCPL代码编译成一个 中间机器代码: O-code。 然后, O-code被编译成目标机器代码。 P-code模型已被广泛使 用到各种编译器当中, 从而为编译器移植到新的主机架构提供了复杂性。(通过一个中间 语言分成前端和后端)。 Java虚拟机(JVM) Java虚拟机也采用了P-code模型。 从而我们可以简单通过移植JVM程序到新架构的机 器上来广泛发布Java程序。 指令虚拟化 近来频繁出现的虚拟化概念: 指令虚拟化, 也叫做二进制翻译。 在这个模型中, 虚 拟指令被动态翻译成底层硬件的物理指令。 程序执行后, 代码一段一段地被翻译。 如果 出现分支, 一套新的代码指令将被引入和翻译。 这十分类似于缓存操作, 指令块从内存 移动到本地的快速缓存内存中执行。 近来Transmeta公司设计的Crusoe中央处理器使用了该模型。 二进制翻译由Code Morphing专利技术实现。 类似的一个实例, 全虚拟技术通过使用动态生成代码扫描来发 现和重定向特权指令(解决特殊处理指令集中的问题)。
虚拟化技术的应用十分广泛。 当前虚拟化技术主要关注于服务器的虚拟化, 或在单 个主机上寄存多个独立的操作系统。 本文首先介绍虚拟化技术的原理, 然后讨论多个虚 拟化技术的实现方法。 另外介绍一些其它的虚拟化技术, 比如Linux上操作系统级的虚拟 化技术。 虚拟化把事物从一种形式改变为另一种形式。 计算机的虚拟化使单个计算机看起来 像多个计算机或完全不同的计算机。虚拟化技术也可以使多台计算机看起来像一台计算 机。 这叫做服务器聚合(server aggregation)或网格计算(grid computing)。 虚拟化技术的历史。虚拟化技术不是一个新的主题; 实际上, 它已有40年的历史。 最早使用虚拟化技术的是IBM 7044计算机, 它是基于MIT(麻省理工学院)为IBM704计算机 开发的分时系统CTSS(Compatible Time Sharing System), 和曼彻斯特大学的Atlas项目 (世界最早的超级计算机之一), 首次使用了请求调页和系统管理程序调用。 硬件虚拟化 IBM早在1960年就认识到虚拟化技术的重要性, 于是开发了型号为Model 67的 System/360主机。 Model 67主机通过虚拟机监视器(VMM, Virtual Machine Monitor)虚 拟所有的硬件接口。 在早期的计算中, 操作系统被称做Supervisor。 能够运行在其它操 作系统之上的操作系统被称做hypervisor(名称首次出现在1970年)。 VMM直接运行在底层硬件上, 允许执行多个虚拟机(VMs)。 每一个VM(虚拟机)运行自 己的操作系统称为CMS, 或会话监视系统(CMS, Conversational Monitor System)。 然后 VM继续发展。 今天你能够在System z9主机上发现VM, 它能够向后兼容, 甚至是 System/360。
概念。 全虚拟化 全虚拟化(Full virtualization), 也称为原始虚拟化技术, 是另一种虚拟化方法。 该模型使用虚拟机协调客户操作系统和原始硬件(见图2)。 这里"协调"是一个关键词, 因 为VMM在客户操作系统和裸硬件之间用于工作协调。 一些受保护的指令必须由Hypervisor (虚拟机管理程序)来捕获和处理。 因为操作系统是通过Hypervisor来分享底层硬件。 图2。 全虚拟化: 使用Hypervisor分享底层硬件 全虚拟化的运行速度要快于硬件模拟, 但是性能方面不如裸机, 因为Hypervisor需要 占用一些资源。 全虚拟化最大的优点是操作系统没有经过任何修改。 它的唯一限制是操 作系统必须能够支持底层硬件(比如, PowerPC)。一些老的硬件如x86, 全虚拟化遇到了问 题。 比如, 一些敏感的指令需要由VMM来处理(VMM不能设置陷阱)。 因此, Hypervisors 必须动态扫描和捕获特权代码来处理问题。 半虚拟化 半虚拟化(Paravirtualization)是另一种类似于全虚拟化的热门技术。 它也使用 Hypervisor(虚拟机管理程序)分享存取底层的硬件, 但是它的客户操作系统集成了虚拟化 方面的代码。 该方法无需重新编译或引起陷阱, 因为操作系统自身能够与虚拟进程进行 很好的协作。 图3。 半虚拟化: 通过客户操作系统分享进程 半虚拟化需要客户操作系统做一些修改(配合Hypervisor), 这是一个不足之处。 但 是半虚拟化提供了与原始系统相近的性能。 与全虚拟化一样, 半虚拟化可以同时能支持 多个不同的操作系统。 操作系统级的虚拟化 最后一个我们需要了解的虚拟化技术是操作系统级的虚拟化。(Operating systemlevel virtualization), 它使用不同于上面的虚拟化方法。 该技术在操作系统之上虚拟 多个服务器, 支持在单个操作系统上简单隔离每一个虚拟服务器(见图4)。 图4。 操作系统级的虚拟化: 隔离单个服务器 操作系统级的虚拟化需要修改操作系统内核, 它的优点是具有原始主机的性能。
Bochs是一个仿真x86 CPU的计算机模拟器, 它具有可移植性和可运行在多种平台上, 如x86, PowerPC, Alpha, SPARC和MIPS。 Bochs的优点是不仅能模拟处理器, 而且能模拟 整台计算机, 包括外设如键盘, 鼠标, 视屏图像硬件, 网卡等。 Bochs能被配置成一台老的Intel 386计算机, 或更新的处理器如486, Pentium, Pentium Pro, 或64位处理器。 甚至能模拟图形指令如MMX和3DNow。 你也能够通过Bochs模拟器在Linux系统上运行任何Linux发行版, 还有Microsoft? Windows? 95/98/NT/2000(和多种应用程序), 甚至是BSD操作系统(FreeBSD, OpenBSD, 等)。 Wine(库级的虚拟化) 这里没有讨论另一个虚拟化技术, 它通过库来模拟操作系统的一部分。 比如Wine(一 部分为linux开发的win32 API)和LxRun(一部分为Solaris开发的Linux API)。 QEMU(模拟器) QEMU是另一个类似于Bochs的模拟器, 它有一些值得注意的地方。 QEMU支持2个操作 模式: 一个是全系统模拟模式。 该模式类似Bochs模拟整个计算机系统(包括处理器和外 设)。 而且能在合理的速度下使用动态翻译模拟一些处理器架构如X86, X86_64, ARM, SPARC, PowerPC和MIPS。 你还可以在Linux, Solaris和FreeBSD系统上模拟Windows系统 (包括XP)和Linux系统。 QEMU支持其它的操作系统组合。 另一个是 用户模式模拟。 该模式能寄存在Linux上, 不同平台的二进制程序也能运 行。 比如, 一个MIPS平台上的二进制程序能够运行在x86平台上的Linux系统。 其它支持 的平台包括ARM, SPARC和PowerPC, 而且还有更多正在开发的平台。 VMware(全虚拟化) VMware是一个商业级的全虚拟化技术。 Hypervisor是客户操作系统和硬件之间的抽 象层。 该抽象层允许任何其它客户操作系统运行在主机操作系统之上。 VMware也能虚拟I/O硬件, 增加了高性能设备驱动到Hypervisor中。整个虚拟(机)环 境实际上是一个单独的文件, 这意味整个系统(包括客户操作系统, 虚拟机和虚拟硬件)可 以简单快速地整合到一个新的主机, 从而实现负载均衡。 z/VM(全虚拟化) 当IBM System z是一个全新名称的时候, 事实上可以追述到1960年。 System/360在 1965年使用虚拟机方法实现了虚拟技术。 令人感兴趣的是System z能够与最老的 System/360系列主机兼容。 z/VM是System z操作系统的Hypervisor。 核心程序是控制程序(CP), 向客户机操作系统 提供硬件资源虚拟, 包括Linux(见图5)。 允许在多个客户操作系统上虚拟多个处理器和 其它资源。 图5。 使用z/VM的操作系统级虚拟化技术 z/VM可以为那些需要相互通讯的客户操作系统虚拟一个客户局域网(LAN)。 整个客户 局域网位于Hypervisor中, 所以很安全。 Xen(半虚拟化) Xen由XenSource开发, 一个开源免费的操作系统级准虚拟技术。 回顾一下半虚拟技 术, Hypervisor和操作系统共同协作, 虽然操作系统需要做一些修改, 但是性能上比较接 近于原始性能。 Xen需要与系统共同协作(客户操作系统需要修改), 只有打过补丁的系统才能使用 Xen。 从Linux角度来看, Linux本身是开源的, 结果是Xen的性能要好于全虚拟化技术。 但是从系统支持(比如支持其它非开源的操作系统)的角度来看, 这显然是一个不足之处。
Linux相关的虚拟化项目 表1 Linux相关的虚拟化项目(显示了几个加入到Linux kernel的虚拟化技术, 主要关注 于开源)。 CODE: 项目 类型 许可证 Bochs 模拟器 LGPL QEMU 模拟器 LGPL/GPL VMware 全虚拟化 闭源 z/VM 全虚拟化 闭源 Xen 半虚拟化 GPL UML 半虚拟化 GPL Linux-VServer 操作系统级虚拟化 GPL OpenVZ 操作系统级虚拟化 GPL Bochs(模拟器)