(计算机软件与理论专业论文)硬件虚拟机的域间通讯和性能模型研究.pdf_第1页
(计算机软件与理论专业论文)硬件虚拟机的域间通讯和性能模型研究.pdf_第2页
(计算机软件与理论专业论文)硬件虚拟机的域间通讯和性能模型研究.pdf_第3页
(计算机软件与理论专业论文)硬件虚拟机的域间通讯和性能模型研究.pdf_第4页
(计算机软件与理论专业论文)硬件虚拟机的域间通讯和性能模型研究.pdf_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华 中 科 技 大 学 硕 士 学 位 论 文 i 摘 要 随着虚拟化技术的复兴,硬件辅助虚拟化技术应运而生。采用 intel vt 和 amd svm 技术的硬件虚拟机可以直接运行现有的操作系统,但是必须通过软件模拟真实 物理设备的方式来处理硬件虚拟机中的 i/o 操作。这不仅使硬件虚拟机中的 i/o 处理 非常复杂,同时也为研究硬件虚拟机的 i/o 性能提出了很大的挑战。 研究选用剑桥大学研发的 xen 虚拟机监视器作为平台, 对比分析了半虚拟化虚拟 机和硬件虚拟机的域间通讯机制和 i/o 设备模型。论文给出将半虚拟化下的域间通讯 机制引入硬件虚拟机中的实现方法以提高硬件虚拟机的 i/o 性能。实验证明,这种方 法可以将硬件虚拟机中 web 服务器的最大吞吐率提高 6.7 倍, 同时比软件模拟的方式 节约了 50%以上的物理 cpu 资源。 采用硬件辅助虚拟化的计算机系统中,计算机的体系结构和工作方式发生了很大 的改变。建立一个有效的性能模型有利于进一步的分析和研究硬件虚拟机。通过对硬 件虚拟机 i/o 设备模型的分析,并结合计算机系统中常用的队列网络模型,给出了硬 件虚拟机的性能模型和量化分析方法。同时,以硬件虚拟机中 web 服务器为例,通过 实验数据分析了不同配置下硬件虚拟机的性能瓶颈。 通过应用硬件虚拟机的性能模型, 给出了硬件虚拟机中 web 服务器的性能调整策 略。在指定服务等级协议的情况下,该策略为硬件虚拟机分配适量的计算资源。实验 表明,在保证服务质量前提下,该策略可以将 cpu 资源的分配误差控制在 10%以内, 从而节约了大量的物理资源。 关键词:虚拟化,半虚拟化,硬件虚拟机,队列网络模型,性能调整 华 中 科 技 大 学 硕 士 学 位 论 文 ii abstract with the resurgence of virtualization technology, hardware-assisted virtualization technique was invented and widely used. with the support of intel vt or amd svm, a host machine can harbor multiple guest operating systems, which are called hardware-assited virtual machince (i.e., hvm for short), without the revisions conducted by para-virtualization technique. however, the i/o devices of the hvms are emulated, which makes i/o processing complicated, and places a big challenge for research on improving the i/o performance of hvm. we choose xen which is developed by university of cambridge as the research platform. the thesis compares the mechanism of inter-domain communication and i/o device model of para-virtualized (i.e. pv in short) guests with hvm guests. in order to improve the i/o performance of hvm, we give an approach that improves the i/o performance by introducing the i/o handling model of pv guests into hvm guests. experiments show that this approach can improve the i/o performance of hvm by 6.7 times, and save 50% cpu resource compared to the traditional emulated i/o devices. in the hardware-assist virtualized systems, the architecture and operational mode of computer system are changed a lot. therefore, constructing a performance model for such systems is greatly helpful for making further study on hvm guest systems. this thesis gives a performance model and a quantitative approach of hvm which are based on the analysis of i/o device model of hvm by using the queuing network model. moreover,we take web server in hvm as an example, identifying the bottleneck of hvms with different resource allocation mechanisms. with the research on the performance model of hvm and the analysis of performance bottlenecks, we give a policy for performance adjustment. under a given sla (service level agreement), this policy can allocate the appropriate amount of cpu resources to hvm guest systems. the experiment results show that this policy allocates the exact amount of resources that can guarantee the quality of service of the guest systems by a maximum error blow 10%. by this way, it can save a lot of physical resources. key words: virtualization, para-virtualization, hardware-assisted virtual machine, queuing network model, performance adjustment 独创性声明独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研 究成果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集 体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在文中 以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 学位论文作者签名: 日期: 年 月 日 学位论文版权使用授权书学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保 留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本 人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索, 可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 本论文属于 保密,在_年解密后适用本授权书。 不保密。 (请在以上方框内打“”) 学位论文作者签名: 指导教师签名: 日期: 年 月 日 日期: 年 月 日 华 中 科 技 大 学 硕 士 学 位 论 文 1 1 绪 论 本章首先概述了课题的研究背景、目的和意义,然后列举比较了国内外几个具有 代表性的虚拟机系统,介绍了虚拟机的发展状况以及相关技术的研究现状,最后说明 了本文的研究内容。 1.1 课题背景 几十年来,intel 公司始终坚守着摩尔定律,这使得目前的计算系统具有非常强大 的计算能力。然而如何合理利用这些计算资源成为了一个新的课题。据国际数据公司 (idc)的市场调查显示,一个典型 x86 服务器的平均利用率只能达到其自身能力的 10%-15%,一般的组织和公司会采取一个服务器上部署一种应用的方式来避免同一服 务器上多个应用的相互影响,绝大多数的计算资源目前只能处于闲置状态。如果要能 将一台物理主机变成几个独立了计算机使用,这样既可以防止应用的相互影响,又可 以增加了物理硬件资源的利用率。这正是虚拟化技术的核心思想。 其实,自从上世纪六十年代虚拟机的概念就已经存在了。早在 1964 年 ibm 公司 设计了一种名为 cp-40 的新型操作系统,它实现了虚拟内存和虚拟机。在 ibm 公司 随后推出的 system/360 model 671分时共享系统中,允许多个远程用户共享同一高性 能计算设备的使用时间。model 67 与另一个被称为 cp-67 的系统配合使用,以保证使 用一台 360/67 模仿出多台不同型号的计算机。1972 年,ibm 正式发布了用于创建灵 活大型主机的虚拟机技术,该技术可以根据动态的需求快速而有效地使用各种资源。 早期的虚拟化技术主要是为了让用户尽可能充分的利用昂贵的大型机资源。随着技术 的发展和市场竞争的需要,大型机上的技术开始向小型机和 unix2服务器上移植。 ibm、hp 和 sun 后来都将虚拟化技术引入各自的高端 risc 服务器系统中。30 多年 来,虚拟化技术在上述高端产品上的应用日臻成熟。但真正使用大型机和小型机的用 户毕竟还是少数,加上各家产品和技术之间并不兼容,致使虚拟化技术曲高和寡,不 为大多数人所知。当一台普通的 pc 机都拥有强大的计算能力时,人们开始考虑将虚 拟化技术导入用户面更广泛的 x86 平台。 1998 年, 通过运行 windows nt 上的 vmware 来启动 windows 95 的做法让人们惊叹不已, 许多工程人员开始在 pc 和工作站领域运 用这种虚拟方案。 华 中 科 技 大 学 硕 士 学 位 论 文 2 这两年 64 位处理器已经广泛应用,多核 x86 处理器几乎每两个季度就要进行更 新换代,单台 x86 服务器的性能越来越强大,虚拟化已经引起了计算机厂商的关注。 软件方面, xen3、 qemu4,5、 kvm6等开源项目得到快速地发展, vmware、 xensource 等专业虚拟化公司已经推出了较为成熟的企业级虚拟化产品。硬件方面,intel vt7 和 amd svm8相继出现, 在 x86 处理器中内建虚拟化技术, 以实现硬件辅助虚拟化。 如今, 虚拟化技术已经到了一个百花齐放的时代, 计算机领域又面临一个重大的变革。 1.2 国内外研究现状 虚拟化技术发展到今天,已出现了多种基于 x86 虚拟机实现9。广义上,它们都 被称为虚拟计算技术,但在用途、性能等方面都有着很大的区别,同时各种虚拟机也 互相借鉴,取长补短。下面介绍当前比较流行的几种虚拟机,并分析它们所用到的技 术和特点。 1.2.1 bochs bochs 是一个开源的 x86 模拟器10,具有高可移植性。它可以运行在大多数主流 的平台上。 它主要包括 intel x86 cpu, 普通的 i/o 设备, 和 bios 的模拟。 目前, bochs 可以模拟 386、 486、 奔腾/4 或是包括 mmx、 ssex 和 3dnow!指令集的 x86-64 cpu。 在 bochs 中可以运行多数主流的 x86 操作系统, 包括 linux, dos, windows 95/98 和 windows nt/2000/xp,甚至包括新推出的 vista 操作系统。 bochs 使用 c+程序设计语言编写的,它可以在很多不同的主机平台上运行,包 括 x86,powerpc,alpha,sun 和 mips11等。无论何种平台,bochs 都只模拟 x86 平 台。换句话说,它完全不依赖于主机的本地指令集。这既是一个优点也是一个缺点, 同时这也是它和其他虚拟机(plex8612、vmware13等)不同的地方。由于 bochs 采 用了软件模拟每一条x86指令, 因此它可以在alpha或sun工作站上模拟一个windows 应用环境。 然而, bochs 最大的缺点就是模拟执行的性能。 为了精确模拟处理器, bochs 必须执行很多条指令来模拟每一条 x86 指令,因此被模拟的机器比真实的物理机器慢 很多倍,而商业的虚拟机(vmware,virtualpc 等)通过使用虚拟化技术能够达到很 高的性能。 要想在虚拟机中进行操作,bochs 就需要和物理主机上的操作系统交互。当在 bochs 的显示窗口中按下一个键时,这个事件就会传送到模拟的键盘设备模型中。当 华 中 科 技 大 学 硕 士 学 位 论 文 3 模拟的机器需要从模拟硬盘设备中读数据时, bochs 会从主机的磁盘镜像中读取数据。 当模拟的机器需要发送一个网络数据包给本地网络时,bochs 使用物理主机平台的网 卡发送数据包给网络。这些模拟机器和物理主机的交互在不同平台下会变得非常复 杂。 bochs 的 cpu、i/o 设备都是软件模拟实现的,因此模拟机器的计算能力和 i/o 性能在一般的应用中只能达到物理机器的百分之一。但是由于 bochs 的设计初衷是完 全模拟真实硬件,用于调试操作系统,因此性能并不是 bochs 的主要考虑因素。 1.2.2 qemu 在开源软件中,另外一个比较著名的模拟器就是 qemu。它支持两种操作模式: 用户模式模拟和全系统模拟。在用户模拟模式下,qemu 可以在一个 cpu 上启动为另 一种 cpu 编译的进程,或者用来进行跨平台编译和跨平台调试。在后一种模式中, 它可以模拟一套完整的系统,包括处理器和外设。qemu 支持多种处理器架构的模拟, 如 x86,arm,powerpc 和 sparc。 qemu 不像 bochs 那样与 x86 构架密切相关,它采用动态二进制翻译技术来产生 本地代码以取得较为理想的运行速度。在动态翻译过程中,它将装载进来的代码转换 成主机上的指令集合。qemu 的基本思想是将每条指令(例如一条 x86 指令)转换成 多条更简单的指令。每条简单指令都通过一段 c 代码来实现,然后通过相应的工具将 相应的目标文件传给动态代码生成器,由它来把这些简单的指令串接起来完成一项功 能。很多这种类似的技术使得 qemu 能够非常容易的移植到其它平台,而且在保证较 高的性能的同时实现起来相对简单。qemu 使用一个 16mb 大小的“翻译缓冲区” ,在 缓冲区填满后将其清空。它使用一个基本块作为翻译单元。在 x86 模拟器中,对自修 改代码的模拟是一项非常大的挑战。因为,当代码改变时,没有任何信号会来通知应 用程序其指令缓存已经失效。所以,当 qemu 为一个基本块生成翻译代码时,相应的 主机内存页不是只读的话就被设成写保护。这样,如果要对该页进行写操作,linux 就会产生 segv 信号。此时,qemu 就可以使此页中的所有已翻译代码失效,然后赋 予该页写权限以支持自修改代码。 qemu 在处理器模拟方面采用了二进制翻译技术提高了性能,大部分 i/o 设备虚 拟化借鉴了 bochs 的代码。因而在总体性能上 qemu 有很大的提高,约为物理机器的 25%。但是由于 i/o 设备同 bochs 一样采用模拟的方式,单纯就 i/o 设备的性能来说 华 中 科 技 大 学 硕 士 学 位 论 文 4 并不尽如人意。 1.2.3 xen xen 是英国剑桥大学计算机实验室开发的一个虚拟机管理器14(hypervisor) 。它 可以创建多个虚拟机, 每一个虚拟机运行一个操作系统实例。 这些客户操作系统 (guest operating system,简称 guest os)可以是打过补丁的 linux 2.4 或 2.6 版本的内核,也 可以是修改过的 netbsd/freebsd15内核。运行在客户操作系统上的应用程序不需要 做任何修改。 bochs 和 qemu 都是完全虚拟化的模拟器,它们可以运行不经修改的操作系统。 然而采用硬件模拟器这种方式的最大缺点就是低性能。 早期版本的 xen 只支持运行修 改过的操作系统,它只呈现给操作系统一个虚拟设备抽象,与底层硬件相似,但是并 不相同,我们把这种技术称为半虚拟化(para-virtualization,简称 pv) 。随着 intel vt (virtualization technology)技术和 amd svm(secure virtual machine)技术的应用, cpu 已经可以在硬件层辅助进行虚拟化。xen 3.0 以后的版本同时支持半虚拟化和硬 件虚拟化。 通过硬件辅助在 xen 中运行未修改过的操作系统的虚拟机称为硬件虚拟机 (hardware virtual machine,简称 hvm) 。 传统的 x86 处理器有四个特权级,分别是 ring0 到 ring3。通常的操作系统运行 在 ring0,而应用软件运行在 ring3。在半虚拟化的情况下,xen 的虚拟机监视器运行 在 ring0,它可以执行 cpu 的特权指令。而各虚拟域(domain)中运行的操作系统 处于 ring1 级,操作系统中的应用软件仍然处于 ring3 级。 1.2.4 kvm(kernel-based virtual machine) 目前出现的几种虚拟机管理程序(如 xen,vmware) ,它们的产生大多都早于硬 件辅助 x86 虚拟化。随着 intel vt 和 amd svm 技术的出现,设计和实现一个虚拟机 管理程序简单了许多。一般的虚拟机监视器都包括一个软件层,它们执行基本的调度 和内存管理,其实已经有一个成熟的调度和内存管理系统,这就是 linux 内核。 通过在标准 linux 内核中加入虚拟化功能的方式,可以直接享用那些在 linux 内 核中已经非常成熟的技术,并把这些好处带到虚拟执行环境之中。在这个模型下,每 一个虚拟机都是一个普通的 linux 进程,它们由标准的 linux 调度器16,17执行调度。 它的内存由 linux 内存分配器进行分配。一般的 linux 进程包括两种执行模式:用户 华 中 科 技 大 学 硕 士 学 位 论 文 5 模式和内核模式。kvm 加了第三种模式:客户模式(guest mode) ,这种模式本身包 括用户和内核两种模式,不同模式的分工如下。 1. 客户模式:执行非 i/o 客户代码。 2. 内核模式:可以切换到客户模式,以及处理有 i/o 和其他特殊指令引起的从客 户模式退出。 3. 用户模式:代表客户执行 i/o 指令。 通过集成到内核中,kvm 虚拟机管理器可以自动的跟踪最新的硬件而且不需要 做更多的努力就可以具有很高的可伸缩性。 kvm 采用了硬件虚拟化技术,虚拟机中的指令可以直接运行在处理器中,这减 少了 cpu 虚拟化的开销。 但是 i/o 设备虚拟化目前还没有得到硬件的直接支持, kvm 采用了 qemu 的代码来处理 i/o 设备虚拟化,因此 i/o 性能并没有很大的提高。 1.3 论文研究内容 虚拟化领域涉及到计算资源的虚拟化,i/o 设备的虚拟化18,19以及整个虚拟计算 系统的管理20,资源分配等多个方面。论文主要关注采用 intel vt 技术和 amd svm 技术辅助的硬件虚拟化技术。论文主要讨论了硬件虚拟机(hvm)的域间通讯机制、 硬件虚拟机的性能模型和性能瓶颈分析以及基于硬件虚拟机的 web 服务器的性能调 整策略。 1. 硬件虚拟机的域间通讯机制 在 xen 中,采用半虚拟化的技术可以将虚拟机的性能大大提高,研究表明半虚拟 化虚拟机的性能损耗在 10%以内。半虚拟化技术并不是完美的,它最大的缺点就是需 要运行一个修改过的客户操作系统(guest os) 。由于 linux 操作系统是开源软件,可 以方便的获得源码,从而修改为可以在 xen 中运行的操作系统以实现半虚拟化。但是 现在广泛应用的许多操作系统并不都是开源软件,如微软的 windows 系列操作系统、 苹果的 mac os 以及一些商用的 unix 操作系统, 这样就没有办法让它们使用半虚拟化 技术。为了直接运行现有的操作系统,研究硬件虚拟机变得十分重要。目前硬件虚拟 机的 i/o 设备大多采用的软件模拟的做法,例如 xen 中的硬件虚拟机就需要在特权域 (domain 0,简称 dom0)中运行 qemu-dm 进程来模拟真实 i/o 设备。该进程采用了 qemu 中的 i/o 设备模型,但是这样做最大的问题就是低效。于是,一个折中的解决 方案就是通过在未修改的操作系统中添加补丁或驱动程序来实现半虚拟化的机制。如 华 中 科 技 大 学 硕 士 学 位 论 文 6 何解决这个问题便是论文的研究内容之一。 2. 硬件虚拟机的性能模型 xen 的半虚拟化机制已经日益完善,性能已经接近极限,但是硬件虚拟化技术才 刚刚开始。采用硬件辅助虚拟化技术后,虚拟机的体系结构和处理方式发生了很大的 改变,为了深入研究和量化分析,建立基于硬件虚拟机的性能模型是十分必要的21。 队列网络模型22,23是计算机系统的常用模型,结合虚拟机的工作原理建立基于虚拟环 境下的队列网络模型可以方便方便今后的研究24,25。由于 pv 下采用硬件抽象的设计 方法,在 pv 下的虚拟机,结构相对简单。在 hvm 中,复杂的结构和工作流程对建 立一个有效的性能模型增加了不少难度。 3. 基于硬件虚拟机 web 服务器的性能分析 为了进一步研究 hvm 的 i/o 性能,论文以基于 hvm 的 web 服务器作为研究实 例。在基于 hvm 的 web 服务器中,由于 i/o 操作复杂,dom0 的资源和 hvm 的资 源都会成为 hvm 下 web 服务器的瓶颈。 通过在不同负载和不同资源分配情况下的实 验数据分析,可以分析出 hvm 的性能瓶颈所在,同时对 hvm 的资源调整情况和资 源分配情况提出合理建议。 4. 基于硬件虚拟机的 web 服务器性能调整策略 针对 hvm web 服务器的资源调整可以更加合理的使用物理机器的资源,这也是 虚拟化的重大意义所在。论文根据 hvm 的性能模型探索了 hvm 中 web 服务器的资 源调整策略。 1.4 论文组织结构 本文分为五章,内容安排如下: 第 1 章概述了虚拟化技术产生的背景、发展历程及其意义,然后列举了目前几个 具有代表性的虚拟机管理系统,分析了它们的特点和基本原理,同时指出了本文的研 究方向,最后简要介绍了论文的研究内容和要解决的问题。 第 2 章介绍了 pv 和 hvm 的域间通讯机制和设备模型,同时详细分析了 hvm 中 i/o 操作的处理流程。为了提高 hvm 的 i/o 性能,将 pv 的 i/o 机制引入 hvm 中 当中,以实现半虚拟化的设备模型,并对其性能进行测试。 第 3 章首先介绍了计算机系统中常用的队列网络模型。通过分析 hvm 的工作机 制,并结合队列网络模型,论文给出了基于 hvm 的队列网络模型和量化计算方法。 华 中 科 技 大 学 硕 士 学 位 论 文 7 同时,以 hvm 中 web 服务器为例,通过大量实验数据分析了在不同资源配置情况下 hvm 的性能瓶颈。 第 4 章描述了目前硬件虚拟机中的资源调整方法,同时结合队列网络模型的计算 方法, 给出了一个基于硬件虚拟机的 web 服务器资源调整方法。 使用该策略可以在保 证服务质量的前提下,为 hvm 分配最少的资源,以达到节约硬件资源的目的。 第 5 章对全文进行总结并展望了未来工作。最后是致谢和参考文献。 华 中 科 技 大 学 硕 士 学 位 论 文 8 2 硬件虚拟机的域间通信机制 本章介绍了 xen 中 pv 和 hvm 的域间通讯机制和设备模型。由于 hvm 采用设 备模拟的方式处理虚拟机中的 i/o 操作,因而性能较差。本章通过将半虚拟化 i/o 机 制引入 hvm 的方法提高 hvm 的 i/o 性能,并测试比较了性能差异。 2.1 半虚拟化的域间通信机制与设备模型 2.1.1 半虚拟化的体系结构 半虚拟化(para-virtualization,简称 pv)是 denali26最早引进的一个概念,剑桥 大学计算机系统研究组开发的 xen 采用半虚拟化技术来运行完整的操作系统27。 在虚 拟化的体系结构中,原则上要求在操作系统的下面插入一层,这就是虚拟机管理器。 这和传统的做法,即把操作系统作为系统的最底层具有最大的特权是不同的。为了保 护虚拟机管理器不会因为操作系统而产生误操作,通过修改客户操作系统使它处于低 于虚拟机管理器的特权级。 图 2.1 传统操作系统和 xen 的特权级 x86 处理器在硬件上支持四个不同的特权级,因而它有足够的特权级进行有效的 虚拟化。 x86 处理器的特权级一般称作环 (ring) , 四个特权级依次编号为 0 到 3, ring0 具有最大特权,ring3 具有最小的特权。图 2.1 展示了每一个特权级在普通操作系统 华 中 科 技 大 学 硕 士 学 位 论 文 9 和虚拟化系统中的对比情况。传统情况下,操作系统运行在 ring0 上,因为没有其它 特权级可以运行特权指令,而应用程序运行在 ring3 上。一般情况下,ring1 和 ring2 不被用到。任何遵循这种特权级安排的操作系统都可以被移植到 xen 中,把这样的操 作系统从 ring0 移到 ring1,同时将 xen 置于 ring0 上。应用程序仍然运行在 ring3 上,虚拟机管理器在 ring0 上处理特权指令。 图 2.2 半虚拟化下 xen 的结构 图 2.2 展示了半虚拟化下 xen 的体系结构。 虚拟机监视器直接运行于硬件层之上, 它管理物理机器的硬件设备。同时虚拟机监视器对上层的各个虚拟域中的虚拟机提供 服务,为它们分配物理资源。虚拟机通过 xen 中提供的硬件抽象和设备驱动的前后端 机制来访问硬件,以实现 i/o 操作。 2.1.2 半虚拟化的域间通讯机制 半虚拟化体系结构中,通过两种机制实现 xen 和虚拟域之间的控制交互:使用超 级调用(hypercall)来实现虚拟域到 xen 的同步调用;使用事件(event)机制来实现 虚拟域和 xen 之间异步通知。 通过使用超级调用,虚拟域可以执行一个同步的软件陷入(trap) ,陷入到虚拟 机管理器中来执行一个特权操作,这相当于传统的操作系统中的系统调用(system call) 。一个典型的例子就是使用超级调用请求更新页表,在虚拟域执行超级调用后, xen 执行更新页表操作,结束后返回到执行该超级调用的虚拟域中。linux 操作系统 中使用 int 0 x80 作为系统调用指令,在 xen 中使用 int 0 x82 来实现超级调用。超级调 用的具体功能识别号由寄存器 eax 表明,而其它参数分别在寄存器 ebx、ecx、edx、 华 中 科 技 大 学 硕 士 学 位 论 文 10 esi 和 edi 中。 图 2.3 显示了在本地操作系统中和 xen 虚拟化系统中的特权级转换。在本地操作 系统中,当应用程序执行一个系统调用时,处理器由 ring3 切换到 ring0。而在 xen 中,应用程序执行一个系统调用,首先要切换到 ring0 由虚拟机管理器截获中断,然 后再切换到 ring1 将它传递给客户操作系统。在半虚拟化结构中,只有 ring1 中的程 序才能调用超级调用,这样可以防止处于 ring3 的应用程序错误调用而导致的系统崩 溃。客户操作系统在执行超级调用时,需要从 ring1 切换到 ring0 由 xen 处理。可以 看出在使用 xen 虚拟化的系统中特权级的切换非常频繁,这会造成一定的性能损耗。 为了降低性能损耗,xen 实现了对超级调用的批量处理,每次将几个超级调用请求放 在一个列表中用 do_multicall_call( )来完成所有请求。 图 2.3 传统操作系统的系统调用和 xen 中的超级调用 xen 与虚拟域之间,虚拟域与虚拟域之间通过异步事件机制来实现通讯,它取代 了硬件设备的中断发送机制。例如当终止一个虚拟域时,通过发送一个轻量级的事件 通知 xen。每一个发送出的事件称为悬挂事件,所有悬挂事件存储在虚拟域的位掩码 (bitmask)中,它们由 xen 在调用客户操作系统指定的事件回调处理函数之前更新。 回调处理函数负责重置悬挂的事件,以及用合适的方式响应事件通知。一个虚拟域可 以通过设置一个 xen 只读的标记来推迟事件处理,这就相当于真实处理器的中断屏 蔽。 其实 xen 中的事件机制和 unix 操作系统中的信号非常相似。unix 操作系统中, 华 中 科 技 大 学 硕 士 学 位 论 文 11 需要为每一个信号设置一个处理函数。允许某一程序发送一个信号通知某个事件已经 发生,发送信号的程序可以是操作系统内核或其它应用程序。在 xen 中,客户操作系 统首先要注册一个回调用于事件发送。当事件被发送到客户操作系统时,会设置相应 的标记来指示事件已经出现。如果事件被屏蔽,这些标记就会在以后的检查中使用; 如果没有屏蔽,事件就会被异步发送。 在 xen 中,不仅需要轻量级异步事件机制,同时还需要能够高效的域间数据传输 和共享机制14。在 unix 操作系统中,有管道、消息队列、共享内存等机制来实现进 程间通讯。在 xen 中,通过采用共享内存来进行数据传递。xen 支持对内存页的两种 基本域间操作:共享和传输。共享页的内容可以被其他虚拟域访问,页传输提供了粗 粒度的信息传递机制。 实验显示页传输机制并不像想象的那么有用。早期网络设备驱动使用传输机制在 不同虚拟域的缓冲区间传送数据包。这导致页表操作的代价十分昂贵,而这种机制所 获得的性能提高也被高昂的代价遮掩住了。 新版本的 xen 实现了一种由虚拟机管理器 驱动的拷贝操作将其取而代之。由于虚拟机管理器拥有所有物理内存的映射关系,它 允许数据在不修改页表的情况下进行域间拷贝。这大大提高了域间传输数据的效率。 图 2.4 展示异步 i/o 环的结构,它用来处理 xen 和客户操作系统之间的数据传输。 图 2.4 i/o 环 i/o 环是一个描述符的循环队列,每一个描述符由一个虚拟域分配,但是它可以 被 xen 访问。描述符中并不直接包含数据。i/o 数据缓冲区是由客户操作系统分配的, 它由 i/o 描述符间接引用。根据两对生产者-消费者指针对 i/o 环进行访问:虚拟域在 产生请求 由 guest 修改 与 xen 共享 接收响应 guest 私有指针 接受请求 xen 私有指针 产生响应 由 xen 修改 与 guest 共享 华 中 科 技 大 学 硕 士 学 位 论 文 12 环上放置一个请求,请求生产者指针就向前移动一步;xen 来接收这些请求使它们等 待处理,相应的请求消费者指针就向前移动。响应也以同样的方式放置在环上,而这 次 xen 成了生产者,客户操作系统是消费者。 表 2.1 unix 和 xen 基本机制的对比 unix xen 系统调用 超级调用 信号 事件机制 posix 共享内存 授权表 表 2.1 列举了本节描述的 xen 的基本机制和 unix 操作系统系统中相似机制的对 比情况。在虚拟化系统中,虚拟机监视器在操作系统底层管理硬件,同时协调每一个 虚拟域的工作, 就像操作系统协调每一个进程一样, 它们的基本原理和机制是相似的。 2.1.3 半虚拟化的设备驱动模型 对于 i/o 设备的虚拟,半虚拟化采用一套通用简单的协议实现虚拟机中的 i/o 设 备和本地物理 i/o 设备高效的交互28。虚拟块设备(virtual block device,简称 vbd) 和虚拟网络接口(virtual network interface,简称 vif)就是采用这种方法可以提供接 近物理设备的性能。xen 半虚拟化的设备驱动模型是超级调用、事件通道、授权表等 机制的综合运用。 图 2.5 半虚拟化的设备驱动模型 华 中 科 技 大 学 硕 士 学 位 论 文 13 图 2.5 展示了半虚拟化下设备驱动模型的结构。在 xen 中的设备驱动被分为前后 端两个部分:一部分位于特权虚拟域中来处理物理设备,这部分称为后端;另一部分 位于非特权虚拟域作为后端的一个代理,称为前端。半虚拟化的设备驱动模型可以看 成是四个部分:驱动前端,驱动后端,非特权域内核设备层和特权域内核设备层。前 端和后端通过 xenbus 通讯,非特权域的内核设备层与特权域的内核设备层通过前后 端完成交互。为了在前后端之间建立通讯,一些参数需要在特权虚拟域和非特权虚拟 域之间传送。这些参数跟前后端设备密切相关,有些也是通用的,它们使用 xenstore 传送。为了创建一个设备连接,虚拟机控制进程(xend)需要将前后端的具体信息写 到 xenstore 中,这些详细信息在实例化 xenbus 时使用。 图 2.6 半虚拟化设备驱动的初始化 图 2.6 展示了一个半虚拟化块设备初始化的流程。首先两端对称的各自调用 xenbus_probe( )来探测对方,读取对端信息。后端触发热插拔子系统,来初始化物理 设备为在线状态。之后,blkfront/blkback probe( )被调用,它们执行了针对块设备的初 始化。当这个完成之后,前端和后端便处于不同的状态。blkback 在 xenstore 上创建 一个观察点,等待热插拔脚本执行完毕,然后切换到初始化等待(initwait)状态。前 端创建与后端共享的 i/o 环缓冲区和事件通道,将这些信息写到 xenstore 之中,然后 进行初始化 进行初始化 xenbus 后端 初始化等待 已连接 已连接 写 i/o 环、 事 件通道详细 信息 初始化完成 xenbus 前端 热插拔 写设备详 细信息 写设备详 细信息 华 中 科 技 大 学 硕 士 学 位 论 文 14 切换到已初始化(initialised)状态。当 blkback 从热插拔脚本中收到物理设备的详细 信息后,它创建一个与内核设备层的连接。当收到从前端来的 i/o 环缓冲区的详细信 息后,它映射到这个连接上。这些都执行完毕后后端将物理设备的详细信息写入 xenstore,供前端使用,然后切换到连接状态。前端看到后端切换到连接状态就会去 读取物理设备信息,把它连接到自己的内核设备层上,然后也切换到连接状态。此时 一个虚拟设备的前后端驱动就完全初始化完成了。 前后端驱动连接完成了,它们就可以正常工作了。下面以网络设备模型为例,描 述在虚拟机中的是如何与外界进行网络数据传送的。图 2.7 展示了 domu 中的应用程 序发送一个网络数据的过程。 图 2.7 半虚拟化网络数据传输 当在客户操作系统中发送一个网络数据包时,客户操作系统首先通过前端。前端 将数据包放置在 i/o 环中,同时发送一个事件给后端。当后端处理该事件时,它通过 共享内存就能够读取到前端的网络数据。这里跨虚拟域传输数据采用了 i/o 环(i/o ring)共享机制,并没有进行数据的拷贝,这也是半虚拟化具有高性能的原因之一。 后端处理前端发送数据的请求之后,就把数据交给了真实物理网卡的设备驱动。物理 设备驱动通过物理网卡将数据发送到网络中,数据发送完成之后 dom0 按照相反的路 径向虚拟机发送一个事件通知,虚拟机接收到事件通知后整个网络数据的发送过程完 成。 修改的客户 操作系统 修改的客户 操作系统 应用程序 本地驱动 后 端 前 端 非特权域 特权域 i/o 环 事件通道 华 中 科 技 大 学 硕 士 学 位 论 文 15 2.2 硬件虚拟机的设备模型 通过使用 intel vt 和 amd svm 技术,xen 可以支持未经修改的操作系统,这称 作硬件虚拟机(hardware virtual machine,简称 hvm) 。在 hvm 中,由于处理器内置 虚拟化扩展指令,处理器的虚拟化变得相对容易,但是 i/o 虚拟化还没有成熟的硬件 辅助技术。因此 hvm 的 i/o 设备仍然采用模拟的方式进行。xen 采用了 qemu 的代 码来进行 hvm 的 i/o 设备模拟。 图 2.8 硬件虚拟机的设备模型 图 2.8 展示了硬件虚拟机的设备模型。在硬件虚拟机中,客户操作系统和客户操 作系统中的驱动程序都是没有经过修改的,在它们看来在虚拟机和一台真实的物理机 器是一样的。在特权虚拟域中,运行 qemu-dm 进程来模拟真实设备。qemu-dm 去掉 了 qemu 中 cpu 模拟部分,同时将 qemu 中的分配内存改为内存映射的方式。硬件虚 拟机运行在处理器的非根模式(non-root) ,dom0 和 xen 运行在根模式(root) 。运行 在根模式下和运行在传统的处理器上没有什么区别。 每当硬件虚拟机进行 i/o 操作时, 虚拟机便会执行 vmexit 从非根模式切换到根模式。然后将 i/o 指令通过 xen 传送 给 qemu-dm,qemu-dm 模拟执行 i/o 指令,最终通过 dom0 的本地设备驱动处理。 一个完整的硬件虚拟机 i/o 处理需要进行若干 cpu 模式切换和特权级转换。 首先 是 hvm 到 xen 需要进行特权级转换,同时进行非根模式到根模式的切换。然后从 xen 到 dom0 同样需要特权级转换。由于 qemu-dm 是一个用户进程,因此 i/o 指令需 要在内核和用户进程间进程切换。 同样在 qemu-dm 通过本地设备驱动时, 需要从用户 进程切换回内核。大量 cpu 的特权级转换和模式切换导致 cpu 在处理硬件虚拟机的 华 中 科 技 大 学 硕 士 学 位 论 文 16 i/o 指令时产生很大的性能损耗。 2.3 在硬件虚拟机中实现半虚拟化 i/o 2.3.1 hvm 中的半虚拟化 i/o 实现原理 半虚拟化具有高性能的优点,但是需要修改客户操作系统,这很难应用于一些商 业非开源的操作系统中。采用硬件辅助虚拟化技术后,虚拟机可以运行未修改的操作 系统,但是由于采用 i/o 设备模拟方法,因而性能较差。大多数的操作系统即使非开 源但都会提供编写驱动的接口,如果将半虚拟化的设备驱动移植到硬件虚拟机上将是 一个很好的解决方案。 半虚拟化 i/o 的基础是事件通道、授权表等域间通讯机制。这些机制在底层是通 过超级调用实现的。xen 中的超级调用需要触发 int 0 x82 中断,然后由 xen 处理,这 只损耗很少的资源29,30。 但是硬件虚拟机的操作系统是运行在非根模式的特权级 0 下, 如果在硬件虚拟机中触发 int 0 x82 并不会由虚拟机管理器截获直接处理,而是像正常 操作系统一样,由客户操作系统内核处理这个中断。因此要在硬件虚拟机中实现半虚 拟化 i/o 机制,首先要使硬件虚拟机能够像半虚拟化的客户操作系统一样执行超级调 用。 由硬件虚拟机引起的超级调用和半虚拟化有所不同。一个半虚拟化客户操作系统 指定 elf 头中超级调用页应该载入的位置。 但是在硬件虚拟机中指定这个位置是不可 能的。hvm 中操作系统和运行在本地主机的操作系统没有区别,但是为了使用超级 调用需要让它感知到自己运行在 xen 中。 客户操作系统在运行时决断是否运行在 xen 下,然后取得超级调用页的位置。如何知道客户操作系统是否运行在 xen 下,通过使 用 cpuid 这个指令来处理。如果把寄存器 eax 设置为 0,cpuid 指令将把供应商 id 字符串xenvmmxenvmm返回到 ebx、ecx 和 edx 中。如果把 eax 的值设置为 0 x40000000,它将被用于探测是否在 xen 系统中。 在硬件虚拟机中的超级调用实现起来和半虚拟化也是不同的。含有硬件虚拟化技 术的 cpu 提供了虚拟化扩展指令,这些指令用来在虚拟机和虚拟机管理器之间切换。 在硬件虚拟机中虽然不能使用中断触发超级调用,但是可以通过一条特有的指令 vmexit 来实现。 vmexit 指令将处理器从非根模式切换到根模式, 在硬件虚拟机中 很多原因都可以触发 vmexit。在虚拟机管理器的 vmexit 处理函数中,通过寄存 华 中 科 技 大 学 硕 士 学 位 论 文 17 器中的数据分析引起 vmexit 的原因。exit_reasion_vmcall 表示由超级调用 引起的 vmexit,通过从寄存器中指定偏移来确定超级调用的种类。通过这种方法超 级调用就可以在 hvm 中使用了,但是并不是所有半虚拟化支持的超级调用硬件虚拟 机都支持,目前只有六种基本的超级调用可以在硬件虚拟机中使用,其中包括授权表 和事件通道所需的超级调用。 在半虚拟化大多数设备的设置都是依赖 xenstore,所以 xenstore 必须被安装的。 xenstore 的建立通常需要使用开始信息页(start info page)的信息。在硬件虚拟机中, 没有开始信息页。解决这个问题的方法是使用 hypervisor_hvm_op 超级调用的 hvmop_get_param 命令。 另外一个问题是硬件虚拟机不能为事件发送注册回调。 它使用一个虚拟的 pci 设 备和虚拟机管理器通讯。每当有事件准备发送时,这个设备就产生一个中断,这个中 断由客户操作系统定义。 一个半虚拟化的客户操作系统在伪物理地址空间的开始包含共享信息页。在硬件 虚拟机中的伪物理地址空间中不包含共享信息页。为了在 hvm 中实现与共享

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论