kk Blog —— 通用基础

date [-d @int|str] [+%s|"+%F %T"]

KVM源代码分析1:基本工作原理

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

1.KVM模型结构

所有的虚拟化方案都是两个模块:guest和host。在完全虚拟化方案里面,guest则完全有guest OS保证其功能,保证运行场景的程序正常执行。KVM修改则是在host上,有KVM Driver(内核态)和Qemu(用户态),KVM Driver负责模拟虚拟机的CPU运行,内存管理,设备管理等;Qemu则模拟虚拟机的IO设备接口以及用户态控制接口。

如上图所示,客户模式即是guest,它自身有自己的用户模式和内核模式;guest是在host中是作为一个用户态进程存在的,这个进程就是qemu,qemu本身就是一个虚拟化程序,只是纯软件虚拟化效率很低,它被KVM进行改造后,作为KVM的前端存在,用来进行创建进程或者IO交互等;而KVM Driver则是Linux内核模式,它提供KVM fd给qemu调用,用来进行cpu虚拟化,内存虚拟化等。Qemu通KVM提供的LibKvm应用程序接口,通过ioctl系统调用创建和运行虚拟机。KVM Driver使得整个Linux成为一个虚拟机监控器,负责接收qemu模拟效率很低的命令。

2.KVM工作原理

上图是一个执行过程图,首先启动一个虚拟化管理软件qemu,开始启动一个虚拟机,通过ioctl等系统调用向内核中申请指定的资源,搭建好虚拟环境,启动虚拟机内的系统,虚拟机内的系统向内核反馈相关资源申请处理,如果是io请求,则提交给用户模式下的qemu处理,非io请求则将处理结果反馈给客户模式。

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