缓存空间申请方法、系统、装置及计算机可读存储介质

著录项
  • CN201911386471.X
  • 20191229
  • CN111177032A
  • 20200519
  • 浪潮电子信息产业股份有限公司
  • 张书扬;张端
  • G06F12/0871
  • G06F12/0871

  • 山东省济南市高新区浪潮路1036号
  • 山东(37)
  • 北京集佳知识产权代理有限公司
  • 刘新雷
摘要
本申请公开了一种缓存空间申请方法、系统、装置及计算机可读存储介质,包括:根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间;利用目标缓存空间存放数据;完成缓存申请请求后,将目标缓存空间释放至缓存队列;本申请预先向内存申请内存空间,将预先申请的内存空间以多份缓存空间的形式设置在缓存队列中,每当有数据需要使用缓存空间缓存时,直接向缓存队列中申请缓存空间,不再向内存申请缓存空间,极大的减少了访问内存次数,从而降低了对于CPU和整体系统的运行资源损耗。
权利要求

1.一种缓存空间申请方法,其特征在于,包括:

根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间;

利用所述目标缓存空间存放数据;

完成所述缓存申请请求后,将所述目标缓存空间释放至所述缓存队列。

2.根据权利要求1所述的缓存空间申请方法,其特征在于,所述缓存队列中预先从内存申请得到的缓存空间为缓存空间大小等于所述缓存申请请求所需缓存空间上限的缓存空间。

3.根据权利要求1所述的缓存空间申请方法,其特征在于,所述获取所述缓存空间之前,还包括:

判断所述缓存队列中是否有满足所述缓存申请请求的缓存空间;

若有满足所述缓存申请请求的缓存空间,则响应所述缓存申请请求。

4.根据权利要求3所述的缓存空间申请方法,其特征在于,所述判断所述缓存队列中是否有满足所述缓存申请请求的缓存空间的过程,包括:

判断所述缓存队列中是否有空闲的缓存空间;

若有空闲的缓存空间,则判断是否有缓存空间大小满足所述缓存申请请求的缓存空间。

6.根据权利要求4所述的缓存空间申请方法,其特征在于,所述判断所述缓存队列中是否有空闲的缓存空间之后,所述判断是否有缓存空间大小满足所述缓存申请请求的缓存空间之前,还包括:

若所述缓存队列中无空闲的缓存空间,则等待,直至所述缓存队列中有空闲的缓存空间执行下一步。

5.根据权利要求3所述的缓存空间申请方法,其特征在于,所述判断所述缓存队列中是否有满足所述缓存申请请求的缓存空间之后,还包括:

若所述缓存队列中无满足所述缓存申请请求的要求的缓存空间,则向所述内存申请缓存空间,得到临时缓存空间;

利用所述临时缓存空间存放数据;

完成所述缓存申请请求后,将所述临时缓存空间释放至所述内存。

7.根据权利要求1至6任一项所述的缓存空间申请方法,其特征在于,使用所述缓存队列时,还包括:

对所述缓存队列设置独占锁,直至不使用所述缓存队列时,解除所述独占锁;

其中,使用所述缓存队列时包括从所述缓存队列中获取所述目标缓存空间和判断所述缓存队列中是否有满足所述缓存申请请求的缓存空间。

8.一种缓存空间申请系统,其特征在于,包括:

缓存空间获取模块,用于根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间;

数据存储模块,用于利用所述目标缓存空间存放数据;

缓存空间释放模块,用于完成所述缓存申请请求后,将所述目标缓存空间释放至所述缓存队列。

9.一种缓存空间申请装置,其特征在于,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序以实现如权利要求1至7任一项所述的缓存空间申请方法。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的缓存空间申请方法。

说明书
技术领域

本发明涉及分布式存储领域,特别涉及一种缓存空间申请方法、系统、装置及计算机可读存储介质。

分布式存储系统中,网络性能是整体存储系统性能至关重要的一个环节。以HDD(Hard Disk Drive,硬盘驱动器)为存储介质的存储系统中,存储介质本身读写能力是存储系统整体性能的主要瓶颈点。随着存储介质的更新换代,SSD(Solid State Disk,固态硬盘)已逐渐成为主流存储介质,磁盘的读写能力得到极大的提升,存储系统性能的限制转移到IO栈、CPU、内存等资源上。

以SSD为存储介质的全闪分布式存储系统中,由于IO并发的巨大提升,系统资源的消耗成为一个不可忽视的关键点。当前分布式存储系统的网络消息发送接收模型中,发送端发送网络报文后,将消息对应内存释放掉;接收端监听到有待接收的数据时,先申请接收缓存,然后按照固定的报文解析顺序,将相应的报文数据解析到接收端缓存中。此消息接收方式,每次接收消息时都需要申请接收缓存,会频繁申请和释放内存,内存操作频繁,则会消耗大量的CPU性能。

为此,需要一种接收和发送消息时对于系统性能消耗小,更为高效的缓存申请方法。

有鉴于此,本发明的目的在于提供一种缓存空间申请方法、系统、装置及计算机可读存储介质,减少访问内存次数,降低对于CPU和整体系统的运行资源损耗。其具体方案如下:

一种缓存空间申请方法,包括:

根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间;

利用所述目标缓存空间存放数据;

完成所述缓存申请请求后,将所述目标缓存空间释放至所述缓存队列。

可选的,所述缓存队列中预先从内存申请得到的缓存空间为缓存空间大小等于所述缓存申请请求所需缓存空间上限的缓存空间。

可选的,所述获取所述缓存空间之前,还包括:

判断所述缓存队列中是否有满足所述缓存申请请求的缓存空间;

若有满足所述缓存申请请求的缓存空间,则响应所述缓存申请请求。

可选的,所述判断所述缓存队列中是否有满足所述缓存申请请求的缓存空间的过程,包括:

判断所述缓存队列中是否有空闲的缓存空间;

若有空闲的缓存空间,则判断是否有缓存空间大小满足所述缓存申请请求的缓存空间。

可选的,所述判断所述缓存队列中是否有满足所述缓存申请请求的缓存空间之后,还包括:

若所述缓存队列中无满足所述缓存申请请求的要求的缓存空间,则向所述内存申请缓存空间,得到临时缓存空间;

利用所述临时缓存空间存放数据;

完成所述缓存申请请求后,将所述临时缓存空间释放至所述内存。

可选的,所述判断所述缓存队列中是否有空闲的缓存空间之后,所述判断是否有缓存空间大小满足所述缓存申请请求的缓存空间之前,还包括:

若所述缓存队列中无空闲的缓存空间,则等待,直至所述缓存队列中有空闲的缓存空间执行下一步。

可选的,使用所述缓存队列时,还包括:

对所述缓存队列设置独占锁,直至不使用所述缓存队列时,解除所述独占锁;

其中,使用所述缓存队列时包括从所述缓存队列中获取所述目标缓存空间和判断所述缓存队列中是否有满足所述缓存申请请求的缓存空间。

本发明还公开了一种缓存空间申请系统,包括:

缓存空间获取模块,用于根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间;

数据存储模块,用于利用所述目标缓存空间存放数据;

缓存空间释放模块,用于完成所述缓存申请请求后,将所述目标缓存空间释放至所述缓存队列。

本发明还公开了一种缓存空间申请装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序以实现如前述的缓存空间申请方法。

本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前述的缓存空间申请方法。

本发明中,缓存空间申请方法,包括:根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间;利用目标缓存空间存放数据;完成缓存申请请求后,将目标缓存空间释放至缓存队列。

本发明预先向内存申请内存空间,将预先申请的内存空间以多份缓存空间的形式设置在缓存队列中,每当有数据需要使用缓存空间缓存时,直接向缓存队列中申请缓存空间,不再向内存申请缓存空间,极大的减少了访问内存次数,从而降低了对于CPU和整体系统的运行资源损耗。

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

图1为本发明实施例公开的一种缓存空间申请方法流程示意图;

图2为本发明实施例公开的另一种缓存空间申请方法流程示意图;

图3为本发明实施例公开的另一种缓存空间申请方法流程示意图;

图4为本发明实施例公开的一种缓存空间申请系统结构示意图。

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

本发明实施例公开了一种缓存空间申请方法,参见图1所示,该方法包括:

S11:根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间。

具体的,当接收消息或发送消息时,需要相应的缓存用于承载消息本身,为此,每次接收消息或发送消息时需要生成缓存申请请求申请用于承载消息即数据的目标缓存空间,所以本发明实施例根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间,以便于后续存储数据。

具体的,预先从内存中申请一定的内存用于存储数据的缓存空间,预先申请的内存空间大小应为单次存储数据所需的缓存空间的整数倍,例如,单次存储数据所需的缓存空间为1M,预先申请的内存空间大小可以为1倍1M,2倍2M或10倍10M等,预先申请的内存形式一个临时专门用于临时承载IO数据的内存池,预先申请的内存可以划分为一个或多个缓存空间,这些缓存空间可以以缓存队列的形式进行管理和存放,每当收到生成的缓存申请请求后,从缓存队列中挑选出空闲的缓存空间作为与该缓存申请请求对应的数据的目标缓存空间,以用于存放数据。

可以理解的是,缓存队列中可以包括多个预先申请好的缓存空间,例如,预先向内存申请了10M的内存空间用于缓存数据,每个缓存空间需要1M,对申请得到的内存空间进行划分,得到包括10个缓存空间的缓存队列,由于同时会有多个请求或回复IO需要缓存空间,因此,缓存队列中经常会有部分缓存空间处于正在使用的状态,未在使用仍存放在缓存队列中的缓存空间便可以称为空闲缓存空间,以备新的缓存申请请求使用。

其中,生成缓存申请请求的情况可以包括每次发送端需要发送请求时需要缓存空间存放请求数据、每次发送端需要接收请求处理完成后的回复数据时需要缓存空间存放回复数据、每次接收端需要接收发送端发送的请求数据时要缓存空间存放请求数据和每次接收端需要发送接收端时需要缓存空间存放回复数据。

具体的,通过设置缓存队列,仅需预先从内存中申请一次内存空间,之后便可以使用缓存队列中的缓存空间,不再需要每次IO时都去向内存申请缓存空间,极大的减少了对CPU和系统资源的消耗。

S12:利用目标缓存空间存放数据;

S13:完成缓存申请请求后,将目标缓存空间释放至缓存队列。

具体的,完成缓存申请请求后,例如,发送端发送请求后、发送端接收回复数据、接收端接收请求和接收端发送回复数据后,目标缓存空间中的数据将不再需要存储,因此,此时可以释放目标缓存空间,将目标缓存空间释放至缓存队列中,作为新的空闲缓存空间,以备重新调用。

可见,本发明实施例预先向内存申请内存空间,将预先申请的内存空间以多份缓存空间的形式设置在缓存队列中,每当有数据需要使用缓存空间缓存时,直接向缓存队列中申请缓存空间,不再向内存申请缓存空间,极大的减少了访问内存次数,从而降低了对于CPU和整体系统的运行资源损耗。

本发明实施例公开了一种具体的缓存空间申请方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。参见图2所示,具体的:

S21:判断缓存队列中是否有满足缓存申请请求的缓存空间。

具体的,由于不同IO数据所需要的缓存空间大小存在不同,通常IO数据在一定范围内,缓存空间也一般符合要求,但仍可能有部分IO数据即请求或回复数据所需的缓存空间大于缓存队列中全部的缓存空间,此时,面对此类缓存申请请求,缓存队列便无法对其响应,同时,由于缓存队列中缓存空间有限,一旦某段时间内,缓存申请请求超过缓存队列中的缓存空间数量,将导致新的缓存申请请求无法申请到缓存空间,因此,为避免缓存队列无效响应缓存申请请求,在响应缓存申请请求前,判断缓存队列中是否有满足缓存申请请求的缓存空间。

S22:若缓存队列中无满足缓存申请请求的要求的缓存空间,则向内存申请缓存空间,得到临时缓存空间。

具体的,若缓存队列中没有满足缓存申请请求的要求的缓存空间,则需要根据缓存申请请求向内存直接申请新的临时缓存空间,确保缓存申请请求能够被满足。

S23:利用临时缓存空间存放数据;

S24:完成缓存申请请求后,将临时缓存空间释放至内存。

可以理解的是,临时缓存空间是直接向内存申请的,因此,在使用完后,便可以直接释放临时缓存空间至内存,避免长时间占用内存资源。

S25:若有满足缓存申请请求的缓存空间,则响应缓存申请请求。

具体的,若有满足缓存申请请求的缓存空间,则响应缓存申请请求之心后续S26等步骤,完成响应。

S26:根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间。

S27:利用目标缓存空间存放数据;

S28:完成缓存申请请求后,将目标缓存空间释放至缓存队列。

此外,本发明实施例还公开了一种具体的缓存空间申请方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。参见图3所示,具体的:

S301:判断缓存队列中是否有空闲的缓存空间。

具体的,在判断缓存队列中的缓存空间是否满足缓存申请请求前,应先判断缓存队列中是否有空闲的未被使用的空闲缓存空间,若有,可以执行后续判断,若无则可以执行S32。

S302:若缓存队列中无空闲的缓存空间,则等待,直至缓存队列中有空闲的缓存空间执行下一步。

具体的,为了尽可能的避免加重因缓存申请请求对系统造成的资源浪费,在缓存队列中无空闲的缓存空间的情况下,可以选择等待缓存队列中有新的缓存空间被释放变为空闲缓存空间以供使用,当有新的空闲缓存空间后,可以执行S303进行下一阶段的判断。

具体的,在缓存队列中无空闲的缓存空间时,是继续等待还是申请新的临时缓存空间可以根据当前系统的IO情况来判断,可以判断当前请求处理速度是否在预设的处理速度阈值内,如果在阈值内说明当前请求请求处理速度快,缓存空间能够很快的被释放,因此,可以选择等待,如果超过阈值,则说明当前请求请求处理速度慢,需要较长的等待时间,会减慢请求的处理速度,不宜等待,可以选择向内存新申请临时缓存空间,同时,还可以加入判断当前IO数据量是否远超过缓存队列中的缓存空间数,如果超过预设的数量阈值,则不宜等待,如果没超过数量阈值和处理速度阈值,可以选择等待。

S303:若有空闲的缓存空间,则判断是否有缓存空间大小满足缓存申请请求的缓存空间。

具体的,进一步的判断缓存空间大小是否满足缓存申请请求的缓存空间,避免因缓存空间不足,导致响应失败,致使缓存申请请求申请失败导致相关业务程序出错。

具体的,在本发明的另一种实施例中,为避免缓存空间大小导致的没有可用缓存空间,缓存队列中预先从内存申请得到的缓存空间为缓存空间大小等于缓存申请请求所需缓存空间上限的缓存空间,从而确保缓存队列中每个缓存空间的大小都可以满足缓存申请请求,则无需再判断是否有缓存空间大小满足缓存申请请求的缓存空间,仅需判断缓存队列中是否有预先从内存申请得到的缓存空间。

其中,由于每个IO数据例如,请求和回复数据均有大小上限,因此,在设置缓存空间时,直接将缓存空间大小设置为大于等于请求和回复数据所需缓存空间大小的上限,从而确保不会出现缓存队列中缓存空间小于缓存申请请求所需的缓存空间的情况。

S304:若有缓存空间大小满足缓存申请请求的缓存空间,则响应缓存申请请求;

S305:根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间;

S306:使用缓存队列时,对缓存队列设置独占锁,直至不使用缓存队列时,解除独占锁。

具体的,为避免多个线程同时访问缓存队列导致缓存队列分配缓存空间时出现时序错误,避免线性访问失败,在一个线程访问缓存队列时,例如,从缓存队列中获取目标缓存空间和判断缓存队列中是否有满足缓存申请请求的缓存空间时,对缓存队列设置独占锁避免其它线程同时访问缓存队列,直至当前线程不使用缓存队列时,解除独占锁,以允许其它线程使用缓存队列。

S307:利用目标缓存空间存放数据;

S308:完成缓存申请请求后,将目标缓存空间释放至缓存队列;

S309:若缓存队列中无满足缓存申请请求的要求的缓存空间,则向内存申请缓存空间,得到临时缓存空间;

S310:利用临时缓存空间存放数据;

S311:完成缓存申请请求后,将临时缓存空间释放至内存。

相应的,本发明实施例还公开了一种缓存空间申请系统,参见图4所示,该系统包括:

缓存空间获取模块,用于根据缓存申请请求,从预先设置的包括预先从内存申请得到的缓存空间的缓存队列中获取目标缓存空间;

数据存储模块,用于利用目标缓存空间存放数据;

缓存空间释放模块,用于完成缓存申请请求后,将目标缓存空间释放至缓存队列。

可见,本发明实施例预先向内存申请内存空间,将预先申请的内存空间以多份缓存空间的形式设置在缓存队列中,每当有数据需要使用缓存空间缓存时,直接向缓存队列中申请缓存空间,不再向内存申请缓存空间,极大的减少了访问内存次数,从而降低了对于CPU和整体系统的运行资源损耗。

具体的,上述缓存队列中预先从内存申请得到的缓存空间为缓存空间大小等于缓存申请请求所需缓存空间上限的缓存空间。

具体的,还可以包括缓存空间判断模块和缓存申请响应模块;其中,

缓存空间判断模块,用于判断缓存队列中是否有满足缓存申请请求的缓存空间;

缓存申请响应模块,用于若缓存空间判断模块判定有满足缓存申请请求的缓存空间,则响应缓存申请请求。

具体的,上述缓存空间判断模块,可以包括空闲缓存判断单元和缓存空间判断单元;其中,

空闲缓存判断单元,用于判断缓存队列中是否有空闲的缓存空间;

缓存空间判断单元,用于若有空闲的缓存空间,则判断是否有缓存空间大小满足缓存申请请求的缓存空间。

具体的,还可以包括内存申请模块、临时数据存储模块和临时空间释放模块;其中,

内存申请模块,用于若缓存空间判断模块判定缓存队列中无满足缓存申请请求的要求的缓存空间,则向内存申请缓存空间,得到临时缓存空间;

临时数据存储模块,用于利用临时缓存空间存放数据;

临时空间释放模块,用于完成缓存申请请求后,将临时缓存空间释放至内存。

具体的,还可以包括等待模块;其中,

等待模块,用于若缓存空间判断模块判定缓存队列中无空闲的缓存空间,则等待,直至缓存队列中有空闲的缓存空间调用缓存空间判断单元。

具体的,还可以包括独占锁设置模块;其中,

独占锁设置模块,用于对缓存队列设置独占锁,直至不使用缓存队列时,解除独占锁;

其中,使用缓存队列时包括从缓存队列中获取目标缓存空间时和判断缓存队列中是否有满足缓存申请请求的缓存空间时。

此外,本发明实施例还公开了一种缓存空间申请装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序以实现如前述的缓存空间申请方法。

此外,本发明实施例还公开了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如前述的缓存空间申请方法。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

以上对本发明所提供的技术内容进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

本文发布于:2024-09-25 13:20:35,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/85500.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议