一种提高内存复用的方法和装置与流程

文档序号:11154655阅读:408来源:国知局
一种提高内存复用的方法和装置与制造工艺

本发明属于计算机系统及存储领域,具体涉及一种提高内存复用的方法和装置。



背景技术:

当今社会已经进入到数据社会,数据传输时时刻刻都在进行,尤其是在互联网+时代对数据的实时性要求越来越高,对硬件资源的要求也越来越高,因此合理利用计算机硬件资源,充分发挥计算机本身的优势十分重要。

然而,在大量IO数据读写磁盘的情况下,存储系统中控制器前端IO不停的下发、IO不停的申请内存,IO读写完成后将IO申请的内存释放,会导致内存的使用率不高,并且在IO读写完毕并且释放内存后,会产生内存碎片,操作系统也会整理这些内存碎片,对CPU资源也是一种浪费,导致系统性能的降低。



技术实现要素:

为解决上述问题,本发明提供了一种提高内存复用的方法和装置,能够提高内存的使用率并且避免碎片的产生,降低额外的资源开销,提高系统性能。

本发明提供的一种提高内存复用的方法,包括:

启动操作系统之后,利用内存管理模块从RAM中分配预设大小的内存;

将所述内存进行初始化后放入内存池中;

当前端收到IO时,从所述内存池中申请内存;

对所述内存进行标记和引用处理,并利用所述内存进行IO;

当IO结束后,将申请的内存释放回所述内存池。

优选的,在上述提高内存复用的方法中,

所述利用内存管理模块从RAM中分配预设大小的内存为:

利用内存管理模块从RAM中分配不超过系统内存总量90%的内存。

优选的,在上述提高内存复用的方法中,

所述从所述内存池中申请内存之后,还包括:

当内存的使用量超过预设阈值时发出告警。

优选的,在上述提高内存复用的方法中,

所述利用所述内存进行IO包括:

对申请内存进行加锁,在Directory中寻找写IO位置上的IOB Y,其中,所述IOB Y为申请的内存单元;

将所述IOB Y中的数据添加到IOB X中,其中IOB X为新下发的数据;

将所述IOB X中的数据发向对端,存储到目标位置。

优选的,在上述提高内存复用的方法中,

所述将所述IOB X中的数据发向对端,存储到目标位置包括:

调用Lv.getData(X),获得所述IOB X中的数据,并保存在IOB A中;

在Directory中寻找写IO位置上的IOB,记为IOB Z;

将所述IOB A中的数据添加到所述IOB Z中,完成缓存操作。

本发明提供的一种提高内存复用的装置,包括:

内存分配单元,用于启动操作系统之后,利用内存管理模块从RAM中分配预设大小的内存;

放入单元,用于将所述内存进行初始化后放入内存池中;

内存申请单元,用于当前端收到IO时,从所述内存池中申请内存;

标记和引用单元,用于对所述内存进行标记和引用处理,并利用所述内存进行IO;

内存释放单元,用于当IO结束后,将申请的内存释放回所述内存池。

优选的,在上述提高内存复用的装置中,

所述内存分配单元具体用于利用内存管理模块从RAM中分配不超过系统内存总量90%的内存。

优选的,在上述提高内存复用的装置中,

还包括:

告警单元,用于当内存的使用量超过预设阈值时发出告警。

优选的,在上述提高内存复用的装置中,

所述标记和引用单元包括:

第一寻找部件,用于对申请内存进行加锁,在Directory中寻找写IO位置上的IOB Y,其中,所述IOB Y为申请的内存单元;

添加部件,用于将所述IOB Y中的数据添加到IOB X中,其中IOB X为新下发的数据;

存储部件,用于将所述IOB X中的数据发向对端,存储到目标位置。

优选的,在上述提高内存复用的装置中,

所述存储部件具体用于调用Lv.getData(X),获得所述IOB X中的数据,并保存在IOB A中;在Directory中寻找写IO位置上的IOB,记为IOB Z;将所述IOBA中的数据添加到所述IOB Z中,完成缓存操作。

通过上述描述可知,本发明提供的上述提高内存复用的方法和装置,由于该方法包括:启动操作系统之后,利用内存管理模块从RAM中分配预设大小的内存;将所述内存进行初始化后放入内存池中;当前端收到IO时,从所述内存池中申请内存;对所述内存进行标记和引用处理,并利用所述内存进行IO;当IO结束后,将申请的内存释放回所述内存池,因此不必每次IO都进行内存的初始化,能够提高内存的使用率并且避免碎片的产生,降低额外的资源开销,提高系统性能。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例提供的第一种提高内存复用的方法的示意图;

图2为本申请实施例提供的第一种提高内存复用的装置的示意图。

具体实施方式

本发明的核心思想在于提供一种提高内存复用的方法和装置,能够提高内存的使用率并且避免碎片的产生,降低额外的资源开销,提高系统性能。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请实施例提供的第一种提高内存复用的方法如图1所示,图1为本申请实施例提供的第一种提高内存复用的方法的示意图,该方法包括如下步骤:

S1:启动操作系统之后,利用内存管理模块从RAM中分配预设大小的内存;

需要说明的是,内存管理模块是专门负责内存管理的模块,在操作系统启动时,内存管理模块会从RAM中分配固定的内存(目前系统设置64G)。

S2:将所述内存进行初始化后放入内存池中;

需要说明的是,在这种情况下,任何需要内存的业务模块均可以从内存池中申请内存,内存申请后不用初始化申请的内存可以直接使用。

S3:当前端收到IO时,从所述内存池中申请内存;

在这种情况下,就无需每个IO都申请一次内存并初始化的繁琐过程,降低了系统开销,且避免了内存碎片的产生。

S4:对所述内存进行标记和引用处理,并利用所述内存进行IO;

需要说明的是,这里需要标记是哪个模块申请的内存,因为内存管理遵循内存谁申请谁释放的原则,并且对内存的使用增加一,后面有模块使用同样会在此基础上增加,以避免内存在使用过程中被释放。

S5:当IO结束后,将申请的内存释放回所述内存池。

需要说明的是,在IO生命周期结束后,申请者需要将IO释放回内存池中,释放回到内存池的内存可以继续被其他的IO使用,无需再次初始化。

上述方案中,IO内存的申请和释放是在IO栈中发挥作用的,在整个IO的生命周期中只会有一次的IO申请和释放,从而避免因IO申请并且初始化过程中大量的性能开销。在主机接口层接收到前端发过来的IO数据后,从内存管理模块申请内存,内存申请完毕后,IO将会沿着IO栈进行下面功能模块(上层缓存),然后会在上层缓存进行缓存镜像,镜像完毕后本端会收到确认通知,之后IO继续沿着IO栈下发。在整个过程中各个模块是通过内存引用对内存进行管理,达到内存复用的目的

通过上述描述可知,本申请实施例提供的上述第一种提高内存复用的方法,由于包括启动操作系统之后,利用内存管理模块从RAM中分配预设大小的内存;将所述内存进行初始化后放入内存池中;当前端收到IO时,从所述内存池中申请内存;对所述内存进行标记和引用处理,并利用所述内存进行IO;当IO结束后,将申请的内存释放回所述内存池,因此不必每次IO都进行内存的初始化,能够提高内存的使用率并且避免碎片的产生,降低额外的资源开销,提高系统性能。

本申请实施例提供的第二种提高内存复用的方法,是在上述第一种提高内存复用的方法的基础上,还包括如下技术特征:

所述利用内存管理模块从RAM中分配预设大小的内存为:

利用内存管理模块从RAM中分配不超过系统内存总量90%的内存。

需要说明的是,这是为了至少预留10%的内存做紧急使用,避免紧急事件发生时无内存可用。

本申请实施例提供的第三种提高内存复用的方法,是在上述第二种提高内存复用的方法的基础上,还包括如下技术特征:

所述从所述内存池中申请内存之后,还包括:

当内存的使用量超过预设阈值时发出告警。

需要说明的是,当内存的使用量达到某个阈值后,在使用内存时内存管理模块将会给出告警,如果是紧急内存,比如需要远程连接,此时会从紧急内存区域申请内存使用。

本申请实施例提供的第四种提高内存复用的方法,是在上述第一种至第三种提高内存复用的方法中任一种的基础上,还包括如下技术特征:

所述利用所述内存进行IO包括:

对申请内存进行加锁,在Directory中寻找写IO位置上的IOB Y,其中,所述IOB Y为申请的内存单元;

将所述IOB Y中的数据添加到IOB X中,其中IOB X为新下发的数据;

将所述IOB X中的数据发向对端,存储到目标位置。

上述步骤的一个具体实施方式如下:

在N1端(N1和N2表示不同的节点,下同)UCA层,执行下面操作:

a.加锁Tack Lock;

b.在Directory(镜像过程中管理IOB的单位)中寻找写IO位置上的IOB(IOB表示申请的内存单元),如果找不到需要分配,找到的IOB记为Y;

c.Merge Y→X。考虑到IOB Y可能已缓存有数据,需要将其补充到IOB X中,在这里Merge操作只会添加,而不会覆盖IOB X中的数据,其中IOB X是新下发的数据;

d.通过LV(LV用来镜像缓存数据),从N1端向N2端发送RequestRemoteWrite(X)消息,消息中会包含IOB X数据,这里发向对端的消息中需要包含数据。

本申请实施例提供的第五种提高内存复用的方法,是在上述第四种提高内存复用的方法的基础上,还包括如下技术特征:

所述将所述IOB X中的数据发向对端,存储到目标位置包括:

调用Lv.getData(X),获得所述IOB X中的数据,并保存在IOB A中;

在Directory中寻找写IO位置上的IOB,记为IOB Z;

将所述IOB A中的数据添加到所述IOB Z中,完成缓存操作。

上述步骤的一个具体实施方式如下:

在N2端UCA层,接收到请求时,执行下面操作:

a.调用Lv.getData(X),获得写数据,保存在IOB A中。从数据内容上看,IOB A和IOB X是一样的;

b.在Directory中寻找写IO位置上的IOB,如果找不到需要分配,找到的IOB记为Z;

c.Merge A→Z。将数据更新到IOB Z中,因为IOB Z已经连接在Directory中,因此写数据在N2UCA上的缓存操作已完成;

d.Z.remoteIob=X,在N2上记录远端上的数据位置。

当在N2端UCA层缓存完成后,通过LV,从N2端向N1端发送ResponseRemoteWrite(Z)消息,消息中会包含数据的保存位置,即IOB Z。

本申请实施例提供的第一种提高内存复用的装置如图2所示,图2为本申请实施例提供的第一种提高内存复用的装置的示意图,该装置包括:

内存分配单元201,用于启动操作系统之后,利用内存管理模块从RAM中分配预设大小的内存,需要说明的是,内存管理模块是专门负责内存管理的模块,在操作系统启动时,内存管理模块会从RAM中分配固定的内存(目前系统设置64G);

放入单元202,用于将所述内存进行初始化后放入内存池中,需要说明的是,在这种情况下,任何需要内存的业务模块均可以从内存池中申请内存,内存申请后不用初始化申请的内存可以直接使用;

内存申请单元203,用于当前端收到IO时,从所述内存池中申请内存,在这种情况下,就无需每个IO都申请一次内存并初始化的繁琐过程,降低了系统开销,且避免了内存碎片的产生;

标记和引用单元204,用于对所述内存进行标记和引用处理,并利用所述内存进行IO,需要说明的是,这里需要标记是哪个模块申请的内存,因为内存管理遵循内存谁申请谁释放的原则,并且对内存的使用增加一,后面有模块使用同样会在此基础上增加,以避免内存在使用过程中被释放;

内存释放单元205,用于当IO结束后,将申请的内存释放回所述内存池,需要说明的是,在IO生命周期结束后,申请者需要将IO释放回内存池中,释放回到内存池的内存可以继续被其他的IO使用,无需再次初始化。

本申请实施例提供的第二种提高内存复用的装置,是在上述第一种提高内存复用的装置的基础上,还包括如下技术特征:

所述内存分配单元具体用于利用内存管理模块从RAM中分配不超过系统内存总量90%的内存。

需要说明的是,这是为了至少预留10%的内存做紧急使用,避免紧急事件发生时无内存可用。

本申请实施例提供的第三种提高内存复用的装置,是在上述第二种提高内存复用的装置的基础上,还包括如下技术特征:

还包括:

告警单元,用于当内存的使用量超过预设阈值时发出告警。

需要说明的是,当内存的使用量达到某个阈值后,在使用内存时内存管理模块将会给出告警,如果是紧急内存,比如需要远程连接,此时会从紧急内存区域申请内存使用。

本申请实施例提供的第四种提高内存复用的装置,是在上述第一种至第三种提高内存复用的装置中任一种的基础上,还包括如下技术特征:

所述标记和引用单元包括:

第一寻找部件,用于对申请内存进行加锁,在Directory中寻找写IO位置上的IOB Y,其中,所述IOB Y为申请的内存单元;

添加部件,用于将所述IOB Y中的数据添加到IOB X中,其中IOB X为新下发的数据;

存储部件,用于将所述IOB X中的数据发向对端,存储到目标位置。

本申请实施例提供的第五种提高内存复用的装置,是在上述第四种提高内存复用的装置的基础上,还包括如下技术特征:

所述存储部件具体用于调用Lv.getData(X),获得所述IOB X中的数据,并保存在IOB A中;在Directory中寻找写IO位置上的IOB,记为IOB Z;将所述IOBA中的数据添加到所述IOB Z中,完成缓存操作。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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