专利名称:内存静态划分虚拟化方法
技术领域:
本发明涉及计算机设计领域,更具体地说,本发明涉及一种内存静态划分虚拟化方法。
背景技术:
内存虚拟化是在虚拟地址到物理地址映射的基础上增加一层映射关系,使虚拟地址映射到虚拟物理地址,再将虚拟物理地址映射到物理地址,同时使得每个虚拟机(Virtual Machine, VM)都认为自己独立运行在从O开始的虚拟物理地址上。内存虚拟化的实现形式有很多种方式,从内存分配角度看,有动态分配和静态分配两种形式。现有X86上商用或开源虚拟机管理器(VMM)均采用动态分配的方式实现内存虚拟化,虚拟机需要内存时再向宿主机请求内存。其中,虚拟机管理器是提供虚拟机环境底层基础技术支撑,并对虚拟机环境进行管理的底层系统软件。从底层技术基础上看,X86上商用或开源虚拟机管理器有两种实现方式。一种是采用软件方法修改虚拟机内核页表装填代码,管理虚拟地址到虚物理地址的代换,并配合虚拟机管理器为硬件提供影子页表,硬件并不使用虚拟机内核提供的页表,而是使用影子页表,将虚拟地址代换到机器地址。另外一种是基于X86硬件提供的NPT(AMD)或VT(Intel)内存虚拟化接口,由虚拟机管理器管理该硬件接口相关设置来实现内存虚拟化,该方法对虚拟机操作系统内核透明。现有方法的缺点主要是开销大:内存动态分配性能开销大:采用内存动态分配的方式时,内存分配由每一次虚拟机内页面缺失时触发,需要硬件捕获该异常,并保留虚拟机状态,然后切换到宿主机,由宿主机分配好内存,并设置好相应的硬件接口后再返回虚拟机,此时虚拟机才具备可用的物理内存。该流程较长,且属于串行操作,使得虚拟机内内存分配的性能较低。X86基于NPT或VT硬件的性能开销大:硬件提供了这些接口后,可不使用影子页表,也无需修改虚拟机内核,使得内存虚拟化对虚拟机完全透明,但该类接口的引入导致旁路转换缓冲(Translation Lookaside Buffer, TLB)缺失(Miss)(在本说明书中,旁路转换缓冲缺失简称“TLBMiss”)后装填时的访存次数大大增加,虚拟机的TLB性能开销较大。基于影子页表的方式空间开销大:具体地说,针对没一个虚拟机内核管理的页表,均需要构建另外一份该页表的影子页表提供给硬件使用,该方法使得页表所占用的空间加倍。
发明内容
本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种能够解决内存虚拟机的性能和空间开销问题的基于TLB Miss装填的内存静态划分虚拟化方法。根据本发明,提供了一种内存静态划分虚拟化方法,其特征在于包括:在进行虚地址转换时,首先查询TLB表,如果虚地址在表中命中,则直接根据TLB中的页表项PTE中的页帧号PFN确定虚地址所对应的物理地址;如果没有命中,则转入TLB的不命中处理流程。
优选地,在TLB的不命中处理流程中,从虚拟地址VA获得物理地址PA,再通过虚拟机控制寄存器中存储的虚拟机地址偏移Offset计算出物理地址PA对应的机器地址MA,再将机器地址MA装填至TLB中,其中,虚拟机地址偏移Offset为虚拟机控制寄存器中存放的虚拟机地址偏移量Offset。优选地,TLB的不命中处理流程包括:a)页表基地址寄存器中填的页表基地址是虚拟物理地址,先从虚拟机控制寄存器得到虚拟机地址偏移量Offset,加上页表基地址寄存器中的虚拟物理地址,得到页表基地址的机器地址MALI,其中,虚拟机地址偏移Offset为虚拟机控制寄存器中存放的虚拟机地址偏移量Offset ;b)从页表基地址的机器地址MALI所对应的页面中,取出第一级Levell的页表,从中取出页帧号,将页帧号乘以PAGE_SIZE,得到作为下一级页表的第二级Level2的页表的基地址的物理地址PAL1,再根据公式MAL2=PA Ll+0ffset计算出作为下一级页表的第二级Level2的页表的基地址的机器地址MAL2,其中,PAGE_SIZE为页面大小;c)从上一步得到的机器地址MAL2所对应的页面中取出第二级Level2的页表,从中取出页帧号,将页帧号乘以PAGE_SIZE,以得到作为下一级页表的第三级Level3的页表的基地址的物理地址PAL2,再根据公式MAL3=PAL2+0ffset计算出作为下一级页表的第三级Leve13的基地址的机器地址MAL3 ;d)从上一步得到的机器地址MAL3所对应的页面中取出第三级Level3的页表,从中取出页帧号,乘以PAGE_SIZE,得到下一级页表的基地址的物理地址PAL3,再根据公式MAL4=PAL3+0ffset计算出下一级页表基地址的机器地址MAL4 ;e)从上一步得到的机器地址MAL4所对应的页面中取出TLB的页表项PTE的页表,从中取出页帧号,将页帧号乘以PAGE_SIZE,以得到物理地址PAL4,再根据公式MA=PAL4+0ffset计算出机器地址MA,最终得到虚拟地址VA到机器地址MA的映射关系,并根据该机器地址MA装填硬件TLB。通过根据本发明实施例的TLB装填实现内存虚拟化的工作方法,在针对虚拟机,虚拟机内核认为的物理地址实际为虚拟的物理地址,所以虚拟机内核在其页表中放置的PFN实际上也是虚拟的物理地址。这样,在TLB不命中的处理流程中获取的各级页表的PFN需要按照虚拟物理地址到真实物理地址的代换关系进行处理,得到真实的物理地址后从中得到页表项条目,并确定最终的代换关系填入硬件。该代换关系为MA=PA+0fTset,且该Offset存放在处理器内部寄存器VPCR中,处理该代换关系不需增加额外访存,性能开销极低。本发明的一个主要优点在于采用固定连续分配虚拟机内存空间,可以避免维护复杂的物理地址PA到机器地址MA的映射关系,实现物理地址PA到机器地址MA的一次性代换,相比影子页表,该方式没有额外的页表维护开销和内存开销,并且虚拟机操作系统内核在管理页面时无需通知虚拟机管理器或宿主机内核,内存虚拟化对虚拟机操作系统完全透明。
结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:图1示意性地示出了内存静态分配示意图。图2示意性地示出了虚拟地址、物理地址和机器地址之间的关系。图3是一个没有内存虚拟化时,直接由虚拟地址VA代换出机器地址MA的代换示意图。图4示出了影子页表示意图。图5示出了 X86硬件支持的页表代换流程图。图6示意性地示出了根据本发明优选实施例的内存静态映射示意图。图7示意性地示出了根据本发明优选实施例的内存静态划分虚拟化TLB装填流程图。需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
具体实施例方式为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。与现有技术中采用动态分配的方式实现内存虚拟化,虚拟机需要内存时再向宿主机请求内存的方案不同;本发明实施例采用静态内存分配,在虚拟机创建之时预先分配固定大小的内存。相应地,在根据本发明实施例的基于TLB Miss装填的内存静态划分虚拟化方法中,以内存静态分配的方式,配合修改TLB Miss装填流程实现对虚拟机内核透明的内存虚拟化方式,具有低性能开销和低内存开销的特点。 下面将具体描述本发明的原理。图1示意性地示出了内存静态分配示意图如图1所示,以4GB的内存容量为例,内存中包括已分配区间Al和空闲区间A2(即,未分配区间)。定义地址描述符来表示已分配区间Al,描述符至少包含以下两个字段(或与之等价的字段):addr:地址区间的起始地址size:地址区间的长度维护地址描述符列表memlist,表示当前所有已分配的地址区间。<内存分配流程>在上述基础上,内存分配流程可按下述流程进行:假设申请的内存大小为len,首先将申请的内存的起始地址start设置为0,随后执行下述步骤:1.构造一个初始的地址区间R: [start, start+len);2.遍历memlist中的表项X:i)如果区间R与X所表示的地址区间存在交集,修改start为X所代表区间的上界,由此构造新的地址区间R: [start, start+len),继续遍历;
)如果区间R超出有效的物理内存范围,结束遍历,跳转3;iii)否则,就表明地址区间R在有效的物理内存范围内,且处于未分配状态,结束遍历,跳转4 ;3.分配失败,算法结束;4.构造新的地址描述符,其addr字段为start, size字段为len,将该描述符加到memlist表中。分配成功。内存申请成功后,将标记该虚拟机使用该段内存,并且将内存区域物理地址偏移量填入CPU内部虚拟机控制寄存器。〈释放内存流程〉假设所要释放的内存区间的地址描述符为A。遍历memlist中的表项,若存在一个表项M与A匹配,则从memlist中删除M,释放成功;否则即失败。内存释放成功后,将销毁该虚拟机相关信息,并清除CPU内部虚拟机控制寄存器中存放的内存区域物理地址偏移量信息。<通过TLB装填实现内存虚拟化的工作原理>虚拟机管理器的内存模块负责完成物理地址到机器地址的映射,我们将这个映射记为f,同时,虚拟机内核的内存管理模块要完成虚拟地址到物理地址的映射,我们将这个映射记为g,则虚拟地址、物理地址和机器地址之间的关系如图2所示。内存虚拟化的方法同CPU处理器体系结构相关。现代处理器均支持虚地址,内存分页管理,从一个虚地址映射到物理地址都要由操作系统维护的页表来建立映射关系。处理器为了加快虚地址到物理地址`的翻译速度,在芯片内提供了一个旁路转换缓冲(TLB,Translation lookaside buffer),在其中存储最近使用的页表项PTE。处理器在特定的模式下访存时均以虚地址查询TLB后计算出物理地址再进行操作。在进行虚地址转换时,首先查询TLB表,如果虚地址在表中命中,则直接根据TLB中的页表项PTE中的页帧号PFN确定虚地址所对应的物理地址;如果没有命中,则转入TLB的不命中处理流程。图3是一个没有内存虚拟化时,直接由虚拟地址代换出机器地址的代换示意图。如图3所示,以四级页表为例,如图3所示,输入的虚拟地址VAO经过四次页表的查找,可以得到最终的机器地址ΜΑ0。在内存虚拟化后,由于多增加了一个地址代换关系,虚拟机所认为的物理地址不是最终的机器地址,虚拟机内核准备的页表也就不是符合硬件需求的最终页表,必须要对页表进行处理,或修改页表代换流程以实现内存虚拟化。由虚拟机管理器或宿主机操作系统对虚拟机页表进行处理的方式称为影子页表技术。图4示出了影子页表示意图。硬件在进行页表代换时采用处理过的影子页表,可以将虚拟机提供的虚拟地址VAl代换为真正的机器地址MAl。这个方式要求虚拟机在创建页表的同时,首先需要陷入到宿主机操作系统准备好影子页表,才能够访问相应的页面。另外,虚拟机操作系统内核每一次对页表的修改,都必须要反应到影子页表中才能够生效。该方式实现的内存虚拟化对操作系统内核并不透明,一般仅在Linux类可修改内核的操作系统上使用。影子页表的引入,对硬件进行页表代换时并不会增加开销,但是维护影子页表会引入额外的空间开销和性能开销。内存空间越大,所需影子页表空间也就越大。另外一种实现内存虚拟化的方式是修改页表代换流程。图5示出了 X86硬件支持的页表代换流程图。该方式通常由硬件提供,如图5所示。由于虚拟机提供的是物理地址,只有宿主机或虚拟机管理器才有物理地址到机器地址的代换表,所以页表代换流程里,得到每一级页表的物理地址时,均需要到物理地址到机器地址的代换页表里得到真正的机器地址,才能得到下一级页表项。如此进行代换,最终得到真正的机器地址。X86体系结构中,AMD的Nested Page和Intel的VT技术,均采用这种方式的页表代换流程以实现虚拟化。Nested Page和EPT技术均可以做到按照页面粒度来管理虚拟机所使用的内存,但是在TLB不命中的流程中要增加多次查询物理地址PA到机器地址MA的索引表的动作,意味着要增加多次访存。这是由于该两种技术均维护一个复杂的映射关系f,该映射关系也需要安装四级页表代换才能够得到,这会带来很大的性能开销。<本发明实施例的具体示例>图6示意性地示出了根据本发明优选实施例的内存静态映射示意图。图7示意性地示出了根据本发明优选实施例的内存静态划分虚拟化TLB装填流程图。 按照“内存分配流程”部分提出的虚拟机内存静态分配方法,多个虚拟机自身的虚拟物理内存页面在真正的物理内存中是连续排布的。采用静态内存划分得到的物理地址PA到机器地址MA的映射关系表,可用类似图6的映射方式表示。物理地址PA到机器地址MA的映射关系f为 映射,简单的用如下公式来表不:MA=PA+0ffset为了得到虚拟地址VA到机器地址MA的映射关系,TLB不命中的处理流程中需要增加一些运算,从虚拟地址VA获得物理地址PA,再通过VPCR中存储的Offset计算出物理地址PA对应的机器地址MA,再将机器地址MA装填至TLB中。如此,实现内存虚拟化的TLB不命中的装填将是如下的流程:a)页表基地址寄存器中填的页表基地址是虚拟物理地址,先从虚拟机控制寄存器得到虚拟机地址偏移量Offset,加上页表基地址寄存器中的虚拟物理地址,得到页表基地址的机器地址MALI,其中,虚拟机地址偏移Offset为虚拟机控制寄存器中存放的虚拟机地址偏移量Offset ;b)从页表基地址的机器地址MALI所对应的页面中,取出第一级Level I的页表,从中取出页帧号,将页帧号乘以PAGE_SIZE,得到作为下一级页表的第二级Level2的页表的基地址的物理地址PAL1,再根据公式MAL2=PA Ll+Offset计算出作为下一级页表的第二级Level2的页表的基地址的机器地址MAL2,其中,PAGE_SIZE为页面大小;c)从上一步得到的机器地址MAL2所对应的页面中取出第二级Level2的页表,从中取出页帧号,将页帧号乘以PAGE_SIZE,以得到作为下一级页表的第三级Level3的页表的基地址的物理地址PAL2,再根据公式MAL3=PAL2+0ffset计算出作为下一级页表的第三级Leve13的基地址的机器地址MAL3 ;d)从上一步得到的机器地址MAL3所对应的页面中取出第三级Level3的页表,从中取出页帧号,乘以PAGE_SIZE,得到下一级页表的基地址的物理地址PAL3,再根据公式MAL4=PAL3+0ffset计算出下一级页表基地址的机器地址MAL4 ;e)从上一步得到的机器地址MAL4所对应的页面中取出TLB的页表项PTE的页表,从中取出页帧号,将页帧号乘以PAGE_SIZE,以得到物理地址PAL4,再根据公式MA=PAL4+0ffset计算出机器地址MA,最终得到虚拟地址VA到机器地址MA的映射关系,并根据该机器地址MA装填硬件TLB。由此,根据本发明实施例的虚拟机内存静态分配和释放方案,在分配算法申请内存时,首先构造一个可能的区间,如果该区间超出有效的物理内存范围,或者与已有的内存区间存在交集,那么本次申请失败,返回错误信息;否则就表示该区间地址合法,且处于未分配状态,申请成功,构造一个新的描述符,加入内存已分配列表的末尾,同时标记该段内存为某虚拟机所属,并将该段内存的偏移地址设置到处理器内部某控制寄存器中。通过根据本发明实施例的TLB装填实现内存虚拟化的工作方法,在针对虚拟机,虚拟机内核认为的物理地址实际为虚拟的物理地址,所以虚拟机内核在其页表中放置的PFN实际上也是虚拟的物理地址。这样,在TLB不命中的处理流程中获取的各级页表的PFN需要按照虚拟物理地址到真实物理地址的代换关系进行处理,得到真实的物理地址后从中得到页表项条目,并确定最终的代换关系填入硬件。该代换关系为MA=PA+0fTset,且该Offset存放在处理器内部寄存器VPCR中,处理该代换关系不需增加额外访存,性能开销极低。本发明上述实施例的一个主要优点在于采用固定连续分配虚拟机内存空间,可以避免维护复杂的物理地址PA到机器地址MA的映射关系,实现物理地址PA到机器地址MA的一次性代换,相比影子页表,该方式没有额外的页表维护开销和内存开销,并且虚拟机操作系统内核在管理页面时无需通知虚拟机管理器或宿主机内核,内存虚拟化对虚拟机操作系统完全透明。本发明将偏移量放置在CPU内部寄存器中,在TLB Miss处理流程中,可以在TLBMiss不增加任何访存开销的情况下实现VA到PA再到MA的三级映射关系转换,同Intel VT或AMD NPT技术相比,内存虚拟化性能开销低。术语说明:TLB (Translation Lookaside Buffer):属于 CPU 内部一种缓存,存放虚拟地址到物理地址的映射关系,用于存储单元加速虚拟地址到物理地址的代换速度。TLB Miss =CPU将虚拟地址在代换到物理地址时,未在TLB中查找到代换关系,称为 TLB Miss。虚拟机(Virtual Machine, VM):通过软件模拟的具有完整硬件系统功能的、运行在Iv完全隔尚环境中的完整计算机系统。内存虚拟化:在虚拟地址到物理地址映射的基础上增加一层映射关系,使虚拟地址映射到虚拟物理地址,再将虚拟物理地址映射到物理地址,同时使得每个虚拟机都认为自己独立运行在从O开始的虚拟物理地址上。虚拟地址(virtual address, VA):用户程序以及操作系统核心使用的地址,其中操作系统核心仅少量使用虚地址。物理地址(physical address, PA):虚拟机操作系统核心看到的物理地址,经过VMM抽象,每个虚拟机的虚物理地址都是从O开始,并是连续的。机器地址(machine address, MA):实际硬件平台上的物理空间地址,即地址总线上应该出现的地址信号。页巾贞号(Page Frame Number, PFN):操作系统按照页面来管理内存,将所有内存从低到高划分成一个个固定大小的页面,并按照从低到高的顺序进行编号,该编号称为页帧号。虚拟机控制寄存器(VirtualMachine Private Control Register, VPCR):该寄存器为CPU内部用于存放虚拟机相关信息的寄存器。页表基地址寄存器(Page Table Base Register,PTBR):该寄存器为CPU内部用于存放页表基地址信息的寄存器。此外,需要说明的是,除非特别指出,否则说明书中的术语“第一”、“第二”、“第三”等描述仅仅用于区分说明书中的各个组件、元素、步骤等,而不是用于表示各个组件、元素、步骤之间的逻辑关系或者顺序关系等。可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
权利要求
1.一种内存静态划分虚拟化方法,其特征在于包括:在进行虚地址转换时,首先查询TLB表,如果虚地址在表中命中,则直接根据TLB中的页表项PTE中的页帧号PFN确定虚地址所对应的机器地址;如果没有命中,则转入TLB的不命中处理流程。
2.根据权利要求1所述的内存静态划分虚拟化方法,其特征在于,在TLB的不命中处理流程中,从虚拟地址VA获得物理地址PA,再通过虚拟机控制寄存器中存储的虚拟机地址偏移Offset计算出物理地址PA对应的机器地址MA,再将机器地址MA装填至TLB中,其中,虚拟机地址偏移Offset为虚拟机控制寄存器中存放的虚拟机地址偏移量Offset。
3.根据权利要求1或2所述的内存静态划分虚拟化方法,其特征在于,TLB的不命中处理流程包括: a)页表基地址寄存器中填的页表基地址是虚拟物理地址,先从虚拟机控制寄存器得到虚拟机地址偏移量Offset,加上页表基地址寄存器中的虚拟物理地址,得到页表基地址的机器地址MALI,其中,虚拟机地址偏移Offset为虚拟机控制寄存器中存放的虚拟机地址偏移量 Offset ; b)从页表基地址的机器地址MALI所对应的页面中,取出第一级Levell的页表,从中取出页帧号,将页帧号乘以PAGE_SIZE,得到作为下一级页表的第二级Level2的页表的基地址的物理地址PALl,再根据公式MAL2=PA Ll+Offset计算出作为下一级页表的第二级Level2的页表的基地址的机器地址MAL2,其中,PAGE_SIZE为页面大小; c)从上一步得到的机器地址MAL2所对应的页面中取出第二级Level2的页表,从中取出页帧号,将页帧号乘以PAGE_SIZE,以得到作为下一级页表的第三级Level3的页表的基地址的物理地址PAL2,再根据公式MAL3=PAL2+0ffset计算出作为下一级页表的第三级Level3的基地址的机器地址MAL3 ; d)从上一步得到的机器地址MAL3所对应的页面中取出第三级Level3的页表,从中取出页帧号,乘以PAGE_SIZE,得到下一级页表的基地址的物理地址PAL3,再根据公式MAL4=PAL3+0ffset计算出下一级页表基地址的机器地址MAL4 ; e)从上一步得到的机器地址MAL4所对应的页面中取出TLB的页表项PTE的页表,从中取出页帧号,将页帧号乘以PAGE_SIZE,以得到物理地址PAL4,再根据公式MA=PAL4+0ffset计算出机器地址MA,最终得到虚拟地址VA到机器地址MA的映射关系,并根据该机器地址MA装填硬件TLB。
全文摘要
本发明提供了一种内存静态划分虚拟化方法,包括在进行虚地址转换时,首先查询TLB表,如果虚地址在表中命中,则直接根据TLB中的页表项中的页帧号确定虚地址所对应的机器地址;如果没有命中,则转入TLB的不命中处理流程。在TLB的不命中处理流程中,从虚拟地址获得物理地址,再通过虚拟机控制寄存器中存储的虚拟机地址偏移计算出物理地址对应的机器地址,再将机器地址装填至TLB中。其中,所述虚拟机地址偏移为虚拟机控制寄存器中存放的虚拟机地址偏移量。
文档编号G06F12/10GK103116556SQ201310076740
公开日2013年5月22日 申请日期2013年3月11日 优先权日2013年3月11日
发明者王星焱, 殷红武, 沈金祥, 何升, 许国春 申请人:无锡江南计算技术研究所