前言
为什么要写这本书
自《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,我们非常期待能够得到朋友们的真挚反馈。