一种管理内存的方法、装置和存储系统与流程

文档序号:17772863发布日期:2019-05-28 19:38阅读:186来源:国知局
一种管理内存的方法、装置和存储系统与流程

本申请涉及计算机存储领域,并且更具体地,涉及一种管理内存的方法、装置和存储系统。



背景技术:

目前,在存储系统中,一些业务为了提升元数据或者用户数据读写性能,会从包括多个内存块的内存中申请内存块,并将数据写入内存块,然后通过读写缓冲存储模块(readwritecache,rw-cache)管理这些写入数据的内存块,以提高数据的读写速度。

在现有技术中,当rw-cache中存储数据所占的内存空间达到一定水位后,就会按照冷热点数据或者先入先出的策略淘汰存储的数据,即清空内存块中存储的该数据。当内存块中存储的数据全部被清空后,该内存块就可以被回收到内存池。然而由于一个内存块上存放着不止一个业务类型的数据,故淘汰策略无法保证一个内存块中的内存空间全部被释放,继而内存块不能被回收到内存池,以便被其他业务使用。因此,当前管理内存的方式不能保证内存块被有效利用。



技术实现要素:

本申请提供一种管理内存的方法和装置,能够提高系统的内存利用率。

第一方面,提供了一种管理内存的方法,该方法包括:判断内存使用率是否达到预设阈值,该内存包括多个内存块,该内存块中至少有部分内存块属于已分配的内存块,其中每个已分配的内存块用于保存一种业务类型的数据,内存使用率是已分配的内存块在内存包括的多个内存块中的比例;当内存使用率达到预设阈值时,从已分配的内存块中选择至少一个目标内存块;清除或转移目标内存块中的全部数据。

根据本申请实施例的管理内存的方法,通过在每个已分配的内存块中保存一种业务类型的数据,并且判断已分配的内存块在该内存包括的多个内存块中的比例是否达到预设阈值,且当该比例达到预设阈值时,清除或转移目标内存块中的全部数据,从而,能够使得该目标内存块被其他待缓存的数据使用,提高系统的内存利用率,此外,有助于业务成功申请到内存块,提高系统内存可靠性。

可选地,该目标内存块中的部分内存空间存储有数据。

该目标内存块是部分内存空间存储有数据的内存块,也就是说,该目标内存块中的内存空间没有被全部存储数据,因此,会更容易、方便地清除或者转移目标内存块中的全部数据。

可选地,在从已分配的内存块中选择至少一个目标内存块之前,包括:生成第一表项,该第一表项记录有已分配的内存块中的每个内存块中存储有数据的内存空间的地址;以及清除或转移目标内存块中的全部数据,包括:根据第一表项,清除或转移目标内存块中的全部数据。

从而能够根据第一表项中记录的目标内存块中存储有数据的内存空间的地址,清除或者转移目标内存块中的全部数据,能够容易地实现清楚或转移目标内存块中全部数据的过程。

可选地,判断内存使用率是否达到预设阈值,包括:确定n个参考值,该n个参考值与n个时段一一对应,每个参考值是所对应的时段中已分配的内存块在内存包括的多个内存块中的比例,n为大于或等于2的正整数;根据该n个参考值,判断内存使用率是否达到预设阈值。

可选地,该内存使用率是该n个参考值的平均值。

可选地,该内存使用率是该n个参考值中的最大值。

通过确定n个参考值,可以进一步提高本申请实施例的管理内存的方法的效果。

第二方面,提供了一种管理内存的装置,该装置包括:判断单元,具体用于判断内存使用率是否达到预设阈值,该内存包括多个内存块,该内存块中至少有部分内存块属于已分配的内存块,其中每个已分配的内存块用于保存一种业务类型的数据,内存使用率是已分配的内存块在内存包括的多个内存块中的比例;选择单元,用于当内存使用率达到预设阈值时,从已分配的内存块中选择至少一个目标内存块;处理单元,用于清除或转移目标内存块中的全部数据。

根据本申请实施例的管理内存的装置,通过在每个已分配的内存块中保存一种业务类型的数据,并且判断已分配的内存块在该内存包括的多个内存块中的比例是否达到预设阈值,且当该比例达到预设阈值时,清除或转移目标内存块中的全部数据,从而,能够使得该目标内存块被其他待缓存的数据使用,提高系统的内存利用率,此外,有助于业务成功申请到内存块,提高系统内存可靠性。

可选地,该目标内存块中的部分内存空间存储有数据。

该目标内存块是部分内存空间存储有数据的内存块,也就是说,该目标内存块中的内存空间没有被全部存储数据,因此,会更容易、方便地清除或者转移目标内存块中的全部数据。

可选地,该装置还包括生成单元,该生成单元具体用于在从已分配的内存块中选择至少一个目标内存块之前,生成第一表项,该第一表项记录有已分配的内存块中的每个内存块中存储有数据的内存空间的地址;以及,该处理单元具体用于根据第一表项,清除或转移目标内存块中的全部数据。

从而能够根据第一表项中记录的目标内存块中存储有数据的内存空间的地址,清除或者转移目标内存块中的全部数据,能够容易地实现清楚或转移目标内存块中全部数据的过程。

可选地,该装置还包括确定单元,该确定单元具体用于确定n个参考值,该n个参考值与n个时段一一对应,每个参考值是所对应的时段中已分配的内存块在内存包括的多个内存块中的比例,n为大于或等于2的正整数;该判断单元具体用于根据该n个参考值,判断内存使用率是否达到预设阈值。

可选地,该内存使用率是该n个参考值的平均值。

可选地,该内存使用率是该n个参考值中的最大值。

通过确定n个参考值,可以进一步提高本申请实施例的管理内存的方法的效果。

第三方面,提供了一种管理内存的装置,该装置包括:存储器,用于存储程序;处理器,用于执行程序,当该程序被执行时,该处理器用于执行上述第一方面以及第一方面的各实现方式中的相应的功能。

第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质用于储存计算机软件指令,其包含用于执行上述第一方面的方法所设计的程序。

通过判断已分配的内存块在内存包括的多个内存块中的比例是否达到预设阈值,且当该比例达到预设阈值时,清除或转移目标内存块中的全部数据,从而,能够使得该内存块被其他待缓存的数据使用,提高系统的内存利用率,此外,有助于业务成功申请到内存块,提高系统内存可靠性。

附图说明

图1是适用于本申请实施例的管理内存的方法的系统架构;

图2是根据本申请一实施例的管理内存的方法的示意性流程图;

图3是适用于本申请的管理内存的方法的示意图;

图4是适用于本申请的管理内存的方法的另一示意图;

图5是根据本申请实施例的一个管理内存的方法的示意性流程图;

图6是根据本申请一实施例的管理内存的装置的示意性框图;

图7是根据本申请另一实施例的管理内存的装置的示意性框图;

图8是根据本申请实施例提供的存储系统的示意性框图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

本申请实施例提供的管理内存的方法和装置,可以应用于计算机上,该计算机包括硬件层、运行在硬件层之上的操作系统层,以及运行在操作系统层上的应用层。该硬件层包括中央处理器(centralprocessingunit,cpu)、内存管理单元(memorymanagementunit,mmu)和内存(也称为主存)等硬件。

该操作系统可以是任意一种或多种通过进程(process)实现业务处理的计算机操作系统,例如,linux操作系统、unix操作系统、android操作系统、ios操作系统或windows操作系统等。

该应用层包含浏览器、通讯录、文字处理软件、即时通信软件等应用。

并且,在本申请实施例中,该计算机可以是智能手机等手持设备,也可以是个人计算机等终端设备,本申请并未特别限定,只要能够通过运行记录有本申请实施例的管理内存的方法的代码的程序,以根据本申请实施例的管理内存的方法对内存进行管理即可。

本申请实施例的管理内存的方法的执行主体可以是计算机设备,或者,是计算机设备中能够调用程序并执行程序的功能模块。

在本申请实施例中,管理内存的过程可以是:首先在内存中划分出多个内存块,进而再对内存块进行切分,切分成多个内存片,内存片是业务在系统运行过程中需要使用内存的基本单位。图1示出了适用于本申请实施例的管理内存的方法的系统架构图。

统一内存管理(unifymemorymanager,umm)是内存管理的一种模型。内存管理是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种,他们其实最终都是要实现2个函数:malloc和free;malloc函数用于内存申请,free函数用于内存释放。作为示例,本申请实施例用统一内存管理模型实现内存管理,可以看成,umm管理着多个内存块,内存块是umm内存管理的基本单位。

当业务申请内存时,umm管理的内存会提供一个内存块,但是数据请求分配的内存大小为几十个字节或几百个字节时应该如何处理,也就是说如何在一个内存块中分配小的内存区,目前经常采用的是slab分配器,具体地,slab分配器获取内存块后按照业务指定的定长大小内存片进行切分,内存片是业务在系统运行过程中需要使用内存的基本单位。

可选地,一个业务模块对应一个slab分配器,业务中的数据申请内存时,在所述slab分配器中分配内存。具体地,例如,针对业务_1,有一个对应的slab分配器_1,对于业务_1中待存储的数据,在slab分配器_1中进行内存的分配;针对业务_2,有一个对应的slab分配器_2,对于业务_2中待存储的数据,在slab分配器_2中进行内存的分配;针对业务_n,有一个对应的slab分配器_n,对于业务_n中待存储的数据,在slab分配器_n中进行内存的分配。

具体地,此处的业务类型可以是针对不同用户的业务,即,业务_1、业务_2、……、业务_n可以是针对n个不同的用户,其存储的数据可以是用户数据也可以是元数据;业务类型也可以是同一用户的不同的具体业务,即,业务_1、业务_2、……、业务_n可以是针对某个用户的视频业务、语音业务、文本业务等,例如,视频业务存储的数据可以是用户缓存的视频数据,本发明对此不作限定。

读写缓冲存储模块(readwritecache,rw-cache)是一个用于管理读写数据的功能模块,用于管理存储在内存块中的数据,提升数据的读写性能,其读写速度比硬盘快几倍甚至十几倍。目前,在存储系统中,一些业务为了提升元数据或者用户数据读写性能,会从内存中申请内存块,并将数据写入内存块,然后通过rw-cache管理这些写入数据的内存块,相当于,用rw-cache缓存这些数据,以提高数据的读写速度。在本申请实施例中,用rw-cache管理写入数据的内存块,需要说明的是,本申请不限于此。

具体地,例如,业务_1中的数据向slab分配器_1申请内存片并写入数据后,rw-cache管理该内存片,即,当读取该数据时,从rw-cache读取该数据,这样,比从硬盘上读取要快得多。需要说明的是,上述各个模块仅是示例性说明。

图2示出了根据本申请一实施例的管理内存的方法100的示意性流程图。如图2所示,该方法100包括步骤s110-s130,下面详细地描述各个步骤。

s110,判断内存使用率是否达到预设阈值,内存包括多个内存块,内存块中至少有部分内存块属于已分配的内存块,其中每个已分配的内存块用于保存一种业务类型的数据,内存使用率是已分配的内存块在内存包括的多个内存块中的比例。

将内存划分成内存块是一种内存分配方式,在真正使用内存之前,先申请分配一定数量的、一般情况下大小相等的内存块留作备用,当有新的内存需求时,就从包括多个内存块的内存中分出一部分内存块,若内存块不够再继续申请新的内存块。这样做的一个显著优点是,使得内存分配效率得到提升。在本申请实施例中,内存块是内存管理模块的基本单元。

在现有技术中,存储系统的内存按照一定的粒度切分成内存块,slab分配器获取内存块后按照业务模块指定的定长大小内存片进行切分,内存片是业务模块在系统运行过程中需要使用内存的基本单元。但是,存储系统的内存按照一定的粒度切分成内存块的这种分配方式可能会出现浪费内存的现象,例如,针对某种业务,已切分的内存块的内存空间过大,从而导致浪费内存。

在本申请实施例中,为至少一个业务中的每个业务分配至少一个内存块,即,每个内存块保存一种业务类型的数据,可选地,业务模块对应一个slab分配器,且预先确定最小内存块值、最大内存块值、内存片大小以及召回函数,其中,最小内存块值和最大内存块值分别表示内存块内存空间的最小值、内存块内存空间的最大值,召回函数用于启动内存块的召回流程。在本申请实施例中,召回内存块,也就是说将内存块中的全部数据进行清除或转移。slab分配器按照最小内存块进行内存预留,并把生成的slab序列号返回给业务模块,业务模块根据slab序列号找到对应的slab分配器。

其中,最小内存块值、最大内存块值、内存片大小的确定,可以是系统设定,也可以是根据业务模块的具体情况或者经验值确定,本申请不作限定。

业务模块中的业务申请内存块时,通过slab序列号从指定的slab分配器中分配内存块,slab分配器会先分配静态预留的最小内存块,可选地,内存块按照业务指定的内存片大小切分成多个内存片,供业务中待存储的数据使用。当静态预留的内存块被分配完时,slab分配器从umm管理的内存中申请一个内存块,然后按照业务指定的内存片大小进行切分,供业务中待存储的数据使用。

可以看出,通过本申请实施例的管理内存的方法,以最小内存块进行内存预留,可以使得系统中的业务模块在使用rw-cache的缓存数据(即,管理写入数据的内存块)的功能时,只预留很少一部分的内存,当需要的时候再通过slab分配器从umm申请内存块,从而节约内存。

需要说明的是,为每个业务分配至少一个内存块的方法,本申请不限于上述的方式,例如,预留内存块时可以一部分以最小内存块预留,一部分以最大内存块预留,针对需要内存空间大的业务,可以分配给最大内存块用以存储数据。

在现有技术中,在slab分配器中,根据每个内存块中内存片的使用情况,一般分为三个链表来管理,如图3所示。

其中第一链表表示该链表中的内存块的内存空间全部存储有数据;第二链表表示该链表中的内存块的内存空间是部分存储有数据的;第三链表表示该链表中的内存块中没有存储数据。

在本申请实施例中,可选地,增加一个第四链表,如图4所示,该链表表示该链表中的内存块是将要被召回的内存块,也就是说将要清除或转移该内存块中存储的全部数据。

判断内存使用率是否达到阈值,该内存使用率是已分配的内存块在内存包括的多个内存块中的比例。

在现有技术中,rw-cache根据当前管理数据所占的内存空间达到一定水位后,释放内存,即将驻留在内存中的数据从内存中释放出来。当内存块中的数据都被清空后,该内存块就可以被umm回收,以便其他业务使用。但是由于对于一个内存块来说,存放的可能不只有一种业务类型的数据,因此rw-cache释放策略无法保证一个内存块中的内存片全部同时释放,因此umm无法从slab分配器中回收内存块给其他业务使用。其中,rw-cache释放策略有冷热点数据或者先进先出的策略等。

在本申请实施例中,由于每个已分配的内存块用于保存一种业务类型的数据,因此采用主动召回内存块的方式来释放内存,具体地,umm会定时检测当前的内存使用率,即,已分配的内存块在内存包括的多个内存块中的比例。通过确定该内存使用率可以有效地避免rw-cache释放策略导致的内存块中内存片无法全部同时释放的问题,以及避免业务的功能因为内存片申请失败而带来的系统可靠性问题,提高了内存利用率和可靠性。

判断内存使用率大小的方法有很多,可以基于以下至少一种方式。

方式1

确定n个参考值,该n个参考值与n个时段一一对应,每个参考值是所对应的时段中已分配的内存块在内存池包括的多个内存块中的比例,n为大于或等于2的正整数,根据该n个参考值,来判断该内存使用率。

具体地,可以确定内存使用率是该n个参考值的平均值。

或者也可以确定内存使用率是该n个参考值中的最大值。

方式2

周期性检测内存使用率,并根据一个周期内检测到的内存使用率确定该周期内内存使用率,进而判断内存使用率是否达到预设的阈值。

应理解,以上列举的确定内存使用率的方法仅为示例性说明,本申请并未限定于此,其他能够确定内存使用率的方法和过程均落入本申请的保护范围内,确定内存使用率后判断内存使用率是否达到预设阈值。

s120,当内存使用率达到预设阈值时,从已分配的内存块中选择至少一个目标内存块;

s130,清除或转移目标内存块中的全部数据。

通过本申请实施例,选择目标内存块,清除或转移目标内存块中的全部数据,使得目标内存块再次被其他数据使用,这样可以很大程度的提升内存利用率。

需要说明的是,预设阈值可以是系统或者协议规定的值,或者,该阈值的具体值可以是经过试验获得的,本申请并未特别限定。

从已分配的内存块中选择至少一个目标内存块,可选地,较为优选的方案是从已分配的内存块中确定至少一个备选内存块,该备选内存块是部分内存空间存储有数据的内存块,从该备选内存块中确定目标内存块。

上述备选内存块是部分内存空间存储有数据的内存块,也就是说,备选内存块中的内存空间没有被全部存储数据,因此,若在备选内存块中确定目标内存块,会更容易、方便地清除或者转移目标内存块中的全部数据。

在从已分配的内存块中选择至少一个目标内存块之前,可选地,生成第一表项,该第一表项记录有已分配的内存块中的每个内存块中存储有数据的内存空间的地址;以及清除或转移目标内存块中的全部数据,包括:根据第一表项,清除或转移目标内存块中的全部数据。

具体地,对于已分配的内存块,第一表项中记录有已分配内存块中存储有数据的内存空间的地址,当选择目标内存块后,根据第一表项中记录的该目标内存块中存储有数据的内存空间的地址,来清除或者转移目标内存块中的全部数据,从而能够容易地实现内存块的召回。

关于清除或转移目标内存块中的全部数据的方法,与现有技术相似,本申请不作限定。

根据本申请实施例的管理内存的方法,通过在每个已分配的内存块中保存一种业务类型的数据,并且判断内存使用率是否达到预设阈值,且当内存使用率达到预设阈值时,从已分配的内存块中选择至少一个目标内存块,并清除或转移目标内存块中的全部数据,从而,能够避免一个内存块中的内存片不能全部同时释放,进而,提高系统内存利用率和可靠性。

下面结合具体例子,更加详细地描述本申请实施例。应注意,图5的例子仅仅是为了帮助本领域技术人员理解本申请实施例,而非要将本申请实施例限于所示例的具体场景。

图5是根据本申请实施例的一个管理内存的方法的示意性流程图。

s501,一个业务模块对应一个slab分配器,会预先确定最小值、最大值、内存片大小以及召回函数。最小值、最大值分别表示内存块内存空间的最小值、内存块内存空间的最大值,召回函数用于启动内存块的召回流程。

s502,按最小值分配内存。也就是说,slab分配器向umm管理的内存申请内存块时,申请的内存块是内存空间最小的内存块,记为内存块#a。

s503,分配内存块。umm管理的内存中预留的内存块是多个内存块#a。

s504,按内存片大小切分内存。将申请的内存块#a按照上述传入的内存片大小进行切分内存。

生成的slab序列号返回给业务模块,以使业务模块申请内存时,通过slab序列号找到对应的slab分配器。

s505,分配slab序列号。业务模块中的业务申请内存时,业务模块通过slab序列号从指定的slab分配器中分配内存块,slab分配器会优先从静态预留的最小内存块,也就是内存块#a中进行分配。

当静态预留的内存块被分配完时,slab分配器从umm管理的内存中申请一个内存块,然后按照业务指定的内存片大小进行切分成多个内存片,供待缓存的数据使用。

当静态内存分配完后,扩展一个slab_n,也就是slab分配器_n向umm管理的内存中申请一个内存块,记为内存块#b,然后按照业务指定的内存片大小切分内存块#b,进而从slab_n上分配内存。

扩展slab_n,或者说扩展slab分配器_n,也就是说slab分配器_n从umm管理的内存中申请一个内存块,进而slab分配器_n中会增加一个内存块#b,可供分配的内存空间也就增加了。

内存块中写入数据后,内存块放入rw-cache中用于管理。

在本申请实施例中,后台监控会确定内存使用率,内存使用率也就是umm管理的内存中的已分配的内存块占内存中所有内存块的比例。确定内存使用率的方法前面已作描述,在此不再赘述。

在本申请实施例中,通过确定内存使用率,可以在内存使用率等于或大于预设阈值时,及时召回内存块,以供slab分配器可以成功从umm管理的内存池中申请内存块,进而提升系统内存利用率和可靠性。

内存使用率若达到预设阈值,启动内存召回,在本申请实施例中,启动内存召回,即,将内存块中存储的数据全部清除或转移。可选地,slab分配器标记目标内存块,并将目标内存块放入第四链表中,然后通过第一表项获取目标内存块中存储数据的内存空间的地址。业务模块获取地址,并通知rw-cache需要淘汰的该地址对应的内存空间上存储的数据。rw-cache淘汰这些数据,从而这些数据所占的内存被释放,进而目标内存块变成空闲内存块。slab分配器会将该空闲内存块释放回umm管理的内存中。

本申请实施例通过在每个已分配的内存块中保存一种业务类型的数据,并且确定内存使用率,在内存使用率达到预设阈值的情况下,主动召回已被分配的内存块,即,清除或转移内存块上的全部存储数据,进而给其他待缓存的数据使用,可以提升系统内存利用率。此外,还可以大大提升用户申请内存块的成功率,提高了系统的可靠性。

下面对本申请的装置实施例进行描述,由于装置实施例可以执行上述方法,因此未详细描述的部分可以参见前面各方法实施例。

图6是根据本申请一实施例的管理内存的装置的示意性框图。装置600包括:

判断单元610,用于判断内存使用率是否达到预设阈值,内存包括多个内存块,内存块中至少有部分内存块属于已分配的内存块,其中每个已分配的内存块用于保存一种业务类型的数据,内存使用率是已分配的内存块在内存包括的多个内存块中的比例。

将内存划分成内存块是一种内存分配方式,在真正使用内存之前,先申请分配一定数量的、一般情况下大小相等的内存块留作备用,当有新的内存需求时,就从包括多个内存块的内存中分出一部分内存块,若内存块不够再继续申请新的内存块。这样做的一个显著优点是,使得内存分配效率得到提升。在本申请实施例中,内存块是内存管理模块的基本单元。

在现有技术中,存储系统的内存按照一定的粒度切分成内存块,slab分配器获取内存块后按照业务模块指定的定长大小内存片进行切分,内存片是业务模块在系统运行过程中需要使用内存的基本单元。但是,存储系统的内存按照一定的粒度切分成内存块的这种分配方式可能会出现浪费内存的现象,例如,针对某种业务,已切分的内存块的内存空间过大,从而导致浪费内存。

在本申请实施例中,为至少一个业务中的每个业务分配至少一个内存块,可选地,业务模块对应一个slab分配器,且预先确定最小内存块值、最大内存块值、内存片大小以及召回函数,其中,最小内存块值和最大内存块值分别表示内存块内存空间的最小值、内存块内存空间的最大值,召回函数用于启动内存块的召回流程。在本申请实施例中,召回内存块,也就是说将内存块中的全部数据进行清除或转移。slab分配器按照最小内存块进行内存预留,并把生成的slab序列号返回给业务模块,业务模块根据slab序列号找到对应的slab分配器。

其中,最小内存块值、最大内存块值、内存片大小的确定,可以是系统设定,也可以是根据业务模块的具体情况或者经验值确定,本申请不作限定。

业务模块中的业务申请内存块时,通过slab序列号从指定的slab分配器中分配内存块,slab分配器会先分配静态预留的最小内存块,可选地,内存块按照业务指定的内存片大小切分成多个内存片,供业务中待存储的数据使用。当静态预留的内存块被分配完时,slab分配器从umm管理的内存中申请一个内存块,然后按照业务指定的内存片大小进行切分,供业务中待存储的数据使用。

可以看出,通过本申请实施例的管理内存的装置,以最小内存块进行内存预留,可以使得系统中的业务模块在使用rw-cache的缓存数据(即,管理写入数据的内存块)的功能时,只预留很少一部分的内存,当需要的时候再通过slab分配器从umm申请内存块,从而节约内存。

需要说明的是,为每个业务分配至少一个内存块的方法,本申请不限于上述的方式,例如,预留内存块时可以一部分以最小内存块预留,一部分以最大内存块预留,针对需要内存空间大的业务,可以分配给最大内存块用以存储数据。

在本申请实施例中,由于每个已分配的内存块用于保存一种业务类型的数据,因此采用主动召回内存块的方式来释放内存,具体地,umm会定时检测当前的内存使用率,即,已分配的内存块在内存包括的多个内存块中的比例。通过确定该内存使用率可以有效地避免rw-cache释放策略导致的内存块中内存片无法全部同时释放的问题,以及避免业务的功能因为内存片申请失败而带来的系统可靠性问题,提高了内存利用率和可靠性。

判断内存使用率大小的方法在图2的方法200中已经描述,此处不再赘述。

选择单元620,当内存使用率达到预设阈值时,从已分配的内存块中选择至少一个目标内存块;

处理单元630,清除或转移目标内存块中的全部数据。

通过本申请实施例,选择目标内存块,清除或转移目标内存块中的全部数据,使得目标内存块再次被其他数据使用,这样可以很大程度的提升内存利用率。

需要说明的是,预设阈值可以是系统或者协议规定的值,或者,该阈值的具体值可以是经过试验获得的,本申请并未特别限定。

选择单元620从已分配的内存块中选择至少一个目标内存块,可选地,较为优选的方案是选择单元620从已分配的内存块中确定至少一个备选内存块,该备选内存块是部分内存空间存储有数据的内存块,从该备选内存块中确定目标内存块。

上述备选内存块是部分内存空间存储有数据的内存块,也就是说,备选内存块中的内存空间没有被全部存储数据,因此,若在备选内存块中确定目标内存块,会更容易、方便地清除或者转移目标内存块中的全部数据。

作为一个实施例,本申请实施例中的装置还包括生成单元640,该生成单元640具体用于在选择单元620从已分配的内存块中选择至少一个目标内存块之前,生成第一表项,该第一表项记录有已分配的内存块中的每个内存块中存储有数据的内存空间的地址;以及,处理单元630用于清除或转移目标内存块中的全部数据,包括:处理单元根据第一表项,清除或转移目标内存块中的全部数据。

具体地,对于已分配的内存块,第一表项中记录有已分配内存块中存储有数据的内存空间的地址,当选择单元620选择目标内存块后,处理单元630根据第一表项中记录的该目标内存块中存储有数据的内存空间的地址,来清除或者转移目标内存块中的全部数据,从而能够容易地实现内存块的召回。

关于处理单元630清除或转移目标内存块中的全部数据的方法,与现有技术相似,本申请不作限定。

需要说明的是,在实体装置中,处理器通过调用存储器中的计算机程序,实现上述各个单元执行的步骤。

根据本申请实施例的管理内存的装置,通过在每个已分配的内存块中保存一种业务类型的数据,并且判断内存使用率是否达到预设阈值,且当内存使用率达到预设阈值时,从已分配的内存块中选择至少一个目标内存块,并清除或转移目标内存块中的全部数据,从而,能够避免一个内存块中的内存片不能全部同时释放,进而,提高系统内存利用率和可靠性。图7是根据本申请另一实施例的管理内存的装置的示意性框图。

装置700包括:

存储器710,用于存储程序代码;

处理器720,用于执行存储器710中存储的程序代码,以执行以下操作:

判断内存使用率是否达到预设阈值,内存包括多个内存块,内存块中至少有部分内存块属于已分配的内存块,其中每个已分配的内存块用于保存一种业务类型的数据,内存使用率是已分配的内存块在内存包括的多个内存块中的比例;

当内存使用率达到预设阈值时,从已分配的内存块中选择至少一个目标内存块;

清除或转移目标内存块中的全部数据。

本申请实施例通过确定内存使用率,在内存使用率等于或大于预设阈值的情况下,主动召回已被分配的内存块,即,清除或转移内存块上的全部存储数据,进而给其他待缓存的数据使用,可以提升系统内存利用率。此外,还可以大大提升用户申请内存块的成功率,提高了系统的可靠性。

可选地,在一些实施例中,从已分配的内存块中确定至少一个目标内存块,包括:从所述已分配的内存块中确定至少一个备选内存块,所述备选内存块是部分内存空间存储有数据的内存块;从所示备选内存块中确定所述目标内存块。

可选地,在从已分配的内存块中确定至少一个目标内存块之前,生成第一表项,所述第一表项记录有已分配的内存块中的每个内存块中存储有数据的内存空间的地址;所述清除或转移所述目标内存块中的全部数据,包括:根据所述第一表项,清除或转移所述目标内存块中的全部数据。

可选地,在一些实施例中,所述处理器720还用于判断内存使用率。

可选地,确定n个参考值,所述n个参考值与n个时段一一对应,每个参考值是所对应的时段中已分配的内存块在所述内存池包括的多个内存块中的比例,n为大于或等于2的正整数;根据所述n个参考值,确定所述内存使用率,进而判断内存使用率是否达到预设阈值。

可选地,所述内存使用率是所述n个参考值的平均值;或者,可选地,所述内存使用率是所述n个参考值中的最大值。

可选地,所述处理器720周期性确定内存使用率。

图8是根据本申请实施例提供的存储系统的示意性框图。图8中的存储系统800包括

存储器810,用于存储程序;

控制器820,该控制器如图6的管理内存的装置,用于执行存储器中的程序。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

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

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

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