一种RDMA内存管理方法、装置、设备及介质与流程

文档序号:33631251发布日期:2023-03-28 23:01阅读:63来源:国知局
一种RDMA内存管理方法、装置、设备及介质与流程
一种rdma内存管理方法、装置、设备及介质
技术领域
1.本技术涉及rdma内存管理技术领域,特别涉及一种rdma内存管理方法、装置、设备及介质。


背景技术:

2.rdma(即remote direct memory access,远程直接内存访问技术)网络技术可以将数据从一个系统快速移动到远程系统存储器中,具有高带宽、低cpu(即central processing unit,中央处理器)消耗、低时延等特点,广泛应用于高性能计算和高性能存储领域。
3.目前,rdma内存管理方案中存在需要频繁进行内存拆分合并,导致rdma内存管理效率低的问题。


技术实现要素:

4.有鉴于此,本技术的目的在于提供一种rdma内存管理方法、装置、设备及介质,能够降低内存拆分合并的频率,从而提升rdma内存管理效率。其具体方案如下:第一方面,本技术公开了一种rdma内存管理方法,包括:将注册内存拆分为不同块大小的多个内存块,得到内存池;其中,所述注册内存为注册至rdma网卡中的内存;当进行内存申请时,从所述内存池中获取目标块大小的内存块以得到目标内存块;当释放所述目标内存块时,基于最近预设次内存申请中所述目标块大小对应的申请次数确定所述目标块大小对应的热度系数;基于所述热度系数计算所述目标块大小对应的预留内存块数量,并基于所述预留内存块数量对所述目标块大小的内存块进行合并,直到所述内存池中所述目标块大小的内存块数量小于所述预留内存块数量。
5.可选的,所述基于所述预留内存块数量对该所述目标块大小的内存块进行合并,包括:基于所述预留内存块数量计算合并阈值;判断所述内存池中所述目标块大小的内存块数量是否大于所述合并阈值;若所述目标块大小的内存块数量大于所述合并阈值,则对所述目标块大小的内存块进行合并。
6.可选的,在所述对所述目标块大小的内存块进行合并之前,还包括:判断所述内存池中是否存在可合并的所述目标块大小的内存块,若存在可合并的所述目标块大小的内存块,则触发对所述目标块大小的内存块进行合并的步骤。
7.可选的,当释放所述目标内存块时,还包括:判断所述目标内存块的伙伴内存块是否处于空闲状态,若所述目标内存块的伙伴
内存块处于空闲状态,则将所述目标内存块置为可合并状态。
8.可选的,所述判断所述内存池中是否存在可合并的所述目标块大小的内存块,包括:判断所述内存池中是否存在处于可合并状态的所述目标块大小的内存块。
9.可选的,还包括:创建使用状态记录位图;相应的,在所述从所述内存池中获取目标块大小的内存块以得到目标内存块之后,将所述目标内存块在所述使用状态记录位图中对应的位置为非空闲状态,在释放所述目标内存块之后,将该位置为空闲状态。
10.可选的,当进行内存申请时,从所述内存池中获取目标块大小的内存块以得到目标内存块,包括:判断所述内存池中是否存在目标块大小的内存块;若所述内存池中存在所述目标块大小的内存块,则直接获取目标内存块。
11.可选的,还包括:若所述内存池中不存在所述目标块大小的内存块,则判断所述内存池中是否存在大于所述目标块大小的内存块,若所述内存池中存在大于所述目标块大小的内存块,则进行内存块拆分,得到目标块大小的内存块。
12.可选的,还包括:若所述内存池中不存在大于所述目标块大小的内存块,则判断所述内存池中是否存在小于所述目标块大小且可合并的内存块,若存在小于所述目标块大小且可合并的内存块,则进行内存块合并,得到目标块大小的内存块。
13.可选的,所述将注册内存拆分为不同块大小的多个内存块,得到内存池,包括:将注册内存拆分为块大小为2的k次幂的不同块大小的多个内存块,得到内存池。
14.可选的,所述将注册内存拆分为块大小为2的k次幂的不同块大小的多个内存块,得到内存池,包括:确定k的取值范围;基于所述取值范围将注册内存拆分为块大小为2的k次幂的不同块大小的多个内存块,得到内存池。
15.可选的,在所述将注册内存拆分为不同块大小的多个内存块之后,包括:将所述多个内存块中相同块大小的内存块放置于同一内存空闲链表;其中,不同块大小的内存块对应不同的内存空闲链表。
16.可选的,所述将所述多个内存块中相同块大小的内存块放置于同一内存空闲链表,包括:将多个内存块中k值相同的内存块放置于同一内存空闲链表。
17.可选的,当进行内存申请时,从所述内存池中获取目标块大小的内存块以得到目标内存块,包括:确定目标块大小对应的空闲内存链表,目标块大小为2的n次幂;判断该空闲内存链表中是否存在空闲的内存块;若该空闲内存链表中存在空闲的内存块,则直接获取目标内存块;
若该空闲内存链表中不存在空闲的内存块,则判断2的n+1次幂块大小对应的空闲内存链表中是否存在空闲的内存块,若2的n+1次幂块大小对应的空闲内存链表中存在空闲的内存块,则进行内存块拆分,得到块大小为2的n次幂的内存块;若2的n+1次幂块大小对应的空闲内存链表中不存在空闲的内存块,则判断2的n-1次幂块大小对应的空闲内存链表中是否存在可合并的内存块,若2的n-1次幂块大小对应的空闲内存链表中存在可合并的内存块,则进行内存块合并,得到块大小为2的n次幂的内存块。
18.可选的,若2的n+1次幂块大小对应的空闲内存链表中存在空闲的内存块,则进行内存块拆分,得到块大小为2的n次幂的内存块,包括:将一个块大小为2的n次幂的内存块分配出去,将另一个块大小为2的n次幂的内存块放入2的n次幂块大小对应的空闲内存链表。
19.可选的,目标块大小为2的n次幂,相应的,当释放所述目标内存块时,还包括:将目标内存块插入2的n次幂块大小对应的空闲内存链表;相应的,所述基于所述预留内存块数量对所述目标块大小的内存块进行合并之后,还包括:将合并后的块大小为2的n+1次幂的内存块放入2的n+1次幂块大小对应的空闲内存链表。
20.可选的,所述基于所述热度系数计算所述目标块大小对应的预留内存块数量,包括:基于所述内存池中当前已分配出去的所述目标块大小的内存块的数量、所述热度系数计算所述目标块大小对应的预留内存块数量。
21.第二方面,本技术公开了一种rdma内存管理装置,包括:内存拆分模块,用于将注册内存拆分为不同块大小的多个内存块,得到内存池;其中,所述注册内存为注册至rdma网卡中的内存;内存申请模块,用于当进行内存申请时,从所述内存池中获取目标块大小的内存块以得到目标内存块;内存释放模块,用于当释放所述目标内存块时,基于最近预设次内存申请中所述目标块大小对应的申请次数确定所述目标块大小对应的热度系数;基于所述热度系数计算所述目标块大小对应的预留内存块数量,并基于所述预留内存块数量对所述目标块大小的内存块进行合并,直到所述内存池中所述目标块大小的内存块数量小于所述预留内存块数量。
22.可选的,所述内存释放模块,具体包括:热度系数计算子模块,用于基于最近预设次内存申请中所述目标块大小对应的申请次数确定所述目标块大小对应的热度系数;预留内存块数量计算子模块,用于基于所述热度系数计算所述目标块大小对应的预留内存块数量;内存合并子模块,用于基于所述预留内存块数量对所述目标块大小的内存块进行合并,直到所述内存池中所述目标块大小的内存块数量小于所述预留内存块数量。
23.可选的,内存合并子模块,具体用于基于所述预留内存块数量计算合并阈值;判断
所述内存池中所述目标块大小的内存块数量是否大于所述合并阈值;若所述目标块大小的内存块数量大于所述合并阈值,则对所述目标块大小的内存块进行合并。
24.可选的,所述内存合并子模块,还用于在所述对所述目标块大小的内存块进行合并之前,判断所述内存池中是否存在可合并的所述目标块大小的内存块,若存在可合并的所述目标块大小的内存块,则触发对所述目标块大小的内存块进行合并的步骤。
25.第三方面,本技术公开了一种电子设备,包括存储器和处理器,其中:所述存储器,用于保存计算机程序;所述处理器,用于执行所述计算机程序,以实现前述的rdma内存管理方法。
26.第四方面,本技术公开了一种计算机可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述的rdma内存管理方法。
27.可见,本技术先将注册内存拆分为不同块大小的多个内存块,得到内存池;其中,所述注册内存为注册至rdma网卡中的内存;当进行内存申请时,从所述内存池中获取目标块大小的内存块以得到目标内存块;当释放所述目标内存块时,基于最近预设次内存申请中所述目标块大小对应的申请次数确定所述目标块大小对应的热度系数;基于所述热度系数计算所述目标块大小对应的预留内存块数量,并基于所述预留内存块数量对所述目标块大小的内存块进行合并,直到所述内存池中所述目标块大小的内存块数量小于所述预留内存块数量。也即,本技术中,先得到包括不同块大小的内存块的内存池,在进行内存申请时,从内存池中获取内存块,在使用后将内存块释放回内存池,并且,基于内存块大小的最近申请次数计算相应的热度系数,进一步基于该热度系数计算相应的预留内存块数量,以及基于预留内存块数量进行内存块的合并,这样,根据不同块大小的内存块的申请热度,使内存池中相应块大小的内存块稳定在一定数量,能够降低内存拆分合并的频率,从而提升rdma内存管理效率。
附图说明
28.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
29.图1为本技术公开的一种rdma内存管理方法流程图;图2为本技术公开的一种具体的内存结构示意图;图3为本技术公开的一种具体的链表成员管理示意图;图4为本技术公开的一种rdma内存管理装置示意图;图5为本技术公开的一种电子设备结构图。
具体实施方式
30.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
31.目前,rdma内存管理方案中存在需要频繁进行内存拆分合并,导致rdma内存管理效率低的问题。为此,本技术提供了一种rdma内存管理方案,能够降低内存拆分合并的频率,从而提升rdma内存管理效率。
32.参见图1所示,本技术实施例公开了一种rdma内存管理方法,包括:步骤s11:将注册内存拆分为不同块大小的多个内存块,得到内存池;其中,所述注册内存为注册至rdma网卡中的内存。
33.在具体的实施方式中,可以根据网络环境与带宽要求申请出所需大小的内存,并将内存注册到rdma网卡,作为注册内存。
34.进一步的,可以将注册内存拆分为块大小为2的k次幂的不同块大小的多个内存块,得到内存池。并且,可以确定k的取值范围;基于所述取值范围将注册内存拆分为块大小为2的k次幂的不同块大小的多个内存块,得到内存池。其中,可以根据业务需求确定k的取值范围。并且,可以将所述多个内存块中相同块大小的内存块放置于同一内存空闲链表;其中,不同块大小的内存块对应不同的内存空闲链表。具体的,将多个内存块中k值相同的内存块放置于同一内存空闲链表。
35.步骤s12:当进行内存申请时,从所述内存池中获取目标块大小的内存块以得到目标内存块。
36.在一种实施方式中,可以判断所述内存池中是否存在目标块大小的内存块;若所述内存池中存在所述目标块大小的内存块,则直接获取目标内存块。若所述内存池中不存在所述目标块大小的内存块,则判断所述内存池中是否存在大于所述目标块大小的内存块,若所述内存池中存在大于所述目标块大小的内存块,则进行内存块拆分,得到目标块大小的内存块。若所述内存池中不存在大于所述目标块大小的内存块,则判断所述内存池中是否存在小于所述目标块大小且可合并的内存块,若存在小于所述目标块大小且可合并的内存块,则进行内存块合并,得到目标块大小的内存块。
37.进一步的,在一种具体的实施方式中,可以确定目标块大小对应的空闲内存链表,目标块大小为2的n次幂;判断该空闲内存链表中是否存在空闲的内存块;若该空闲内存链表中存在空闲的内存块,则直接获取目标内存块;若该空闲内存链表中不存在空闲的内存块,则判断2的n+1次幂块大小对应的空闲内存链表中是否存在空闲的内存块,若2的n+1次幂块大小对应的空闲内存链表中存在空闲的内存块,则进行内存块拆分,得到块大小为2的n次幂的内存块,将一个块大小为2的n次幂的内存块分配出去,将另一个块大小为2的n次幂的内存块放入2的n次幂块大小对应的空闲内存链表。若2的n+1次幂块大小对应的空闲内存链表中不存在空闲的内存块,则判断2的n-1次幂块大小对应的空闲内存链表中是否存在可合并的内存块,若2的n-1次幂块大小对应的空闲内存链表中存在可合并的内存块,则进行内存块合并,得到块大小为2的n次幂的内存块。
38.步骤s13:当释放所述目标内存块时,基于最近预设次内存申请中所述目标块大小对应的申请次数确定所述目标块大小对应的热度系数。
39.在具体的实施方式中,热度系数为目标块大小对应的申请次数与最近预设次之比。比如,最近预设次为最近100次,其中,目标块大小对应的申请次数为20次,目标块大小对应的热度系数为20/100。
40.步骤s14:基于所述热度系数计算所述目标块大小对应的预留内存块数量,并基于
所述预留内存块数量对所述目标块大小的内存块进行合并,直到所述内存池中所述目标块大小的内存块数量小于所述预留内存块数量。
41.在具体的实施方式中,可以基于所述预留内存块数量计算合并阈值;判断所述内存池中所述目标块大小的内存块数量是否大于所述合并阈值;若所述目标块大小的内存块数量大于所述合并阈值,则对所述目标块大小的内存块进行合并。其中,合并阈值=预留内存块数量*(1+预设阈值系数),阈值系数的取值范围可以为(0,1),比如,0.2。可以理解的是,通过合并阈值能够避免在当前目标块大小的内存块只略大于预留内存块数量时即触发合并,比如只大于1,从而降低合并次数。并且,本技术实施例在rdma注册内存管理中,实现了动态调整不同阶内存的预留内存块数量。
42.进一步的,本技术实施在所述对所述目标块大小的内存块进行合并之前,还包括:判断所述内存池中是否存在可合并的所述目标块大小的内存块,若存在可合并的所述目标块大小的内存块,则触发对所述目标块大小的内存块进行合并的步骤。
43.并且,本技术实施例中,当释放所述目标内存块时,判断所述目标内存块的伙伴内存块是否处于空闲状态,若所述目标内存块的伙伴内存块处于空闲状态,则将所述目标内存块置为可合并状态。相应的,判断所述内存池中是否存在可合并的所述目标块大小的内存块,具体为判断所述内存池中是否存在处于可合并状态的所述目标块大小的内存块。可以理解的是,本技术实施例中是将内存块与其伙伴内存块合并。
44.另外,可以创建使用状态记录位图;相应的,本技术实施例在所述从所述内存池中获取目标块大小的内存块以得到目标内存块之后,将所述目标内存块在所述使用状态记录位图中对应的位置为非空闲状态,在释放所述目标内存块之后,将该位置为空闲状态。也即,每个内存块均存在唯一对应的位,来记录该内存块的使用状态。并且,使用状态记录位图中各位的初始状态均为空闲状态,比如,1表示空闲状态,0表示非空闲状态,并且,不同块大小对应不同的使用状态记录位图。
45.进一步的,在一种具体的实施方式中,目标块大小为2的n次幂,相应的,当释放所述目标内存块时,可以将目标内存块插入2的n次幂块大小对应的空闲内存链表;判断所述目标内存块的伙伴内存块是否处于空闲状态,若所述目标内存块的伙伴内存块处于空闲状态,则将所述目标内存块置为可合并状态。基于所述内存池中当前已分配出去的所述目标块大小的内存块的数量、所述热度系数计算所述目标块大小对应的预留内存块数量。基于所述预留内存块数量计算合并阈值;判断2的n次幂块大小对应的空闲内存链表中内存块的数量是否大于所述合并阈值;若大于所述合并阈值,则判断该空闲内存链表中是否存在可合并的内存块,若存在可合并的内存块,则进行合并。并且,将合并后的块大小为2的n+1次幂的内存块放入2的n+1次幂块大小对应的空闲内存链表。
46.需要指出的是,rdma技术直接对内存进行数据传输,为保证数据的准确可靠,用户态进程需要预先将内存注册到rdma网卡中,确保数据传输过程中应用程序不能修改数据所在的内存并且内存的物理地址和虚拟地址的映射固定不变。内存注册和取消注册耗时较长,因为内存注册将导致通信效率的降低,为此本技术实施例预注册一大块mr(memory region,指的是由rdma软件层在内存中规划出的一片区域,用于存放收发的数据),然后进行内存拆分,作为内存池,每次使用的时候从内存池中获取所需大小的内存块,使用结束后归还到内存池,进程结束的时候将内存取消注册并释放,这种方式只需要对内存进行一次
注册和取消注册,减少了相应的时间。
47.在此基础上,采用何种内存管理方式进行高效的内存申请和释放成为rdma消息发送效率的一个重要影响因素,rdma在内存使用方面主要分为两类:(1)固定块大小内存,供rdma send/recv 操作元语使用(2)可变块大小内存,供rdma read/write 操作元语使用,这两种内存都要求内存地址的连续,为方便统一管理可以采用统一内存池,在连续地址的内存分配上,伙伴(buddy)算法凭借其优秀的效率和内存碎片管理成为普遍选择,但是在实际使用过程中,当需要管理的内存过大时,频繁的内存拆分合并会导致内存分配效率降低。而在分布式存储的实际使用过程中,一段时间内某几个大小的内存申请频率会远超其它内存块(比如供rdma send/recv 使用的固定块大小内存),此时若还按原有流程会导致重复的拆分合并动作,降低内存管理效率。本技术实施例基于伙伴算法同时考虑不同大小内存申请热度对内存进行预留以减少内存拆分合并动作,通过在内存的申请和释放过程中不断调整不同大小内存的数量,有效降低内存拆分合并的次数,从而提高内存管理的效率。
48.例如,参见图2所示,图2为本技术实施例公开的一种具体的内存结构示意图,在内存分配方法上,采用2的k次幂的切分方式,将整块注册内存按最小阶m到最大阶n(最大可申请内存小于等于内存池)进行拆分。在内存释放时,根据最近的100次内存申请的频率为n阶内存计算出一个热度系数λ(λ=该阶内存申请次数/100),n∈[n,m],根据热度系数λ和当前阶内存链表同时被分配出去的数量计算出该n阶内存链表中内存块的预留内存块数量(预留内存块数量=λ*当前阶内存链表同时被分配出去的数量)。根据n阶内存的预留内存块数量和阈值系数(0~1)计算出链表中内存的合并阈值(合并阈值=预留内存数量*(1+阈值系数)),超过阈值进行内存合并操作,直到内存块数小于与预留内存数量。在链表的成员的管理上,将空闲伙伴内存的每块内存都对应到map(位图)中,伙伴内存对应的数值都为1时,代表此时的内存都是空闲状态,当触发内存合并时将两块内存从链表中取出并进行合并。例如,参见图3所示,图3为本技术实施例公开的一种具体的链表成员管理示意图。
[0049]
在一种具体的实施方式中,根据网络环境与带宽要求申请出合适块大小的内存,并将内存注册到rdma网卡设备,根据实际业务模型 ,确定内存最小阶数m和最大阶数n,将注册内存拆分,得到内存池。进一步的:n阶内存申请流程为:(1)、判断n阶内存链表是否有空闲成员,如果有则直接分配,如果没有则执行下一步;(2)判断n+1阶内存链表是否有空闲成员,如果有则将该内存从链表取出并拆分为两块n阶内存,一块放入n阶内存空闲链表,另一块分配出去,如果没有则执行下一步;(3)、判断n-1阶内存列表是否有可合并内存,如果有则触发n-1阶内存的内存合并,将合并后的内存分配出去;(4)、依此类推,如果最终无法获得内存,则内存分配失败。
[0050]
n阶内存释放流程为:(1)将n阶内存插入到空闲内存链表,判断内存的伙伴内存是否空闲,如果空闲则将当前内存状态置为可合并状态;(2)根据n阶内存当前同时被分配出去的数量以及n阶内存热度系数λ计算出n阶内存的预留数量,执行步骤(3);(3)、如果n阶内存链表中内存数量大于预留内存数量的阈值(阈值=预留内存数量*(1+阈值系数))时,执行步骤(4);(4)、判断当前n阶空闲链表是否有可合并内存,如果有则将可合并n阶内存合并为n+1阶内存,直到内存数量小于预留数量;(5)依此类推,将内存释放到合适的链表。
[0051]
这样,基于实际的应用场景,结合伙伴算法和不同大小内存块的热度对不同阶内存进行一定合理的预留,实现内存动态调整,内存池中不同大小内存块的链表长度会随着
业务的持续运行逐渐趋于一个稳态,后续进行内存申请和释放时会大大减少内存的拆分和合并操作,并减小因内存申请释放造成的抖动,当业务的数据发生改变时能根据场景动态调整,提高网络内存的申请速率从而降低io(即input/output,输入/输出)时延。
[0052]
可见,本技术实施例先将注册内存拆分为不同块大小的多个内存块,得到内存池;其中,所述注册内存为注册至rdma网卡中的内存;当进行内存申请时,从所述内存池中获取目标块大小的内存块以得到目标内存块;当释放所述目标内存块时,基于最近预设次内存申请中所述目标块大小对应的申请次数确定所述目标块大小对应的热度系数;基于所述热度系数计算所述目标块大小对应的预留内存块数量,并基于所述预留内存块数量对所述目标块大小的内存块进行合并,直到所述内存池中所述目标块大小的内存块数量小于所述预留内存块数量。也即,本技术实施例中,先得到包括不同块大小的内存块的内存池,在进行内存申请时,从内存池中获取内存块,在使用后将内存块释放回内存池,并且,基于内存块大小的最近申请次数计算相应的热度系数,进一步基于该热度系数计算相应的预留内存块数量,以及基于预留内存块数量进行内存块的合并,这样,根据不同块大小的内存块的申请热度,使内存池中相应块大小的内存块稳定在一定数量,能够降低内存拆分合并的频率,从而提升rdma内存管理效率。
[0053]
参见图4所示,本技术实施例公开了一种rdma内存管理装置,包括:内存拆分模块11,用于将注册内存拆分为不同块大小的多个内存块,得到内存池;其中,所述注册内存为注册至rdma网卡中的内存;内存申请模块12,用于当进行内存申请时,从所述内存池中获取目标块大小的内存块以得到目标内存块;内存释放模块13,用于当释放所述目标内存块时,基于最近预设次内存申请中所述目标块大小对应的申请次数确定所述目标块大小对应的热度系数;基于所述热度系数计算所述目标块大小对应的预留内存块数量,并基于所述预留内存块数量对所述目标块大小的内存块进行合并,直到所述内存池中所述目标块大小的内存块数量小于所述预留内存块数量。
[0054]
可见,本技术实施例先将注册内存拆分为不同块大小的多个内存块,得到内存池;其中,所述注册内存为注册至rdma网卡中的内存;当进行内存申请时,从所述内存池中获取目标块大小的内存块以得到目标内存块;当释放所述目标内存块时,基于最近预设次内存申请中所述目标块大小对应的申请次数确定所述目标块大小对应的热度系数;基于所述热度系数计算所述目标块大小对应的预留内存块数量,并基于所述预留内存块数量对所述目标块大小的内存块进行合并,直到所述内存池中所述目标块大小的内存块数量小于所述预留内存块数量。也即,本技术实施例中,先得到包括不同块大小的内存块的内存池,在进行内存申请时,从内存池中获取内存块,在使用后将内存块释放回内存池,并且,基于内存块大小的最近申请次数计算相应的热度系数,进一步基于该热度系数计算相应的预留内存块数量,以及基于预留内存块数量进行内存块的合并,这样,根据不同块大小的内存块的申请热度,使内存池中相应块大小的内存块稳定在一定数量,能够降低内存拆分合并的频率,从而提升rdma内存管理效率。
[0055]
其中,所述内存释放模块13,具体包括:热度系数计算子模块,用于基于最近预设次内存申请中所述目标块大小对应的申
请次数确定所述目标块大小对应的热度系数;预留内存块数量计算子模块,用于基于所述热度系数计算所述目标块大小对应的预留内存块数量;内存合并子模块,用于基于所述预留内存块数量对所述目标块大小的内存块进行合并,直到所述内存池中所述目标块大小的内存块数量小于所述预留内存块数量。
[0056]
并且,内存合并子模块,具体用于基于所述预留内存块数量计算合并阈值;判断所述内存池中所述目标块大小的内存块数量是否大于所述合并阈值;若所述目标块大小的内存块数量大于所述合并阈值,则对所述目标块大小的内存块进行合并。
[0057]
另外,所述内存合并子模块,还用于在所述对所述目标块大小的内存块进行合并之前,判断所述内存池中是否存在可合并的所述目标块大小的内存块,若存在可合并的所述目标块大小的内存块,则触发对所述目标块大小的内存块进行合并的步骤。
[0058]
进一步的,所述装置还包括可合并状态标识模块,用于当释放所述目标内存块时,判断所述目标内存块的伙伴内存块是否处于空闲状态,若所述目标内存块的伙伴内存块处于空闲状态,则将所述目标内存块置为可合并状态。
[0059]
相应的,所述内存合并子模块,还用于判断所述内存池中是否存在处于可合并状态的所述目标块大小的内存块。
[0060]
进一步的,所述装置还包括:位图创建模块,用于创建使用状态记录位图;位图管理模块,用于在所述从所述内存池中获取目标块大小的内存块以得到目标内存块之后,将所述目标内存块在所述使用状态记录位图中对应的位置为非空闲状态,在释放所述目标内存块之后,将该位置为空闲状态。
[0061]
并且,内存申请模块12,具体用于判断所述内存池中是否存在目标块大小的内存块;若所述内存池中存在所述目标块大小的内存块,则直接获取目标内存块。若所述内存池中不存在所述目标块大小的内存块,则判断所述内存池中是否存在大于所述目标块大小的内存块,若所述内存池中存在大于所述目标块大小的内存块,则进行内存块拆分,得到目标块大小的内存块。若所述内存池中不存在大于所述目标块大小的内存块,则判断所述内存池中是否存在小于所述目标块大小且可合并的内存块,若存在小于所述目标块大小且可合并的内存块,则进行内存块合并,得到目标块大小的内存块。
[0062]
在一种实施方式中,内存拆分模块11,具体用于将注册内存拆分为块大小为2的k次幂的不同块大小的多个内存块,得到内存池。进一步的,具体用于确定k的取值范围;基于所述取值范围将注册内存拆分为块大小为2的k次幂的不同块大小的多个内存块,得到内存池。
[0063]
另外,内存拆分模块11,还用于在所述将注册内存拆分为不同块大小的多个内存块之后,将所述多个内存块中相同块大小的内存块放置于同一内存空闲链表;其中,不同块大小的内存块对应不同的内存空闲链表。具体的,将多个内存块中k值相同的内存块放置于同一内存空闲链表。
[0064]
在一种实施方式中,内存申请模块12,具体用于确定目标块大小对应的空闲内存链表,目标块大小为2的n次幂;判断该空闲内存链表中是否存在空闲的内存块;若该空闲内
存链表中存在空闲的内存块,则直接获取目标内存块;若该空闲内存链表中不存在空闲的内存块,则判断2的n+1次幂块大小对应的空闲内存链表中是否存在空闲的内存块,若2的n+1次幂块大小对应的空闲内存链表中存在空闲的内存块,则进行内存块拆分,得到块大小为2的n次幂的内存块;若2的n+1次幂块大小对应的空闲内存链表中不存在空闲的内存块,则判断2的n-1次幂块大小对应的空闲内存链表中是否存在可合并的内存块,若2的n-1次幂块大小对应的空闲内存链表中存在可合并的内存块,则进行内存块合并,得到块大小为2的n次幂的内存块。另外,内存申请模块12,还用于将一个块大小为2的n次幂的内存块分配出去,将另一个块大小为2的n次幂的内存块放入2的n次幂块大小对应的空闲内存链表。
[0065]
相应的,内存释放模块13,还用于当释放所述目标内存块时,将目标内存块插入2的n次幂块大小对应的空闲内存链表;目标块大小为2的n次幂;在所述基于所述预留内存块数量对所述目标块大小的内存块进行合并之后, 将合并后的块大小为2的n+1次幂的内存块放入2的n+1次幂块大小对应的空闲内存链表。
[0066]
在一种实施方式中,预留内存块数量计算子模块,具体用于基于所述内存池中当前已分配出去的所述目标块大小的内存块的数量、所述热度系数计算所述目标块大小对应的预留内存块数量。
[0067]
参见图5所示,本技术实施例公开了一种电子设备20,包括处理器21和存储器22;其中,所述存储器22,用于保存计算机程序;所述处理器21,用于执行所述计算机程序,前述实施例公开的rdma内存管理方法。
[0068]
关于上述rdma内存管理方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
[0069]
并且,所述存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,存储方式可以是短暂存储或者永久存储。
[0070]
另外,所述电子设备20还包括电源23、通信接口24、输入输出接口25和通信总线26;其中,所述电源23用于为所述电子设备20上的各硬件设备提供工作电压;所述通信接口24能够为所述电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本技术技术方案的任意通信协议,在此不对其进行具体限定;所述输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
[0071]
进一步的,本技术实施例还公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的rdma内存管理方法。
[0072]
关于上述rdma内存管理方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
[0073]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0074]
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术
领域内所公知的任意其它形式的存储介质中。
[0075]
以上对本技术所提供的一种rdma内存管理方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1