第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
^ 收 起