为什么要写这本书
自《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,用掌