内存预留方法及装置与流程

文档序号:12063600阅读:282来源:国知局
内存预留方法及装置与流程

本发明涉及内存管理技术领域,具体而言,涉及一种内存预留方法及装置。



背景技术:

通信技术的迅速发展对通信设备的功能提出了更高更多的要求,为了满足这些要求,对通信设备上内存的存储容量要求也随之变得越来越大。传统的4KB的普通内存页管理方式已经不能满足用户对设备性能的需求,于是产生了hugepage(大页面内存)的概念,hugepage是一种内存管理方式,与传统的4KB的普通内存页管理方式相比,该种机制管理的内存页尺寸更大,TLB(Translation Lookaside Buffer,翻译后备缓冲)的条目更少,大大提高内存的性能,降低CPU负载。

然而,在现有技术hugepage机制的内存预留方法中,分配给用户态应用程序的内存块在申请以后其物理地址可能不连续,在进行内存块调用时不方便,造成导致内存性能下降,CPU负载过大。



技术实现要素:

为了克服现有技术中的上述不足,本发的目的在于提供一种内存预留方法,所述方法包括:

在应用程序启动之前,获取用于预留给应用程序的多个内存块的物理地址,将所述多个内存块按照其对应的物理地址的大小关系进行排序;

将排序后的所述多个内存块按照其对应的物理地址从大到小的顺序逐一释放;

将释放后的所述多个内存块逐一重新申请,并记录重新申请后的所述多个内存块的物理地址与虚拟地址的对应关系。

进一步地,在上述方法中,所述获取用于预留给应用程序的多个内存块的物理地址的方式,包括:

根据预设配置信息获取需要预留给应用程序的内存块的数量以及每个内存块的大小;

根据所述内存块的数量及内存块的大小进行内存块申请,获取申请到的多个内存块的物理地址。

进一步地,在上述方法中,所述内存块为按照大页hugepage机制申请的物理内存块。

进一步地,在上述方法中,所述方法还包括:

遍历记录有所述多个内存块的物理地址与对应虚拟地址的内存块信息表,将所述多个内存块中所述物理地址与对应虚拟地址均连续的内存块合并为新的内存块,在所述内存块信息表中记录合并后的新的内存块的物理地址及虚拟地址。

进一步地,在上述方法中,所述将所述物理地址与对应虚拟地址均连续的内存块合并为新的内存块,记录合并后的新的内存块的物理地址及虚拟地址的步骤之后,所述方法还包括:

将所述内存块信息表中的内存块的信息发送给系统的内存管理单元,进行应用程序对所述内存块的调用。

本发明的另一目的在于提供一种内存预留装置,所述装置包括:

内存块排序模块,用于在应用程序启动之前,获取用于预留给应用程序的多个内存块的物理地址,将所述多个内存块按照其对应的物理地址的大小关系进行排序;

内存块释放模块,用于将排序后的所述多个内存块按照其对应的物理地址从大到小的顺序逐一释放;

内存块重申请模块,用于将释放后的所述多个内存块逐一重新申请,并记录重新申请后的所述多个内存块的物理地址与虚拟地址的对应关系。

进一步地,在上述装置中,所述内存块排序模块获取用于预留给应用程序的多个内存块的物理地址的方式,包括:

根据预设配置信息获取需要预留给应用程序的内存块的数量以及每个内存块的大小;

根据所述内存块的数量及内存块的大小进行内存块申请,获取申请到的多个内存块的物理地址。

进一步地,在上述装置中,所述内存块为按照hugepage机制申请的物理内存块。

进一步地,在上述装置中,所述装置还包括:

内存块合并模块,用于遍历记录有所述多个内存块的物理地址与对应虚拟地址的内存块信息表,将所述多个内存块中所述物理地址与对应虚拟地址均连续的内存块合并为新的内存块,在所述内存块信息表中记录合并后的新的内存块的物理地址及虚拟地址。

进一步地,在上述装置中,所述装置还包括:

内存块信息发送模块,用于将所述内存块信息表中的内存块的信息发送给系统的内存管理单元,进行应用程序对所述内存块的调用。

相对于现有技术而言,本发明具有以下有益效果:

本发明提供的内存预留方法及装置,通过在用户态应用程序运行之前,对系统为用户态应用程序申请的多个内存块按照其对应的物理地址从大到小的顺序逐一释放后重新申请,使得重新申请后的所述多个内存块的物理地址与虚拟地址均连续。如此,可以有效减少内存块合并过程中的内存碎片,提高内存性能,减小CPU的负载。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明实施例提供的通信设备的示意图;

图2为本发明实施例提供的内存预留方法的流程示意图之一;

图3为本发明实施例提供的内存块地址示意图之一;

图4为本发明实施例提供的内存块地址示意图之二;

图5为本发明实施例提供的内存块地址示意图之三;

图6为本发明实施例提供的内存预留方法的流程示意图之二;

图7为本发明实施例提供的内存块地址示意图之四;

图8为本发明实施例提供的内存预留装置示意图之一;

图9为本发明实施例提供的内存预留装置示意图之二。

图标:100-通信设备;120-存储器;130-处理器;110-内存预留装置;111-内存块排序模块;112-内存块释放模块;113-重申请模块;114-内存块合并模块;115-内存块信息发送模块。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

本实施例提供的内存预留的方法应用于基于Linux系统的通信设备。请参照图1,图1为本实施例提供的所述基于Linux系统的通信设备100的方框示意图。所述通信设备100包括内存预留装置110、存储器120及处理器130。

所述存储器120、处理器130及各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述内存预留装置110包括至少一个可以应用程序或固件(firmware)的形式存储于所述存储器120中或固化在所述通信设备100的操作系统(operating system,OS)中的应用程序功能模块。所述处理器130用于执行所述存储器120中存储的可执行模块,例如所述内存预留装置110所包括的应用程序功能模块及计算机程序等。

其中,所述存储器120可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。其中,存储器120用于存储程序,所述处理器130在接收到执行指令后,执行所述程序。

所述处理器130可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DSP))、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

请参照图2,图2为应用于图1所示的通信设备100的内存预留方法,所述方法包括以下步骤。

步骤S110,在应用程序启动之前,获取用于预留给应用程序的多个内存块的物理地址,将所述多个内存块按照其对应的物理地址的大小关系进行排序。

在本实施例中,采用hugepage内存机制进行内存块的申请。具体地,所述通信设备100在系统启动时,在所有用户态应用程序启动之前,获取一配置文件中的预设配置信息,所述预设配置信息中包括需要预留给应用程序的内存块的预设数量及每个内存块的预设大小。

所述通信设备100根据所述内存块的数量及内存块的大小进行内存块申请,并获得申请到的所述多个内存块的物理地址。在本实施例中,所述预设内存块大小可以设置为32M。

请参照图3,所述通信设备100预申请出的内存块信息如图3所示,申请出的所述多个内存块的虚拟地址是线性增长的,但物理地址可能不是线性增长的或可能不是连续的。

所述通信设备100获取申请到的所述多个内存块的物理地址后,将所述多个内存块按照其对应的物理地址的大小关系进行排序。如图4所示,在本实施例中,可以按照所述多个内存块物理地址从小到大的顺序进行排序。

步骤S120,将排序后的所述多个内存块按照其对应的物理地址从大到小的顺序逐一释放。

步骤S130,将释放后的所述多个内存块逐一重新申请,并记录重新申请后的所述多个内存块的物理地址与虚拟地址的对应关系。

具体地,Linux系统在进行内存块申请时,较后释放的内存块在重新申请时会较先被申请,故在本实施例中,由于所述通信设备100在步骤S120中释放时是按照所述多个内存块时按照其对应的物理地址从大到小的顺序逐一释放的,在进行重新申请时所述通信设备100会按照物理地址从小到大的顺序对所述多个内存块进行重新申请。

如此,由于重新申请时所述多个内存块的虚拟地址必然是从小到大递增的,且申请时所述多个内存块的物理地址也是从小到大递增的,故所述多个内存块在经过重新申请后,其虚拟地址与物理地址的对应关系如图5所示。

进一步地,请参照图6,所述方法还可包括步骤S140。

步骤S140,遍历记录有所述多个内存块的物理地址与对应虚拟地址的内存块信息表,将所述多个内存块中所述物理地址与对应虚拟地址均连续的内存块合并为新的内存块,在所述内存块信息表中记录合并后的新的内存块的物理地址及虚拟地址。

具体地,所述通信设备100中有一内存块信息表,所述内存块信息表中记录有经步骤S130后所述多个内存块的物理地址与虚拟地址的内存块信息表。

所述通信设备100遍历所述内存块信息表,查找出其中物理地址与第二虚拟地址均连续的内存块,将所述物理地址与所述第二虚拟地址均连续的内存块合并为新的内存块,并在所述内存块信息表中记录合并后的新的内存块的物理地址及虚拟地址,如图7所示。由于经步骤S130重新申请后的内存块的物理地址与第二虚拟地址均是线性增长的,所以在本步骤的合并过程中可以有效避免因地址不连续造成的合并错误或产生内存碎片。合并后减少了内存块数量,使得TLB条目更少,可以进一步提高内存的性能,降低CPU的负载。

进一步地,所述通信设备100在步骤S150之后,所述通信设备100将所述内存块信息表中的内存块信息发送给系统的内存管理单元,以用于用户态应用程序对所述多个内存块的调用。

值得说明的是,本实施例中步骤S110至步骤S140均为所述通信设备100在用户态应用程序启动前执行,用户态应用程序调用经步骤S110至步骤S140处理后的内存块时,可以最大限度地保证调用到的内存块的物理地址与虚拟地址均是连续的,有效减少内存碎片,提高所述通信设备100的整体性能。

请参照图8,本实施例还提供一种内存预留装置110,所述装置包括:内存块排序模块111、内存块释放模块112及内存块重申请模块113。

所述内存块排序模块111用于在应用程序启动之前,获取用于预留给应用程序的多个内存块的物理地址,将所述多个内存块按照其对应的物理地址的大小关系进行排序。

具体地,所述内存块排序模块111获取用于预留给应用程序的多个内存块的物理地址的方式,包括:

根据预设配置信息获取需要预留给应用程序的内存块的数量以及每个内存块的大小;

根据所述内存块的数量及内存块的大小进行内存块申请,获取申请到的多个内存块的物理地址。

所述内存块释放模块112用于将排序后的所述多个内存块按照其对应的物理地址从大到小的顺序逐一释放。

所述内存块重申请模块113用于将释放后的所述多个内存块逐一重新申请,并记录重新申请后的所述多个内存块的物理地址与虚拟地址的对应关系。

具体地,所述内存块为按照大页hugepage机制申请的物理内存块。

进一步地,请参照图9,所述装置还包括内存块合并模块114.

所述内存块合并模块114用于遍历记录有所述多个内存块的物理地址与虚拟地址的内存块信息表,将所述多个内存块中所述物理地址与对应虚拟地址均连续的内存块合并为新的内存块,在所述内存块信息表中记录合并后的新的内存块的物理地址及虚拟地址。

进一步地,请再次参照图9,所述装置还包括内存块信息发送模块115。

所述内存块信息发送模块115用于将所述内存块信息表中的内存块的信息发送给系统的内存管理单元,进行应用程序对所述内存块的调用。

综上所述,本发明提供的内存预留方法及装置,通过在用户态应用程序运行之前,对系统为用户态应用程序申请的多个内存块按照递增或递减的顺序逐一释放后重新申请,使得重新申请后的所述多个内存块的物理地址与虚拟地址均连续。如此,可以有效减少内存块合并过程中的内存碎片,提高内存性能,减小CPU的负载。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以应用程序功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以应用程序产品的形式体现出来,该计算机应用程序产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1