KVM-内存虚拟化及其实现.docx

KVM-内存虚拟化及其实现.docx

ID:57695532

大小:47.93 KB

页数:5页

时间:2020-09-01

KVM-内存虚拟化及其实现.docx_第1页
KVM-内存虚拟化及其实现.docx_第2页
KVM-内存虚拟化及其实现.docx_第3页
KVM-内存虚拟化及其实现.docx_第4页
KVM-内存虚拟化及其实现.docx_第5页
资源描述:

《KVM-内存虚拟化及其实现.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、KVM内存虚拟化及其实现简介:为保证客户机操作系统在虚拟环境下观察到的内存空间布局与在实际物理机环境下相同,就必须对内存进行虚拟化。对于内存虚拟化,目前主要有两种实现方法,其一是利用传统的影子页表进行虚拟化,其二就是通过硬件辅助进行实现。本文主要阐述了这两种内存虚拟化方法在KVM上的具体实现。概述KVM(KernelVirtualMachine),作为开源的内核虚拟机,越来越受到IBM,Redhat,HP,Intel等各大公司的大力支持,基于KVM的开源虚拟化生态系统也日益完善。而实现KVM虚拟化,使客户机高效地、安全地使用宿主机的内存资源,就必须实现内存的虚拟化。客户机物理地

2、址空间为了实现内存虚拟化,让客户机使用一个隔离的、从零开始且具有连续的内存空间,KVM引入一层新的地址空间,即客户机物理地址空间(GuestPhysicalAddress,GPA),这个地址空间并不是真正的物理地址空间,它只是宿主机虚拟地址空间在客户机地址空间的一个映射。对客户机来说,客户机物理地址空间都是从零开始的连续地址空间,但对于宿主机来说,客户机的物理地址空间并不一定是连续的,客户机物理地址空间有可能映射在若干个不连续的宿主机地址区间,如下图1所示:图1.客户机物理地址到宿主机虚拟地址的转换 由于客户机物理地址不能直接用于宿主机物理MMU进行寻址,所以需要把客户机物理地

3、址转换成宿主机虚拟地址(HostVirtualAddress,HVA),为此,KVM用一个kvm_memory_slot数据结构来记录每一个地址区间的映射关系,此数据结构包含了对应此映射区间的起始客户机页帧号(GuestFrameNumber,GFN),映射的内存页数目以及起始宿主机虚拟地址。于是KVM就可以实现对客户机物理地址到宿主机虚拟地址之间的转换,也即首先根据客户机物理地址找到对应的映射区间,然后根据此客户机物理地址在此映射区间的偏移量就可以得到其对应的宿主机虚拟地址。进而再通过宿主机的页表也可实现客户机物理地址到宿主机物理地址之间的转换,也即GPA到HPA的转换。实现

4、内存虚拟化,最主要的是实现客户机虚拟地址(GuestVirtualAddress,GVA)到宿主机物理地址之间的转换。根据上述客户机物理地址到宿主机物理地址之间的转换以及客户机页表,即可实现客户机虚拟地址空间到客户机物理地址空间之间的映射,也即GVA到HPA的转换。显然通过这种映射方式,客户机的每次内存访问都需要KVM介入,并由软件进行多次地址转换,其效率是非常低的。因此,为了提高GVA到HPA转换的效率,KVM提供了两种实现方式来进行客户机虚拟地址到宿主机物理地址之间的直接转换。其一是基于纯软件的实现方式,也即通过影子页表(ShadowPageTable)来实现客户虚拟地址到

5、宿主机物理地址之间的直接转换。其二是基于硬件对虚拟化的支持,来实现两者之间的转换。下面就详细阐述两种方法在KVM上的具体实现。影子页表由于宿主机MMU不能直接装载客户机的页表来进行内存访问,所以当客户机访问宿主机物理内存时,需要经过多次地址转换。也即首先根据客户机页表把客户机虚拟地址转传成客户机物理地址,然后再通过客户机物理地址到宿主机虚拟地址之间的映射转换成宿主机虚拟地址,最后再根据宿主机页表把宿主机虚拟地址转换成宿主机物理地址。而通过影子页表,则可以实现客户机虚拟地址到宿主机物理地址的直接转换。如下图2所示:图2.客户机物理地址到宿主机物理地址的转换 影子页表简化了地址转换

6、过程,实现了客户机虚拟地址空间到宿主机物理地址空间的直接映射。但是由于客户机中每个进程都有自己的虚拟地址空间,所以KVM需要为客户机中的每个进程页表都要维护一套相应的影子页表。在客户机访问内存时,真正被装入宿主机MMU的是客户机当前页表所对应的影子页表,从而实现了从客户机虚拟地址到宿主机物理地址的直接转换。而且,在TLB和CPU缓存上缓存的是来自影子页表中客户机虚拟地址和宿主机物理地址之间的映射,也因此提高了缓存的效率。在影子页表中,每个页表项指向的都是宿主机的物理地址。这些表项是随着客户机操作系统对客户机页表的修改而相应地建立的。客户机中的每一个页表项都有一个影子页表项与之相

7、对应。如下图3所示:图3.客户机页表和影子页表 为了快速检索客户机页表所对应的的影子页表,KVM为每个客户机都维护了一个哈希表,影子页表和客户机页表通过此哈希表进行映射。对于每一个客户机来说,客户机的页目录和页表都有唯一的客户机物理地址,通过页目录/页表的客户机物理地址就可以在哈希链表中快速地找到对应的影子页目录/页表。在检索哈希表时,KVM把客户机页目录/页表的客户机物理地址低10位作为键值进行索引,根据其键值定位到对应的链表,然后遍历此链表找到对应的影子页目录/页表。当然,如果不能发现对

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。