CN106980578A - 一种内存块管理方法及系统 - Google Patents
一种内存块管理方法及系统 Download PDFInfo
- Publication number
- CN106980578A CN106980578A CN201710213129.4A CN201710213129A CN106980578A CN 106980578 A CN106980578 A CN 106980578A CN 201710213129 A CN201710213129 A CN 201710213129A CN 106980578 A CN106980578 A CN 106980578A
- Authority
- CN
- China
- Prior art keywords
- node
- adjacent
- linked list
- nodes
- historical
- 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.)
- Pending
Links
- 238000007726 management method Methods 0.000 title claims abstract description 24
- 238000000034 method Methods 0.000 claims description 17
- 230000006870 function Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种内存块管理方法,包括:当目标节点保存至链表之前,利用目标节点的位置信息和历史节点的位置信息,判断目标节点是否与链表中已保存的历史节点相邻;若是,则将相邻的节点合并,得到合并节点,并保存至链表中。可见,本发明中,在保存目标节点前,利用目标节点中的位置信息和历史节点的位置信息,判断目标节点在链表中的保存位置是否与链表中的历史节点相邻,当判定相邻后,则将相邻的节点全部合并为一个节点,得到合并后的合并节点,并保存至链表中,从而减少了链表中的节点数量,实现了快速结束对链表的锁定,加快对申请和释放内存的处理速度,提高了系统的运行效率。另外,本申请还相应公开了一种内存块管理系统。
Description
技术领域
本发明涉及存储资源管理领域,特别涉及一种内存块管理方法及系统。
背景技术
RDMA(Remote Direct Memory Access,远程直接数据存取)是一种网卡技术,采用该技术可以通过提前注册到网卡的内存块,使一台计算机直接将信息放入另一台计算机的内存中。在ceph(分布式文件系统)集群中自建使用基于InfiniBand(无限带宽技术)的verbs接口封装底层RDMA通信架构时,需要考虑对通过函数注册内存块占用、释放的管理。
基于InfiniBand的verbs接口封装底层通信架构,在客户端向服务端写数据的过程中,客户端需要先在自己注册内存中获取可用的内存,把要传输的数据写入到其中,再调用函数提交写任务,当数据被写入到服务端的注册内存中后,客户端通过函数可以获取到之前占用的内存信息,在合适的时机将其释放掉。
一般情况下,程序在使用预分配的大块内存时,采用顺序遍历的方法,从头开始使用,当使用到结尾位置的时候,再从头开始循环。这种方法存在一些缺陷,比如如下场景:程序对内存的占用和释放是多线程且异步的,预分配的内存块比较大(500M),而每个节点对应的的内存较小(50Bytes),当申请的内存相对于节点较大(1M),则需要对调用多个节点才能满足申请的内存大小,在调用期间需要对整个链表加锁,无法处理其他调用申请,并消耗较多时间,这样在程序高速运行的过程中,链表节点过多,导致每次申请、释放内存时消耗的时间随着程序运行而越来越长,严重影响程序运行效率。
发明内容
有鉴于此,本发明的目的在于提供一种内存块管理方法及系统,加快对申请和释放内存的处理速度,提高系统的运行效率。其具体方案如下:
一种内存块管理方法,包括:
当目标节点保存至链表之前,利用所述目标节点的位置信息和历史节点的位置信息,判断所述目标节点是否与所述链表中已保存的历史节点相邻;
若是,则将相邻的节点合并,得到合并节点,并保存至所述链表中。
优选的,所述利用所述目标节点的位置信息和历史节点的位置信息,判断所述目标节点是否与所述链表中已保存的历史节点相邻的过程,包括:
从所述目标节点中获取位置信息,并对所述链表进行遍历,获取历史节点的位置信息,利用所述目标节点的位置信息和历史节点的位置信息,判断所述目标节点是否与历史节点相邻。
优选的,所述位置信息,包括偏移位置和长度。
优选的,所述若是,则将相邻的节点合并,并保存至链表中的过程,包括:
将所述目标节点与其相邻的历史节点合并,得到新节点,并保存至所述链表中;
利用所述新节点的指针中的历史节点位置信息,判断所述新节点是否与历史节点相邻;
若是,则将相邻的节点合并,并保存至所述链表中。
本发明还公开了一种内存块管理系统,包括:
判断模块,用于当目标节点保存至链表之前,利用所述目标节点的位置信息和历史节点的位置信息,判断所述目标节点是否与所述链表中已保存的历史节点相邻;
合并模块,若是,则将相邻的节点合并,得到合并节点,并保存至所述链表中。
优选的,所述判断模块,包括:
遍历单元,用于从所述目标节点中获取位置信息,并对所述链表进行遍历,获取历史节点的位置信息;
第一判断单元,用于利用所述目标节点的位置信息和历史节点的位置信息,判断所述目标节点是否与历史节点相邻。
优选的,所述合并模块,包括:
第一合并单元,用于将所述目标节点与其相邻的历史节点合并,得到新节点,并保存至所述链表中;
第二判断单元,用于利用所述新节点的指针中的历史节点位置信息,判断所述新节点是否与历史节点相邻;
第二合并单元,用于若是,则将相邻的节点合并,并保存至所述链表中。
本发明中,内存块管理方法,包括:当目标节点保存至链表之前,利用目标节点的位置信息和历史节点的位置信息,判断目标节点是否与链表中已保存的历史节点相邻;若是,则将相邻的节点合并,得到合并节点,并保存至链表中。可见,本发明中,在保存目标节点前,利用目标节点中的位置信息和历史节点的位置信息,判断目标节点在链表中的保存位置是否与链表中的历史节点相邻,当判定相邻后,则将相邻的节点全部合并为一个节点,得到合并后的合并节点,并保存至链表中,从而减少了链表中的节点数量,实现了快速结束对链表的锁定,加快对申请和释放内存的处理速度,提高了系统的运行效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例公开的一种内存块管理方法流程示意图;
图2为本发明实施例公开的一种内存块管理系统结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
可以理解的是,链表是用于管理内存块的一种方法,链表中保存有多个节点,每个节点对应一个内存块;当内存块空闲时,与之相应的节点保存在链表中,可以通过检索链表对相应的内存块进行调用;当内存块被占用时,与之相应的节点从链表中删除,确保被占用的内存块不会再通过链表被调用;当处于占用状态内存块被释放时,将生成与之相应的新节点,并保存至链表中,以便被再次调用。由于,程序对内存的占用和释放是多线程且异步的,每次申请、释放内存需要对整个链表加锁,每次释放的内存都放到链表中,这样在程序高速运行的过程中,链表节点过多,导致每次申请、释放内存时消耗的时间随着程序运行而越来越长,严重影响程序运行效率。
为此,本发明实施例公开了一种内存块管理方法,参见图1所示,该方法包括:
步骤S11:当目标节点保存至链表之前,利用目标节点的位置信息和历史节点的位置信息,判断目标节点是否与链表中已保存的历史节点相邻。
具体的,与目标节点相应的目标内存块,由占用状态经过释放变为空闲状态,因此生成目标节点,并准备将目标节点保存至链表中,由于链表中曾经保存过与目标内存块相应的目标节点,因此在生成目标节点时,目标节点中保存有其在链表中的位置信息,所以利用目标节点中的位置信息和历史节点的位置信息,通过判断两者位置是否连续,便可以判断目标节点在链表中的保存位置是否与链表中已保存的历史节点相邻,如果连续,则相邻,如果不连续,则不相邻。
步骤S12:若是,则将相邻的节点合并,得到合并节点,并保存至链表中。
具体的,当判定目标节点与历史节点相邻,则将相邻的节点合并,得到一个合并节点,并保存至链表中,合并节点所对应的内存块,也将变为由目标内存块和被合并的历史节点所对应的历史内存块合并后,得到的合并内存块,合并节点的位置信息也将更新。
需要说明的是,在调用内存时,若链表中的节点较少,可以快速的在链表中查找到满足内存大小的节点,同时,可以直接在大节点中申请部分内存,而不用继续对链表进行遍历;且在释放内存块,需要保存节点至链表时,也因节点数量的减少,加快了链表的遍历速度,实现了快速结束对链表的锁定,加快对申请和释放内存的处理速度,提高了系统的运行效率。
例如,当需要申请1M的内存块,则在链表中进行遍历并锁定,当第一个节点大小为500KB,不满足所申请的内存块大小,则通过第一个节点的后继指针指向第二个节点,第二个节点大小为20M,则从第二个节点中提取1M内存块,并结束对链表的锁定,此时,被提取的1M内存块后续的操作过程已不再影响别的申请,且较少的节点数,减少了释放内存块时,对链表的遍历时间,实现了快速结束对链表的锁定,加快对申请和释放内存的处理速度,提高了系统的运行效率。
可见,本发明实施例,在保存目标节点前,利用目标节点中的位置信息和历史节点的位置信息,判断目标节点在链表中的保存位置是否与链表中的历史节点相邻,当判定相邻后,则将相邻的节点全部合并为一个节点,得到合并后的合并节点,并保存至链表中,从而减少了链表中的节点数量,实现了快速结束对链表的锁定,加快对申请和释放内存的处理速度,提高了系统的运行效率。
本发明实施例公开了一种具体的内存块管理方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
上一实施例步骤S11中,利用目标节点的位置信息和历史节点的位置信息,判断目标节点是否与链表中已保存的历史节点相邻的具体过程,可以包括:
从目标节点中获取位置信息,并对链表进行遍历,从而得到获取历史节点的位置信息,利用目标节点的位置信息和历史节点的位置信息,判断目标节点是否与历史节点相邻,其中,位置信息,包括偏移位置和长度,利用目标节点的偏移位置和长度相加,可以得到目标节点的结束位置,再利用历史节点的偏移位置与目标节点的结束位置进行对比,判断是否相同,如果相同,则说明目标节点与历史节点相连,如果不同,则说明不相连。
例如,目标节点偏移位置为10,长度为20,将偏移位置和长度相加,得到目标节点的结束位置为30,通过对链表进行遍历,查找到有历史节点偏移位置为30,说明目标节点与该历史节点相邻,可以合并。
上一实施例步骤S12中,若是,则将相邻的节点合并,得到合并节点,并保存至链表中的过程,具体可以包括:
步骤S121:将目标节点与其相邻的历史节点合并,得到新节点,并保存至链表中。
步骤S122:利用新节点的指针中的历史节点位置信息,判断新节点是否与历史节点相邻。
具体的,当得到新节点后,新节点可能会与其他历史节点继续相邻,此时,可以利用新节点中的前驱指针中保存的前一个历史节点的位置信息和后继指针中后一个历史节点中的位置信息,判断新节点是否与历史节点相邻,如果相邻,则继续合并。
步骤S123:若是,则将相邻的节点合并,并保存至链表中。
具体的,当判定新节点与历史节点相邻,则将新节点与历史节点合并,得到合并节点,并保存至链表中。
需要说明的是,若在合并过程中,持续出现可合并的节点,则一直进行合并,直到没有节点可以进行合并操作。
相应的,本发明实施例还公开了一种内存块管理系统,参见图2所示,该系统包括:
判断模块11,用于当目标节点保存至链表之前,利用目标节点的位置信息和历史节点的位置信息,判断目标节点是否与链表中已保存的历史节点相邻;
合并模块12,若是,则将相邻的节点合并,得到合并节点,并保存至链表中。
本发明实施例中,上述判断模块11,具体可以包括遍历单元和第一判断单元;其中,
遍历单元,用于从目标节点中获取位置信息,并对链表进行遍历,获取历史节点的位置信息;
第一判断单元,用于利用目标节点的位置信息和历史节点的位置信息,判断目标节点是否与历史节点相邻。
上述合并模块12,具体可以包括第一合并单元、第二判断单元和第二合并单元;其中,
第一合并单元,用于将目标节点与其相邻的历史节点合并,得到新节点,并保存至链表中;
第二判断单元,用于利用新节点的指针中的历史节点位置信息,判断新节点是否与历史节点相邻;
第二合并单元,用于若是,则将相邻的节点合并,并保存至链表中。
其中,上述位置信息,包括偏移位置和长度。
可见,本发明实施例,在保存目标节点前,利用目标节点中的位置信息和历史节点的位置信息,判断目标节点在链表中的保存位置是否与链表中的历史节点相邻,当判定相邻后,则将相邻的节点全部合并为一个节点,得到合并后的合并节点,并保存至链表中,从而减少了链表中的节点数量,实现了快速结束对链表的锁定,加快对申请和释放内存的处理速度,提高了系统的运行效率。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种内存块管理方法及系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (7)
1.一种内存块管理方法,其特征在于,包括:
当目标节点保存至链表之前,利用所述目标节点的位置信息和历史节点的位置信息,判断所述目标节点是否与所述链表中已保存的历史节点相邻;
若是,则将相邻的节点合并,得到合并节点,并保存至所述链表中。
2.根据权利要求1所述的内存块管理方法,其特征在于,所述利用所述目标节点的位置信息和历史节点的位置信息,判断所述目标节点是否与所述链表中已保存的历史节点相邻的过程,包括:
从所述目标节点中获取位置信息,并对所述链表进行遍历,获取历史节点的位置信息,利用所述目标节点的位置信息和历史节点的位置信息,判断所述目标节点是否与历史节点相邻。
3.根据权利要求2所述的内存块管理方法,其特征在于,所述位置信息,包括偏移位置和长度。
4.根据权利要求1至3任一项所述的内存块管理方法,其特征在于,所述若是,则将相邻的节点合并,并保存至链表中的过程,包括:
将所述目标节点与其相邻的历史节点合并,得到新节点,并保存至所述链表中;
利用所述新节点的指针中的历史节点位置信息,判断所述新节点是否与历史节点相邻;
若是,则将相邻的节点合并,并保存至所述链表中。
5.一种内存块管理系统,其特征在于,包括:
判断模块,用于当目标节点保存至链表之前,利用所述目标节点的位置信息和历史节点的位置信息,判断所述目标节点是否与所述链表中已保存的历史节点相邻;
合并模块,若是,则将相邻的节点合并,得到合并节点,并保存至所述链表中。
6.根据权利要求5所述的内存块管理系统,其特征在于,所述判断模块,包括:
遍历单元,用于从所述目标节点中获取位置信息,并对所述链表进行遍历,获取历史节点的位置信息;
第一判断单元,用于利用所述目标节点的位置信息和历史节点的位置信息,判断所述目标节点是否与历史节点相邻。
7.根据权利要求5或6所述的内存块管理系统,其特征在于,所述合并模块,包括:
第一合并单元,用于将所述目标节点与其相邻的历史节点合并,得到新节点,并保存至所述链表中;
第二判断单元,用于利用所述新节点的指针中的历史节点位置信息,判断所述新节点是否与历史节点相邻;
第二合并单元,用于若是,则将相邻的节点合并,并保存至所述链表中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710213129.4A CN106980578A (zh) | 2017-04-01 | 2017-04-01 | 一种内存块管理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710213129.4A CN106980578A (zh) | 2017-04-01 | 2017-04-01 | 一种内存块管理方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106980578A true CN106980578A (zh) | 2017-07-25 |
Family
ID=59343809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710213129.4A Pending CN106980578A (zh) | 2017-04-01 | 2017-04-01 | 一种内存块管理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106980578A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111400213A (zh) * | 2019-09-29 | 2020-07-10 | 杭州海康威视系统技术有限公司 | 传输数据的方法、装置及系统 |
CN111814007A (zh) * | 2020-07-31 | 2020-10-23 | 新华三信息安全技术有限公司 | 双向链表数据处理方法、装置、设备及机器可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102866954A (zh) * | 2012-08-31 | 2013-01-09 | 华为技术有限公司 | 内存分配的方法及装置 |
CN103279474A (zh) * | 2013-04-10 | 2013-09-04 | 深圳康佳通信科技有限公司 | 一种视频文件索引方法及系统 |
CN103823865A (zh) * | 2014-02-25 | 2014-05-28 | 南京航空航天大学 | 一种数据库主存索引方法 |
US9189387B1 (en) * | 2013-06-24 | 2015-11-17 | Emc Corporation | Combined memory and storage tiering |
-
2017
- 2017-04-01 CN CN201710213129.4A patent/CN106980578A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102866954A (zh) * | 2012-08-31 | 2013-01-09 | 华为技术有限公司 | 内存分配的方法及装置 |
CN103279474A (zh) * | 2013-04-10 | 2013-09-04 | 深圳康佳通信科技有限公司 | 一种视频文件索引方法及系统 |
US9189387B1 (en) * | 2013-06-24 | 2015-11-17 | Emc Corporation | Combined memory and storage tiering |
CN103823865A (zh) * | 2014-02-25 | 2014-05-28 | 南京航空航天大学 | 一种数据库主存索引方法 |
Non-Patent Citations (2)
Title |
---|
张琼声: "《计算机操作系统原理》", 30 September 2012, 东营:中国石油大学出版社 * |
李海成: "WebitOS内存管理策略的优化", 《辽东学院学报(自然科学版)》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111400213A (zh) * | 2019-09-29 | 2020-07-10 | 杭州海康威视系统技术有限公司 | 传输数据的方法、装置及系统 |
CN111400213B (zh) * | 2019-09-29 | 2022-02-18 | 杭州海康威视系统技术有限公司 | 传输数据的方法、装置及系统 |
CN111814007A (zh) * | 2020-07-31 | 2020-10-23 | 新华三信息安全技术有限公司 | 双向链表数据处理方法、装置、设备及机器可读存储介质 |
CN111814007B (zh) * | 2020-07-31 | 2023-03-31 | 新华三信息安全技术有限公司 | 双向链表数据处理方法、装置、设备及机器可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9342274B2 (en) | Dynamic code generation and memory management for component object model data constructs | |
CN111506386A (zh) | 虚拟机在线迁移方法、装置、设备及计算机可读存储介质 | |
US8190857B2 (en) | Deleting a shared resource node after reserving its identifier in delete pending queue until deletion condition is met to allow continued access for currently accessing processor | |
CN112612751B (zh) | 一种异步目录操作方法、装置、设备和系统 | |
US20130007377A1 (en) | Message oriented middleware with integrated rules engine | |
CN114253694B (zh) | 一种基于神经网络加速器的异步处理方法与装置 | |
CN106980578A (zh) | 一种内存块管理方法及系统 | |
CN111177032A (zh) | 缓存空间申请方法、系统、装置及计算机可读存储介质 | |
CN112860412B (zh) | 业务数据处理方法、装置、电子设备及存储介质 | |
CN112241398A (zh) | 一种数据迁移方法和系统 | |
CN110764930A (zh) | 基于消息模式的请求或应答处理方法及装置 | |
CN108111598B (zh) | 云盘数据的下发方法、装置及存储介质 | |
CN112596669A (zh) | 一种基于分布式存储的数据处理方法及装置 | |
CN112306695A (zh) | 数据的处理方法、装置、电子设备及计算机存储介质 | |
CN110019057B (zh) | 请求处理方法及装置 | |
CN112764897B (zh) | 任务请求的处理方法、装置、系统及计算机可读存储介质 | |
CN110716923B (zh) | 数据处理方法、装置、节点设备及存储介质 | |
CN113342270A (zh) | 卷卸载方法、装置和电子设备 | |
CN109150993B (zh) | 一种获取网络请求切面的方法、终端装置及存储介质 | |
CN109343928B (zh) | 虚拟化集群中虚拟机的虚拟内存文件重定向方法及其系统 | |
CN113626383A (zh) | 一种数据处理方法、装置及设备 | |
CN112231290A (zh) | 一种本地日志的处理方法、装置、设备及存储介质 | |
CN111813501A (zh) | 一种数据删除方法、装置、设备及存储介质 | |
EP3418914A1 (en) | Data management apparatuses, methods, and non-transitory tangible machine-readable media thereof | |
CN111026564A (zh) | 命名服务的处理方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170725 |
|
RJ01 | Rejection of invention patent application after publication |