vlambda博客
学习文章列表

QEMU/KVM源码分析之——虚拟机创建流程

、背景
Linux 系统下 QEMU/KVM 虚拟化架构有两部分: QEMU KVM

  • QEMU用户态虚拟机管理工具,它是一个普通的Linux进程,为客户机提供设备模拟的功能,包括模拟BIOSPCI/PCIE总线、磁盘、网卡、显卡、声卡、键盘、鼠标等。同时它通过ioctl系统调用与内核态的KVM模块进行交互



  • KVM内核模块,它属于标准Linux内核的一部分,是一个专门提供虚拟化功能的模块,主要负责CPU和内存的虚拟化,包括:客户机的创建、虚拟内存的分配、 CPU执行模式的切换、vCPU寄存器的访问、vCPU指令的执行。
QEMU KVM 通过 IOCTL 进行交互, Linux 系统下 QMEU/KVM 虚拟化架构见图1.1:

图1.1
二、虚拟机创建流程
2.1  KVM初始化流程
KVM Linux 系统下的一个内核模块,下面以 AMD x86 架构为例介绍 KVM 内核模块的初始化流程。kvm-amd 以内核模块的方式加载入 Linux 内核,然后执行 kvm_init() ,在 kvm_init() 中进行了一系列初始化,见图2.1.1:
QEMU/KVM源码分析之——虚拟机创建流程
图2.1.1

2.2 QEMUkvm_init注册流程
kvm_init QEMU 中创建虚拟机的入口,下图主要呈现了 kvm_init 的注册流程:
QEMU/KVM源码分析之——虚拟机创建流程
图2.2.1

2.3 虚拟机创建流程
kvm_init 发起创建虚拟机的的流程,见图2.3.1:
图2.3.1

2.4 vCPU创建流程
kvm_init 创建虚拟机时同时要创建 vCPU kvm_init 发起创建 vCPU 流程,见图2.4.1:
图2.4.1