KVM源码分析-基本工作原理

KVM模型结构

为什么有OS虚拟化?随着CPU计算能力的提高,单独的OS已不能充分利用CPU的计算能力。

  1. 很多应用的执行需要单独占用一个OS环境,如安全测试等;
  2. 而IaaS云计算厂商也是以OS为范围销售计算能力。那么在所有虚拟化方案中,都是由hypervisor取代原生的OS去控制具体硬件资源,而同时hypervisor将资源分配具体的VM,VM中运行的是没有修改过的OS,如果让VM中的OS能正常运行,hypervisor的任务就是模拟具体的硬件资源,让OS不能识别出是真是假。

1534126765804.png

当然上面的模型是Xen示例,OS对应用而言是硬件资源管理中心,那么hypervisor就是具体VM的OS了,KVM是就利用了这一点,利用现有的kernel代码,构建了一个hypervisor,这个样子内存分配,进程调度等就无需重写代码,如此hypervisor就是所谓的host(宿主机),VM中的OS就是guest(客户机)。

guest OS保证具体运行场景中的程序正常执行,而KVM的代码则部署在HOST上,Userspace对应的是QEMU,Kernel对应的是KVM Driver,KVM Driver负责模拟虚拟机的CPU运行,内存管理,设备管理等;QEMU则模拟虚拟机的IO设备接口以及用户态控制接口。QEMU通过KVM等fd进行IOCTL控制KVM驱动的运行过程。

1534126853439.png

如上图所示,guest自身有自己的用户模式和内核模式;

KVM工作原理

1534127005222.png

上图是一个执行过程图,

CPU虚拟化

Mem虚拟化

在OS代码中,应用也是占用所有的逻辑地址,同时不影响其他应用的关键点在于有线性地址这个中间层;

这样MEM虚拟化就是GVA->GPA->HPA的寻址过程,传统软件方法有影子页表,硬件虚拟化提供了EPT支持

总体描述到此,后面代码里面见真相。

参考

http://oenhan.com/kvm-src-1

END