CN103729300B - 非易失内存的管理方法和相关装置 - Google Patents

非易失内存的管理方法和相关装置 Download PDF

Info

Publication number
CN103729300B
CN103729300B CN201310727166.9A CN201310727166A CN103729300B CN 103729300 B CN103729300 B CN 103729300B CN 201310727166 A CN201310727166 A CN 201310727166A CN 103729300 B CN103729300 B CN 103729300B
Authority
CN
China
Prior art keywords
application
nonvolatile memory
memory
mentioned
kernel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310727166.9A
Other languages
English (en)
Other versions
CN103729300A (zh
Inventor
潘雪松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201310727166.9A priority Critical patent/CN103729300B/zh
Publication of CN103729300A publication Critical patent/CN103729300A/zh
Application granted granted Critical
Publication of CN103729300B publication Critical patent/CN103729300B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Memory System (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种非易失内存的管理方法和相关装置。一种非易失内存的管理方法,可以包括:内核内存管理装置通过内存申请接口接收非易失内存申请请求,其中,所述非易失内存申请请求携带有应用标识和请求申请的非易失内存的存储空间大小;将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用;向所述应用发送用于响应所述非易失内存申请请求的非易失内存申请响应,其中,所述非易失内存申请响应中携带有所述第一非易失内存区的地址范围,其中,所述第一非易失内存区的存储空间大小大于或等于所述请求申请的非易失内存的存储空间大小。本发明技术方案由于。本发明实施例提供技术方案有利于提高非易失内存的可靠性和使用性能。

Description

非易失内存的管理方法和相关装置
技术领域
本发明涉及计算机技术领域,具体涉及一种非易失内存的管理方法和相关装置。
背景技术
目前,计算节点(如个人计算机、服务器等)中常见内存有动态随机存取存储器(DRAM,Dynamic Random Access Memory)等等,在计算节点断电重启后其DRAM所存储的数据会丢失。非易失内存的特点是系统断电后数据仍能继续保存,因此被广泛用于保存系统中的重要数据。
现有技术将非易失内存划为保留内存,将非易失内存当作外设,采用mmap的方式进行管理和使用。如此,非易失内存在可靠性和使用性能等方面均受到较大限制。
发明内容
本发明实施例提供非易失内存的管理方法和相关装置,以提高非易失内存的可靠性和使用性能。
本发明实施例第一方面提供一种非易失内存的管理方法,包括:
内核内存管理装置通过内存申请接口接收非易失内存申请请求,其中,所述非易失内存申请请求携带有应用标识和请求申请的非易失内存的存储空间大小;
将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用;
向所述应用发送用于响应所述非易失内存申请请求的非易失内存申请响应,其中,所述非易失内存申请响应中携带有所述第一非易失内存区的地址范围,其中,所述第一非易失内存区的存储空间大小大于或等于所述请求申请的非易失内存的存储空间大小。
结合第一方面,在第一种可能的实施方式中,
所述方法还包括:判断所述非易失内存的可用存储空间大小是否大于所述请求申请的非易失内存的存储空间大小;
其中,所述将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用包括:在判断出所述非易失内存的可用存储空间大小大于或等于所述请求申请的非易失内存的存储空间大小时,将所述非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用。
结合第一方面或第一方面的第一种可能的实施方式中,在第二种可能的实施方式中,所述非易失内存包括管理信息存储区和非易失内存使用区,所述第一非易失内存区属于所述非易失内存使用区,所述管理信息存储区包括:
内存位图存储区和应用信息存储区,其中,所述内存位图存储区存储有所述非易失内存对应的内存位图;
其中,所述将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用,包括:在所述内存位图中将第一非易失内存区的地址范围标记为被使用;将所述应用标识所表示的应用所对应的索引信息记录写入所述应用信息存储区,所述应用对应的索引信息记录中记录有所述应用标识和所述第一非易失内存区的地址范围。
结合第一方面的第二种可能的实施方式中,在第三种可能的实施方式中,
所述将所述应用对应的索引信息记录写入所述应用信息存储区,包括:将所述应用对应的索引信息记录,插入到存储在所述应用信息存储区的活动链表的尾部。
结合第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式,在第四种可能的实施方式中,所述向所述应用发送用于响应所述非易失内存申请请求的非易失内存申请响应之后还包括:所述内核内存管理装置重启初始化,其中,在所述内核内存管理装置重启初始化过程中,所述内核内存管理装置根据所述非易失内存对应的内存位图将所述非易失内存中的可用存储空间进行释放。
结合第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式,在第五种可能的实施方式中,所述方法还包括:所述内核内存管理装置通过内存申请恢复接口接收来自所述应用的非易失内存申请恢复请求,其中,所述非易失内存申请恢复请求携带有所述应用的应用标识;
所述内核内存管理装置以所述应用标识为索引,在所述应用信息存储区查找到所述应用对应的索引信息记录,从查找到的所述应用对应的索引信息记录中获得该索引信息记录中记录的所述第一非易失内存区的地址范围;向所述应用发送用于响应所述非易失内存申请恢复请求的非易失内存申请恢复响应,其中,所述非易失内存申请恢复响应携带有获得的所述第一非易失内存区的地址范围。
结合第一方面的第二种可能的实施方式或者第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式,在第六种可能的实施方式中,
所述方法还包括:所述内核内存管理装置接收来自所述应用的非易失内存释放请求,其中,所述非易失内存释放请求携带有所述应用的应用标识;以所述应用标识为索引,在所述应用信息存储区查找到所述应用对应的索引信息记录,从查找到的所述应用对应的索引信息记录中获得该索引信息记录中记录的所述第一非易失内存区的地址范围;基于所述第一非易失内存区的地址范围释放所述第一非易失内存区,并在所述内存位图中将所述第一非易失内存区地址范围标记为可用。
本发明实施例第二方面提供一种内核内存管理装置,可包括:
接收单元,用于通过内存申请接口接收非易失内存申请请求,其中,所述非易失内存申请请求携带有应用标识和请求申请的非易失内存的存储空间大小;
分配单元,用于将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用;
发送单元,用于向所述应用发送用于响应所述非易失内存申请请求的非易失内存申请响应,其中,所述非易失内存申请响应中携带有所述第一非易失内存区的地址范围,其中,所述第一非易失内存区的存储空间大小大于或等于所述请求申请的非易失内存的存储空间大小。
结合第二方面,在第一种可能的实施方式中,
所述分配单元具体用于,在判断出所述非易失内存的可用存储空间大小大于或等于所述请求申请的非易失内存的存储空间大小时,将所述非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用。
结合第二方面或第二方面的第一种可能的实施方式,在第二种可能的实施方式中,所述非易失内存中包括管理信息存储区和非易失内存使用区,所述第一非易失内存区属于所述非易失内存使用区,所述管理信息存储区包括:
内存位图存储区和应用信息存储区,其中,所述内存位图存储区存储有所述非易失内存对应的内存位图;
在所述将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用的方面,所述分配单元具体用于,在所述内存位图中将第一非易失内存区的地址范围标记为被使用;将所述应用标识所表示的应用对应的索引信息记录写入所述应用信息存储区,所述应用对应的索引信息记录中记录有所述应用标识和所述第一非易失内存区的地址范围。
结合第二方面的第二种可能的实施方式,在第三种可能的实施方式中,在所述将所述应用对应的索引信息记录写入所述应用信息存储区的方面,所述分配单元具体用于,将所述应用对应的索引信息记录,插入到存储在所述应用信息存储区的活动链表的尾部。
结合第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式,在第四种可能的实施方式中,所述内核内存管理装置还包括:初始化单元,用于在所述向所述应用发送用于响应所述非易失内存申请请求的非易失内存申请响应之后,重启初始化所述内核内存管理装置,其中,在所述重启初始化所述内核内存管理装置的过程中,根据所述非易失内存对应的内存位图将所述非易失内存中的可用存储空间进行释放。
结合第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式,在第五种可能的实施方式中,
所述内核内存管理装置还包括索引单元;
所述接收单元还用于,通过内存申请恢复接口接收来自所述应用的非易失内存申请恢复请求,其中,所述非易失内存申请恢复请求携带有所述应用的应用标识;
所述索引单元,用于以所述应用标识为索引,在所述应用信息存储区查找到所述应用对应的索引信息记录,从查找到的所述应用对应的索引信息记录中获得该索引信息记录中记录的所述第一非易失内存区的地址范围;
所述发送单元还用于,向所述应用发送用于响应所述非易失内存申请恢复请求的非易失内存申请恢复响应,其中,所述非易失内存申请恢复响应携带有获得的所述第一非易失内存区的地址范围。
结合第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式中,在第六种可能的实施方式中,
所述内核内存管理装置还包括:释放单元,用于接收来自所述应用的非易失内存释放请求,其中,所述非易失内存释放请求携带有所述应用的应用标识;以所述应用标识为索引,在所述应用信息存储区查找到所述应用对应的索引信息记录,从查找到的所述应用对应的索引信息记录中获得该索引信息记录中记录的所述第一非易失内存区的地址范围;基于所述第一非易失内存区的地址范围释放所述第一非易失内存区,并在所述内存位图中将所述第一非易失内存区地址范围标记为可用。
可以看出,本发明实施例的方案中,内核内存管理装置通过内存申请接口接收来自某个应用的非易失内存申请请求之后;可将非易失内存中的第一非易失内存区分配给上述应用;并可向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应携带有上述第一非易失内存区的地址范围。由于将非易失内存划归由内核内存管理装置来进行统一管理,这相当于将非易失内存当作内核内存而非将其当作外设来管理和使用,而将非易失内存当作内核内存,由内核内存管理装置来对其进行统一调配管理,应用通过内核内存管理装置提供的内存申请接口来向内核内存管理装置申请使用非易失内存中的存储空间,与现有技术将非易失内存作为外设来管理使用的情况相比,这有利于提高非易失内存工作可靠性和存取性能等。例如内核内存管理装置更有利于保证非易失内存高速/大吞吐量的工作。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1-a是本发明实施例提供的一种非易失内存的管理方法的流程示意图;
图1-b是本发明实施例提供的一种计算节点的逻辑框架示意图;
图2是本发明实施例提供的非易失内存的区域划分结构示意图;
图3-a是本发明实施例提供的另一种非易失内存的管理方法的流程示意图;
图3-b是本发明实施例提供的另一种查找到printk应用对应的索引信息记录的流程示意图;
图4-a是本发明实施例提供的另一种非易失内存的管理方法的流程示意图;
图4-b是本发明实施例提供的一种将非易失内存中的第一非易失内存区分配给printk应用的流程示意图;
图5是本发明实施例提供的一种内核内存管理装置的初始化方法的流程示意图;
图6-a是本发明实施例提供的一种内核内存管理装置的示意图;
图6-b是本发明实施例提供的另一种内核内存管理装置的示意图;
图6-c是本发明实施例提供的另一种内核内存管理装置的示意图;
图6-d是本发明实施例提供的另一种内核内存管理装置的示意图;
图7是本发明实施例提供的一种计算节点的示意图。
具体实施方式
本发明实施例提供非易失内存的管理方法和相关装置及计算机系统,以期提高非易失内存的可靠性和使用性能。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
以下分别进行详细说明。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明非易失内存的管理方法的一个实施例,其中,一种非易失内存的管理方法,可以包括:内核内存管理装置通过内存申请接口接收非易失内存申请请求,上述非易失内存申请请求携带有应用标识和请求申请的非易失内存的存储空间大小;将非易失性内存(NVRAM,Non-volatile Random Access Memory)中的第一非易失内存区分配给上述应用标识所表示的应用;向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应中携带有上述第一非易失内存区的地址范围,其中,上述第一非易失内存区的存储空间大小大于或等于上述请求申请的非易失内存的存储空间大小。
请参见图1,图1为本发明一个实施例提供的一种非易失内存的管理方法的流程示意图。其中,本发明一个实施例提供的一种非易失内存的管理方法可包括以下内容:
101、内核内存管理装置通过内存申请接口接收非易失内存申请请求。
其中,上述非易失内存申请请求携带有应用标识和请求申请的非易失内存的存储空间大小。
其中,本发明实施例中提及的应用可以是用户态应用(如游戏应用、即时通讯应用、数据库应用等)、也可以是操作系统内置的各种系统应用(ftrace应用信息、slab应用等内核应用)。
其中,当某个应用想要使用非易失内存时,该应用可通过内存申请接口向内核内存管理装置发送非易失内存申请请求,该非易失内存申请请求可携带有该某个应用的应用标识和该某个应用想要请求申请的非易失内存的请求申请的非易失内存的存储空间大小,其中,应用想要请求申请的非易失内存的存储空间大小例如可为5KB、10KB或1MB或其它大小。
当然,若某个应用想要使用普通内核内存(例如只读存储器和易失性RAM等等)时,该应用可通过内存申请接口向内核内存管理装置发送内核内存申请请求,该内核内存申请请求可携带有该某个应用的应用标识和该某个应用请求申请的内核内存的存储空间大小,其中,应用想要请求申请的内核内存的存储空间大小例如可为5KB、10KB或1MB或其它大小。
102、内核内存管理装置将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用。
在本发明的一些实施例中,上述非易失内存的管理方法还可包括:内核内存管理装置判断上述非易失内存的可用存储空间大小是否大于上述请求申请的非易失内存的存储空间大小。其中,上述将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用包括:在判断出上述非易失内存的可用存储空间大小大于或等于上述请求申请的非易失内存的存储空间大小时,将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用。可以理解,若上述非易失内存的可用存储空间大小足够大,也可默认为上述非易失内存的可用存储空间大小大于上述请求申请的非易失内存的存储空间大小,因此可省略上述判断上述非易失内存的可用存储空间大小是否大于上述请求申请的非易失内存的存储空间大小的步骤。
103、内核内存管理装置向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应中携带有上述第一非易失内存区的地址范围,其中,上述第一非易失内存区的存储空间大小大于或等于上述请求申请的非易失内存的存储空间大小。
可以看出,本实施例的技术方案中,内核内存管理装置通过内存申请接口接收来自某个应用的非易失内存申请请求之后;可将非易失内存中的第一非易失内存区分配给上述应用;并可向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应携带有上述第一非易失内存区的地址范围。由于将非易失内存划归由内核内存管理装置来进行统一管理,这相当于将非易失内存当作内核内存而非将其当作外设来管理和使用,而将非易失内存当作内核内存,由内核内存管理装置来对其进行统一调配管理,应用通过内核内存管理装置提供的内存申请接口来向内核内存管理装置申请使用非易失内存中的存储空间,与现有技术将非易失内存作为外设来管理使用的情况相比,这有利于提高非易失内存工作可靠性和存取性能等。例如内核内存管理装置更有利于保证非易失内存高速/大吞吐量的工作。
在本发明的一些实施例中,上述非易失内存可包括管理信息存储区和非易失内存使用区,上述第一非易失内存区属于上述非易失内存使用区,非易失内存中的管理信息存储区例如可包括:内存位图存储区和应用信息存储区等,其中,上述内存位图存储区存储有上述非易失内存对应的内存位图。其中,上述将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用,可包括:在上述内存位图中将第一非易失内存区的地址范围标记为被使用;将上述应用标识所表示的应用对应的索引信息记录写入上述应用信息存储区,上述应用对应的索引信息记录中记录有上述应用标识和上述第一非易失内存区的地址范围。
本发明实施例中提及的索引信息记录可以是索引信息结构体或其它格式的索引信息记录。
在本发明一些实施例中,上述将上述应用对应的索引信息记录写入上述应用信息存储区,可包括:将上述应用对应的索引信息记录,插入到存储在上述应用信息存储区的活动链表的尾部。当然,亦可以通过其它方式来存储索引信息记录。可以理解的是,利用活动链表来存储上述应用对应的索引信息记录,可便于快速查找和管理上述应用对应的索引信息记录。
在本发明一些实施例中,内核内存管理装置监测(定时监测或根据用户指令监测或在其它条件的触发下监测)到上述非易失内存中存在故障页时,内核内存管理装置还可进一步在上述非易失内存对应的内存位图中将上述故障页的地址范围标记为被使用。其中,通过在内存位图中将监测到的故障页的地址范围标记为被使用,有利于尽可能避免将故障页分配给申请方来使用,进而有利于避免申请方使用到非易失内存存储数据时出现故障。这在一定程度上实现了故障内存页的隔离。
在本发明一些实施例中,向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应之后,还进一步包括:上述内核内存管理装置重启初始化,其中,在上述内核内存管理装置重启初始化过程中,上述内核内存管理装置根据上述非易失内存对应的内存位图将上述非易失内存中的可用存储空间进行释放。即,上述内核内存管理装置将上述非易失内存对应的内存位图中标记的可用存储空间的地址范围进行释放,该释放例如可包括将上述非易失内存对应的内存位图中标记的可用存储空间的地址范围记录到内核内存管理装置的内存分配链表中。
在本发明的一些实施例中,上述非易失内存的管理方法还可包括:内核内存管理装置通过内存申请恢复接口接收来自上述应用的非易失内存申请恢复请求,其中,上述非易失内存申请恢复请求携带有上述应用的应用标识;上述内核内存管理装置以上述应用标识为索引,在上述应用信息存储区查找到上述应用对应的索引信息记录(此处以在上述应用信息存储区查找到了上述应用对应的索引信息记录为例),从查找到的上述应用对应的索引信息记录中获得该索引信息记录中记录的上述第一非易失内存区的地址范围;向上述应用发送用于响应上述非易失内存申请恢复请求的非易失内存申请恢复响应,其中,上述非易失内存申请恢复响应携带有获得的上述第一非易失内存区的地址范围。当然,若以上述应用标识为索引在上述应用信息存储区未查找到上述应用对应的索引信息记录,则可向上述应用发送用于响应上述非易失内存申请恢复请求的非易失内存申请恢复响应,其中,该非易失内存申请恢复响应可携带有获得非易失内存区地址范围失败的指示。可以理解的是,例如,当发起申请的应用重启或故障恢复之后,该应用可通过内存申请恢复接口向内核内存管理装置发送非易失内存申请恢复请求,而内核内存管理装置可根据在查找到上述应用对应的索引信息记录之后,可向上述应用反馈上述应用对应的索引信息记录中记录的第一非易失内存区的地址范围,这就使得上述应用即使在重启或故障恢复之后仍然可以找回其重启之前存储在第一非易失内存区的数据(例如日志数据和/或调试数据等等),这样在很大程度上实现了内存数据在重启/故障恢复之后的恢复,这样就在一定程度上拥有了非易失内存和普通内核内存的双重优势。
在本发明的一些实施例中,上述非易失内存的管理方法还可包括:内核内存管理装置接收来自上述应用的非易失内存释放请求,其中,上述非易失内存释放请求携带有上述应用的应用标识;内核内存管理装置可以以上述应用标识为索引,在上述应用信息存储区查找到上述应用对应的索引信息记录,从查找到的上述应用对应的索引信息记录中获得该索引信息记录中记录的上述第一非易失内存区的地址范围;基于上述第一非易失内存区的地址范围释放上述第一非易失内存区,并在上述内存位图中将上述第一非易失内存区地址范围标记为可用。进一步的,内核内存管理装置还可进一步向上述应用发送用于响应上述非易失内存释放请求的非易失内存释放响应。当然,内核内存管理装置还可进一步删除上述应用对应的索引信息记录(或者可将上述应用对应的索引信息记录标记为无效,或者也可删除上述应用对应的索引信息记录中记录的第一非易失内存区的地址范围,或者也可将上述应用对应的索引信息记录迁移到非活动链表的尾部、首部或其它位置等)。
其中,内核内存管理装置并非一定是在接收来自上述应用的非易失内存释放请求之后,才触发其释放第一非易失内存区的流程,内核内存管理装置亦可根据需要自行决定是否释放第一非易失内存区。例如第一非易失内存区在设定时长(如10分钟、20分钟等)之内未使用,则内核内存管理装置可释放上述第一非易失内存区的部分或全部空间,并在内存位图中将上述第一非易失内存区被释放空间的地址范围标记为可用。当然,内核内存管理装置也可在其它释放条件满足时释放被申请的非易失内存区的部分或全部空间。
可以理解的是,由于是由内核内存管理装置来统一管理非易失内存的申请和释放,并借助内存位图标记非易失内存可用地址范围和已用地址范围,有利于尽可能的保证非易失内存使用的有效性,工作可靠性、可调试性和映射灵活性等。进一步的,内核内存管理装置可管理各应用映射的非易失内存区地址范围,因此内核内存管理装置甚至可以根据内存消耗情况做动态的扩展或收缩等操作。
本发明各实施例中的内核内存管理装置具有内存管理功能,内核内存管理装置负责管理只读存储器(ROM,Read-Only Memory)、易失性RAM、NVRAM等内存,内核内存管理装置在不同操作系统中可能具有不同名称,例如在linux系统中,内核内存管理装置可包括buddy系统和slab系统等。
以图1-b为例介绍本发明实施例提供的部署有内核内存管理装置的计算节点的逻辑结构。计算节点具体可为服务器或个人计算机或其它具有类似架构的通信设备。如图1-b所示,计算节点的硬件层包括如内存(内存可包括易失性RAM、NVRAM和ROM等)、中央处理器(CPU,Center Processing Unit)和输入/输出设备等。输入设备包括键盘、鼠标和/或触摸屏等,输出设备包括显示设备如液晶显示器、全息成像(Holographic)和/或投影(Projector)等。在硬件层之上可运行有操作系统(如linux等)以及一些用户应用。核心库是操作系统的核心部分,可包括输入/输出服务、核心服务等,其中,核心服务中可包括内核内存管理装置(例如可包括buddy系统和slab系统)。除此之外,该计算节点还可包括驱动层、框架层和应用层。其中,驱动层可包括各种硬件设备的驱动。框架层可包括系统服务(System service)和用户服务(Customer Service)等等。应用层可包括多个用户应用,例如数据库应用、浏览器等。
以图1-b为例,本发明实施例提供的非易失内存的管理方法,可应用于图1-b所示计算节点,具体可以由核心库中的核心服务中的内核内存管理装置来具体实施,核心库中的核心服务中的内核内存管理装置可通过内存申请接口接收非易失内存申请请求,上述非易失内存申请请求携带有应用标识和请求申请的非易失内存的存储空间大小;将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用;向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应中携带有上述第一非易失内存区的地址范围,其中,上述第一非易失内存区的存储空间大小大于或等于上述请求申请的非易失内存的存储空间大小。
核心库中的核心服务中的内核内存管理装置还可执行上述方法实施例中由内核内存管理装置执行的其它部分或全部步骤。
为便于更好的理解和实施本发明实施例的上述方案,下面通过一些具体的应用场景进行举例说明。
下面首先举例一种非易失内存的区域划分结构。
请参见图2,图2所示的非易失内存可包括非易失内存使用区210和非易失内存管理区220。
其中,非易失内存管理区220可包括:主数据结构存储区221、内存位图存储区222和应用信息存储区223。其中,应用信息存储区223可包括指定应用存储区2231和非指定应用存储区2232。其中,指定应用存储区2231可存储一些指定应用(例如ftrace应用、slab应用等内核应用)的相关信息(例如索引信息记录);非指定应用存储区2232可存储非指定的应用的相关信息(例如索引信息记录等)。当然在实际应用中亦可不区分指定应用存储区2231和非指定应用存储区2232,即可将指定应用存储区2231和非指定应用存储区2232等同使用。在一些应用场景下,可预先配置哪些应用为指定应用(例如可内核应用配置为指定应用),其它应用(例如各种用户应用)则可认为是非指定应用。
其中,主数据结构存储区221存储的主数据结构可主要包括如下信息:
整个非易失内存200的起始地址、整个非易失内存200的空间大小、非易失内存使用区210的起始地址,应用信息存储区223的起始地址、内存位图存储区222的起始地址、当前申请使用非易失内存的应用数量、活动链表的表头和空闲链表的表头等信息。
其中,内存位图存储区222主要存储非易失内存200的内存位图,而该内存位图用于标记出非易失内存中的哪些地址范围可用,非易失内存哪些地址范围不可用(例如标记为被使用的地址范围不可用)。可以理解,内存位图中已经将非易失内存管理区220的地址范围标记为不可用,这样可避免应用申请使用非易失内存管理区220中的存储空间。
其中,指定应用信息存储区2231主要存储指定应用对应的活动链表和空闲链表等信息,其中,活动链表中记录当前申请使用非易失内存的指定应用对应的索引信息记录。空闲链表中记录已释放所申请非易失内存的指定应用对应的索引信息记录。可以理解的是,若直接将已释放所申请非易失内存的指定应用对应的索引信息记录删除,则亦可以无需在指定应用信息存储区2231引入空闲链表。
其中,非指定应用信息存储区2232主要存储非指定应用对应的活动链表和空闲链表等,其中,该活动链表中记录当前申请使用非易失内存的非指定应用对应的索引信息记录;该空闲链表中记录已释放所申请非易失内存的非指定应用对应的索引信息记录。可以理解的是,若直接将已释放所申请非易失内存的非指定应用对应的索引信息记录删除,则亦可以无需在非指定应用信息存储区2232引入空闲链表。
其中,某个应用对应的索引信息记录主要记录如下信息:
链表指针(用于加入链表)、该某个应用所申请非易失内存区的起始地址、该某个应用所申请非易失内存区的内存大小和该某个应用的应用标识(用于索引)。当然索引信息记录中还可记录其它信息。
需要说明,图2所示的非易失内存的区域划分结构仅为举例,在实际应用中亦可按照其它方式进行区域划分。
参见图2,图2还举例示出一种活动链表和空闲链表的示意结构(活动链表和空闲链表结构类似),此外,图2中还举例示出了活动链表中的某个应用对应的索引信息记录(图2中以索引信息记录为索引信息结构体为例)的示意结构。
下面以printk应用(其中,printk应用为一种应用,上述实施例中的第一应用例如可为printk应用)申请非易失内存和进行数据恢复的相关流程为例进行说明。其它应用的申请非易失内存和数据恢复的过程与之类似。
请参见图3-a,图3-a为本发明的另一个实施例提供的另一种非易失内存的管理方法的流程示意图。其中,本发明的另一个实施例提供的另一种非易失内存的管理方法可包括以下内容:
301、printk应用可通过内存申请接口向内核内存管理装置发送非易失内存申请请求。其中,上述非易失内存申请请求携带有非易失内存的请求申请的非易失内存的存储空间大小。进一步的,上述非易失内存申请请求还可携带printk应用的应用标识等其它信息。
例如当printk应用需要进行数据存储时,printk应用内存申请接口向内核内存管理装置发送非易失内存申请请求,以向内核内存管理装置申请非易失内存来进行数据存储。其中,printk应用想要请求申请的非易失内存的存储空间大小例如可以为5KB、10KB或1MB或其它大小。
302、内核内存管理装置通过内存申请接口接收来自printk应用的非易失内存申请请求。内核内存管理装置判断上述非易失内存的可用存储空间大小是否大于上述请求申请的非易失内存的存储空间大小。
若是,则执行步骤303。
若否,则内核内存管理装置向上述printk应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,该非易失内存申请响应携带有申请失败的指示。
303、内核内存管理装置将非易失内存中的第一非易失内存区分配给上述printk应用。
其中,将非易失内存中的第一非易失内存区分配给printk应用包括:
在非易失内存对应的内存位图中将第一非易失内存区的地址范围标记为被使用;构建上述printk应用对应的索引信息记录;将上述printk应用对应的索引信息记录写入应用信息存储区(其中,若上述printk应用为指定应用,则可将上述printk应用对应的索引信息记录写入到指定应用信息存储区中,若printk应用为非指定应用,则可将上述printk应用对应的索引信息记录写入到非指定应用信息存储区),其中,上述printk应用对应的索引信息记录中记录有上述printk应用的应用标识和上述第一非易失内存区的地址范围等信息。
在本发明的一些实施例中,上述将上述printk应用对应的索引信息记录写入应用信息存储区可包括:将上述printk应用对应的索引信息记录,插入到存储在上述应用信息存储区的活动链表的尾部或首部或其它位置。当然亦可通过其它方式来存储索引信息记录。其中,利用活动链表来存储上述printk应用对应的索引信息记录,可便于快速查找管理上述printk应用对应的索引信息记录。
304、内核内存管理装置向上述printk应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应携带有上述第一非易失内存区的地址范围,其中,上述第一非易失内存区的存储空间大小大于或等于上述请求申请的非易失内存的存储空间大小。
其中,printk应用在接收到内核内存管理装置反馈的上述非易失内存申请响应之后,便可获知申请到的第一非易失内存区的地址范围,因此可根据第一非易失内存区的地址范围,向第一非易失内存区写入数据。
305、上述printk应用在重启或故障恢复之后,可通过内存申请恢复接口向内核内存管理装置发送非易失内存申请恢复请求,其中,上述非易失内存申请恢复请求携带有上述printk应用的标识。
306、内核内存管理装置通过内存申请恢复接口接收来自上述printk应用的非易失内存申请恢复请求,以上述printk应用的标识为索引,在上述应用信息存储区查找到上述printk应用对应的索引信息记录(此处以在上述应用信息存储区查找到了上述printk应用对应的索引信息记录为例),从查找到的上述printk应用对应的索引信息记录中获得该索引信息记录中记录的上述第一非易失内存区的地址范围。
在本发明一些实施例中,内核内存管理装置可基于如图3-b所示的方式来以上述printk应用的标识为索引,在上述应用信息存储区查找到上述printk应用对应的索引信息记录。
3061、内核内存管理装置判断是否存在至少一个待匹配的表项。
若否,则打印错误信息。
若是,则执行步骤3062。
3062、内核内存管理装置读取活动链表中的一个待匹配的表项。
3063、内核内存管理装置判断读取出的表项中的索引信息记录的应用标识是否与printk应用的应用标识相同。
若是(表示读取出的表项中的索引信息记录即为printk应用对应的索引信息记录),内核内存管理装置从读取出的该表项中的索引信息记录中读取上述第一非易失内存区的地址范围,执行步骤307。
若否,则返回步骤3061。
可以理解,图3-b所示的以上述printk应用的标识为索引,在上述应用信息存储区查找到上述printk应用对应的索引信息记录的方式仅为举例,在实际应用中,还可以选择其它方式来以上述printk应用的标识为索引,在上述应用信息存储区查找到上述printk应用对应的索引信息记录。
307、内核内存管理装置向上述printk应用发送用于响应上述非易失内存申请恢复请求的非易失内存申请恢复响应,其中,上述非易失内存申请恢复响应携带有获得的上述第一非易失内存区的地址范围。
其中,printk应用在接收到内核内存管理装置反馈的上述非易失内存申请恢复响应之后,便可获知其重启或故障恢复之前所申请到的第一非易失内存区的地址范围,因此可根据第一非易失内存区的地址范围,继续向第一非易失内存区写入数据和/或从第一非易失内存区读取数据。
可以理解的是,基于上述恢复机制,就可以使得上述printk应用即使在重启或故障恢复之后仍然可以找回其重启或故障之前存储在第一非易失内存区的数据(例如log日志数据等等),这样在很大程度上实现了内存数据在重启/故障恢复之后的恢复,这样就在一定程度上拥有了非易失内存和普通内核内存的双重优势。
可以看出,本实施例的方案中,内核内存管理装置通过内存申请接口接收来自某个应用(例如printk应用)的非易失内存申请请求之后;可将非易失内存中的第一非易失内存区分配给上述应用;并可向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应携带有上述第一非易失内存区的地址范围。由于将非易失内存划归由内核内存管理装置来进行统一管理,这相当于将非易失内存当作内核内存而非将其当作外设来管理和使用,而将非易失内存当作内核内存,由内核内存管理装置来对其进行统一调配管理,应用通过提供的内存申请接口来向内核内存管理装置申请使用非易失内存中的存储空间,与现有技术将非易失内存作为外设来管理使用的情况相比,这有利于提高非易失内存工作可靠性和存取性能等。例如内核内存管理装置更有利于保证非易失内存高速/大吞吐量的工作。
参见图4-a,下面以printk应用(一种应用)申请非易失内存和释放非易失内存的相关流程为例进行说明。其它应用的其它应用的申请非易失内存和申请非易失内存的过程与之类似。
请参见图4-a,图4-a为本发明的另一个实施例提供的另一种非易失内存的管理方法的流程示意图。其中,本发明的另一个实施例提供的另一种非易失内存的管理方法可包括以下内容:
401、printk应用可通过内存申请接口向内核内存管理装置发送非易失内存申请请求。其中,上述非易失内存申请请求携带有请求申请的非易失内存的存储空间大小。进一步的,上述非易失内存申请请求还可携带printk应用的应用标识等其它信息。
例如当printk应用需要进行数据存储时,printk应用内存申请接口向内核内存管理装置发送非易失内存申请请求,以向内核内存管理装置申请非易失内存来进行数据存储。其中,printk应用想要请求申请的非易失内存的存储空间大小例如可以为5KB、10KB或1MB或其它大小。
402、内核内存管理装置通过内存申请接口接收来自printk应用的非易失内存申请请求。内核内存管理装置判断上述非易失内存的可用存储空间大小是否大于上述请求申请的非易失内存的存储空间大小。
若是,则执行步骤403。
若否,则内核内存管理装置向上述printk应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,该非易失内存申请响应携带有申请失败的指示。
403、内核内存管理装置将非易失内存中的第一非易失内存区分配给上述printk应用。
其中,将非易失内存中的第一非易失内存区分配给printk应用包括:
在非易失内存对应的内存位图中将第一非易失内存区的地址范围标记为被使用;构建上述printk应用对应的索引信息记录;将上述printk应用对应的索引信息记录写入应用信息存储区(其中,若上述printk应用为指定应用,则可将上述printk应用对应的索引信息记录写入到指定应用信息存储区中,若printk应用为非指定应用,则可将上述printk应用对应的索引信息记录写入到非指定应用信息存储区),其中,上述printk应用对应的索引信息记录中记录有上述printk应用的应用标识和上述第一非易失内存区的地址范围等信息。
在本发明的一些实施例中,上述将上述printk应用对应的索引信息记录写入应用信息存储区可包括:将上述printk应用对应的索引信息记录,插入到存储在上述应用信息存储区的活动链表的尾部或首部或其它位置。当然亦可通过其它方式来存储索引信息记录。其中,利用活动链表来存储上述printk应用对应的索引信息记录,可便于快速查找管理上述printk应用对应的索引信息记录。
在本发明的一些实施例中,内核内存管理装置可基于如图4-b所示的方式将非易失内存中的第一非易失内存区分配给上述printk应用。
4031、在内存位图中将第一非易失内存区的地址范围标记为被使用。
4032、内核内存管理装置判断应用信息存储区中的活动链表中是否存在printk应用对应的索引信息记录。
若是,则打印错误信息。
若否,则执行步骤4033。
4033、内核内存管理装置获取应用信息存储区中的用于存储printk应用对应的索引信息记录的非易失内存空间s01。
4034、内核内存管理装置构建printk应用对应的索引信息记录。
其中,上述printk应用对应的索引信息记录中记录有上述printk应用的模块标识和上述第一非易失内存区的地址范围。
4035、内核内存管理装置将构建出的printk应用对应的索引信息记录写入非易失内存空间s01,并将printk应用对应的索引信息记录插入到上述活动链表的尾部。
可以理解,图4-b所示的将非易失内存中的第一非易失内存区分配给上述printk应用的方式仅为举例,在实际应用中,还可以选择其它方式来将非易失内存中的第一非易失内存区分配给上述printk应用。
404、内核内存管理装置向上述printk应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应携带有上述第一非易失内存区的地址范围,其中,上述第一非易失内存区的存储空间大小大于或等于上述请求申请的非易失内存的存储空间大小。
其中,printk应用在接收到内核内存管理装置反馈的上述非易失内存申请响应之后,便可获知申请到的第一非易失内存区的地址范围,因此可根据第一非易失内存区的地址范围,向第一非易失内存区写入数据。
405、上述printk应用无需使用第一非易失内存区时,上述printk应用可向内核内存管理装置发送非易失内存释放请求,以请求内核内存管理装置释放第一非易失内存区,其中,上述非易失内存释放请求携带有上述printk应用的应用标识。
406、内核内存管理装置接收来自printk应用的非易失内存释放请求。
内核内存管理装置以上述printk应用的标识为索引,在上述应用信息存储区查找到上述printk应用对应的索引信息记录,从查找到的上述printk应用对应的索引信息记录中获得该索引信息记录中记录的上述第一非易失内存区的地址范围;基于查找到的上述第一非易失内存区的地址范围释放上述第一非易失内存区,并在内存位图中将上述第一非易失内存区地址范围标记为可用。
407、内核内存管理装置向上述printk应用发送用于响应上述非易失内存释放请求的非易失内存释放响应。
当然,内核内存管理装置也还可进一步删除上述printk应用对应的索引信息记录,或可将上述printk应用对应的索引信息记录标记为无效,或者可删除上述printk应用对应的索引信息记录中记录的第一非易失内存区的地址范围,或者也可将上述printk应用对应的索引信息记录迁移到非活动链表的尾部、首部或其它位置等。
其中,内核内存管理装置并非一定是在接收来自上述printk应用的非易失内存释放请求之后,才触发其释放第一非易失内存区的流程,内核内存管理装置亦可根据需要自行决定是否释放第一非易失内存区。例如第一非易失内存区在设定时长(如10分钟、20分钟等)之内未使用,则内核内存管理装置可释放上述第一非易失内存区的部分或全部空间,并在内存位图中将上述第一非易失内存区被释放空间的地址范围标记为可用。当然,内核内存管理装置也可在其它释放条件满足时释放被申请的非易失内存区的部分或全部空间。
可以理解的是,由于是由内核内存管理装置来统一管理非易失内存的申请和释放,并借助内存位图标记非易失内存可用地址范围和已用地址范围,有利于尽可能的保证非易失内存使用的有效性,工作可靠性、可调试性和映射灵活性等。进一步的,内核内存管理装置可管理各应用映射的非易失内存区地址范围,因此内核内存管理装置甚至可以根据内存消耗情况做动态的扩展或收缩等操作。
可以看出,通过将非易失内存纳入内核管理体系,从而让内核内存管理装置可通过公共的内存管理接口对非易失内存区进行管理操作,这样有利于解决现有mmap管理方式带来的非易失内存安全性不足、不可调试等问题。通过将非易失内存看作普通内存区域进行管理,保留了内存高速特性,有利于解决现有技术将其作为外设访问导致性能降低的问题。通过在非易失内存区内划分出管理去,建立该非易失内存区的管理系统,从而可以为使用非易失内存的各个应用提供统一的分配、释放、恢复等接口,并使得各应用使用的内存区域对自身透明、具有更高安全性,且内存范围可扩展、可调整、使用灵活性更高。有利于解决了常规方式为每个应用划定内存范围及大小,不可变更不可调整的问题,并简化了使用非易失内存的方式,使得各应用自身无需再做额外的内存管理。
内核内存管理装置还可能进行重启初始化,其中,内核内存管理装置重启初始化过程中可能进行内存的释放。下面再举例一种内核内存管理装置初始化的流程。
请参见图5,图5为本发明的另一个实施例提供的一种内核内存管理装置初始化方法的流程示意图。其中,本发明的另一个实施例提供的一种内核内存管理装置初始化方法可包括以下内容:
501、内核内存管理装置重启。
502、内核内存管理装置获取待释放的N个内存段的地址范围。
其中,上述N个内存段包括至少一个非易失内存。
503、内核内存管理装置判断上述N个内存段是否全部释放到了内核内存管理装置。
若是,则可以向内核内存管理装置中的伙伴系统反馈上述N个内存段中被释放内存的总空间大小。
若否,则执行步骤504。
504、内核内存管理装置从上述N个内存段中选取出还未释放到了内核内存管理装置的其中一个内存段,内核内存管理装置判断选取出的该内存段是否为非易失内存。
若是,则执行步骤505。若否,则执行步骤506。
505、内核内存管理装置从选取出的非易失内存对应的内存位图存储区读取该非易失内存对应的内存位图,根据该内存位图确定该非易失内存中可用内存的地址范围,将确定出的该非易失内存中可用内存的地址范围释放到内核内存管理装置。
其中,将确定出的该非易失内存中可用内存的地址范围释放到内核内存管理装置,可包括:将确定出的该非易失内存中可用内存的地址范围记录到内存分配链表之中。
505、若选取出的内存段不是非易失内存,则内核内存管理装置将选取出的该内存段的全部地址范围释放到内核内存管理装置(其中,上述将选取出的该内存段的全部地址范围释放到内核内存管理装置可包括:将选取出的该内存段的全部地址范围记录到内存分配链表之中)。
可以看出,基于图5举例的内核内存管理装置重启初始化,非易失内存中可用内存的地址范围释放到内核内存管理装置,这样有利于内核内存管理装置重启初始化仍然可有序的管理分配非易失内存。
为便于更好的理解和实施本发明实施例的上述方案,下面提供用于实施上述方案的相关装置。
参见图6-a,本发明实施例还提供一种内核内存管理装置600,可包括:
接收单元610、分配单元620和发送单元630。
接收单元610,用于通过内存申请接口接收非易失内存申请请求,上述非易失内存申请请求携带有应用标识和请求申请的非易失内存的存储空间大小。
分配单元620,用于将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用。
发送单元630,用于向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应中携带有上述第一非易失内存区的地址范围,其中,上述第一非易失内存区的存储空间大小大于或等于上述请求申请的非易失内存的存储空间大小。
在本发明的一些实施例中,分配单元620可具体用于,在判断出上述非易失内存的可用存储空间大小大于或等于上述请求申请的非易失内存的存储空间大小时,将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用。
在本发明的一些实施例中,上述非易失内存可包括管理信息存储区和非易失内存使用区,上述第一非易失内存区属于上述非易失内存使用区,上述非易失内存中的管理信息存储区包括:
内存位图存储区和应用信息存储区,其中,上述内存位图存储区存储有上述非易失内存对应的内存位图。
在上述将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用的方面,分配单元620具体用于,在上述内存位图中将第一非易失内存区的地址范围标记为被使用;将上述应用标识所表示的应用对应的索引信息记录写入上述应用信息存储区,上述应用对应的索引信息记录中记录有上述应用标识和上述第一非易失内存区的地址范围。
在本发明一些实施例中,分配单元620还可用于,监测(定时监测或者根据用户指令监测或者在其它条件的触发下监测)到上述非易失内存中存在故障页时,在上述非易失内存对应的内存位图中将上述故障页的地址范围标记为被使用。
在本发明的一些实施例中,在上述将上述应用对应的索引信息记录写入上述应用信息存储区的方面,分配单元620可以具体用于,将上述应用对应的索引信息记录,插入到存储在上述应用信息存储区的活动链表的尾部。
参见图6-b,在本发明的一些实施例中,内核内存管理装置600还可进一步包括初始化单元640,用于在上述向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应之后,重启初始化上述内核内存管理装置,其中,在上述重启初始化上述内核内存管理装置的过程中,根据上述非易失内存对应的内存位图将上述非易失内存中的可用存储空间进行释放。
参见图6-c,在本发明的一些实施例中,内核内存管理装置600还可进一步包括:索引单元650。
接收单元610还用于,通过内存申请恢复接口接收来自上述应用的非易失内存申请恢复请求,其中,上述非易失内存申请恢复请求携带有上述应用的应用标识;
索引单元650,用于以上述应用标识为索引,在上述应用信息存储区查找到上述应用对应的索引信息记录,从查找到的上述应用对应的索引信息记录中获得该索引信息记录中记录的上述第一非易失内存区的地址范围;
发送单元630还用于,向上述应用发送用于响应上述非易失内存申请恢复请求的非易失内存申请恢复响应,其中,上述非易失内存申请恢复响应携带有获得的上述第一非易失内存区的地址范围。
参见图6-d,在本发明的一些实施例中,内核内存管理装置600还可进一步包括:释放单元660。其中。释放单元660用于接收来自上述应用的非易失内存释放请求,其中,上述非易失内存释放请求携带有上述应用的应用标识;以上述应用标识为索引,在上述应用信息存储区查找到上述应用对应的索引信息记录,从查找到的上述应用对应的索引信息记录中获得该索引信息记录中记录的上述第一非易失内存区的地址范围;基于上述第一非易失内存区的地址范围释放上述第一非易失内存区,并在上述内存位图中将上述第一非易失内存区地址范围标记为可用。
其中,释放单元660并非一定是在接收来自上述应用的非易失内存释放请求之后,才触发其释放第一非易失内存区的流程,释放单元660亦可根据需要自行决定是否释放第一非易失内存区。举例来说,第一非易失内存区在设定时长(如10分钟、20分钟等)之内未使用,则释放单元660可释放上述第一非易失内存区的部分或全部空间,并在内存位图中将上述第一非易失内存区被释放空间的地址范围标记为可用。当然,释放单元660也可在其它释放条件满足时释放被申请的非易失内存区的部分或全部空间。
可以理解的是,本实施例的内核内存管理装置600的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
可以看出,本实施例的方案中,内核内存管理装置600通过内存申请接口接收来自某个应用的非易失内存申请请求之后;可将非易失内存中的第一非易失内存区分配给上述应用;并可向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应携带有上述第一非易失内存区的地址范围。由于将非易失内存划归由内核内存管理装置来进行统一管理,这相当于将非易失内存当作内核内存而非将其当作外设来管理和使用,而将非易失内存当作内核内存,由内核内存管理装置来对其进行统一调配管理,应用通过提供的内存申请接口来向内核内存管理装置申请使用非易失内存中的存储空间,与现有技术将非易失内存作为外设来管理使用的情况相比,这有利于提高非易失内存工作可靠性和存取性能等。例如,内核内存管理装置更有利于保证非易失内存高速/大吞吐量的工作。
参见图7,图7是本发明另一实施例提供的计算节点700的结构框图。
其中,计算节点700可以包括:至少一个处理器701,至少一个网络接口704或者其他用户接口703,存储器705,至少一个通信总线702。通信总线702用于实现这些组件之间的连接通信。其中,该计算节点700可选的包含用户接口703,包括:显示器(例如,触摸屏、LCD、CRT、全息成像(Holographic)或者投影(Projector)等)、点击设备(例如,鼠标,轨迹球(trackball)触感板或触摸屏等)、摄像头和/或拾音装置等。
其中,存储器702可以包括只读存储器和随机存取存储器,并向处理器701提供指令和数据。
存储器702中的一部分还包括非易失性内存(NVRAM)等。
在一些实施方式中,存储器705存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:
操作系统7051,包含各种系统程序,用于实现各种基础业务以及处理基于硬件的任务,其中,操作系统7051中可包括具有上述实施例提及的功能的内核内存管理装置;其中,内核内存管理装置例如可具有如图6-a~图6-d所示逻辑结构。
应用程序模块7052,包含各种应用程序,用于实现各种应用业务。
在本发明实施例中,通过调用存储器705存储的程序或指令,处理器701通过内存申请接口接收非易失内存申请请求,上述非易失内存申请请求携带有应用标识和请求申请的非易失内存的存储空间大小,将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用;向上述应用发送用于响应上述非易失内存申请请求的非易失内存申请响应,其中,上述非易失内存申请响应中携带有上述第一非易失内存区的地址范围,其中,上述第一非易失内存区的存储空间大小大于或等于上述请求申请的非易失内存的存储空间大小。
在本发明上述各实施例中,进一步的,在上述将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用的方面,处理器701可具体用于,在判断出上述非易失内存的可用存储空间大小大于或等于上述请求申请的非易失内存的存储空间大小时,将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用。
在本发明的一些实施例中,上述非易失内存可包括管理信息存储区和非易失内存使用区,上述第一非易失内存区属于上述非易失内存使用区。上述非易失内存中的管理信息存储区包括:
内存位图存储区和应用信息存储区,其中,上述内存位图存储区存储有上述非易失内存对应的内存位图。
其中,在上述将非易失内存中的第一非易失内存区分配给上述应用标识所表示的应用的方面,上述处理器701具体用于,在上述内存位图中将第一非易失内存区的地址范围标记为被使用;将上述应用标识所表示的应用对应的索引信息记录写入上述应用信息存储区,上述应用对应的索引信息记录中记录有上述应用标识和上述第一非易失内存区的地址范围。
在本发明的一些实施例中,在上述将上述应用对应的索引信息记录写入上述应用信息存储区的方面,上述处理器701具体用于,将上述应用对应的索引信息记录,插入到存储在上述应用信息存储区的活动链表的尾部。当然,亦可以通过其它的方式来存储索引信息记录。可以理解的是,利用活动链表来存储上述应用对应的索引信息记录,可便于快速查找和管理上述应用对应的索引信息记录。
在本发明一些实施例中,处理器701还可用于监测(定时监测或根据用户指令监测或在其它条件的触发下监测)到上述非易失内存中存在故障页时,处理器701还可进一步在上述非易失内存对应的内存位图中将上述故障页的地址范围标记为被使用。其中,通过在内存位图中将监测到的故障页的地址范围标记为被使用,有利于尽可能避免将故障页分配给申请方来使用,进而有利于避免申请方使用到非易失内存存储数据时出现故障。这在一定程度上实现了故障内存页的隔离。
在本发明的一些实施例中,上述处理器701还用于,通过内存申请恢复接口接收来自应用的非易失内存申请恢复请求,其中,上述非易失内存申请恢复请求携带有应用的应用标识;以上述应用标识为索引,在上述应用信息存储区查找到应用对应的索引信息记录,从查找到的应用对应的索引信息记录中获得该索引信息记录中记录的第一非易失内存区的地址范围;向应用发送用于响应上述非易失内存申请恢复请求的非易失内存申请恢复响应,其中,上述非易失内存申请恢复响应携带有获得的上述第一非易失内存区的地址范围。
可以理解的是,例如当发起申请的应用重启或故障恢复之后,该应用可通过内存申请恢复接口向处理器701发送非易失内存申请恢复请求,而处理器701可根据在查找到上述应用对应的索引信息记录之后,可向上述应用反馈上述应用对应的索引信息记录中记录的第一非易失内存区的地址范围,这就使得上述应用即使在重启或故障恢复之后仍然可以找回其重启之前存储在第一非易失内存区的数据(例如日志数据和/或调试数据等等),这样在很大程度上实现了内存数据在重启/故障恢复之后的恢复,这样就在一定程度上拥有了非易失内存和普通内核内存的双重优势。
在本发明的一些实施例中,处理器701还可用于,接收来自上述应用的非易失内存释放请求,其中,上述非易失内存释放请求携带有上述应用的应用标识;以上述应用标识为索引,在上述应用信息存储区查找到上述应用对应的索引信息记录,从查找到的上述应用对应的索引信息记录中获得该索引信息记录中记录的上述第一非易失内存区的地址范围;基于上述第一非易失内存区的地址范围释放上述第一非易失内存区,并在上述内存位图中将上述第一非易失内存区地址范围标记为可用。进一步的,处理器701还可进一步向上述应用发送用于响应上述非易失内存释放请求的非易失内存释放响应。当然,处理器701还可进一步删除上述应用对应的索引信息记录(或者可将上述应用对应的索引信息记录标记为无效,或者也可删除上述应用对应的索引信息记录中记录的第一非易失内存区的地址范围,或者也可将上述应用对应的索引信息记录迁移到非活动链表的尾部、首部或其它位置等)。
可见,采用上述方案后,由于是由内核内存管理装置来对其进行统一调配管理,应用通过内核内存管理装置提供的内存申请接口来向内核内存管理装置申请使用非易失内存中的存储空间,与现有技术将非易失内存作为外设来管理使用的情况相比,这有利于提高非易失内存工作可靠性和存取性能等。例如内核内存管理装置更有利于保证非易失内存高速/大吞吐量的工作。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的非易失内存的管理方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (12)

1.一种非易失内存的管理方法,其特征在于,包括:
内核内存管理装置通过内存申请接口接收非易失内存申请请求,其中,所述非易失内存申请请求携带有应用标识和请求申请的非易失内存的存储空间大小;
将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用;
向所述应用发送用于响应所述非易失内存申请请求的非易失内存申请响应,其中,所述非易失内存申请响应中携带有所述第一非易失内存区的地址范围,其中,所述第一非易失内存区的存储空间大小大于或等于所述请求申请的非易失内存的存储空间大小;
其中,所述非易失内存包括管理信息存储区和非易失内存使用区,所述第一非易失内存区属于所述非易失内存使用区,所述管理信息存储区包括:
内存位图存储区和应用信息存储区,其中,所述内存位图存储区存储有所述非易失内存对应的内存位图;
其中,所述将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用,包括:在所述内存位图中将第一非易失内存区的地址范围标记为被使用;将所述应用标识所表示的应用所对应的索引信息记录写入所述应用信息存储区,所述应用对应的索引信息记录中记录有所述应用标识和所述第一非易失内存区的地址范围。
2.根据权利要求1所述的方法,其特征在于,
所述方法还包括:判断所述非易失内存的可用存储空间大小是否大于所述请求申请的非易失内存的存储空间大小;
其中,所述将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用包括:在判断出所述非易失内存的可用存储空间大小大于或等于所述请求申请的非易失内存的存储空间大小时,将所述非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用。
3.根据权利要求1所述的方法,其特征在于,
所述将所述应用对应的索引信息记录写入所述应用信息存储区,包括:将所述应用对应的索引信息记录,插入到存储在所述应用信息存储区的活动链表的尾部。
4.根据权利要求1或3任一项所述的方法,其特征在于,所述向所述应用发送用于响应所述非易失内存申请请求的非易失内存申请响应之后还包括:所述内核内存管理装置重启初始化,其中,在所述内核内存管理装置重启初始化过程中,所述内核内存管理装置根据所述非易失内存对应的内存位图将所述非易失内存中的可用存储空间进行释放。
5.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:所述内核内存管理装置通过内存申请恢复接口接收来自所述应用的非易失内存申请恢复请求,其中,所述非易失内存申请恢复请求携带有所述应用的应用标识;
所述内核内存管理装置以所述应用标识为索引,在所述应用信息存储区查找到所述应用对应的索引信息记录,从查找到的所述应用对应的索引信息记录中获得该索引信息记录中记录的所述第一非易失内存区的地址范围;向所述应用发送用于响应所述非易失内存申请恢复请求的非易失内存申请恢复响应,其中,所述非易失内存申请恢复响应携带有获得的所述第一非易失内存区的地址范围。
6.根据权利要求1至3任一项所述的方法,其特征在于,
所述方法还包括:所述内核内存管理装置接收来自所述应用的非易失内存释放请求,其中,所述非易失内存释放请求携带有所述应用的应用标识;以所述应用标识为索引,在所述应用信息存储区查找到所述应用对应的索引信息记录,从查找到的所述应用对应的索引信息记录中获得该索引信息记录中记录的所述第一非易失内存区的地址范围;基于所述第一非易失内存区的地址范围释放所述第一非易失内存区,并在所述内存位图中将所述第一非易失内存区地址范围标记为可用。
7.一种内核内存管理装置,其特征在于,包括:
接收单元,用于通过内存申请接口接收非易失内存申请请求,其中,所述非易失内存申请请求携带有应用标识和请求申请的非易失内存的存储空间大小;
分配单元,用于将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用;
发送单元,用于向所述应用发送用于响应所述非易失内存申请请求的非易失内存申请响应,其中,所述非易失内存申请响应中携带有所述第一非易失内存区的地址范围,其中,所述第一非易失内存区的存储空间大小大于或等于所述请求申请的非易失内存的存储空间大小;
其中,所述非易失内存中包括管理信息存储区和非易失内存使用区,所述第一非易失内存区属于所述非易失内存使用区,所述管理信息存储区包括:
内存位图存储区和应用信息存储区,其中,所述内存位图存储区存储有所述非易失内存对应的内存位图;
在所述将非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用的方面,所述分配单元具体用于,在所述内存位图中将第一非易失内存区的地址范围标记为被使用;将所述应用标识所表示的应用对应的索引信息记录写入所述应用信息存储区,所述应用对应的索引信息记录中记录有所述应用标识和所述第一非易失内存区的地址范围。
8.根据权利要求7所述的内核内存管理装置,其特征在于,
所述分配单元具体用于,在判断出所述非易失内存的可用存储空间大小大于或等于所述请求申请的非易失内存的存储空间大小时,将所述非易失内存中的第一非易失内存区分配给所述应用标识所表示的应用。
9.根据权利要求7所述的内核内存管理装置,其特征在于,在所述将所述应用对应的索引信息记录写入所述应用信息存储区的方面,所述分配单元具体用于,将所述应用对应的索引信息记录,插入到存储在所述应用信息存储区的活动链表的尾部。
10.根据权利要求7至9任一项所述的内核内存管理装置,其特征在于,
所述内核内存管理装置还包括:初始化单元,用于在所述向所述应用发送用于响应所述非易失内存申请请求的非易失内存申请响应之后,重启初始化所述内核内存管理装置,其中,在所述重启初始化所述内核内存管理装置的过程中,根据所述非易失内存对应的内存位图将所述非易失内存中的可用存储空间进行释放。
11.根据权利要求7至9任一项所述的内核内存管理装置,其特征在于,
所述内核内存管理装置还包括索引单元;
所述接收单元还用于,通过内存申请恢复接口接收来自所述应用的非易失内存申请恢复请求,其中,所述非易失内存申请恢复请求携带有所述应用的应用标识;
所述索引单元,用于以所述应用标识为索引,在所述应用信息存储区查找到所述应用对应的索引信息记录,从查找到的所述应用对应的索引信息记录中获得该索引信息记录中记录的所述第一非易失内存区的地址范围;
所述发送单元还用于,向所述应用发送用于响应所述非易失内存申请恢复请求的非易失内存申请恢复响应,其中,所述非易失内存申请恢复响应携带有获得的所述第一非易失内存区的地址范围。
12.根据权利要求7至9任一项所述的内核内存管理装置,其特征在于,所述内核内存管理装置还包括:释放单元,用于接收来自所述应用的非易失内存释放请求,其中,所述非易失内存释放请求携带有所述应用的应用标识;以所述应用标识为索引,在所述应用信息存储区查找到所述应用对应的索引信息记录,从查找到的所述应用对应的索引信息记录中获得该索引信息记录中记录的所述第一非易失内存区的地址范围;基于所述第一非易失内存区的地址范围释放所述第一非易失内存区,并在所述内存位图中将所述第一非易失内存区地址范围标记为可用。
CN201310727166.9A 2013-12-25 2013-12-25 非易失内存的管理方法和相关装置 Active CN103729300B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310727166.9A CN103729300B (zh) 2013-12-25 2013-12-25 非易失内存的管理方法和相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310727166.9A CN103729300B (zh) 2013-12-25 2013-12-25 非易失内存的管理方法和相关装置

Publications (2)

Publication Number Publication Date
CN103729300A CN103729300A (zh) 2014-04-16
CN103729300B true CN103729300B (zh) 2017-11-28

Family

ID=50453381

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310727166.9A Active CN103729300B (zh) 2013-12-25 2013-12-25 非易失内存的管理方法和相关装置

Country Status (1)

Country Link
CN (1) CN103729300B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105786643B (zh) * 2014-12-25 2021-05-18 研祥智能科技股份有限公司 基于异构混合内存的数据备份方法和系统
CN105159778B (zh) * 2015-08-07 2019-08-02 上海斐讯数据通信技术有限公司 改善Optware环境下IPkg程序的I/O读写速度的方法
JP6556851B2 (ja) * 2015-09-08 2019-08-07 株式会社東芝 データベースシステム、サーバ装置、プログラムおよび情報処理方法
CN106775484A (zh) * 2016-12-26 2017-05-31 中国航空工业集团公司西安飞机设计研究所 一种NvRam存储管理方法
CN106648938B (zh) * 2016-12-30 2021-01-12 苏州浪潮智能科技有限公司 一种Linux系统应用程序内存管理方法及系统
CN106874068B (zh) * 2017-02-09 2020-02-21 联想(北京)有限公司 主机装置的容器运行加速方法及系统
CN107220186A (zh) * 2017-07-03 2017-09-29 福建新和兴信息技术有限公司 Android系统中业务对象的缓存管理方法及终端
CN109992536A (zh) * 2018-01-03 2019-07-09 华为技术有限公司 数据处理方法、固态硬盘以及计算机设备
CN109359058B (zh) * 2018-10-08 2021-07-06 郑州云海信息技术有限公司 一种非易失性内存储器支持方法与装置
CN109445991B (zh) * 2018-10-30 2020-06-30 歌尔科技有限公司 一种数据存储方法、系统、智能可穿戴设备及存储介质
CN110109761B (zh) * 2019-05-11 2021-06-04 广东财经大学 一种用户态管理操作系统内核内存方法及系统
CN113326120B (zh) * 2020-02-29 2023-12-26 杭州迪普科技股份有限公司 管理内存的装置和方法
CN114666641B (zh) * 2022-05-25 2022-08-26 舟谱数据技术南京有限公司 一种经销商多场景电视大屏投射系统及方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1979429A (zh) * 2005-12-08 2007-06-13 中兴通讯股份有限公司 自动释放嵌入式系统中应用程序模块泄漏内存的方法
CN101499034A (zh) * 2009-03-05 2009-08-05 北京中星微电子有限公司 内存管理方法
CN102169459A (zh) * 2010-11-29 2011-08-31 北京握奇数据系统有限公司 一种访问数据的方法、装置和智能卡
CN102598019A (zh) * 2009-09-09 2012-07-18 弗森-艾奥公司 用于分配存储的设备、系统和方法
CN103136110A (zh) * 2013-02-18 2013-06-05 华为技术有限公司 内存管理方法、内存管理装置及numa系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1979429A (zh) * 2005-12-08 2007-06-13 中兴通讯股份有限公司 自动释放嵌入式系统中应用程序模块泄漏内存的方法
CN101499034A (zh) * 2009-03-05 2009-08-05 北京中星微电子有限公司 内存管理方法
CN102598019A (zh) * 2009-09-09 2012-07-18 弗森-艾奥公司 用于分配存储的设备、系统和方法
CN102169459A (zh) * 2010-11-29 2011-08-31 北京握奇数据系统有限公司 一种访问数据的方法、装置和智能卡
CN103136110A (zh) * 2013-02-18 2013-06-05 华为技术有限公司 内存管理方法、内存管理装置及numa系统

Also Published As

Publication number Publication date
CN103729300A (zh) 2014-04-16

Similar Documents

Publication Publication Date Title
CN103729300B (zh) 非易失内存的管理方法和相关装置
CN108829350B (zh) 基于区块链的数据迁移方法和装置
JP5510556B2 (ja) 仮想マシンのストレージスペースおよび物理ホストを管理するための方法およびシステム
CN104919429B (zh) 存储管理计算机及存储管理方法
US9535739B2 (en) Virtual machine storage
US20190171264A1 (en) Persistent reservations for virtual disk using multiple targets
CN104536869B (zh) 移动终端及其资源管理方法
CN106168885B (zh) 一种基于lvm的逻辑卷动态扩容的方法及系统
CN103412822B (zh) 操作非易失性内存和数据操作的方法和相关装置
CN105260128B (zh) 一种将数据写入存储设备的方法及存储设备
CN109313564A (zh) 用于支持多个不同租户的高度可用虚拟桌面的服务器计算机管理系统
CN107329991B (zh) 一种列表页访问和展示方法及其系统
CN110311831A (zh) 基于容器云的系统资源监控方法及相关设备
CN108064377A (zh) 一种多系统共享内存的管理方法及装置
CN105892943A (zh) 一种分布式存储系统中块存储数据的访问方法及系统
CN107229415A (zh) 一种数据写方法、数据读方法及相关设备、系统
GB2597894A (en) Sensitive data management
CN108460585A (zh) 一种资源获取方法、资源分配方法、装置及电子设备
CN105094811A (zh) 一种事件处理的方法和装置
CN104715044B (zh) 一种分布式系统及其数据操作方法
CN115408108A (zh) 一种云环境下的i/o卸载方法、设备、系统及存储介质
CN108551764A (zh) 用于备份大型分布式横向扩展数据系统的系统和方法
CN108366098A (zh) 一种网络节点的数据交互方法及装置
CN109992352A (zh) 数据传输方法、装置、电子设备及可读取存储介质
CN107408073A (zh) 使用存储器压缩来减少存储器提交开销

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant