一种内存管理方法及设备的制作方法

文档序号:6506666阅读:199来源:国知局
一种内存管理方法及设备的制作方法
【专利摘要】本发明的实施例公开了一种内存管理方法及设备,涉及计算机领域,能够解决对设备直通技术占用的内存造成非法访问和DMA数据被覆盖的问题。该方法包括:主机设备根据物理内存分配申请为DMA设备分配物理内存,将为DMA设备分配的物理内存标记为DMA物理内存,将为DMA设备分配的物理内存的地址转换为第一机器内存地址,并将第一机器内存地址对应的机器内存标记为DMA机器内存。本发明用于内存管理。
【专利说明】一种内存管理方法及设备
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种内存管理方法及设备。
【背景技术】
[0002]随着计算机的快速发展,越来越多的应用被部署到虚拟机上,这就对虚拟机的IO(Input and Output,输入和输出)性能有了更高的要求。
[0003]虚拟化内存页交换技术:在VMM (Virtual Machine Monitor,虚拟化平台)上,由虚拟化层为虚拟机分配内存。虚拟化层管理的真实的内存称为机器内存,虚拟机管理的内存称为物理内存,虚拟机内进程管理的内存称为虚拟内存。内存虚拟化一般指虚拟化层实现机器内存与物理内存之间对应关系的管理。为了提高内存复用率,虚拟化层会采用内存页交换机制,具体的说就是将机器内存上的部分内容保存到磁盘上,将该部分机器内存暂时用作其他用途,当需要使用原有内容时,通过缺页中断将磁盘上的数据重新导入回机器内存。内存页交换技术可以实现机器内存的超分配,提升了单服务器上的虚拟机密度。
[0004]设备直通技术:DMA (Direct Memory Access,直接内存存取)设备直接与计算机内存进行数据传输,实现了 DMA设备直接访问虚拟机内存,缩短了数据传输路径。不仅提升了虚拟机的IO性能,也降低了 CPU (Central Processing Unit,中央处理器)的负载压力。
[0005]但是,内存交换技术通过CPU访问内存页时触发缺页错误来避免访问非法内存,而现有的设备直通技术,无法正常触发和处理缺页中断,在使用内存页交换技术时,会出现对设备直通技术占用的内存造成非法访问和DMA数据被覆盖的问题,这使得虚拟化技术在同时实现虚拟机10性能的提升及虚拟机密度的增加时受到限制。

【发明内容】

[0006]本发明的实施例提供了一种内存管理方法及设备,能够解决对设备直通技术占用的内存造成非法访问和DMA数据被覆盖的问题。
[0007]为达到上述目的,本发明的实施例采用如下技术方案:
[0008]第一方面,本发明的实施例提供一种内存管理方法,包括:
[0009]主机设备根据物理内存分配申请为直接内存存取DMA设备分配物理内存;
[0010]所述主机设备将为所述DMA设备分配的所述物理内存标记为DMA物理内存;
[0011]具体的,所述主机设备利用虚拟化平台VMM接口将为所述DMA设备分配的所述物理内存标记为DMA物理内存;
[0012]所述主机设备将为所述DMA设备分配的所述物理内存的地址转换为第一机器内存地址;
[0013]所述主机设备将所述第一机器内存地址对应的机器内存标记为DMA机器内存。
[0014]结合第一方面,在第一种可能的实现方式中,所述所述主机设备将所述第一机器内存地址对应的机器内存标记为DMA机器内存之后,还包括:
[0015]所述主机设备将非DMA机器内存交换到硬盘。[0016]结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述所述主机设备将所述第一机器内存地址对应的机器内存标记为DMA机器内存之后,还包括:
[0017]所述主机设备根据物理内存释放申请释放为所述DMA设备分配的所述物理内存;
[0018]所述主机设备将释放的物理内存标记为非DMA物理内存;
[0019]所述主机设备将所述释放的物理内存的地址转换为第二机器内存地址;
[0020]所述主机设备将所述第二机器内存地址对应的机器内存标记为非DMA机器内存;
[0021]其中,所述第一内存地址是为DMA设备分配的DMA物理内存地址对应的机器内存地址;所述第二机器内存地址为DMA物理内存地址释放为非DMA物理内存地址后对应的机器内存地址。
[0022]第二方面,本发明的实施例提供了一种主机设备,包括至少一个虚拟机及虚拟化平台VMM,所述虚拟机包括:分配单元;所述VMM包括:接口单元和分类单元;
[0023]所述分配单元,用于根据物理内存分配申请为所述DMA设备分配物理内存;
[0024]所述接口单元,用于将所述分配单元为所述DMA设备分配的所述物理内存标记为DMA物理内存,并将所述分配单元为所述DMA设备分配的所述物理内存的地址转换为第一机器内存地址;
[0025]所述分类单元,用于获取所述接口单元转换获得的所述第一机器内存地址,并将获取的所述第一机器内存地址对应的机器内存标记为DMA机器内存。
[0026]结合第二方面,在第一种可能的实现方式中,所述VMM还包括交换单元,
[0027]所述交换单元,用于将非DMA机器内存交换到硬盘。
[0028]结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,
[0029]所述分配单元,还用于根据物理内存释放申请释放为所述DMA设备分配的所述物理内存;
[0030]所述接口单元,还用于将所述分配单元释放的所述物理内存标记为非DMA物理内存,将所述释放的物理内存的地址转换为第二机器内存地址;
[0031]所述分类单元,用于获取所述接口单元转换获得的所述第二机器内存地址,并将获取的所述第二机器内存地址对应的机器内存标记为非DMA机器内存。
[0032]本发明的实施例提供的内存管理方法及设备,通过主机设备为DMA设备分配物理内存,将为DMA设备分配的物理内存标记为DMA物理内存,并将DMA物理内存对应的机器内存标记为DMA机器内存,这样,将DMA机器内存用于直通设备访问,将非DMA机器内存用于内存页交换,解决了对设备直通技术占用的内存造成非法访问和DMA数据被覆盖的问题,有利于使得设备直通技术和内存页交换技术兼容的实现,从而在提升虚拟机输入输出IO性能的同时能够增加单服务器上的虚拟机密度。
【专利附图】

【附图说明】
[0033]为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,还可以根据这些附图获得其他的附图。[0034]图1为本发明的实施例提供的一种主机设备的结构示意图;
[0035]图2为本发明的另一实施例提供的一种主机设备的结构示意图;
[0036]图3为本发明的实施例提供的一种内存管理方法的流程示意图;
[0037]图4为本发明的另一实施例提供的一种内存管理方法的流程示意图;
[0038]图5为本发明的另一实施例提供的主机设备的硬件架构示意图;
[0039]图6为本发明另一实施例提供的内存管理方法中内存交换的流程示意图。
【具体实施方式】
[0040]下面将结合本发明的实施例中的附图,对本发明的实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
[0041]本发明的实施例提供了一种主机设备,参照图1所示,该主机设备10包括虚拟机101及VMM102,其中虚拟机101包括分配单元111,VMM102包括接口单元121及分类单元122。
[0042]分配单元111,用于,根据物理内存分配申请为DMA设备分配物理内存。
[0043]具体的,当有外部DMA设备需要访问虚拟机的物理内存时,主机设备生成物理内存分配申请,该物理内存分配申请为DMA设备访问所需要的物理内存大小,根据该物理内存分配申请,主机设备将分配专用于DMA设备访问的物理内存,参照图1所示,该内存分配申请可由驱动单元112根据外部直通设备的需求生成。
[0044]接口单元121,用于将分配单元111为DMA设备分配的物理内存标记为DMA物理内存,并将分配单元111为DMA设备分配的物理内存的地址转换为第一机器内存地址。
[0045]分类单元122,用于获取接收接口单元121转换的第一机器内存地址,并将获取的第一机器内存地址对应的机器内存标记为DMA机器内存。
[0046]这样,主机设备可以通过标记的DMA物理内存和DMA机器内存实现与直通设备之间的设备直通技术,即主机设备只向直通设备提供带有DMA标记的机器内存,而将没有DMA标记的机器内存用作内存页交换,从而避免同时在主机设备上使用内存页交换技术和设备直通技术时,造成的不兼容问题。
[0047]本发明的实施例提供的主机设备,通过利用虚拟机内部的分配单元为DMA设备分配物理内存,通过VMM上的接口单元将为DMA设备分配的物理内存标记为DMA物理内存,并利用分类单元将DMA物理内存对应的机器内存标记为DMA机器内存,解决了对设备直通技术占用的内存造成非法访问和DMA数据被覆盖的问题,使设备直通技术和内存页交换技术实现兼容,从而在提升虚拟机IO性能的同时能够增加单服务器上的虚拟机密度。
[0048]进一步的,参照图1所示,该主机设备10的虚拟机101还包括驱动单元112,VMM102还包括交换单元123 ;
[0049]交换单元123,用于将非DMA机器内存交换到硬盘。
[0050]当需要进行内存页交换时,交换单元123会根据DMA机器内存的标记避免将DMA机器内存交换出去,保证了在应用内存页交换技术的同时,设备直通技术也可以正常应用,即实现内存页交换技术与设备直通技术的兼容,从而在提升虚拟机IO性能的同时能够增加单服务器上的虚拟机密度。
[0051]可选的,[0052]驱动单元112,用于生成DMA设备的物理内存分配申请和DMA设备的物理内存释放申请。
[0053]分配单元111,还用于根据驱动单元112生成的物理内存释放申请释放为DMA设备分配的物理内存。
[0054]接口单元121,还用于将分配单元111释放的物理内存标记为非DMA物理内存,将释放的物理内存的地址转换为第二机器内存地址。
[0055]分类单元122,用于获取接口单元121转换的第二机器内存地址,并将获取的第二机器内存地址对应的机器内存标记为非DMA机器内存。
[0056]当然以上第一机器内存地址和第二机器内存地址可以为相同的机器内存地址,其中第一和第二只是为了区分其当前状态,即第一机器内存地址为接到物理内存分配申请后将要用于DMA设备访问的机器内存的地址,第二机器内存地址为接到物理内存释放申请后将要释放的DMA设备的机器内存的地址。
[0057]在DMA设备使用完为其分配的物理内存后,通过释放为DMA设备分配的物理内存,使该物理内存对应的机器内存也可以进行正常的内存交换,使设备直通技术的使用不影响内存页交换技术的应用,即实现内存页交换技术与设备直通技术的兼容,从而在提升虚拟机IO性能的同时能够增加单服务器上的虚拟机密度。
[0058]本发明的实施例提供的主机设备,通过利用虚拟机内部的分配单元为DMA设备分配物理内存,通过VMM上的接口单元将为DMA设备分配的物理内存标记为DMA物理内存,并利用分类单元将DMA物理内存对应的机器内存标记为DMA机器内存,解决了对设备直通技术占用的内存造成非法访问和DMA数据被覆盖的问题,使设备直通技术和内存页交换技术实现兼容,从而在提升虚拟机IO性能的同时能够增加单服务器上的虚拟机密度。
[0059]本发明的另一实施例提供了一种主机设备,其结构参照图2所示,该主机设备20包括:至少一个处理器201、数据总线202、存储器203及通信接口 204,至少一个处理器201、存储器203和通信接口 204通过数据总线202连接并完成相互间的通信,其中:
[0060]该数据总线202可以是工业标准体系结构ISA总线、外部设备互连PCI总线或扩展工业标准体系结构EISA总线等。该数据总线202可以分为地址总线、数据总线、控制总线等。为便于表示,图2中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。其中:
[0061]存储器203用于存储可执行程序代码,该程序代码包括计算机操作指令。存储器203可能包含高速RAM存储器,也可能还包括非易失性存储器,在本发明中存储器至少包括硬盘232和机器内存231。
[0062]处理器201可能是一个中央处理器CPU,或者是特定集成电路ASIC,或者是被配置成实施本发明实施例的一个或多个集成电路。
[0063]通信接口 204,用于实现主机设备和DMA设备之间的通信。
[0064]处理器201,还用于调用存储器203中的程序代码,用以执行上述设备实施例中虚拟机101及VMM102的操作,具体描述参照图1对应的设备实施例这里不再赘述。
[0065]本发明的实施例提供的主机设备,通过利用处理器为DMA设备分配物理内存,将为DMA设备分配的物理内存标记为DMA物理内存,并将DMA物理内存对应的机器内存标记为DMA机器内存,解决了对设备直通技术占用的内存造成非法访问和DMA数据被覆盖的问题,使设备直通技术和内存页交换技术实现兼容,从而在提升虚拟机IO性能的同时能够增加单服务器上的虚拟机密度。
[0066]本发明的实施例提供了一种内存管理方法,该方法通过上述设备实施例提供的主机设备实现,参照图3所示,该方法包括:
[0067]301、主机设备根据物理内存分配申请为DMA设备分配物理内存。
[0068]具体的,当有外部DMA设备需要访问虚拟机的物理内存时,主机设备生成物理内存分配申请,该物理内存分配申请包括DMA设备访问所需要的物理内存大小,根据该物理内存分配申请,主机设备将为DMA设备分配专用于该DMA设备访问的物理内存。
[0069]302、主机设备将为DMA设备分配的物理内存标记为DMA物理内存。
[0070]具体的,该标记在设备存储器中存储于该物理内存对应的机器内存之中。
[0071]303、主机设备将为DMA设备分配的物理内存的地址转换为第一机器内存地址。
[0072]物理内存是虚拟机管理的内存,是以机器内存为硬件基础的一种虚拟化的内存,物理内存地址与机器内存地址之间存在一一对应的映射关系,根据这种映射关系,将为DMA设备分配的物理内存的地址转换为第一机器内存地址,将物理内存对应的机器内存用于直通设备访问,就能实现直通设备访问虚拟机物理内存的过程。
[0073]304、主机设备将第一机器内存地址对应的机器内存标记为DMA机器内存。
[0074]具体的,该标记在设备存储器中存储于该物理内存对应的机器内存之中。
[0075]这样,主机设备可以通过标记的DMA物理内存和DMA机器内存实现与直通设备之间的设备直通技术,即主机设备只向直通设备提供带有DMA标记的物理内存和机器内存,而将没有DMA标记的机器内存用作内存页交换,从而避免同时在主机设备上使用内存页交换技术和设备直通技术时,造成的不兼容问题。
[0076]本发明的实施例提供的内存管理方法,通过主机设备为DMA设备分配物理内存,将为DMA设备分配的物理内存标记为DMA物理内存,并将DMA物理内存对应的机器内存标记为DMA机器内存,解决了对设备直通技术占用的内存造成非法访问和DMA数据被覆盖的问题,使设备直通技术和内存页交换技术实现兼容,从而在提升虚拟机IO性能的同时能够增加单服务器上的虚拟机密度。
[0077]本发明还提供了一种内存管理方法,该方法通过上述设备实施例提供的主机设备实现,参照图5所示,图5提供了该主机设备的硬件架构,包括在图2所提供的实体硬件设备上实现图1所提供的虚拟设备构架,其中图5包括:虚拟机501、VMM502、机器内存503、CPU504、硬盘505。其中虚拟机501与VMM502是构架在CPU504、机器内存503、硬盘505这些实体设备之上的虚拟设备。虚拟机501包括DMA设备驱动512、DMA内存分配器511、普通内存分配器513,VMM502包括VMM接口 521、DMA内存分类器522、内存交换装置523。对照图1,DMA设备驱动512实现驱动单元112的功能,DMA内存分配器511实现分配单元111的功能,VMM接口 521实现接口单元121的功能,DMA内存分类器522实现分类单元122的功能,内存页交换装置523实现交换单元123的功能。参照图4所示,该方法包括:
[0078]401、主机设备根据物理内存分配申请为DMA设备分配物理内存。
[0079]当有外部的DMA设备506要访问虚拟机501的物理内存时,虚拟机501内部的DMA设备驱动512会生成DMA设备的物理内存分配申请,并向DMA内存分配器511发送该物理内存分配申请。DMA内存分配器511根据DMA设备驱动512发送的物理内存分配申请向DMA设备506分配物理内存。
[0080]具体的,该物理内存分配申请包括DMA设备506访问所需要的物理内存大小,该物理内存分配申请用于告知分配器511分配专用于DMA设备506访问虚拟机501的物理内存。
[0081]此外,图5中还示出了普通内存分配器513,其中,普通内存分配器513用于主机设备在处理其他非直通设备的数据过程中的内存分配。
[0082]402、主机设备将为DMA设备分配的物理内存标记为DMA物理内存,并将为DMA设备分配的物理内存的地址转换为第一机器内存地址。
[0083]DMA内存分配器511为DMA设备506分配好物理内存后,VMM502中VMM接口 521会将分配给DMA设备506的物理内存标记为DMA物理内存,并且将分配给DMA设备506的物理内存的地址转换为第一机器内存地址。
[0084]物理内存是虚拟机管理的内存,是以机器内存为硬件基础的一种虚拟化的内存,物理内存地址与机器内存地址之间存在一一对应的映射关系,根据这种映射关系,将物理内存对应的机器内存用于DMA设备506访问,就能实现DMA设备506访问虚拟机501的物理内存的过程。
[0085]403、主机设备将第一机器内存地址对应的机器内存标记为DMA机器内存。
[0086]DMA内存分类器522根据VMM接口 521转换的第一机器内存地址,将第一机器内存地址对应的机器内存标记为DMA机器内存531,也就是将分配给DMA设备506的物理内存对应的机器内存标记为DMA机器内存531。结合步骤403,这两步完成了机器内存503和虚拟机501内部的物理内存之间的相互对应。
[0087]404、主机设备将非DMA机器内存交换到硬盘。
[0088]内存交换装置523通过DMA机器内存531的标记避免将DMA机器内存531交换出去,而后将没有DMA标记的机器内存,即非DMA机器内存532交换到硬盘505,实现内存交换。
[0089]其中,步骤403之后还包括:
[0090]405、主机设备根据物理内存释放申请释放为DMA设备分配的物理内存。
[0091]当DMA设备506使用完标记的DMA机器内存之后,即DMA设备506实现对虚拟机501的直通访问之后,DMA设备驱动512会生成DMA设备的物理内存释放申请,并向DMA内存分配器511发送该物理内存释放申请。
[0092]具体的该物理内存释放申请用于告知DMA内存分配器511将分配给DMA设备506的DMA物理内存标记为非DMA物理内存,即普通物理内存。
[0093]DMA内存分配器511根据DMA设备驱动512发送的物理内存释放申请释放被DMA设备506占用的物理内存。
[0094]对于内存页交换,即步骤404,只要机器内存没有DMA标记,就可以执行内存页交换,因此与直通技术的实现没有时间上的先后顺序。
[0095]406、主机设备将释放的物理内存标记为非DMA物理内存,并将释放的物理内存的地址转换为第二机器内存地址。
[0096]VMM接口 521在DMA设备506占用的物理内存被释放之后将被释放的物理内存标记为非DMA物理内存,并将被释放的物理内存的地址转换为第二机器内存地址。
[0097]407、主机设备将第二机器内存地址对应的机器内存标记为非DMA机器内存。[0098]DMA内存分类器522根据VMM接口 521转换的第二机器内存地址,将第二机器内存地址对应的机器内存标记为非DMA机器内存532,也就是将释放的物理内存对应的机器内存503标记为非DMA机器内存532,此后,该非DMA机器内存532也可用于正常交换。
[0099]这样,主机设备可以通过标记的DMA物理内存和DMA机器内存实现与直通设备之间的设备直通技术,即主机设备只向直通设备提供带有DMA标记的物理内存和机器内存,而将没有DMA标记的机器内存用作内存页交换,从而避免同时在主机设备上使用内存页交换技术和设备直通技术时,造成的不兼容问题。
[0100]可选的,步骤505中主机设备将非DMA机器内存以内存页的形式交换到硬盘,将非机器内存页交换到硬盘的过程具体包括以下步骤,如图6所示。
[0101]601、开始。
[0102]602、获取一个机器内存页。
[0103]603、判断获取的机器内存页的DMA类型;
[0104]如果该内存页为DMA机器内存页,直接执行步骤605 ;
[0105]如果该内存页为非DMA机器内存页,执行步骤604。
[0106]604、将非DMA机器内存页交换到硬盘。
[0107]605、判断是否还有其他内存页需要执行交换;
[0108]如果有其他内存页需要执行交换,则返回执行步骤602 ;
[0109]如果没有其他内存页需要执行交换,则执行步骤606。
[0110]606、结束。
[0111]本发明的实施例提供的内存管理方法,通过主机设备为DMA设备分配物理内存,将为DMA设备分配的物理内存标记为DMA物理内存,并将DMA物理内存对应的机器内存标记为DMA机器内存,解决了对设备直通技术占用的内存造成非法访问和DMA数据被覆盖的问题,使设备直通技术和内存页交换技术实现兼容,从而在提升虚拟机IO性能的同时能够增加单服务器上的虚拟机密度。
[0112]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
【权利要求】
1.一种内存管理的方法,其特征在于,包括: 主机设备根据物理内存分配申请为直接内存存取DMA设备分配物理内存; 所述主机设备将为所述DMA设备分配的所述物理内存标记为DMA物理内存; 所述主机设备将为所述DMA设备分配的所述物理内存的地址转换为第一机器内存地址; 所述主机设备将所述第一机器内存地址对应的机器内存标记为DMA机器内存。
2.根据权利要求1所述的方法,其特征在于,所述所述主机设备将为所述DMA设备分配的所述物理内存标记为DMA物理内存,包括: 所述主机设备利用虚拟化平台VMM接口将为所述DMA设备分配的所述物理内存标记为DMA物理内存。
3.根据权利要求1或2所述的方法,其特征在于,所述所述主机设备将所述第一机器内存地址对应的机器内存标记为DMA机器内存之后,还包括: 所述主机设备将非DMA机器内存交换到硬盘。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述所述主机设备将所述第一机器内存地址对应的机器内存标记为DMA机器内存之后,还包括: 所述主机设备根据物理内存释放申请释放为所述DMA设备分配的所述物理内存; 所述主机设备将释放的物理内存标记为非DMA物理内存; 所述主机设备将所述释放的物理内存的地址转换为第二机器内存地址; 所述主机设备将所述第二机器内存地址对应的机器内存标记为非DMA机器内存。
5.一种主机设备,包括至少一个虚拟机及虚拟化平台VMM,其特征在于,所述虚拟机包括:分配单元;所述VMM包括:接口单元和分类单元; 所述分配单元,用于根据物理内存分配申请为所述DMA设备分配物理内存; 所述接口单元,用于将所述分配单元为所述DMA设备分配的所述物理内存标记为DMA物理内存,并将所述分配单元为所述DMA设备分配的所述物理内存的地址转换为第一机器内存地址; 所述分类单元,用于获取所述接口单元转换获得的所述第一机器内存地址,并将获取的所述第一机器内存地址对应的机器内存标记为DMA机器内存。
6.根据权利要求5所述的主机设备,其特征在于,所述VMM还包括交换单元, 所述交换单元,用于将非DMA机器内存交换到硬盘。
7.根据权利要求5或6所述的主机设备,其特征在于, 所述分配单元,还用于根据物理内存释放申请释放为所述DMA设备分配的所述物理内存; 所述接口单元,还用于将所述分配单元释放的所述物理内存标记为非DMA物理内存,将所述释放的物理内存的地址转换为第二机器内存地址; 所述分类单元,用于获取所述接口单元转换获得的所述第二机器内存地址,并将获取的所述第二机器内存地址对应的机器内存标记为非DMA机器内存。
【文档编号】G06F12/06GK103455438SQ201310325944
【公开日】2013年12月18日 申请日期:2013年7月30日 优先权日:2013年7月30日
【发明者】顾嘉辉, 刘永安 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1