KVM虚拟化技术:实战与原理解析(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-29 06:21:02

点击下载

作者:任永杰,单海涛

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

KVM虚拟化技术:实战与原理解析

KVM虚拟化技术:实战与原理解析试读:

前言

为什么要写这本书

近几年,云计算大潮风起云涌,Amazon的AWS是公共云计算平台的先驱和领导者,Google的GAE、GCE也取得了一定的成绩,国内大型互联网公司也分别推出自己的云计算服务,如阿里云、腾讯云、盛大云、新浪SAE、百度BAE等。云计算已成为IT技术领域最热门的词汇之一,现在很多互联网服务都声称自己是“云”服务。在云计算发展的大背景下,支撑着云计算服务的最底层、最基础的虚拟化技术也得到了快速发展,成为技术研究和应用的热点之一。

在虚拟化领域也有很多的技术和产品种类,包括传统的老牌虚拟化软件VMware、Microsoft的Hyper-V、Citrix的XenServer/XenClient、Oracle的VirtualBox等,还有在Linux平台上比较流行的开源虚拟化技术KVM、Xen等,甚至包括Linux上的轻量级虚拟化技术LXC。随着Linux服务器广泛地应用在互联网等热门行业,KVM作为Linux内核原生的虚拟化技术受到了开发者和用户广泛的关注,并且已经得到了较大规模的应用,如Google的公有云计算引擎GCE就是在底层完全使用KVM作为虚拟化技术来实现的。

KVM虚拟机最初是由以色列一家创业公司Qumranet员工Avi Kivity等人开发,于2006年8月完全开源并推向Linux内核社区,当年10月被Linux社区接受。2007年2月发布的Linux 2.6.20是第一个带有KVM模块的Linux内核正式发布版本。Red Hat公司于2008年9月正式将Qumranet公司收购,接着投入了较多的资源到KVM虚拟化的开发中。在2010年11月,Red Hat公司发布的RHEL 6中完全用KVM替换了RHEL 5中默认支持的Xen,让KVM成为RHEL操作系统默认的虚拟化方案。

KVM必须依赖CPU提供的硬件虚拟化技术,以Intel、AMD为代表的x86硬件平台在最近几年也推出了很多与虚拟化相关的硬件特性,包括最初基本的CPU的VT支持和EPT、VPID,以及I/O设备的VT-d、SR-IOV,还包括最新的APIC-v、Shadow VMCS等特性。随着x86硬件对虚拟化技术的支持越来越成熟,KVM在最新的硬件平台上的虚拟化效率也得到很大的提高。

除了硬件方面的虚拟化技术逐渐成熟之外,KVM作为Linux内核虚拟机,受到许许多多Linux软件开发者的青睐。Red Hat公司无疑是KVM开发中最大的一股力量,很多Red Hat工程师在KVM、QEMU、libvirt等开源社区中成为核心开发成员。除了Red Hat之外,还有许多知名公司都有不少软件开发者为KVM贡献自己的代码,如IBM、Intel、Novell、AMD、Siemens、华为等。除了这些大公司的开发者之外,还有许多小公司和个人独立开发者活跃在KVM开源社区,为KVM开发代码或者做测试工作。

在硬件方面的虚拟化支持和软件方面的功能开发、性能优化的共同作用下,目前KVM虚拟化技术已经拥有非常丰富的功能和非常优秀的性能。而且,KVM虚拟化的上层应用软件和云计算平台(如libvirt、Ovirt、Virt-Manager、OpenStack等)也是日渐成熟。因此,KVM已经成为个人和企业在进行系统虚拟化或云平台建设的底层虚拟化时一个非常不错的选择。

在2012年,我们接受了机械工业出版社杨福川老师的邀请,决定写一本书来专门介绍KVM虚拟化的功能和原理,经过1年多的精心准备和努力写作,本书终于顺利出版。

本书所有作者在虚拟化技术领域有多年的学习和工作经验,积累了比较丰富的知识和经验。任永杰在2011年年初加入Intel的云计算与虚拟化部门,专注于Linux开源虚拟化的功能测试、性能分析以及与开源社区交流等工作。单海涛于2007年加入Intel虚拟化部门,一直从事KVM、Xen等虚拟化软件的开发及开发团队的管理。本书内容由任永杰统筹规划,单海涛编写了本书的第1、2两章,其余的第3至9章由任永杰编写。

在国内,本书是目前唯一一本专门介绍KVM虚拟化技术的书籍,而且在英文书籍中也没有任何一本书是在专门介绍KVM技术。本书可以让大家对Linux内核虚拟机——KVM的原理、技术、功能和性能有较为详细的了解,也希望能通过本书让更多的读者在学习和工作中实际应用KVM虚拟化技术,并且能够参与到Linux、KVM、QEMU等开源社区中去。

读者对象

本书适合对Linux下虚拟化或云计算基础技术感兴趣的读者,包括Linux运维工程师、KVM开发者、云平台开发者、虚拟化方案决策者、KVM的用户以及其他对KVM虚拟机感兴趣的计算机爱好者。希望本书对这些读者了解KVM提供以下帮助。

❑运维工程师:了解KVM的使用方法、功能和基本的性能数据,能够搭建高性能的KVM虚拟化系统并将其应用于生产环境中。

❑KVM开发者:了解KVM的基本原理和功能,了解其基本用法和一些调试方法,以及如何参与到KVM开源社区中去贡献代码。

❑云平台开发者:了解底层KVM虚拟化的基本原理和用法,以促进云平台上层应用的开发和调试的效率。

❑虚拟化方案决策者:了解KVM的硬件环境需求和它的功能、性能概况,以便在虚拟化技术选型时做出最优化的决策。

❑普通用户:了解KVM的功能和如何使用KVM,用KVM虚拟化技术来促进相应的学习、开发和测试。

如何阅读本书

本书分为9章,具体介绍如下内容:

第1章简单介绍了云计算的概念和技术,然后简单介绍了目前比较流行的包括KVM在内的几种虚拟化技术。

第2章简单介绍了Linux的基本历史、KVM的基本架构、QEMU的作用以及Intel的硬件虚拟化技术概况。

第3章详细介绍了KVM依赖的硬件环境配置、编译以及安装KVM和QEMU的步骤与方法,最后演示了如何启动一个KVM客户机。

第4章详细介绍了客户机系统的CPU、内存、存储、网络、图形显示等方面的配置和基本原理,以及CPU和内存的过载使用。

第5章详细介绍了除了第4章的基础功能之外的高级功能,包括半虚拟化驱动virtio、设备直接分配VT-d、热插拔、动态迁移、嵌套虚拟化、KSM、透明大页、KVM安全技术、QEMU监控器、QEMU命令行参数以及从物理机或其他虚拟机迁移到KVM的方法。在介绍每个功能时,都尽量对其背后的原理和技术做了简单的介绍。

第6章介绍了管理KVM虚拟化的上层软件,包括libvirt、virt-manager、virt-viewer、virt-install以及OpenStack云计算平台。

第7章分别介绍了RHEL、Fedora、SLES、OpenSuse、Ubuntu等Linux发行版中的KVM虚拟化功能的使用。

第8章首先简单介绍了虚拟化性能测试,然后详细介绍对KVM虚拟化的CPU、内存、网络、磁盘I/O等重要组件进行性能测试的方法、常见工具和具体测试步骤,并且分享了作者在实际性能测试实验中得到的一些数据供读者参考,以便读者对KVM的性能有基本的认识。

第9章简单介绍了Linux、KVM、QEMU等开源社区的基本情况,也简单介绍了KVM、QEMU和KVM单元测试代码的基本结构,接着详细介绍了如何向QEMU/KVM开源社区贡献自己的代码以及如何提交KVM相关的bug。

本书中每章后面都有“本章小结”,部分章节后面有“本章注释和参考阅读”。“本章注释”是本章正文中一些需要详细说明的地方,“参考阅读”中包含了笔者推荐的与本章内容相关的一些参考资料供有兴趣的读者对相关内容做更多的了解。

读者可以根据自己的兴趣和已经掌握的知识来有选择地阅读各个章节。如果对KVM基本没有什么了解,建议按本书顺序阅读,通读一遍之后再对感兴趣的章节进行仔细阅读。今后可能会经常使用KVM的读者,在阅读本书之时,可以根据书中示例进行实际操作,如果是开发者也可以查看相应的源代码。另外,如果对某些章节中的内容比较感兴趣,建议阅读每章末尾笔者推荐的一些参考资料。

勘误和支持

KVM、QEMU等开源社区非常活跃,QEMU/KVM发展迅速,经常有新的功能加进去或者原有功能被改进,特别是QEMU命令行参数很可能会有所改动。因此本书中QEMU命令行参数只能适用于本书中提及的QEMU版本,若使用不同的版本,命令行参数可能并不完全相同。另外,本书中的QEMU命令行示例一般都没有添加"-enable-kvm"参数,这是由于笔者写作本书时使用的qemu-kvm是默认启用KVM加速的,如果读者使用普通的QEMU来启动KVM客户机,就请根据需要自行在QEMU命令行中添加"-enable-kvm"参数。

由于KVM和QEMU的发展变化比较快,加之作者的技术水平有限和编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者朋友批评指正。读者朋友对本书相关内容有任何的疑问、批评和建议,都可以通过作者之一(任永杰)的博客网站http://smilejay.com/进行讨论,作者会尽力回复每一条留言信息并帮助读者得到满意的答案。全书中涉及的示例代码程序(不包含单行的命令)和重要的配置文件,都可以从网站https://github.com/smilejay/kvm-book查看和下载。

如果读者朋友们有更多的宝贵意见或者任何关于KVM虚拟化技术的讨论,欢迎发送电子邮件至smile665@gmail.com,我们感谢并期待能够得到朋友们的真挚反馈。

致谢

首先要感谢Linus Torvalds这样的“大神”级别的Linux程序员,是他们创造了一个伟大的操作系统内核——Linux。

其次要感谢Avi Kivity等创建KVM项目的程序员,如果没有KVM项目,自然就不会有本书的存在。

感谢Intel开源技术中心的云计算与虚拟化部门,我们在这里学到了很多与Linux和虚拟化相关的技术。特别感谢该部门的张献涛,他是KVM IA64架构的维护者,在本书写作过程中,给了我们很多帮助和建议。

非常感谢机械工业出版社华章公司的编辑杨福川和姜影老师,在这一年多的时间中始终支持本书的写作,在他们的鼓励和帮助下,我们才能顺利地完成本书的写作。

最后感谢我们的爸爸、妈妈,感谢你们将我们养育成人并给予最无私的爱!

谨以此书献给我们的家人,以及众多喜欢Linux、KVM等开源软件的朋友们!任永杰 单海涛第1章 虚拟化与云计算

本书是一本以KVM为例,讲解虚拟化技术的书。可是看到这一章的标题,有读者会问:虚拟化为什么会跟云计算扯到一起去呢?其实,作为两个时下比较热门的技术,它们之间有着密不可分的千丝万缕的联系。本章将试图为读者理清它们之间的关系,从简单介绍云计算的概念开始,逐步解释虚拟化技术在云计算中的作用,并对当前流行的虚拟化解决方案进行一些简单的对比。1.1 云计算概念

云计算是一个本世纪初才方兴未艾的热门名词,其本身是由Google前首席执行官埃里克·施密特(Eric Schmidt)在2006年8月9日的搜索引擎大会(SES San Jose 2006)上首次提出的。在此之后,云计算变得炙手可热,很多公司趁势宣传,号称自己是先进的云计算公司。加之业界也一直没有对云计算形成一个统一的定义,各种各样的云变得“乱花渐欲迷人眼”。抛开形形色色的宣传,本书试图为读者一步步理清云计算的真实面目。1.1.1 发展历史和现状

虽然云计算的提出距离现在还只是短短的几年,但是云计算并不算是个彻底的新事物,因为早在它之前已经有各种类似或关联的概念被先后提出。早在60年代麦卡锡(John McCarthy)就提出了把计算能力作为一种像水和电一样的公用事业提供给用户。1999年,Salesforce.com提出的通过一个网站向企业提供企业级的应用的概念,已经颇有云计算的雏形。另外,20世纪90年代,为了充分利用空闲的CPU资源,通过网络互联搭建平行分布式计算平台,诞生了网[1]格计算,例如1999年出现的SETI@home科学研究项目。在网格计算中,将一个大型的计算任务拆分,分配给各个网格终端计算然后组合的思想,与云计算中的Map/Reduce技术不谋而合。

这些早期的概念虽然与云计算相关,但是要么碍于当时的计算机和网络技术,要么只是作为一种研究项目,始终没有能够被广泛推广并形成规模。然而,在本世纪初,计算机网络的大量普及和Web数据中心的建立,为云计算提供了必要的硬件准备。

在现有的被大家熟知并使用的共有云计算平台中,最著名的是由Amazon(亚马逊)和Google(谷歌)公司提供的服务。

Amazon使用弹性计算云(EC2)和简单存储服务(S3)为企业提供计算和存储服务。收费的服务项目包括存储服务器、带宽、CPU资源以及月租费。月租费与电话月租费类似,存储服务器、带宽按容量收费,CPU根据时长(小时)运算量收费。Amazon把云计算做成一个大生意并没有花太长的时间:不到两年时间,在Amazon上注册的开发人员就达44万人,还有为数众多的企业级用户。云计算是Amazon增长最快的业务之一。Amazon的财报数据显示,在其2012年收入中,云计算相关业务的收入已经高达21亿美元。

Google则当数最大的云计算的使用者。Google搜索引擎就建立在分布在全世界200多个地点、超过100万台服务器的支撑之上,这些设施的数量正在迅猛增长。Google地球、地图、Gmail、Docs等也[2]同样使用了这些基础设施。对于Google Docs之类的应用,用户数据会保存在互联网上的某个位置,可以通过任何一个与互联网相连的系统十分便利地访问这些数据。Google于2008年4月推出了Google App Engine(GAE)云计算服务,GAE是采用“平台即服务”(PaaS)的云计算模式,可以让第三方开发者在GAE平台上快速地开发自己的Web应用程序,而且GAE还将开发者的Web应用程序部署在Google全球的数据中心。Google还于2012年6月底发布了自己的“基础设施即服务”(IaaS)模式的云计算平台——Google Compute Engine(GCE),GCE的底层采用的是KVM虚拟化技术,它提供了与亚马逊EC2类似的云计算服务。

随着云计算的价值被不断发掘,越来越多的大公司开始加入到研究和部署云计算技术的阵营。

2008年2月1日,IBM宣布将在中国无锡的太湖新城科教产业园为中国的软件公司建立全球第一个云计算中心。

2008年7月29日,雅虎、惠普和英特尔宣布一项涵盖美国、德国和新加坡的联合研究计划,推出云计算研究测试床,推进云计算。该计划要与合作伙伴创建6个数据中心作为研究试验平台,每个数据中心配置1400个至4000个处理器。这些合作伙伴包括新加坡资讯通信发展管理局、德国卡尔斯鲁厄大学Steinbuch计算中心、美国伊利诺伊大学香宾分校、英特尔研究院、惠普实验室和雅虎。

2010年7月,美国国家航空航天局和包括Rackspace、AMD、Intel、戴尔等支持厂商共同宣布"OpenStack"开放源代码计划,微软在2010年10月表示支持OpenStack与Windows Server 2008 R2的集成,而Ubuntu已把OpenStack添加到Ubuntu 11.04版本中。

2011年2月,思科系统正式加入OpenStack,重点研发OpenStack的网络服务。1.1.2 概念

云计算自从提出,一直没有一个明确而统一的定义。维基百科对[3]云计算做了如下的描述:云计算是一种通过因特网以服务的方式提供动态可伸缩的虚拟化的资源的计算模式(Cloud computing is a style of computing in which dynamically scalable and often virtualized resources are provided as a service over the Internet)。美国国家标准与技术研究院(NIST)定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件和服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互(Cloud computing is a model for enabling ubiquitous,convenient,on-demand network access to a shared pool of configurable computing resources(e.g.,networks,servers,storage,applications,and services)that can be rapidly provisioned and released with minimal management effort or service provider interaction)。

也有人基于云端计算的实现方式,认为云计算是分布式计算技术的一种,其最基本的概念是,透过网络将庞大的计算处理程序自动分拆成无数个较小的子程序,再交给由多部服务器所组成的庞大系统经搜寻、计算分析之后将处理结果回传给用户。透过这项技术,网络服务提供者可以在数秒之内,处理数以千万计甚至亿计字节的信息,实现和“超级计算机”同样强大效能的网络服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用。1.1.3 云计算模式

云计算是推动IT转向以业务为中心模式的一次重大变革。它着眼于运营效率、竞争力和快速响应等实际成果。这意味着IT的作用正在从提供IT服务逐步过渡到根据业务需求优化服务的交付和使用。这种全新的模式将以前的信息孤岛转化为灵活高效的资源池和具备自我管理能力的虚拟基础架构,从而以更低的成本和更好的服务的形式提供给用户。IT即服务将提供业务所需要的一切,并在不丧失对系统的控制力的同时,保持系统的灵活性和敏捷性。

云计算的表现形式多种多样,简单的云计算在日常网络应用中随处可见,比如腾讯QQ空间提供的在线制作Flash图片,Google的搜索服务,Google Docs和Google Apps等。目前,云计算的主要服务形式有:SaaS(Software as a Service,软件即服务)、PaaS(Platform as a Service,平台即服务)和IaaS(Infrastructure as a Service,基础设施即服务)。

1.软件即服务

SaaS提供商将应用软件统一部署在自己的服务器上,用户根据需求通过互联网向厂商订购应用软件服务,服务提供商根据客户所定软件的数量、时间的长短等因素收费,并且通过浏览器向客户提供软件的模式。这种服务模式的优势是,由服务提供商维护和管理软件,提供软件运行的硬件设施,用户只需拥有能够接入互联网的终端,即可随时随地使用软件。在这种模式下,客户不再像传统模式那样花费大量资金在硬件、软件、维护人员上,只需要支出一定的租赁服务费用,通过互联网就可以享受到相应的硬件、软件和维护服务,这是网络应用最具效益的营运模式。对于小型企业来说,SaaS是采用先进技术的最好途径。

目前,Salesforce.com是提供这类服务最著名的公司,Google Docs、Google Apps和Zoho Office也属于这类服务。

2.平台即服务

PaaS把开发环境作为一种服务来提供。这是一种分布式平台服务,厂商提供开发环境、服务器平台、硬件资源等服务给客户,用户在其平台基础上定制开发自己的应用程序并通过其服务器和互联网传递给其他客户。PaaS能够为企业或个人提供研发的中间件平台,提供应用程序开发、数据库、应用服务器、试验、托管及应用服务。

Google App Engine、Salesforce的force.com平台、八百客的800APP是PaaS的代表产品。以Google App Engine为例,它是一个由python应用服务器群、BigTable数据库及GFS组成的平台,为开发者提供一体化主机服务器及可自动升级的在线应用服务。用户编写应用程序并在Google的基础架构上运行就可以为互联网用户提供服务,Google提供应用运行及维护所需要的平台资源。

3.基础设施即服务

IaaS即把厂商的由多台服务器组成的“云端”基础设施,作为计量服务提供给客户。它将内存、I/O设备、存储和计算能力整合成一个虚拟的资源池为整个业界提供所需要的存储资源和虚拟化服务器等服务。这是一种托管型硬件方式,用户付费使用厂商的硬件设施。例如Amazon Web服务(AWS)、Google的Google Compute Engine、IBM的BlueCloud等均将基础设施作为服务出租。

IaaS的优点是用户只需低成本获得所需的硬件资源,按需租用相应计算能力、存储容量、网络带宽,而且省去了硬件运维方面的成本,大大降低了用户在硬件上的开销。1.2 云计算技术

云计算的兴起,改变了现有的以本地计算为主的应用模型。用户不再需要付费购买软件并将其安装到本地的计算机中执行。取而代之,大量的计算任务,由客户端通过网络发起,在云计算提供商的数据中心的服务器集群上进行计算,其结果经由网络返回,在客户端进行呈现。新的计算模型的提出,必然伴随着新的问题需要解决。在云计算的环境下,不同厂商对如何有效地管理云端的资源,为用户提供快捷的计算进行了大量研究,提出和总结了一些行之有效的云计算技术。1.2.1 Map/Reduce

Map/Reduce是Google开发的编程模型,它是一种简化的分布式编程模型和高效的任务调度模型,用于大规模数据集(大于1TB)的并行运算。严格的编程模型使云计算环境下的编程十分简单。MapReduce模式的思想是将要执行的问题分解成Map(映射)和Reduce(化简)的方式,先通过Map程序将数据切割成不相关的区块,分配(调度)给大量计算机处理,达到分布式运算的效果,再通过Reduce程序将结果汇总输出。

Map/Reduce编程模型适用于很多应用,例如,分布式搜索、分布式排序、机器学习、基于统计的机器翻译等。在Google公司,互联网网页的搜索索引也是用Map/Reduce技术计算生成的。

Map/Reduce目前已经有基于各种不同计算机编程语言的库实现,其中相当流行的是有Apache基金会的用Java语言开发的开源的Hadoop。1.2.2 资源管理平台

云计算资源规模庞大,服务器数量众多并分布在不同的地点,同时运行着数百种应用,如何有效地管理这些服务器,保证整个系统提供不间断的服务是巨大的挑战。

云计算系统的平台管理技术能够使大量的服务器协同工作,方便进行业务部署和开通,快速发现和恢复系统故障,通过自动化、智能化的手段实现大规模系统的可靠运营。

当前比较流行的云计算平台,主要有思杰的CloudStack,开源的Eucalyptus,VMware公司的vCloud Director和开源的OpenStack等。除了VMware公司的vCloud Director没有免费版本和只支持VMware自由的虚拟化产品以外,其余几个都提供免费版本,而且支持多个虚拟化产品。Eucalyptus和OpenStack还对亚马逊的API保持兼容,基于亚马逊API的所有的脚本和软件产品都可以轻松地进行私有云部署。

现在,CloudStack和OpenStack正处在激烈的竞争中,两者都希望自己能够成为开源社区云计算平台的事实标准。CloudStack在成熟度上面明显优于OpenStack,在培育客户方面也占了先机,但是背后的推手主要是思杰。OpenStack虽然是后起之秀,但是得到了诸如IBM、思科、英特尔、惠普和戴尔等大牌厂商的支持。究竟谁是未来的开源云平台老大,鹿死谁手,还未可知。1.2.3 虚拟化

虚拟化是构建云基础架构不可或缺的关键技术之一。云计算的云端系统,其实质上就是一个大型的分布式系统。虚拟化通过在一个物理平台上虚拟出更多的虚拟平台,而其中的每一个虚拟平台则可以作为独立的终端加入云端的分布式系统。比起直接使用物理平台,虚拟化在资源的有效利用、动态调配和高可靠性方面有着巨大的优势。利用虚拟化,企业不必抛弃现有的基础架构即可构建全新的信息基础架构,从而更加充分地利用原有的IT投资。

可以说,虚拟化是云端系统部署必不可少的基础。正是因为虚拟化在云计算中的重要性,本书将集中篇幅以KVM为例,为各位读者讲解虚拟化从技术理解到实践部署的方方面面。从下一节开始,本书将进入虚拟化技术的专题。1.3 虚拟化技术

虚拟化是一个广义的术语,是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理、优化资源的解决方案。

如图1-1所示,我们可以将一般的计算模型抽象成为一定的物理资源和运行于之上的计算元件,它们之间通过定义的物理资源接口进行交互。随着计算机硬件技术的发展,物理资源的容量越来越大而价格越来越低,在既有的计算元件架构下,物理资源不可避免地产生了闲置和浪费。为了充分利用新的物理资源,提高效率,一个比较直接的办法就是更新计算元件以利用更加丰富的物理资源。但是,人们往往出于对稳定性和兼容性的追求,并不情愿频繁地对已经存在的计算元件做大幅度的变更。虚拟化技术则是另辟蹊径,通过引入一个新的虚拟化层,对下管理真实的物理资源,对上提供虚拟的系统资源,从而实现了在扩大硬件容量的同时,简化软件的重新配置过程。图 1-1 虚拟化

为了表述虚拟化的一般概念,在图1-1中使用了资源这个词。在实际应用中,资源可以表现为各种各样的形式。例如,如果把操作系统及其提供的系统调用作为资源,那么虚拟化就表现为操作系统虚拟化。Linux容器虚拟化技术就是在同样的一份Linux操作系统之上,虚拟出多个同样的操作系统。再例如,如果把整个X86平台包括处理器、内存和外设作为资源,那么对应的虚拟化技术就是平台虚拟化,在同一个X86平台上面,可以虚拟多个X86平台,每个虚拟平台都可以运行自己独立完整的操作系统。这也是我们在本书中将要重点讨论的虚拟化技术。

在X86平台虚拟化技术中,新引入的虚拟化层通常称为虚拟机监控器(Virtual Machine Monitor,VMM),也叫做Hypervisor。虚拟机监控器运行的环境,也就是真实的物理平台,称之为宿主机。而虚拟出来的平台通常称为客户机,里面运行的系统对应地也称为客户机操作系统。

虚拟化技术有很多种实现方式,比如软件虚拟化和硬件虚拟化,再比如准虚拟化和全虚拟化。下面将针对每种实现方式做一个简单的介绍。1.3.1 软件虚拟化和硬件虚拟化

通过前面的简单介绍,相信读者对虚拟化已经有了一个大致的了解。那么,什么是软件虚拟化和硬件虚拟化呢?在回答这个问题之前,读者需要思考一个问题:既然虚拟化这么美好,是不是物理资源都可以被虚拟化?

如图1-2所示,实现虚拟化的重要一步就在于,虚拟化层必须能够截获计算元件对物理资源的直接访问,并将其重新定向到虚拟资源池中。根据虚拟化层是通过纯软件的方法,还是利用物理资源提供的机制来实现这种“截获并重定向”,我们可以把虚拟化划分成为软件虚拟化和硬件虚拟化两种。图 1-2 虚拟化的可实现性

1.虚拟化——软件方案

纯软件虚拟化,顾名思义,就是用纯软件的方法在现有的物理平台上(往往并不支持硬件虚拟化)实现对物理平台访问的截获和模拟。

常见的软件虚拟机例如QEMU,它是通过纯软件来仿真X86平台处理器的取指、解码和执行,客户机的指令并不在物理平台上直接执行。由于所有的指令都是软件模拟的,因此性能往往比较差,但是可以在同一平台上模拟不同架构平台的虚拟机。

VMWare的软件虚拟化则使用了动态二进制翻译的技术。虚拟机监控机在可控制的范围内,允许客户机的指令在物理平台上直接运行。但是,客户机指令在运行前会被虚拟机监控机扫描,其中突破虚拟机监控机限制的指令会被动态替换为可以在物理平台上直接运行的安全指令,或者替换为对虚拟机监控器的软件调用。这样做的好处是比纯软件模拟性能有大幅的提升,但是也同时失去了跨平台虚拟化的能力。

在纯软件虚拟化解决方案中,VMM在软件套件中的位置是传统意义上操作系统所处的位置,而操作系统的位置是传统意义上应用程序所处的位置,这种转换必然会增加系统的复杂性。软件堆栈的复杂性增加意味着,这些环境难于管理,因而会加大确保系统可靠性和安全性的困难。

2.虚拟化——硬件方案

硬件虚拟化,简而言之,就是物理平台本身提供了对特殊指令的截获和重定向的硬件支持。甚至,新的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化,从而提升性能。

以X86平台的虚拟化为例,支持虚拟技术的X86 CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易将客户机置于一种受限制的模式下运行,一旦客户机试图访问物理资源,硬件会暂停客户机的运行,将控制权交回给VMM处理。VMM还可以利用硬件的虚拟化增强机制,将客户机在受限模式下对一些特定资源的访问,完全由硬件重定向到VMM指定的虚拟资源,整个过程不需要暂停客户机的运行和VMM软件的参与。

由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,无需进行二进制转换,减少了相关的性能开销,极大简化了VMM设计,进而使VMM能够按通用标准进行编写,性能更加强大。

需要说明的是,硬件虚拟化技术是一套解决方案。完整的情况需要CPU、主板芯片组、BIOS和软件的支持,例如VMM软件或者某些操作系统本身。即使只是CPU支持虚拟化技术,在配合VMM软件的情况下,也会比完全不支持虚拟化技术的系统有更好的性能。

鉴于虚拟化的巨大需求和硬件虚拟化产品的广阔前景,Intel一直都在努力完善和加强自己的硬件虚拟化产品线。自2005年末,Intel便开始在其处理器产品线中推广应用Intel Virtualization Technology(IntelVT)虚拟化技术,发布了具有IntelVT虚拟化技术的一系列处理器产品,包括桌面的Pentium和Core系列,还有服务器的Xeon至强和Itanium安腾。Intel一直保持在每一代新的处理器架构中优化硬件虚拟化的性能和增加新的虚拟化技术。现在市面上,从桌面的Core i3/5/7,到服务器端的E3/5/7/9,几乎全部都支持Intel VT技术。可以说,在不远的将来,Intel VT很可能会成为所有Intel处理器的标准配置。1.3.2 准虚拟化与全虚拟化

1.准虚拟化(para-virtualization)

如上一节所述,软件虚拟化可以在缺乏硬件虚拟化支持的平台上完全通过VMM软件来实现对各个虚拟机的监控,以保证它们之间彼此独立和隔离。但是付出的代价是软件复杂度的增加,和性能上的损失。减轻这种负担的一种方法就是,改动客户操作系统,使它以为自己运行在虚拟环境下,能够与虚拟机监控机协同工作。这种方法就叫准虚拟化(para-virtualization),也叫半虚拟化。本质上,准虚拟化弱化了对虚拟机特殊指令的被动截获要求,将其转化成客户机操作系统的主动通知。但是,准虚拟化需要修改客户机操作系统的源代码来实现主动通知。[4]

Xen是开源准虚拟化技术的一个例子。操作系统作为虚拟服务器在Xen Hypervisor上运行之前,它必须在内核层面进行某些改变。因此,Xen适用于BSD、Linux、Solaris及其他开源操作系统,但不适合对像Windows这些专有的操作系统进行虚拟化处理,因为它们不公开源代码,所以无法修改其内核。

2.全虚拟化(full virtualization)

与准虚拟化技术不同,全虚拟化为客户机提供了完整的虚拟X86平台,包括处理器、内存和外设,支持运行任何理论上可在真实物理平台上运行的操作系统,为虚拟机的配置提供了最大程度的灵活性。不需要对客户机操作系统做任何修改即可正常运行任何非虚拟化环境中已存在基于X86平台的操作系统和软件,是全虚拟化无可比拟的优势。

准虚拟化在诞生之初,运行在缺乏硬件虚拟化支持的平台上,操作系统和虚拟机监控器的密切配合,实现了针对全虚拟化软件方案的性能优势。这样的性能优势甚至一直保持到2006年左右(尽管那时已经出现了第一代硬件虚拟化平台)。但是随着硬件虚拟化技术的逐代演化,运行于Intel平台的全虚拟化的性能已经超过了准虚拟化产品,这一点在64位的操作系统上表现得更为明显。加之,全虚拟化不需要对客户机操作系统做任何修改的固有优势。可以预言,基于硬件的全虚拟化产品将是未来虚拟化技术的核心。1.4 KVM简介1.4.1 KVM的历史

KVM的全称是Kernel Virtual Machine,翻译成中文就是内核虚拟机。KVM虚拟机最初是由一个以色列的创业公司Qumranet开发的,作为他们的VDI产品的虚拟机。为了简化开发,KVM的开发人员并没有选择从底层开始新写一个Hypervisor,而是选择了基于Linux kernel,通过加载新的模块从而使Linux Kernel本身变成一个Hypervisor。2006年10月,在先后完成了基本功能、动态迁移以及主要的性能优化之后,Qumranet正式对外宣布了KVM的诞生。同年10月,KVM模块的源代码被正式接纳进入Linux Kernel,成为内核源代码的一部分。作为一个功能和成熟度都逊于Xen的项目,在这么快的时间内被内核社区接纳,主要原因在于:在虚拟化方兴未艾的当时,内核社区急于将虚拟化的支持包含在内,但是Xen取代内核由自身管理系统资源的架构引起了内核开发人员的不满和抵触。

在2008年9月4日,同内核社区保持着很深渊源的著名Linux发行版提供商——Redhat公司出人意料地出资1亿700百万美金,收购了Qumranet,从而成为了KVM开源项目的新东家。由于此次收购,Redhat公司有了自己的虚拟机解决方案,于是开始在自己的产品中用KVM替换Xen。2010年11月,Redhat公司推出了新的企业版Linux——RHEL 6,在这个发行版中集成了最新的KVM虚拟机,而去掉了在RHEL 5.x系列中集成的Xen。1.4.2 KVM功能概览

KVM是基于虚拟化扩展(Intel VT或AMD-V)的X86硬件,是Linux完全原生的全虚拟化解决方案。部分的准虚拟化支持,主要是通过准虚拟网络驱动程序的形式用于Linux和Windows客户机系统的。KVM目前设计为通过可加载的内核模块,支持广泛的客户机操作系统,比如Linux、BSD、Solaris、Windows、Haiku、ReactOS和AROS Research Operating System。

在KVM架构中,虚拟机实现为常规的Linux进程,由标准Linux调度程序进行调度。事实上,每个虚拟CPU显示为一个常规的Linux进程。这使KVM能够享受Linux内核的所有功能。

需要注意的是,KVM本身不执行任何模拟,需要用户空间程序通过/dev/kvm接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序就是大名鼎鼎的QEMU。

图1-3显示了KVM的基本架构。图 1-3 KVM架构

下面介绍一下KVM的功能特性。(1)内存管理

KVM从Linux继承了强大的内存管理功能。一个虚拟机的内存与任何其他Linux进程的内存一样进行存储,可以以大页面的形式进行交换以实现更高的性能,也可以以磁盘文件的形式进行共享。NUMA支持(非一致性内存访问,针对多处理器的内存设计)允许虚拟机有效地访问大量内存。

KVM支持最新的基于硬件的内存虚拟化功能,支持Intel的扩展页表(EPT)和AMD的嵌套页表(NPT,也叫“快速虚拟化索引-RVI”),以实现更低的CPU利用率和更高的吞吐量。

内存页面共享通过一项名为内核同页合并(Kernel Same-page Merging,KSM)的内核功能来支持。KSM扫描每个虚拟机的内存,如果虚拟机拥有相同的内存页面,KSM将这些页面合并到一个在虚拟机之间共享的页面,仅存储一个副本。如果一个客户机尝试更改这个共享页面,它将得到自己的专用副本。(2)存储

KVM能够使用Linux支持的任何存储来存储虚拟机镜像,包括具有IDE、SCSI和SATA的本地磁盘,网络附加存储(NAS)(包括NFS和SAMBA/CIFS),或者支持iSCSI和光纤通道的SAN。多路径I/O可用于改进存储吞吐量和提供冗余。由于KVM是Linux内核的一部分,它可以利用所有领先存储供应商都支持的一种成熟且可靠的存储基础架构,它的存储堆栈在生产部署方面具有良好的记录。

KVM还支持全局文件系统(GFS2)等共享文件系统上的虚拟机镜像,以允许虚拟机镜像在多个宿主之间共享或使用逻辑卷共享。磁盘镜像支持按需分配,仅在虚拟机需要时分配存储空间,而不是提前分配整个存储空间,提高存储利用率。KVM的原生磁盘格式为QCOW2,它支持快照,允许多级快照、压缩和加密。(3)设备驱动程序

KVM支持混合虚拟化,其中准虚拟化的驱动程序安装在客户机操作系统中,允许虚拟机使用优化的I/O接口而不使用模拟的设备,从而为网络和块设备提供高性能的I/O。KVM准虚拟化的驱动程序使用IBM和Red Hat联合Linux社区开发的VirtIO标准,它是一个与虚拟机管理程序独立的、构建设备驱动程序的接口,允许为多个虚拟机管理程序使用一组相同的设备驱动程序,能够实现更出色的虚拟机交互性。(4)性能和可伸缩性

KVM也继承了Linux的性能和可伸缩性。KVM虚拟化性能在很多方面(如计算能力、网络带宽等)已经可以达到非虚拟化原生环境的95%以上的性能。KVM的扩展性也非常良好,客户机和宿主机都可以[5]支持非常多的CPU数量和非常大量的内存。例如,Redhat官方文档就介绍过,RHEL 6.x系统中的一个KVM客户机可以支持160个虚拟CPU和多达2TB的内存,KVM宿主机支持4096个CPU核心和多达64TB的内存。1.4.3 KVM的前景

尽管KVM是一个相对较新的虚拟机管理程序,但是诞生不久就被Linux社区接纳,成为随Linux内核发布的轻量型模块。与Linux内核集成,使KVM可以直接获益于最新的Linux内核开发成果,比如更好的进程调度支持、更广泛物理硬件平台的驱动、更高的代码质量,等等。

作为相对较新的虚拟化方案,KVM一直没有成熟的工具可用于管理KVM服务器和客户机,不过,现在随着libvirt、virt-manager等工具和OpenStack等云计算平台的逐渐完善,KVM管理工具在易用性方面的劣势已经逐渐被克服。另外,KVM仍然可以改进虚拟网络的支持、虚拟存储支持、增强的安全性、高可用性、容错性、电源管理、HPC/实时支持、虚拟CPU可伸缩性、跨供应商兼容性、科技可移植性等方面,不过,现在KVM开发者社区比较活跃,也有不少大公司的工程师参与开发,我们有理由相信很多功能都会在不远的将来得到完善。1.5 Xen简介1.5.1 Xen的历史

早在20世纪90年代,伦敦剑桥大学的Ian Pratt和Keir Fraser在一个叫做Xenoserver的研究项目中,开发了Xen虚拟机。作为Xenoserver的核心,Xen虚拟机负责管理和分配系统资源,并提供必要的统计功能。在那个年代,X86的处理器还不具备对虚拟化技术的硬件支持,所以Xen从一开始是作为一个准虚拟化的解决方案出现的。因此,为了支持多个虚拟机,内核必须针对Xen做出特殊的修改才可以运行。为了吸引更多开发人员参与,2002年Xen正式被开源。在先后推出了1.0和2.0版本之后,Xen开始被诸如Redhat、Novell和Sun的Linux发行版集成,作为其中的虚拟化解决方案。2004年,Intel的工程师开始为Xen添加硬件虚拟化的支持,从而为即将上市的新款处理器做必需的软件准备。在他们的努力下,2005年发布的Xen 3.0,开始正式支持Intel的VT技术和IA64架构,从而Xen虚拟机可以运行完全没有修改的操作系统。2007年10月,思杰公司出资5亿美金收购了XenSource,变成了Xen虚拟机项目的东家。

与Xen在功能开发上的快速进展形成对比的是,Xen在将它对内核的修改集成进入内核社区方面进展不大。有部分重要的内核开发人员不喜欢Xen的架构和实现,多位内核维护人员公开声明不欢迎Xen。这样的形势一直持续到2010年,在基于内核的PVOPS对Xen做了大量重写之后,内核社区才勉强接纳了Xen。当然,目前从Linux 3.0版本开始的内核主干对Xen的支持还是越来越好了。1.5.2 Xen功能概览

Xen是一个直接在系统硬件上运行的虚拟机管理程序。Xen在系统硬件与虚拟机之间插入一个虚拟化层,将系统硬件转换为一个逻辑计算资源池,Xen可将其中的资源动态地分配给任何操作系统或应用程序。在虚拟机中运行的操作系统能够与虚拟资源交互,就好像它们是物理资源一样。

图1-4显示了一个运行虚拟机的Xen系统。图 1-4 Xen架构

Xen被设计成为微内核的实现,其本身只是负责管理处理器和内存资源。Xen上面运行的所有虚拟机中,0号虚拟机是特殊的,其中运行的是经过修改的支持准虚拟化的Linux操作系统,大部分的输入输出设备都交由这个虚拟机直接控制,而Xen本身并不直接控制它们。这样做可以使基于Xen的系统可以最大程度地复用Linux内核的驱动程序。更广泛地说,Xen虚拟化方案在Xen Hypervisor和0号虚拟机的功能上做了聪明的划分,既能够重用大部分Linux内核的成熟代码,又可以控制系统之间的隔离型和针对虚拟机更加有效的管理和调度。通常,0号虚拟机也被视为是Xen虚拟化方案的一部分。

Xen上面运行的虚拟机,既支持准虚拟化,也支持全虚拟化,可以运行几乎所有可以在X86物理平台上运行的操作系统。此外,最新的Xen还支持ARM平台的虚拟化。

下面简单介绍一下Xen的功能特性。

Xen服务器(即思杰公司的Xen Server产品)构建于开源的Xen虚拟机管理程序之上,结合使用半虚拟化和硬件协助的虚拟化。操作系统与虚拟化平台之间的这种协作支持开发一个较简单的虚拟机管理程序来提供高度优化的性能。

Xen提供了复杂的工作负载平衡功能,可捕获CPU、内存、磁盘I/O和网络I/O数据,它提供了两种优化模式:一种针对性能,另一种针对密度。

Xen服务器利用一种名为Citrix Storage Link的独特的存储集成功能。使用Citrix Storage Link,系统管理员可直接利用来自HP、Dell Equal Logic、NetApp、EMC等公司的存储产品。

Xen服务器包含多核处理器支持、实时迁移、物理服务器到虚拟机转换(P2V)和虚拟到虚拟转换(V2V)工具、集中化的多服务器管理、实时性能监控,以及对Windows和Linux客户机的良好性能。1.5.3 Xen的前景

Xen作为一个开发最早的虚拟化方案,对各种虚拟化功能的支持相对完善。Xen虚拟机监控程序,是一个专门为虚拟机开发的微内核,所以其资源管理和调度策略完全是针对虚拟机的特性而开发的。作为一个独立维护的微内核,Xen的功能明确,开发社区构成比较简单,所以更容易接纳专门针对虚拟化所做的功能和优化。

Xen比较难于配置和使用,部署会占用相对较大的空间,而且非常依赖于0号虚拟机中的Linux操作系统。Xen微内核直接运行于真实物理硬件之上,开发和调试都比基于操作系统的虚拟化困难。Xen最大的困难在于Linux内核社区的抵制,导致Xen相关的内核改动一直不能顺利进入内核源代码,从而无法及时得到内核最新开发成果的支持,这与KVM形成了鲜明的对比。1.6 其他虚拟化方案简介

1.4节和1.5节分别介绍了两个最有名的开源虚拟机,开放源代码的好处在于可以有人数庞大的开发社区作为支撑,同时源代码公开也有利于人们研究和学习虚拟机的具体实现。但是,把虚拟机作为商品出售给终端用户,就需要一些商业化的虚拟机解决方案。下面简单介绍常见的一些商业化的虚拟机。1.6.1 VMware

VMware公司创办于1998年,从公司的名字就可以看出,这是一家专注于提供虚拟化解决方案的公司。VMware公司很早就预见到了虚拟化在未来数据中心中的核心地位,有针对性地开发虚拟化软件,从而抓住了21世纪初虚拟化兴起的大潮,成为了虚拟化业界的标杆。VMware公司从创建至今,一直占据着虚拟化软件市场的最大份额,是毫无争议的龙头老大。Vmware公司作为最成熟的商业虚拟化软件提供商,其产品线是业界覆盖范围最广的,下面会对VMware的主要产品进行简单的介绍。(1)VMware Workstation

VMware Workstation是VMware公司销售的运行于台式机和工作站上的虚拟化软件,也是VMware公司第一个面市的产品(1999年5月)。该产品最早采用了VMware在业界知名的二进制翻译技术,在x86 CPU硬件虚拟化技术还未出现之前,为客户提供了纯粹的基于软件的全虚拟化解决方案。作为最初的拳头产品,VMware公司投入了大量的资源对二进制翻译进行优化,其二进制翻译技术带来的虚拟化性能甚至超过第一代的CPU硬件虚拟化产品。该产品如同KVM,是[6]“类型二”虚拟机,需要在宿主操作系统之上运行。(2)VMware ESX Server

ESX服务器(一种能直接在硬件上运行的企业级的虚拟平台),虚拟的SMP,它能让一个虚拟机同时使用四个物理处理器,和VMFS一样,它能使多个ESX服务器分享块存储器。该公司还提供一个虚拟中心来控制和管理虚拟化的IT环境:VMotion让用户可以移动虚拟机器;DRS从物理处理器创造资源工具;HA提供从硬件故障自动恢复功能;综合备份可使LAN-free自动备份虚拟机器;VMotion存储器可允许虚拟机磁盘自由移动;更新管理器自动更新修补程序和更新管理;能力规划能使VMware的服务供应商执行能力评估;转换器把本地和远程物理机器转换到虚拟机器;实验室管理可自动化安装、捕捉、存储和共享多机软件配置;ACE允许桌面系统管理员对虚拟机应用统一的企业级IT安全策略,以防止不可控台式电脑带来的风险。虚拟桌面基础设施可主导个人台式电脑在虚拟机运行的中央管理器;虚拟桌面管理,它是联系用户到数据库中的虚拟电脑的桌面管理服务器;WMware生命管理周期可通过虚拟环境提供控制权。1.6.2 VirtualBox

Oracle VirtualBox是由德国InnoTek软件公司出品的虚拟机器软件,现在由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部份。它提供使用者在32位或64位的Windows、Solaris及Linux操作系统上虚拟其他X86的操作系统。使用者可以在VirtualBox上安装并执行Solaris、Windows、DOS、Linux、OS/2 Warp、OpenBSD及FreeBSD等系统作为客户端操作系统。最新的VirtualBox还支持运行Android4.0系统。

与同性质的VMware及Virtual PC比较下,VirtualBox独到之处包括远端桌面协定(RDP)、iSCSI及USB的支援,VirtualBox在客户机操作系统上已可以支援USB 2.0的硬件装置。此外,VirtualBox还支持在32位宿主操作系统上运行64位的客户机操作系统。

VirtualBox既支持纯软件虚拟化,也支持Intel VT-x与AMD AMD-V硬件虚拟化技术。为了方便其他虚拟机用户向VirtualBox的迁移,VirtualBox可以读写VMware VMDK格式与VirtualPC VHD格式的虚拟磁盘文件。1.6.3 Hyper-V

Hyper-V是微软提出的一种系统管理程序虚拟化技术。Hyper-V设计的目的是为广泛的用户提供更为熟悉及成本效益更高的虚拟化基础设施软件,这样可以降低运作成本、提高硬件利用率、优化基础设施并提高服务器的可用性。

Hyper-V的设计借鉴了Xen,采用微内核的架构,兼顾了安全性和性能的要求。Hyper-V底层的Hypervisor运行在最高的特权级别下,微软将其称为ring-1(而Intel也将其称为root mode),而虚拟机的操作系统内核和驱动运行在ring 0,应用程序运行在ring 3。

Hyper-V采用基于VMbus的高速内存总线架构,来自虚拟机的硬件请求(显卡、鼠标、磁盘、网络),可以直接经过VSC,通过VMbus总线发送到根分区的VSP,VSP调用对应的设备驱动,直接访问硬件,中间不需要Hypervisor的帮助。

从架构上讲,Hyper-V只有“硬件-Hyper-V-虚拟机”三层,本身非常小巧,代码简单,且不包含任何第三方驱动,所以安全可靠、执行效率高,能充分利用硬件资源,使虚拟机系统性能更接近真实系统性能。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载