首页>参考读物>计算机科学与技术>计算机网络

KVM实战:原理、进阶与性能调优
作者 : 任永杰 程舟 著
出版日期 : 2019-02-15
ISBN : 978-7-111-61981-9
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 454
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
这是一部兼具实战性、系统性又不乏深度的KVM虚拟化技术指南,既能让新人快速掌握KVM的基础知识,又能满足有经验的读者进阶学习的需求。
本书两位作者来自于阿里云和Intel,在云计算和KVM方面有深入的研究,他们将自己的经验倾囊相授,带你全面了解KVM的各种技术细节。
本书在逻辑上分为三大部分:
第一部分 基础篇(第1~5章)
以云计算、虚拟化的概念开篇,首先,详细介绍了KVM的原理和基础架构,以及KVM生产环境的构建;然后,详细讲解了libvirt、virsh、virt-manager等KVM主流管理工具,以及包括CPU、内存、存储、网络、图形界面等在内的各种核心基础功能。这部分内容将帮助读者打下扎实的KVM虚拟化技术基础。
第二部分 进阶篇(第6~9章)
从设备管理、内存管理、动态迁移、嵌套虚拟化、安全、CPU指令性能优化等几个特定的相对高阶的知识点详细展开。相信通过这部分内容的系统学习,读者可以对半虚拟化驱动、设备直接分配、设备热插拔、大页内存、NUMA、嵌套虚拟化、安全特性、CPU新指令集等一系列热门及高阶的名词和技术都会有比较深入的理解,并能培养起可以真正动手实践的能力。
第三部分 性能测试与调优篇(第10章)
从CPU、内存、网络、磁盘等各个方面来介绍性能评估工具与测试参考结果,同时介绍了CPU新指令(如AVX2等)、THP、KSM、NUMA等对性能的影响。读者可以根据本篇介绍的方法来对云服务器做性能评估,也可以对自己搭建的虚拟化环境做性能调优。

图书特色

阿里云和Intel的云计算与虚拟化技术专家联合撰写
系统性、实战性兼备的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,我们非常期待能够得到朋友们的真挚反馈。

上架指导

计算机/云计算

封底文字

2013年,当KVM在国内被广泛认可和使用时,本书的前身《KVM虚拟机化技术:实战与原理解析》填补了KVM图书的空白,所幸的是,口碑和销量都不错。5年多来,随着虚拟化技术和云计算的发展和普及,KVM已经成为云计算领域虚拟化技术的事实标准,与KVM相关的软硬件生态环境都发生了很大的变化,导致《KVM虚拟机化技术:实战与原理解析》里面的很多内容已经过时。应广大读者的要求,我们对这本书进行了大幅修改和重写,因为改动比较大,所以书名也做了相应的调整,使之与内容更加贴合。
总的来说,本书做了以下方面的调整:
实验的硬件、软件和操作系统均采用当前最新的版本;
所有的用例、图例都做了修改和更新;
对全书的结构做了较大的调整,内容逻辑和学习曲线更加合理;
删除和更新了原有过时的内容;
优化和补充了原有的部分内容,使之更深入和透彻;
新增了大量与新技术和作者新经验相关的内容。
……
具体的变化,前言中做了非常详尽的描述。

图书目录

前言
第一篇 KVM虚拟化基础
第1章 虚拟化简介2
1.1 云计算概述2
1.1.1 什么是云计算2
1.1.2 云计算的历史4
1.1.3 云计算的几种服务模型5
1.2 虚拟化技术6
1.2.1 什么是虚拟化6
1.2.2 软件虚拟化和硬件虚拟化7
1.2.3 半虚拟化和全虚拟化8
1.2.4 Type1和Type2虚拟化8
1.3 KVM简介9
1.3.1 KVM的历史9
1.3.2 KVM的功能概览10
1.3.3 KVM的现状12
1.3.4 KVM的展望13
1.4 其他的虚拟化解决方案简介14
1.4.1 Xen14
1.4.2 VMware14
1.4.3 HyperV16
1.4.4 Container17
1.5 本章小结17
第2章 KVM原理简介18
2.1 硬件虚拟化技术18
2.1.1 CPU虚拟化18
2.1.2 内存虚拟化20
2.1.3 I/O虚拟化22
2.1.4 Intel虚拟化技术发展24
2.2 KVM架构概述25
2.3 KVM内核模块26
2.4 QEMU用户态设备模拟27
2.5 与QEMU/KVM结合的组件28
2.6 KVM上层管理工具30
2.7 本章小结31
第3章 构建KVM环境32
3.1 硬件系统的配置32
3.2 安装宿主机Linux系统34
3.3 编译和安装KVM37
3.3.1 下载KVM源代码37
3.3.2 配置KVM39
3.3.3 编译KVM43
3.3.4 安装KVM44
3.4 编译和安装QEMU46
3.4.1 曾经的qemu-kvm46
3.4.2 下载QEMU源代码47
3.4.3 配置和编译QEMU47
3.4.4 安装QEMU49
3.5 安装客户机50
3.6 启动第一个KVM客户机53
3.7 本章小结53
第4章 KVM管理工具55
4.1 libvirt55
4.1.1 libvirt简介55
4.1.2 libvirt的安装与配置58
4.1.3 libvirt域的XML配置文件63
4.1.4 libvirt API简介76
4.1.5 建立到Hypervisor的连接78
4.1.6 libvirt API 使用示例82
4.2 virsh87
4.2.1 virsh简介87
4.2.2 virsh常用命令88
4.3 virt-manager95
4.3.1 virt-manager简介95
4.3.2 virt-manager编译和安装96
4.3.3 virt-manager使用96
4.4 virt-viewer、virt-install、virt-top和libguestfs105
4.4.1 virt-viewer105
4.4.2 virt-install106
4.4.3 virt-top107
4.4.4 libguestfs107
4.5  云计算管理平台109
4.5.1 OpenStack简介109
4.5.2 ZStack简介111
4.6 本章小结111
第5章 KVM核心基础功能112
5.1 硬件平台和软件版本说明112
5.2 CPU配置114
5.2.1 vCPU的概念115
5.2.2 SMP的支持116
5.2.3 CPU过载使用123
5.2.4 CPU模型124
5.2.5 进程的处理器亲和性和vCPU的绑定127
5.3 内存配置131
5.3.1 内存设置基本参数132
5.3.2 EPT和VPID简介133
5.3.3 内存过载使用136
5.4 存储配置137
5.4.1 存储配置和启动顺序137
5.4.2 qemu-img命令142
5.4.3 QEMU支持的镜像文件格式145
5.4.4 客户机存储方式149
5.5 网络配置150
5.5.1 用QEMU实现的网络模式151
5.5.2 使用直接的网桥模式154
5.5.3 用网桥实现NAT模式161
5.5.4 QEMU内部的用户模式网络170
5.5.5 其他网络选项174
5.6 图形显示175
5.6.1 SDL的使用175
5.6.2 VNC的使用177
5.6.3 VNC显示中的鼠标偏移186
5.6.4 非图形模式187
5.6.5 显示相关的其他选项189
5.7 本章小结191
第二篇 KVM虚拟化进阶
第6章 KVM设备高级管理194
6.1 半虚拟化驱动194
6.1.1 virtio概述194
6.1.2 安装virtio驱动196
6.1.3 使用virtio_balloon203
6.1.4 使用virtio_net208
6.1.5 使用virtio_blk210
6.1.6 内核态的vhost-net后端以及网卡多队列212
6.1.7 使用用户态的vhost-user作为后端驱动215
6.1.8 kvm_clock配置216
6.1.9 对Windows客户机的优化218
6.2 设备直接分配(VT-d)219
6.2.1 VT-d概述219
6.2.2 VFIO简介220
6.2.3 VT-d环境配置221
6.2.4 VT-d操作示例230
6.2.5 SR-IOV技术240
6.3 热插拔251
6.3.1 PCI设备热插拔252
6.3.2 PCI设备热插拔示例253
6.3.3 CPU的热插拔259
6.3.4 内存的热插拔260
6.3.5 磁盘的热插拔264
6.3.6 网卡接口的热插拔265
6.4 本章小结266
第7章 KVM内存管理高级技巧268
7.1 大页268
7.1.1 大页的介绍268
7.1.2 KVM虚拟化对大页的利用271
7.2 透明大页274
7.3 KSM277
7.3.1 KSM基本原理278
7.3.2 KSM操作实践280
7.3.3 QEMU对KSM的控制286
7.4 与NUMA相关的工具288
7.4.1 numastat289
7.4.2 numad290
7.4.3 numactl294
7.5 本章小结295
第8章 KVM迁移297
8.1 动态迁移297
8.1.1 动态迁移的概念297
8.1.2 动态迁移的效率和应用场景298
8.1.3 KVM动态迁移原理299
8.1.4 KVM动态迁移实践302
8.1.5 VT-d/SR-IOV的动态迁移306
8.2 迁移到KVM虚拟化环境307
8.2.1 virt-v2v工具介绍307
8.2.2 从Xen迁移到KVM308
8.2.3 从VMware迁移到KVM310
8.2.4 从VirtualBox迁移到KVM311
8.2.5 从物理机迁移到KVM虚拟化环境(P2V)312
8.3 本章小结313
第9章 其他高级功能314
9.1 嵌套虚拟化314
9.1.1 嵌套虚拟化的基本概念314
9.1.2 KVM嵌套KVM315
9.2 KVM安全318
9.2.1 SMEP/SMAP/MPX318
9.2.2 控制客户机的资源使用—cgroups319
9.2.3 SELinux和sVirt327
9.2.4 其他安全策略336
9.3 CPU指令相关的性能优化340
9.3.1 AVX/AVX2/AVX512340
9.3.2 XSAVE指令集342
9.3.3 AES新指令343
9.3.4 完全暴露宿主机CPU特性349
9.4 QEMU监控器351
9.4.1 QEMU monitor的切换和配置351
9.4.2 常用命令介绍352
9.5 qemu命令行参数358
9.5.1 回顾已用过的参数358
9.5.2 其他常用参数363
9.6 本章小结372
第三篇 性能测试与调优
第10章 KVM性能测试及参考数据374
10.1 虚拟化性能测试简介374
10.2 CPU性能测试376
10.2.1 CPU性能测试工具376
10.2.2 测试环境配置378
10.2.3 性能测试方法381
10.2.4 性能测试数据382
10.3 内存性能测试384
10.3.1 内存性能测试工具384
10.3.2 测试环境配置385
10.3.3 性能测试方法385
10.3.4 性能测试数据387
10.4 网络性能测试388
10.4.1 网络性能测试工具388
10.4.2 测试环境配置389
10.4.3 性能测试方法391
10.4.4 性能测试数据393
10.5 磁盘I/O性能测试394
10.5.1 磁盘I/O性能测试工具394
10.5.2 测试环境配置395
10.5.3 性能测试方法397
10.5.4 性能测试数据400
10.6 CPU指令集对性能的提升403
10.7 其他影响客户机性能的因素405
10.8 本章小结407
附录A Linux发行版中的KVM408
附录B 参与KVM开源社区417

教学资源推荐
作者: (美)Douglas E.Comer(普度大学)
作者: 朱先强 杨国利 朱承 张维明 著
参考读物推荐
作者: 王春海
作者: 范传辉 编著
作者: Ali Akbar,Keyur Shah