virt-report虚拟化社区动态
Virtualization Internals

原理

结合源码与图解,分析虚拟化机制的设计、实现和演进。

基础机制

虚拟化基础

理解虚拟机的组成,以及 CPU、内存、设备和中断如何共同完成一次请求。

CPU 虚拟化

客户机执行、退出处理、调度与时钟,以及 TCG 指令翻译、代码缓存和执行交接。

KVM 虚拟时钟与定时器

从一次 1 毫秒定时任务出发,分析 TSC 变换、pvclock 共享时间基准、deadline 中断,以及暂停和迁移中的时间接续。

虚拟 CPU 模型与迁移兼容性

从两台 x86 主机的指令差异出发,说明 CPU 模型、运行状态与机器类型的约束,以及兼容基线的选择和检查。

内存虚拟化

客户机内存的地址转换、映射与脏页跟踪。

vCPU 与 NUMA 内存放置

分析客户机拓扑、线程亲和性、RAM 分配策略与 I/O 后端位置的配合,以及远端内存访问对延迟和带宽的影响。

设备与 I/O 虚拟化

从 virtqueue 与网络、存储、图形设备,到 vhost 后端、IOMMU 地址转换及直通设备管理。

virtio 设备初始化与特性协商

从 PCI 能力、状态握手到队列地址配置,跟踪一个 4 描述符队列如何开始工作,并区分失败、设备复位与队列复位。

中断虚拟化

从设备完成事件到客户机中断处理,分析路由、注入与硬件加速。

关键操作

虚拟机启动

从 Libvirt 请求到 QEMU 创建机器、KVM 初始化和客户机开始执行。

QEMU 虚拟机启动与 vCPU 初始化

以包含系统盘与网卡的 Q35 虚拟机为例,跟踪后端、KVM、CPU、内存与设备初始化,再到复位、固件和操作系统引导。

热迁移

内存迭代、停机控制、迁移流格式、多通道同步与后拷贝缺页处理。

QEMU 迁移流格式与状态恢复

从流头、内存页记录到 vCPU 与设备状态,逐层解析迁移流的字段、分段和结束标记,说明目的端如何恢复虚拟机状态。

热插拔

设备、CPU 与内存的在线增删、客户机通知和资源回收。

virtio-mem 的内存添加与回收

从目标容量到客户机页面隔离,分析 virtio-mem 的块协议、Linux 内存上线与异步回收,并观察扩缩容阻塞与重试。

热升级

QEMU 同机进程替换中的共享内存、状态恢复、兼容性与失败边界。

内部机制

QEMU 内部机制

进程初始化、QOM / qdev、内存模型、QMP 和事件循环。

QEMU AioContext、协程与 IOThread

沿一次文件写请求,分析事件分发、协程挂起与恢复、队列到 IOThread 的映射,以及多线程块层的同步边界。

QEMU 外部快照与在线块操作

从 A、B、C 镜像链和同一偏移的数据变化出发,比较 stream、commit、mirror 与 backup,解释活动盘切换、作业状态和取消边界。

KVM 内部机制

内核对象、vCPU 请求与跨 CPU 协调,联系执行循环、内存映射及事件处理。

KVM vCPU 请求与跨 CPU 同步

跟踪一次远端 TLB 刷新,解释请求位图、vCPU kick、进入竞争,以及 IPI 确认与操作完成之间的边界。

Libvirt 内部机制

守护进程启动、连接与驱动选择、RPC 编解码和调用分发。

Libvirt RPC 的编码与调用分发

以一次虚拟机信息查询为例,解析 RPC 报文、XDR 编码、服务端分发与响应匹配,并说明守护进程拆分后的调用边界。