KVM实战:原理、进阶与性能调优(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-05 00:15:08

点击下载

作者:任永杰,程舟

出版社:机械工业出版社

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

KVM实战:原理、进阶与性能调优

KVM实战:原理、进阶与性能调优试读:

前言

为什么要写这本书

自《KVM虚拟化技术:实战与原理解析》(以下简称“上一本书”)出版以来,受到了读者的热烈欢迎,几度脱销重印。这给了笔者强烈的鼓舞和责任感,觉得有必要与时俱进给读者介绍最新的KVM虚拟化技术的相关知识。

从上一本书出版后到现在近5年时间里,国内虚拟化技术迅速普及,云计算应用风起云涌,阿里云、腾讯云、华为云等国内云服务提供商迅速崛起,使得云计算、虚拟化不再是原来象牙塔里虚无缥缈的技术概念,而是与普通大众日常生活息息相关的新名词,KVM被这几大云服务提供商广泛采用,使得它成为云计算世界里事实上的虚拟化标准。在这样的市场背景下,以Intel为代表的x86硬件厂商,这些年也愈加重视虚拟化技术的硬件支持与创新,ARM平台的硬件虚拟化支持也愈加完善。硬件层面的创新也促使QEMU、KVM在软件层面日新月异。比如,从2013年第1版发行至今,KVM(内核)版本从3.5发展到了4.8;QEMU版本从1.3发展到了2.7;专门针对KVM的qemu-kvm代码树已经废弃(被合并到了主流QEMU中)……因此,上一本书中的很多用例、方法和结论等,在新的代码环境下已经有些不合时宜,甚至会出错。我们有必要给读者提供最新且正确的信息。相对于上一本书的修改

总体来说,我们对上一本书里所有的用例、图例都做了大量修改更新,实验环境采用笔者写作时的最新技术:硬件平台采用Intel Broadwell Xeon Server,KVM(内核)为4.8版本,QEMU为2.7版本,操作系统环境是RHEL 7.3。文中注释改成脚注的形式,而不是像上一本书那样出现在每章末尾。我们认为这样更方便读者阅读。当然,文字表述上也进行了许多修改。

另外,我们对章节的结构也进行了重新组织,全书共分3篇,10章:第一篇“KVM虚拟化基础”(第1章~第5章),第二篇“KVM虚拟化进阶”(第6章~第9章),第三篇“性能测试与调优”(第10章)。

除了上述的总体修改外,各章主要修改内容如下。

第1章,我们重新组织了结构,精简了一些文字介绍,加入了一些数据图表以便于读者的理解。加入了云计算几种服务模型的描述和图示。加入了一节关于容器(Container)的简介,以便读者对比学习。

第2章,对上一本书相关章节进行了更为系统的梳理,介绍了硬件虚拟化技术、KVM、QEMU、与KVM配合的组件以及相关工具链。

第5章,着重对其中的网络配置一节进行了更新。将上一本书中的第5章拆分成了第6章、第7章、第8章和第9章,并分别进行了内容扩充。

第6章,对应上一本书中的第5章的半虚拟化、设备直接分配、热插拔这3节,并分别进行了补充。在半虚拟化驱动一节中,我们新增了“内核态的vhost-net后端以及网卡多队列”“使用用户态的vhost-user作为后端驱动”“对Windows客户机的优化”这3小节。在设备直接分配一节中,我们使用VFIO替换掉了已经被废弃的Legacy passthrough。在热插拔一节,我们将内存热插拔独立出来,并着重更新,因为在上一本书出版时它还未被完全支持。除此之外,我们还新增了磁盘热插拔和网络接口的热插拔两节。

第7章,我们将上一本书中的第4章中内存大页部分和上一本书中的第5章中的KSM、透明大页等内容凑在一起,组成了KVM内存管理高级技巧,同时新增了NUMA(非统一内存访问架构)一节。

第8章,由上一本书中的第5章的“动态迁移”和“迁移到KVM虚拟化环境”两节组成。

第9章,在上一本书中的第5章的“嵌套虚拟化”“KVM安全”等内容的基础上,新增了“CPU指令相关的性能优化”一节,着重介绍了最近几年Intel的一些性能优化新指令在虚拟化环境中的应用。

第10章,对应上一本书中的第8章,专门讲KVM性能测试与优化。我们在最新的软硬件环境中重做了CPU、内存、网络、磁盘的性能测试,获取了最新的数据,尤其对一些测试工具(benchmark)进行了重新选取,比如磁盘性能测试,我们放弃了IOzone和Bonnie++,而选用业界更认可的fio。另外,我们还加入了“CPU指令集对性能的提升”和“其他的影响客户机性能的因素”两节进行分析,希望对读者进行虚拟化系能调优有所启示。

上一本书中的第7章“Linux发行版中的KVM”和第9章“参与KVM开源社区”分别作为本书的附录A和附录B,并进行了相应的内容更新。

其他章节的内容保持不变,即第3章为上一本书的第3章且内容不变;第4章为上一本书的第6章,内容不变。读者对象

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

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

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

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

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

·普通用户:了解KVM的功能和如何使用KVM,用掌握的KVM虚拟化技术来促进其他相关的学习、开发和测试。如何阅读本书

前面已经提到,本书相比上一本书内容更加集中,分类更加合理。如果读者朋友对KVM没有什么了解,笔者建议按本书章节顺序阅读,通读一遍之后再对感兴趣的章节进行仔细阅读。对于已有一定KVM知识基础的读者,可以根据自己的兴趣和已经掌握的知识情况来有选择地阅读各个章节。当然,笔者建议今后可能会经常使用KVM的读者,在阅读本书时,可以根据书中示例或者其他示例来进行实际操作。如果是开发者,也可以查看相应的源代码。勘误和支持

KVM、QEMU等开源社区非常活跃,QEMU/KVM发展迅速,每天都有新的功能加进去,或者原有功能被改进。特别是qemu命令行参数很可能会有改动,故本书中qemu命令行参数只能完全适用于本书中提及的QEMU版本,读者若使用不同的版本,命令行参数可能并不完全相同。例如,本书写作时,“-enable-kvm”已经被社区标为“将要废弃”,很可能在读者拿到本书的时候,需要用“-accel kvm”来代替它。

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

如果读者朋友们有更多的宝贵意见或者任何关于KVM虚拟化技术的讨论,也都欢迎发送电子邮件至邮箱smile665@gmail.com、Robert.Ho@outlook.com,我们非常期待能够得到朋友们的真挚反馈。第一篇KVM虚拟化基础·第1章 虚拟化简介·第2章 KVM原理简介·第3章 构建KVM环境·第4章 KVM管理工具·第5章 KVM核心基础功能第1章虚拟化简介

在写作上一本书的时候(2013年),云计算虽然已经在国际上提出多年,但在国内还是刚刚兴起。到写作本书时这短短4年内,国内云计算已经翘首追赶,紧跟国际的步伐。例如阿里云,截至笔者写作时,阿里云已经连续7个季度3位数的同比增长率。老牌公司微软也在这几年加速追赶,在这个新的领域跻身一线。1.1 云计算概述1.1.1 什么是云计算

一直以来,云计算(Cloud Computing)的定义也如同它的名字一样,云里雾里,说不清楚。维基百科里是这样定义的:是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。以前,我们的信息处理(计算)是由一个实实在在的计算机来完成的,它看得见,摸得着。后来,随着计算硬件、网络技术、存储技术的飞速发展,人们发现,每个人独自拥有一台计算机似乎有些浪费,因为它大多数时候是空闲的。那么,如果将计算资源集中起来,大家共享,类似现代操作系统那样分时复用,将是对资源的极大节省和效率的极大提升,经济学上的解释也就是边际效应(成本)递减。科技行业的发展,根源也是经济利益的推动。在这样的背景下,云计算应运而生了。它就是把庞大的计算资源集中在某个地方或是某些地方,而不再是放在身边的那台计算机了;用户的每一次计算,都发生在那个被称为云的他看不见摸不着的某个地方。

以CPU为例,图1-1和图1-2摘选了从2000年到2017年上市的Intel桌面CPU的参数(主频、核数、LLC、制造工艺),从中可以大概看到CPU处理能力的飞速提升。它的另一面也就意味着,个人单独拥有一台计算机,从资源利用效率角度来看,被大大闲置了的。图1-1 Intel CPU处理能力的主要参数图1-2 Intel CPU LLC的发展及制造工艺的演进1.1.2 云计算的历史

正式的云计算的产品始发于2006年,那年8月,亚马逊(Amazon)发布了“弹性计算云”(Elastic Compute Cloud)。2008年10月,微软宣布了名为Azure的云计算产品,并在2010年2月正式发布Windows Azure。Google也从2008年开始进入云计算时代,那年4月,其发布了Google App Engine Beta,但直到2013年12月,其Google Compute Engine对标AWS EC2才正式可用。

2010年7月,NASA和Rackspace共同发布了著名的开源项目Openstack。

从国内来看,2009年,阿里巴巴率先成立了阿里云部门,一开始只对内服务于其自身的电商业务,如淘宝、天猫。2011年7月,阿里云开始正式对外销售云服务。

无论是国内还是国外,云计算的市场都快速发展。“Amazon把云计算做成一个大生意没有花太长的时间:不到两年时间,Amazon上的注册开发人员达44万人,还有为数众多的企业级用户。有第三方统计机构提供的数据显示,Amazon与云计算相关的业务收入已达1亿美元。云计算是Amazon增长最快的业务之一。”国内的阿里云也在2013年以后快速蓬勃发展。无论是国际巨头AWS(亚马逊)还是国内的阿里云,这些年都是快速增长,尤其阿里云,虽然体量暂时还远不及AWS,但一直都是超过100%的增长,让人侧目,如图1-3所示。图1-3 云计算营收对比:2013—2017年度亚马逊AWS和阿里云1.1.3 云计算的几种服务模型“云计算是推动IT转向以业务为中心模式的一次重大变革。它着眼于运营效率、竞争力和快速响应等实际成果。这意味着IT的作用正在从提供IT服务逐步过渡到根据业务需求优化服务的交付和使用。这种全新的模式将以前的信息孤岛转化为灵活高效的资源池和具备自我管理能力的虚拟基础架构,从而以更低的成本和以服务的形式提供给用户。IT即服务将提供业务所需要的一切,并在不丧失对系统的控制力的同时,保持系统的灵活性和敏捷性。”

云计算的模型是以服务为导向的,根据提供的服务层次不同,可分为:IaaS(Infrastructure as a Service,基础架构即服务)、PaaS(Platform as a Service,平台即服务)、SaaS(Software as a Service,软件即服务)。它们提供的服务越来越抽象,用户实际控制的范围也越来越小,如图1-4所示。图1-4 云计算服务层次模型

1.SaaS,软件即服务

云服务提供商提供给客户直接使用软件服务,如Google Docs、Microsoft CRM、Salesforce.com等。用户不必自己维护软件本身,只管使用软件提供的服务。用户为该软件提供的服务付费。

2.PaaS,平台即服务

云服务提供商提供给客户开发、运维应用程序的运行环境,用户负责维护自己的应用程序,但并不掌控操作系统、硬件以及运作的网络基础架构。如Google App Engine等。平台是指应用程序运行环境(图1-4中的Runtime)。通常,这类用户在云环境中运维的应用程序会再提供软件服务给他的下级客户。用户为自己的程序的运行环境付费。

3.IaaS,基础设施即服务

用户有更大的自主权,能控制自己的操作系统、网络连接(虚拟的)、硬件(虚拟的)环境等,云服务提供商提供的是一个虚拟的主机环境。如Google Compute Engine、AWS EC2等。用户为一个主机环境付费。

从图1-4中可以看到,无论是哪种云计算服务模型,虚拟化(Virtualization)都是其基础。那么什么是虚拟化呢?1.2 虚拟化技术1.2.1 什么是虚拟化

维基百科关于虚拟化的定义是:“In computing,virtualization refers to the act of creating a virtual(rather than actual)version of something,including virtual computer hardware platforms,storage devices,and computer network resources。”(在计算机领域,虚拟化指创建某事物的虚拟(而非实际)版本,包括虚拟的计算机硬件平台、存储设备,以及计算机网络资源)可见,虚拟化是一种资源管理技术,它将计算机的各种实体资源(CPU、内存、存储、网络等)予以抽象和转化出来,并提供分割、重新组合,以达到最大化利用物理资源的目的。

广义来说,我们一直以来对物理硬盘所做的逻辑分区,以及后来的LVM(Logical Volume Manager),都可以纳入虚拟化的范畴。

结合图1-4来看,在没有虚拟化以前(我们抽掉Virtualization层),一个物理的主机(Sever、Storage、Network层)上面只能支持一个操作系统及其之上的一系列运行环境和应用程序;有了虚拟化技术,一个物理主机可以被抽象、分割成多个虚拟的逻辑意义上的主机,向上支撑多个操作系统及其之上的运行环境和应用程序,则其资源可以被最大化地利用。图1-5 物理资源虚拟化示意

如图1-5所示的Virtual Machine Monitor(VMM,虚拟机监控器,也称为Hypervisor)层,就是为了达到虚拟化而引入的一个软件层。它向下掌控实际的物理资源(相当于原本的操作系统);向上呈现给虚拟机N份逻辑的资源。为了做到这一点,就需要将虚拟机对物理资源的访问“偷梁换柱”——截取并重定向,让虚拟机误以为自己是在独享物理资源。虚拟机监控器运行的实际物理环境,称为宿主机;其上虚拟出来的逻辑主机,称为客户机。

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

1.软件虚拟化技术

软件虚拟化,顾名思义,就是通过软件模拟来实现VMM层,通过纯软件的环境来模拟执行客户机里的指令。

最纯粹的软件虚拟化实现当属QEMU。在没有启用硬件虚拟化辅助的时候,它通过软件的二进制翻译仿真出目标平台呈现给客户机,客户机的每一条目标平台指令都会被QEMU截取,并翻译成宿主机平台的指令,然后交给实际的物理平台执行。由于每一条都需要这么操作一下,其虚拟化性能是比较差的,同时其软件复杂度也大大增加。但好处是可以呈现各种平台给客户机,只要其二进制翻译支持。

2.硬件虚拟化技术

硬件虚拟化技术就是指计算机硬件本身提供能力让客户机指令独立执行,而不需要(严格来说是不完全需要)VMM截获重定向。

以x86架构为例,它提供一个略微受限制的硬件运行环境供客户机运行(non-root mode),在绝大多数情况下,客户机在此受限环境中运行与原生系统在非虚拟化环境中运行没有什么两样,不需要像软件虚拟化那样每条指令都先翻译再执行,而VMM运行在root mode,拥有完整的硬件访问控制权限。仅仅在少数必要的时候,某些客户机指令的运行才需要被VMM截获并做相应处理,之后客户机返回并继续在non-root mode中运行。可以想见,硬件虚拟化技术的性能接近于原生系统,并且,极大地简化了VMM的软件设计架构。

Intel从2005年就开始在其x86 CPU中加入硬件虚拟化的支持——Intel Virtualization Technology,简称Intel VT。到目前为止,在所有的Intel CPU中,都可以看到Intel VT的身影。并且,每一代新的CPU中,都会有新的关于硬件虚拟化支持、改进的feature加入。也因如此,Intel x86平台是对虚拟化支持最为成熟的平台,本书将以Intel x86平台为例介绍KVM的虚拟化。1.2.3 半虚拟化和全虚拟化

1.半虚拟化

通过上一节的描述,大家可以理解,最理想的虚拟化的两个目标如下:

1)客户机完全不知道自己运行在虚拟化环境中,还以为自己运行在原生环境里。

2)完全不需要VMM介入客户机的运行过程。

纯软件的虚拟化可以做到第一个目标,但性能不是很好,而且软件设计的复杂度大大增加。

那么如果放弃第一个目标呢?让客户机意识到自己是运行在虚拟化环境里,并做相应修改以配合VMM,这就是半虚拟化(Para-Virtualization)。一方面,可以提升性能和简化VMM软件复杂度;另一方面,也不需要太依赖硬件虚拟化的支持,从而使得其软件设计(至少是VMM这一侧)可以跨平台且是优雅的。“本质上,准虚拟化弱化了对虚拟机特殊指令的被动截获要求,将其转化成客户机操作系统的主动通知。但是,准虚拟化需要修改客户机操作系统的源代码来实现主动通知。”典型的半虚拟化技术就是virtio,使用virtio需要在宿主机/VMM和客户机里都相应地装上驱动。

2.全虚拟化

与半虚拟化相反的,全虚拟化(Full Virtualization)坚持第一个理想化目标:客户机的操作系统完全不需要改动。敏感指令在操作系统和硬件之间被VMM捕捉处理,客户操作系统无须修改,所有软件都能在虚拟机中运行。因此,全虚拟化需要模拟出完整的、和物理平台一模一样的平台给客户机,这在达到了第一个目标的同时也增加了虚拟化层(VMM)的复杂度。

性能上,2005年硬件虚拟化兴起之前,软件实现的全虚拟化完败于VMM和客户机操作系统协同运作的半虚拟化,这种情况一直延续到2006年。之后以Intel VT-x、VT-d为代表的硬件虚拟化技术的兴起,让由硬件虚拟化辅助的全虚拟化全面超过了半虚拟化。但是,以virtio为代表的半虚拟化技术也一直在演进发展,性能上只是略逊于全虚拟化,加之其较少的平台依赖性,依然受到广泛的欢迎。1.2.4 Type1和Type2虚拟化

从软件框架的角度上,根据虚拟化层是直接位于硬件之上还是在一个宿主操作系统之上,将虚拟化划分为Typel和Type2,如图1-6所示。

Type1(类型1)Hypervisor也叫native或bare-metal Hypervisor。这类虚拟化层直接运行在硬件之上,没有所谓的宿主机操作系统。它们直接控制硬件资源以及客户机。典型地如Xen(见1.4.1节)和VMware ESX。

Type2(类型2)Hypervisor运行在一个宿主机操作系统之上,如VMware Workstation;或系统里,如KVM。这类Hypervisor通常就是宿主机操作系统的一个应用程序,像其他应用程序一样受宿主机操作系统的管理。比如VMware Workstation就是运行在Windows或者Linux操作系统上的一个程序而已。客户机是在宿主机操作系统上的一个抽象,通常抽象为进程。1.3 KVM简介1.3.1 KVM的历史

KVM全称是Kernel-based Virtual Machine,即基于内核的虚拟机,是采用硬件虚拟化技术的全虚拟化解决方案。图1-6 类型1和类型2的Hypervisor

KVM最初是由Qumranet公司的Avi Kivity开发的,作为他们的VDI产品的后台虚拟化解决方案。为了简化开发,Avi Kivity并没有选择从底层开始新写一个Hypervisor,而是选择了基于Linux kernel,通过加载模块使Linux kernel本身变成一个Hypervisor。2006年10月,在先后完成了基本功能、动态迁移以及主要的性能优化之后,Qumranet正式对外宣布了KVM的诞生。同月,KVM模块的源代码被正式纳入Linux kernel,成为内核源代码的一部分。作为一个功能和成熟度都逊于Xen的项目,在这么快的时间内被内核社区接纳,主要原因在于:

1)在虚拟化方兴未艾的当时,内核社区急于将虚拟化的支持包含在内,但是Xen取代内核由自身管理系统资源的架构引起了内核开发人员的不满和抵触。

2)Xen诞生于硬件虚拟化技术出现之前,所以它在设计上采用了半虚拟化的方式,这让Xen采用硬件虚拟化技术有了更多的历史包袱,不如KVM新兵上阵一身轻。

2008年9月4日,Redhat公司以1.07亿美元收购了Qumranet公司,包括它的KVM开源项目和开发人员。自此,Redhat开始在其RHEL发行版中集成KVM,逐步取代Xen,并从RHEL7开始,正式不支持Xen。1.3.2 KVM的功能概览

KVM从诞生开始就定位于基于硬件虚拟化支持的全虚拟化实现。它以内核模块的形式加载之后,就将Linux内核变成了一个Hypervisor,但硬件管理等还是通过Linux kernel来完成的,所以它是一个典型的Type 2 Hypervisor,如图1-7所示。图1-7 KVM功能框架

一个KVM客户机对应于一个Linux进程,每个vCPU则是这个进程下的一个线程,还有单独的处理IO的线程,也在一个线程组内。所以,宿主机上各个客户机是由宿主机内核像调度普通进程一样调度的,即可以通过Linux的各种进程调度的手段来实现不同客户机的权限限定、优先级等功能。

客户机所看到的硬件设备是QEMU模拟出来的(不包括VT-d透传的设备,详见6.2节),当客户机对模拟设备进行操作时,由QEMU截获并转换为对实际的物理设备(可能设置都不实际物理地存在)的驱动操作来完成。

下面介绍一些KVM的功能特性。

1.内存管理

KVM依赖Linux内核进行内存管理。上面提到,一个KVM客户机就是一个普通的Linux进程,所以,客户机的“物理内存”就是宿主机内核管理的普通进程的虚拟内存。进而,Linux内存管理的机制,如大页、KSM(Kernel Same Page Merge,内核的同页合并)、NUMA(Non-Uniform Memory Arch,非一致性内存架构)、通过mmap的进程间共享内存,统统可以应用到客户机内存管理上。

早期时候,客户机自身内存访问落实到真实的宿主机的物理内存的机制叫影子页表(Shadow Page Table)。KVM Hypervisor为每个客户机准备一份影子页表,与客户机自身页表建立一一对应的关系。客户机自身页表描述的是GVA→GPA的映射关系;影子页表描述的是GPA→HPA的映射关系。当客户机操作自身页表的时候,KVM就相应地更新影子页表。比如,当客户机第一次访问某个物理页的时候,由于Linux给进程的内存通常都是拖延到最后要访问的一刻才实际分配的,所以,此时影子页表中这个页表项是空的,KVM Hypervisor会像处理通常的缺页异常那样,把这个物理页补上,再返回客户机执行的上下文中,由客户机继续完成它的缺页异常。

影子页表的机制是比较拗口,执行的代价也是比较大的。所以,后来,这种靠软件的GVA→GPA→HVA→HPA的转换被硬件逻辑取代了,大大提高了执行效率。这就是Intel的EPT或者AMD的NPT技术,两家的方法类似,都是通过一组可以被硬件识别的数据结构,不用KVM建立并维护额外的影子页表,由硬件自动算出GPA→HPA。现在的KVM默认都打开了EPT/NPT功能。

2.存储和客户机镜像的格式

严格来说,这是QEMU的功能特性。

KVM能够使用Linux支持的任何存储来存储虚拟机镜像,包括具有IDE、SCSI和SATA的本地磁盘,网络附加存储(NAS)(包括NFS和SAMBA/CIFS),或者支持iSCSI和光线通道的SAN。多路径I/O可用于改进存储吞吐量和提供冗余。

由于KVM是Linux内核的一部分,它可以利用所有领先存储供应商都支持的一种成熟且可靠的存储基础架构,它的存储堆栈在生产部署方面具有良好的记录。

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

3.实时迁移

KVM支持实时迁移,这提供了在宿主机之间转移正在运行的客户机而不中断服务的能力。实时迁移对用户是透明的,客户机保持打开,网络连接保持活动,用户应用程序也持续运行,但客户机转移到了一个新的宿主机上。

除了实时迁移,KVM支持将客户机的当前状态(快照,snapshot)保存到磁盘,以允许存储并在以后恢复它。

4.设备驱动程序

KVM支持混合虚拟化,其中半虚拟化的驱动程序安装在客户机操作系统中,允许虚拟机使用优化的I/O接口而不使用模拟的设备,从而为网络和块设备提供高性能的I/O。

KVM使用的半虚拟化的驱动程序是IBM和Redhat联合Linux社区开发的VirtIO标准;它是一个与Hypervisor独立的、构建设备驱动程序的接口,允许多种Hypervisor使用一组相同的设备驱动程序,能够实现更好的对客户机的互操作性。

同时,KVM也支持Intel的VT-d技术,通过将宿主机的PCI总线上的设备透传(pass-through)给客户机,让客户机可以直接使用原生的驱动程序高效地使用这些设备。这种使用是几乎不需要Hypervisor的介入的。

5.性能和可伸缩性

KVM也继承了Linux的性能和可伸缩性。KVM在CPU、内存、网络、磁盘等虚拟化性能上表现出色,大多都在原生系统的95%以上。KVM的伸缩性也非常好,支持拥有多达288个vCPU和4TB RAM的客户机,对于宿主机上可以同时运行的客户机数量,软件上无上限。

这意味着,任何要求非常苛刻的应用程序工作负载都可以运行在KVM虚拟机上。

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载