KVM处理器管理和硬件辅助虚拟化技术
源自:
(
wenku.baidu /view/c956c82ef12d2af90242e6cc
)
摘 要:该文首先对 KVM 中 Guest OS 的调度执行了介绍,然后介绍了 KVM 的内存管理,
KVM 使用影子页表实现客户物理地址到主机物理地址的转换,最后详细地介绍了 KVM 中的设
备管理。
关键词:KVM;Guest OS;内存管理;设备管理
Intel 在2006年发布了硬件虚拟化技术。其中支持X86体系结构的称为Intel V T-x技术。ADM称为SVM技
术。
VT-x引入了一种新的处理器操作,叫做VMX(Virtual M achineE xtension),提供了两种处理器的工作
环境。VMCS结构实现两种环境之间的切换。VM E ntry使虚拟机进去客户模式,VM E xit使虚拟机退出客户
模式。
1 KVM 中 Guest OS 的调度执行
VMM调度Guest O S执行时,Qemu通过ioctl系统调用进入内核模式,在KVM D river中通过get_cpu获得
当前物理CPU的引用。之后将Guest状态从VMCS中读出。并装入物理CPU中。执行VMLAUCH指令使得物
理处理器进入非根操作环境,运行客户代码。
当Guest O S执行一些特权指令或者外部事件时,比如I/O访问,对控制寄存器的操作,MSR的读写数据
包到达等。都会导致物理CPU发生VMExit,停止运行Guest O S。将Guest O S保存到VMCS中,Host状态装入
物理处理器中,处理器进入根操作环境,KVM取得控制权,通过读取VMCS中VM_EXIT_REASON字段得
到引起VM E xit的原因。从而调用kvm_exit_handler处理函数。如果由于I/O获得信号到达,则退出到用户模
式的Qemu处理。处理完毕后,重新进入客户模式运行虚拟CPU。如果是因为外部中断,则在Lib K VM中做
一些必要的处理,重新进入客户模式执行客户代码。
2 KVM 中内存管理
KVM使用影子页表实现客户物理地址到主机物理地址的转换。初始为空,随着虚拟机页访问实效的增
加,影子页表被逐渐建立起来,并随着客户机页表的更新而更新。在KVM中提供了一个哈希列表和哈希函
数,以客户机页表项中的虚拟页号和该页表项所在页表的级别作为键值,通过该键值查询,如不为空,则
表示该对应的影子页表项中的物理页号已经存在并且所指向的影子页表已经生成。如为空,则需新生成一
张影子页表,KVM将获取指向该影子页表的主机物理页号填充到相应的影子页表项的内容中,同时以客户
机页表虚拟页号和表所在的级别生成键值,在代表该键值的哈希桶中填入主机物理页号,以备查询。但是
一旦Guest O S中出现进程切换,会把整个影子页表全部删除重建,而刚被删掉的页表可能很快又被客户机
使用,如果只更新相应的影子页表的表项,旧的影子页表就可以重用。因此在KVM中采用将影子页表中对
应主机物理页的客户虚拟页写保护并且维护一张影子页表的逆向映射表,即从主机物理地址到客户虚拟地
址之间的转换表,这样VM对页表或页目录的修改就可以触发一个缺页异常,从而被KVM捕获,对客户页
表或页目录项的修改就可以同样作用于影子页表,通过这种方式实现影子页表与客户机页表保持同步。系
统调用设置和调度虚拟处理器的运行。
3 KVM 中设备管理
一个机器只有一套I/o地址和设备。设备的管理和访问是操作系统中的突出问题、同样也是虚拟机实现
处理器管理和硬件辅助虚拟化技术