猜你喜欢
QEMU/KVM源码解析与应用

QEMU/KVM源码解析与应用

书籍作者:李强 ISBN:9787111661160
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:7275
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

《QEMU/KVM源码解析与应用》从源码层面对当今重要的虚拟化方案QEMU与KVM的实现进行了详细分析。涉及的源码包括QEMU程序的基本组成与重要组件、主板与固件虚拟化、CPU虚拟化、内存虚拟化、中断虚拟化、设备虚拟化等。本书的内容以QEMU和KVM代码分析为主,也涉及其他与虚拟化密切相关的代码,例如SeaBIOS和Linux内核中的virtio与VFIO的驱动代码。对虚拟化安全、容器与安全容器技术、虚拟化技术的下一步发展也做了简单介绍。
《QEMU/KVM源码解析与应用》可供从事云计算,特别是从事IaaS层相关工作的人员阅读和使用,也适合对底层计算机系统、虚拟机技术、操作系统技术感兴趣的读者学习和使用。虚拟化技术如今已经广泛应用于安全领域,本书还可供安全研究人员参考和使用。

前言
虚拟化是云计算的重要技术之一,虚拟化技术能够将一台服务器或者普通PC虚拟出多个虚拟机,每个虚拟机都可以以计算资源的形式出售给租户,既实现了资源的高效利用,也提供了计算、存储、网络等资源按需分配的功能。随着云计算技术不断取得进展,虚拟化技术也在最近十多年得到了飞速的发展。
QEMU和KVM作为虚拟化技术的典型代表,被广泛地应用在各家厂商的云计算系统中。学习和了解QEMU与KVM能够帮助读者更好地理解云计算,做到知其然也知其所以然。
从微观层面来讲,虚拟化技术能够实现整台计算机的模拟,所以虚拟化技术包含了计算机体系结构的方方面面。虚拟化技术的实现涉及CPU的运行机制、操作系统启动过程与固件的交互、各类硬件设备的接口、操作系统中的设备驱动与设备之间的通信等。学习虚拟化能够加深读者对整个计算机体系结构和操作系统的理解,增强“内功”。
QEMU和KVM作为开源的虚拟化技术,给我们提供了绝佳的了解和学习虚拟化的机会。笔者在2013年左右接触到虚拟化技术,随即被QEMU和KVM吸引,并且持续地学习其背后的设计思想与源码实现。在此之前,笔者所从事的行业为软件安全,虽然对软件的运行机制有比较透彻的理解,但是对于系统加电到程序运行中间的过程认知还仅限于书本。在充分学习了虚拟化技术之后,笔者总算能够站在一个比较高的角度来审视计算机系统并对种种假设进行验证。虚拟机作为物理机的映射,很大程度上还原了物理计算机系统中那些难为人知的奥秘。技术的发展日新月异,对于事物本质的理解会让我们更加自信。
本书以QEMU和KVM为主角对虚拟化技术涉及的相关源码进行了详细分析。第1章对QEMU和KVM的基本情况进行了介绍,第2章对QEMU的基本组件进行了分析,随后的几章对计算机系统各个组件的模拟进行了分析,比如固件、CPU、内存以及外设等,这些内容都是组成虚拟化的基本要素。“纸上得来终觉浅,绝知此事要躬行”,本书只是提供了QEMU和KVM基本原理的分析,读者还需要自己深入了解源码并多动手分析调试才能加深理解。更进一步,读者可以通过QEMU和KVM的邮件列表以及各类技术会议参与虚拟化社区的讨论学习。
笔者在本书中使用了大量的图片来帮助读者理解QEMU和KVM中各种纷繁复杂的流程与数据结构关系。对于Linux和计算系统中的部分通用术语,笔者认为使用英文比中文更好,因此没有翻译。
本书最早的写作始于2018年8月份左右,在此之前,笔者出于知识积累的需要已经写了一部分QEMU和KVM相关源码分析的文章。联想到自己初入虚拟化领域的茫然,笔者认为写一本QEMU和KVM源码分析的书不仅能够帮助刚进入这个行业的读者,也是对自己多年学习过程的积淀与总结。
本书使用的源码为QEMU-2.8.1、Linux kernel-4.4.161,SeaBIOS的版本更新非常缓慢,笔者用了一个当时还在开发中的版本,读者可以使用rel-1.11.2以及之后的版本。
本书能够顺利完成,离不开很多人的支持与帮助。首先要感谢我的妻子,写书的过程漫长而辛苦,感谢她给我莫大的鼓励以及对家庭的付出,让我能够坚持完成本书的编写。其次感谢各位朋友对我的帮助,感谢前公司给我提供的虚拟化安全研究工作,让我能够有机会全身心地潜入到QEMU和KVM相关的学习研究中,感谢现公司的领导对我写书的各种支持。感谢机械工业出版的车忱编辑在选题论证以及文字编辑方面的诸多辛苦付出。
目录
第1章 QEMU与KVM概述1
1.1 虚拟化简介1
1.1.1 虚拟化思想1
1.1.2 虚拟机简介2
1.1.3 系统虚拟化的历史3
1.2 QEMU与KVM架构介绍4
1.2.1 QEMU与KVM历史4
1.2.2 QEMU与KVM架构5
1.3 KVM API使用实例8
第2章 QEMU基本组件12
2.1 QEMU事件循环机制12
2.1.1 glib事件循环机制12
2.1.2 QEMU中的事件循环机制13
2.1.3 QEMU自定义事件源17
2.1.4 QEMU事件处理过程21
2.1.5 QEMU主循环监听的fd解析23
2.2 QEMU线程模型25
2.2.1 QEMU线程模型简介25
2.2.2 QEMU线程介绍26
2.3 QEMU参数解析27
2.4 QOM介绍32
2.4.1 类型的注册33
2.4.2 类型的初始化36
2.4.3 类型的层次结构39
2.4.4 对象的构造与初始化42
2.4.5 属性44
2.5 hmp与qmp介绍52
2.5.1 hmp与qmp52
2.5.2 qmp的使用53
2.5.3 qmp源码分析54
2.5.4 qmp命令添加56
第3章 主板与固件模拟58
3.1 Intel 440FX主板简介58
3.1.1 i440fx与piix3介绍58
3.1.2 QEMU模拟主板架构59
3.2 QEMU的主板模拟与初始化61
3.2.1 虚拟机初始化61
3.2.2 i440fx初始化64
3.2.3 中断和其他设备的初始化66
3.3 fw_cfg设备介绍67
3.3.1 fw_cfg设备的初始化67
3.3.2 向fw_cfg设备添加数据69
3.3.3 添加用户自定义数据74
3.3.4 数据的读取75
3.4 SeaBIOS分析79
3.4.1 SeaBIOS简介79
3.4.2 QEMU加载SeaBIOS80
3.4.3 SeaBIOS源码结构84
3.4.4 SeaBIOS的编译与调试91
第4章 CPU虚拟化93
4.1 CPU虚拟化介绍93
4.1.1 CPU虚拟化简介93
4.1.2 VMX架构简介93
4.1.3 VMCS介绍94
4.2 KVM模块初始化介绍97
4.2.1 KVM源码组织97
4.2.2 KVM模块初始化98
4.3 虚拟机的创建105
4.3.1 QEMU侧虚拟机的创建105
4.3.2 KVM侧虚拟机的创建107
4.4 QEMU CPU的创建110
4.4.1 CPU模型定义110
4.4.2 CPU对象的初始化113
4.4.3 CPU的创建120
4.5 KVM CPU的创建122
4.5.1 KVM创建VCPU流程122
4.5.2 QEMU与KVM之间的共享
数据126
4.5.3 VCPU CPUID构造128
4.6 VCPU的运行133
4.7 VCPU的调度144
第5章 内存虚拟化149
5.1 内存虚拟化简介149
5.2 QEMU内存初始化150
5.2.1 基本结构150
5.2.2 QEMU虚拟机内存初始化154
5.2.3 分配虚拟机RAM过程157
5.3 内存布局的提交161
5.3.1 内存更改通知161
5.3.2 虚拟机内存平坦化过程164
5.3.3 向KVM注册内存169
5.4 内存的分派174
5.4.1 内存分派表的构建174
5.4.2 页表简化182
5.4.3 地址分派184
5.5 KVM内存虚拟化186
5.5.1 虚拟机MMU初始化186
5.5.2 虚拟机物理地址的设置189
5.5.3 EPT页表的构建193
5.6 MMIO机制200
5.6.1 虚拟设备MMIO实现原理200
5.6.2 coalesced MMIO203
5.7 虚拟机脏页跟踪205
第6章 中断虚拟化210
6.1 中断机制简介210
6.1.1 中断分发方式210
6.1.2 中断线与中断向量211
6.2 中断模拟211
6.2.1 虚拟化环境下的中断注入212
6.2.2 PIC中断模拟214
6.2.3 I/O APIC中断模拟225
6.2.4 MSI中断模拟234
6.3 APIC虚拟化236
6.3.1 APICv简介236
6.3.2 APICv源码分析238
第7章 设备虚拟化245
7.1 设备虚拟化简介245
7.1.1 总线数据类型245
7.1.2 总线的创建248
7.1.3 设备数据类型249
7.1.4 设备的创建251
7.1.5 设备的树形结构252
7.2 PCI设备模拟258
7.2.1 PCI设备简介258
7.2.2 PCI设备的模拟260
7.2.3 PCI设备中断模拟270
7.3 设备模拟后端274
7.3.1 网卡模拟介绍275
7.3.2 网卡参数解析277
7.3.3 前端网卡设备的创建286
7.3.4 虚拟机网卡发包流程294
7.3.5 虚拟机网卡接收数据包297
7.4 virtio设备模拟298
7.4.1 virtio简介298
7.4.2 virtio设备的初始化300
7.4.3 virtio驱动的加载314
7.4.4 virtio驱动的初始化320
7.4.5 virtio设备与驱动的通信330
7.5 ioeventfd和irqfd347
7.5.1 eventfd原理347
7.5.2 ioeventfd351
7.5.3 irqfd358
7.6 vhost net简介362
7.6.1 vhost net介绍362
7.6.2 vhost的初始化363
7.6.3 vhost net网络模块367
7.6.4 vhost net的启动376
7.6.5 vhost net的收发包378
7.7 设备直通与VFIO380
7.7.1 VFIO简介380
7.7.2 VFIO相关内核模块分析387
7.7.3 VFIO与设备直通404
第8章 虚拟化杂项425
8.1 QEMU Guest Agent425
8.1.1 QEMU Guest Agent的使用425
8.1.2 qga源码分析426
8.1.3 qga的QEMU侧源码解析431
8.2 QEMU虚拟机热迁移439
8.2.1 热迁移的用法与基本原理439
8.2.2 热迁移流程分析441
8.2.3 热迁移中的脏页同步454
8.2.4 热迁移中的相关参数控制459
8.3 QEMU及虚拟化安全460
8.3.1 QEMU软件安全460
8.3.2 QEMU安全思考466
8.4 容器与虚拟化466
8.4.1 Docker容器467
8.4.2 gVisor467
8.4.3 nemu468
8.4.4 crosvm、Firecracker与
cloud-hypervisor468
附录 重要术语470
短评

写的一般吧

2020-09-20 09:06:03

书籍超级好看,品质值得信赖

2020-09-27 23:53:40

看源码的好书

2020-09-15 21:47:48

在买书不一定便宜,但是速度快,质量有保障。

2020-09-16 07:55:33

书很不错

2020-09-23 16:17:13

书内容不错,就是这装订质量。。。

2020-09-14 19:22:30

最近对系统虚拟化感兴趣,特别是QEMU。正巧新出了一本相关的书,于是迫不及待地买回来。先看了一段,相比于翻译书的拗口,这本书描述看上去很顺畅。开始对相关虚拟化的叙述也比较简明扼要,后面具体的还没有开始看,相信是有干货的。

2020-09-18 23:14:11

书籍内容还不错,值得学习。

2020-09-19 20:40:34