xen内存虚拟化的相关知识点
一:影子页表
什么是影子页表?
影子页表的技术出现在软件完全虚拟化的范畴内。
说破了,影子页表就是一个虚拟TLB,也可以叫做Cache。
它是谁和谁的TLB?
它是客户机虚拟地址(Guest virtual address)到宿主机物理地址(Host physical address)的TLB。
什么是客户机虚拟地址?
就象普通的物理机器上的OS一样,xen平台上的VM的OS也一样使用内存的分页机制以及MMU机制,因此这里不但有Guest virtual address,还有Guest physical address.按照常规的方法,Guest OS的虚拟内存管理机制完成的地址转换是GVA--->GPA,只完成这一步并不能访问到物理内存,因为GPA并不是真实的物理地址,所以要完成GPA--->HPA才能最终完成内存的寻址。
GPA--->HPA这一步是怎么实现的呢?
为了实现这一转换,VMM为每个虚拟机动态的维护了一张从GPA--->HPA的映射表,这张映射表是如何建立的呢?还得从客户机的缺页异常说起,如果客户机操作系统没有给这个客户机虚拟地址(GVA)分配客户机物理地页,那么VMM首先将这个缺页异常传递给Guest OS,有Guest OS为这个GVA分配客户机物理页,而有Guest OS分配客户机物理页需要修改Guest OS的页表,而这个动作会被VMM截获,余下的动作就有VMM来作了,它可以申请到一个宿主物理页,然后就可以填充上面的映射表。
给出示意图
|-------|
| GVA |----------------|
|-------| |
| |
V V
|-------| |---------|
| GPA | |Shadow PT|
|-------| |---------|
| |
V |
|-------| |
| HPA |------<---------|
|-------|
影子页表的创建过程:
影子页表的优缺点:
从时间上看,由于提供了影子页表供物理MMU直接寻址使用,大多数的内存的访问可以在不受VMM干预的情况下正常执行,没有额外的地址翻译开销。因此总体而言,影子页表为完全内存虚拟化减少了时间上的开销,但与在非虚拟化环境相比较仍有一定的差距。
从空间上看,影子页表的引入意味着VMM需要为每个客户机操作系统的每套页表结构都维护一套相应的影子页表(每进程一个),这会带来较大空间上的额外开销。考虑到宿主机上可能同时运行了多个客户机,而多个客户机上也可能同时运行多个进程,同时维护的影子页表所占用的物理地址空间可能非常惊人。另外,客户机操作系统在进程终止时会回收进程页表,而这类事件VMM无法直接获取,让VMM有机会回收已不再使用的影子页表,因此影子页表的设计中对影子页表占用的物理空间也通常会作优化处理。比如积极的影子页表回收机制。
内存虚拟化的优化:
1.自伸缩内存调节技术
balloon,气球驱动作为一个驱动模块安装在客户机端,它只为VMM提供了私有的交互接口,而不提供操作系统或上层应用程序调用的接口,通过和VMM交互,实现宿主机物理内存回收和分配。当VMM需要从客户机回收宿主机物理内存时,它通知植入客户机操作系统的气球模块,由气球模块调用客户机操作系统本身的内存分配函数分配客户机物理内存,VMM相应的把这些客户机物理内存所对应的宿主机物理内存回收掉。在这个过程中气球模块申请客户机物理内存,但并不真正有效地使用它们。而是通知VMM这些客户机物理内存对应的宿主机物理内存可以被回收,通过气球的“膨胀”实现了为VMM“圈地”的功能;而VMM将气球圈得的“地”顺理成章的回收掉,挪作他用,从而实现了宿主机物理内存的回收。
如何实现气球放气呢?当客户机操作系统企图访问这些已经被回收的机器物理内存对应的客户机物理内存时,VMM会重新给该客户机物理页分配一个新的机器物理内存页,到达归还物理内存的目的。
2.内存页共享技术
二:直接模式(direct model)
即Guest OS使用自己的页表直接访问机器内存。在该模式下,xen需要改写Guest OS内核中对页表的访问以及TLB的操作函数,利用Hypercall交由Xen来完成MMU的特权操作。
阅读(2751) | 评论(2) | 转发(1) |