一种分布式存储应用中缓存内存占用的管理方法及装置与流程

文档序号:25542519发布日期:2021-06-18 20:39阅读:174来源:国知局
一种分布式存储应用中缓存内存占用的管理方法及装置与流程

本发明涉及缓存管理领域,尤其是涉及一种分布式存储应用中缓存内存占用的管理方法及装置。



背景技术:

在分布式存储领域中,数据缓存是一种重要的技术,使用数据缓存技术能够在大数据、高并发场景下提高对热点数据的访问性能进而提高系统整体的io性能。因为缓存一般将热点数据存放到内存等快速设备上,直接从内存中获取,而不是每次都到硬盘等慢速设备中去读取热点数据,能够避免慢速设备的io瓶颈导致前端业务性能低下,可以获取加速读写及降低后端负载压力的益处。

一般情况下,缓存的热点数据越多对系统应用性能的提升越明显,但是由于内存等快速设备空间的限制不可能缓存无限的数据。在linux操作系统中,当物理内存耗尽之后会使用到swap分区,由于swap分区性能不如内存,将内存数据交换到swap分区反而会严重降低应用系统性能,所以需要对缓存数据能够占据的内存物理空间进行管理和控制。

现有的对缓存数据能够占据的内存物理空间进行管理和控制,一般是通过设置相应水位线(阈值),当缓存数据超过水位线之后进行缓存淘汰的方式,但是这种缓存管理方式并不够灵活,不能根据硬件配置中物理内存的不同容量进行动态调整,不利于缓存灵活高效管理。



技术实现要素:

本发明为了解决现有技术中存在的问题,创新提出了一种分布式存储应用中缓存内存占用的管理方法及装置,有效解决由于现有技术造成缓存管理方式不够灵活的问题,能够根据硬件配置中物理内存的不同容量进行动态调整,提高了缓存管理的灵活性以及合理性。

本发明第一方面提供了一种分布式存储应用中缓存内存占用的管理方法,用于实现分布式存储系统中应用程序的数据缓存后,针对缓存数据占用的物理内存空间进行管理控制,包括:

配置缓存内存管理参数以及接口参数;其中,缓存内存管理参数包括参数检测时间间隔、缓存清理时间间隔;

启动缓存内存管理线程管理应用程序进程中缓存内存,加载配置的缓存内存管理参数以及接口参数;

满足参数检测时间间隔后,检测配置内存管理参数或接口参数是否发生变更,如果发生变更,则更新缓存内存管理参数以及接口参数;

根据最新的缓存内存管理参数以及接口参数获取缓存可用内存空间;获取缓存数据对象平均占用空间,根据缓存可用内存空间以及缓存数据对象平均占用空间计算可缓存的对象数目;

满足缓存清理时间间隔,根据计算的可缓存的对象数目与当前缓存对象数目关系,进行缓存清理。

可选地,配置缓存内存管理参数以及接口参数还包括:应用程序最大可用物理内存、缓存最小占用内存、触发缓存清理缓存对象最大数目获取、缓存数据对象平均大小获取。

可选地,满足参数检测时间间隔后,检测配置内存管理参数或接口参数是否发生变更具体包括:

设置初始第一时间变量,将初始第一时间变量初始化为当前时间;

根据初始化第一时间变量与参数检测时间间隔获取当前第一时间变量;

如果当前第一时间变量小于当前时间,则满足参数检测时间间隔;

检测配置内存管理参数或接口参数是否发生变更。

可选地,根据最新的缓存内存管理参数以及接口参数获取缓存可用内存空间具体包括:

根据应用程序最大可用物理内存、缓存最小占用内存、已占用的物理内存获取缓存可用内存空间。

进一步地,根据应用程序最大可用物理内存、缓存最小占用内存、已占用的物理内存获取缓存可用内存空间具体是:

获取应用程序最大可用物理内存、缓存最小占用内存、已占用的物理内存;

如果已占用的物理内存小于应用程序最大可用物理内存,则缓存可用内存空间为已占用的物理内存;如果已占用的物理内存大于应用程序最大可用物理内存,则缓存可用内存空间为应用程序最大可用物理内存;

如果已占用的物理内存大于缓存最小占用内存,则缓存可用内存空间为已占用的物理内存;如果已占用的物理内存小于缓存最小占用内存,则缓存可用内存空间为缓存最小占用内存。

进一步地,缓存可用内存空间大于缓存最小占用内存,且小于应用程序最大可用物理内存。

可选地,满足缓存清理时间间隔具体是:

设置初始第二时间变量,将初始第二时间变量初始化为当前时间;

根据初始化第二时间变量与缓存清理时间间隔获取当前第二时间变量;

如果当前第二时间变量小于当前时间,则满足缓存清理时间间隔。

可选地,根据缓存可用内存空间以及缓存数据对象平均占用空间计算可缓存的对象数目具体是:可缓存的对象数目为缓存可用内存空间与缓存数据对象平均占用空间的商。

可选地,根据计算的可缓存的对象数目与当前缓存对象数目关系,进行缓存清理具体是:如果当前缓存对象数目大于计算的可缓存的对象数目,进行缓存清理;如果当前缓存对象数目不大于计算的可缓存的对象数目,不进行缓存清理。

本发明第二方面提供了一种分布式存储应用中缓存内存占用的管理装置,用于实现分布式存储系统中应用程序的数据缓存后,针对缓存数据占用的物理内存空间进行管理控制,包括:

配置模块,配置缓存内存管理参数以及接口参数;其中,缓存内存管理参数包括参数检测时间间隔、缓存清理时间间隔;

启动加载模块,启动缓存内存管理线程管理应用程序进程中缓存内存,加载配置的缓存内存管理参数以及接口参数;

检测更新模块,满足参数检测时间间隔后,检测配置内存管理参数或接口参数是否发生变更,如果发生变更,则更新缓存内存管理参数以及接口参数;

获取模块,根据最新的缓存内存管理参数以及接口参数获取缓存可用内存空间;获取缓存数据对象平均占用空间,根据缓存可用内存空间以及缓存数据对象平均占用空间计算可缓存的对象数目;

清理模块,满足缓存清理时间间隔,根据计算的可缓存的对象数目与当前缓存对象数目关系,进行缓存清理。

本发明采用的技术方案包括以下技术效果:

1、本发明有效解决由于现有技术造成缓存管理方式不够灵活的问题,能够根据硬件配置中物理内存的不同容量进行动态调整,提高了缓存管理的灵活性以及合理性。

2、本发明技术方案既能够实现开启数据缓存提升系统io性能,又能够通过简单的配置精细化准确化管理应用内存,避免内存耗尽对系统的影响,并且支持动态调整内存空间,可根据硬件配置中内存的不同实现缓存数据量的动态调整。

应当理解的是以上的一般描述以及后文的细节描述仅是示例性和解释性的,并不能限制本发明。

附图说明

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

图1为本发明方案中实施例一方法的流程示意图;

图2为本发明方案中实施例一方法中步骤s3的流程示意图;

图3为本发明方案中实施例一方法中步骤s5的流程示意图;

图4为本发明方案中实施例一方法中步骤s6的流程示意图;

图5为本发明方案中实施例二装置的结构示意图。

具体实施方式

为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。

实施例一

如图1所示,本发明提供了一种分布式存储应用中缓存内存占用的管理方法,用于实现分布式存储系统中应用程序的数据缓存后,针对缓存数据占用的物理内存空间进行管理控制,包括:

s1,配置缓存内存管理参数以及接口参数;其中,缓存内存管理参数包括参数检测时间间隔、缓存清理时间间隔;

s2,启动缓存内存管理线程管理应用程序进程中缓存内存,加载配置的缓存内存管理参数以及接口参数;

s3,满足参数检测时间间隔后,检测配置内存管理参数或接口参数是否发生变更,如果判断结果为是,则执行步骤s4;如果判断结果为否,则执行步骤s5;

s4,则更新缓存内存管理参数以及接口参数;

s5,根据最新的缓存内存管理参数以及接口参数获取缓存可用内存空间;获取缓存数据对象平均占用空间,根据缓存可用内存空间以及缓存数据对象平均占用空间计算可缓存的对象数目;

s6,满足缓存清理时间间隔,根据计算的可缓存的对象数目与当前缓存对象数目关系,进行缓存清理。

其中,在步骤s1中,配置缓存内存管理参数以及接口参数还包括:应用程序最大可用物理内存、缓存最小占用内存、触发缓存清理缓存对象最大数目获取、缓存数据对象平均大小获取。

具体地配置形式如下:

doublecache_trim_interval;//缓存清理时间间隔(缓存内存管理参数)

doublecache_resize_interval;//参数检测时间间隔,(缓存内存管理参数,参数检测时间间隔内既进行参数变更检测又进行缓存大小更新,但是并不进行实际缓存清理)

size_tmemory_target;//应用程序最大可用物理内存(缓存内存管理参数)

size_tmem_cache_min;//缓存最小占用内存(缓存内存管理参数)

voidcache_set_max();//触发缓存清理缓存对象最大数目获取(接口参数)

int64_tget_bytes_per_object()//缓存数据对象平均大小获取(接口参数)

配置完成后,将配置的缓存内存管理参数以及接口参数设置为默认参数配置,便于后期参数加载。

缓存内存管理参数以及接口参数配置支持动态调整内存空间,可根据硬件配置中内存的不同实现缓存数据量的动态调整,避免内存耗尽对系统的影响,提高了缓存管理的灵活性以及合理性。

在步骤s2中,在应用程序启动时会同步启动一个内存管理线程来,对缓存内存占用进行管理,该内存管理线程一直存在,直到应用程序的进程结束。

在步骤s3中,如图2所示,具体包括:

s31,设置初始第一时间变量,将初始第一时间变量初始化为当前时间;

s32,根据初始化第一时间变量与参数检测时间间隔获取当前第一时间变量;

s33,判断当前第一时间变量小于当前时间,如果判断结果为是,则执行步骤s34;如果判断结果为否,则执行步骤s5;

s34,则满足参数检测时间间隔;

s35,检测配置内存管理参数或接口参数是否发生变更。

其中,在步骤s31中,获取缓存结构体,初始第一时间变量可以设置为next_resize,当前时间可以表示为clock_now(),初始第一时间变量初始化为当前时间具体是:next_resize赋值为当前时间,即next_resize=clock_now();

在步骤s32中,根据初始化第一时间变量与参数检测时间间隔获取当前第一时间变量具体是:当前第一时间变量为初始化第一时间变量与参数检测时间间隔的和,即next_resize=next_resize+cache_resize_interval。

在步骤s31-s33中,为描述方便,现举例说明,例如当前时间为10:20,参数检测时间间隔为5min,初始化第一时间变量为10:20,当前第一时间变量为10:25,比较当前第一时间变量与当前时间的关系,如果当前第一时间变量小于当前时间(例如10:25小于10:27),则满足参数检测时间间隔,进行检测配置内存管理参数或接口参数是否发生变更。

在步骤s35执行过后,返回执行步骤s31。再次计算当前第一时间变量,将步骤s32中的当前第一时间变量设置为初始第一时间变量,重新计算当前第一时间变量,即当前第一时间变量为上一次第一时间变量与参数检测时间间隔的和(例如10:27+5=10:32),即next_resize=next_resize+cache_resize_interval,循环执行步骤s31-s35。

在步骤s4中,开始循环执行检测配置项及缓存清理,每次先重新加载配置项,检测配置的缓存内存管理参数以及接口参数是否变化;如果发生变更,则更新缓存内存管理参数以及接口参数;更新时,缓存相关配置项可以通过套接字与应用程序进程进行交互来进行动态修改;如果未发生变更,则进行步骤s5,即进行缓存可用内存空间的计算获取。

在步骤s5中,根据最新的缓存内存管理参数以及接口参数获取缓存可用内存空间具体包括:

根据应用程序最大可用物理内存、缓存最小占用内存、已占用的物理内存获取缓存可用内存空间。

其中,如果缓存内存管理参数以及接口参数更新,根据更新后的缓存内存管理参数以及接口参数获取缓存可用内存空间;如果缓存内存管理参数以及接口参数未更新,根据最新的(未更新前,即上一次更新)缓存内存管理参数以及接口参数获取缓存可用内存空间。

具体地,如图3所示,具体包括:

s51,获取应用程序最大可用物理内存、缓存最小占用内存、已占用的物理内存;

s52,判断已占用的物理内存是否小于应用程序最大可用物理内存,如果判断结果为是,则执行步骤s53;如果判断结果为否,则执行步骤s54;

s53,则缓存可用内存空间为已占用的物理内存;

s54,则缓存可用内存空间为应用程序最大可用物理内存;

s55,判断已占用的物理内存是否大于缓存最小占用内存,如果判断结果为是,则执行步骤s56;如果判断结果为否,则执行步骤s57;

s56,则缓存可用内存空间为已占用的物理内存;

s57,则缓存可用内存空间为缓存最小占用内存。

其中,在步骤s51-s57中,缓存可用内存空间大于缓存最小占用内存,且小于应用程序最大可用物理内存。为描述清楚,现举例说明,例如,已占用的物理内存为50m,应用程序最大可用物理内存为100m,缓存最小占用内存为10m,则缓存可用内存空间为50m。

具体地,已占用的物理内存可以是tcmalloc(内存分配器)已分配映射的空间,缓存可用内存空间小于应用程序最大可用物理内存,具体地,应该缓慢增长,直至接近应用程序最大可用物理内存,具体按照(1-已占用的物理内存/应用程序最大可用物理内存)的比率来缓慢增长。

在步骤s6中,如图4所示,具体包括:

s61,设置初始第二时间变量,将初始第二时间变量初始化为当前时间;

s62,根据初始化第二时间变量与缓存清理时间间隔获取当前第二时间变量;

s63,判断当前第二时间变量小于当前时间,如果判断结果为是,则执行步骤s64;如果判断结果为否,则执行步骤s62;

s64,则满足缓存清理时间间隔;

s65,根据缓存可用内存空间以及缓存数据对象平均占用空间计算可缓存的对象数目;

s66,判断当前缓存对象数目是否大于计算的可缓存的对象数目,如果判断结果为是,则执行步骤s67;如果判断结果为否,则执行步骤s68;

s67,进行缓存清理;

s68,不进行缓存清理。

在步骤s61中,获取缓存结构体,初始第二时间变量可以设置为next_resize1,当前时间可以表示为clock_now(),初始第二时间变量初始化为当前时间具体是:next_resize1赋值为当前时间,即next_resize1=clock_now();

在步骤s62中,根据初始化第二时间变量与缓存清理时间间隔获取当前第二时间变量具体是:当前第二时间变量为初始化第二时间变量与缓存清理时间间隔的和,即next_resize1=next_resize1+cache_trim_interval。

在步骤s61-s63中,为描述方便,现举例说明,例如当前时间为10:30,参缓存时间间隔为10min,初始化第二时间变量为10:30,当前第二时间变量为10:40,比较当前第二时间变量与当前时间的关系,如果当前第二时间变量小于当前时间(例如10:40小于10:42),则满足缓存清理时间间隔,进行步骤s65的操作。

在步骤s65中,具体是:可缓存的对象数目为缓存可用内存空间与缓存数据对象平均占用空间的商。具体地,缓存可用内存空间可以由步骤s5获取,缓存数据对象平均占用空间可以由接口参数(缓存数据对象平均大小获取,get_bytes_per_object)获得。

在步骤s66-s68中,通过调用接口参数(触发缓存清理缓存对象最大数目获取,即cache_set_max)获取可缓存的对象数目,如果达到缓存清理条件,根据缓存实现的淘汰算法例如lru(leastrecentlyused,即最近最少使用,一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰)、fifo(firstinfirstout,先进先出,判断被存储的时间,离目前最远的数据优先被淘汰)等对缓存进行清理,为了加快缓存清理速度可将缓存配置多个分片。

在步骤s68、s67执行过后,返回执行步骤s61。再次计算当前第二时间变量,将步骤s61中的当前第二时间变量设置为初始第二时间变量,重新计算当前第二时间变量,即当前第二时间变量为上一次第二时间变量与缓存清理时间间隔的和(例如10:42+10=10:52),即next_resize1=next_resize1+cache_trime_interval,循环执行步骤s36-s68。

根据配置的缓存清理时间间隔(cache_trim_interval),进入下一个缓存清理周期的循环。

需要说明的是,本发明步骤s1-s6均可以通过程序语言编程实现,其实现思路与实现的步骤相对应,也可以通过其他方式实现,本发明在此不做限制。

本发明有效解决由于现有技术造成缓存管理方式不够灵活的问题,能够根据硬件配置中物理内存的不同容量进行动态调整,提高了缓存管理的灵活性以及合理性。

本发明技术方案既能够实现开启数据缓存提升系统io性能,又能够通过简单的配置精细化准确化管理应用内存,避免内存耗尽对系统的影响,并且支持动态调整内存空间,可根据硬件配置中内存的不同实现缓存数据量的动态调整。

实施例二

如图5所示,本发明技术方案还提供了一种分布式存储应用中缓存内存占用的管理装置,用于实现分布式存储系统中应用程序的数据缓存后,针对缓存数据占用的物理内存空间进行管理控制,包括:

配置模块101,配置缓存内存管理参数以及接口参数;其中,缓存内存管理参数包括参数检测时间间隔、缓存清理时间间隔;

启动加载模块102,启动缓存内存管理线程管理应用程序进程中缓存内存,加载配置的缓存内存管理参数以及接口参数;

检测更新模块103,满足参数检测时间间隔后,检测配置内存管理参数或接口参数是否发生变更,如果发生变更,则更新缓存内存管理参数以及接口参数;

获取模块104,根据最新的缓存内存管理参数以及接口参数获取缓存可用内存空间;获取缓存数据对象平均占用空间,根据缓存可用内存空间以及缓存数据对象平均占用空间计算可缓存的对象数目;

清理模块105,满足缓存清理时间间隔,根据计算的可缓存的对象数目与当前缓存对象数目关系,进行缓存清理。

本发明有效解决由于现有技术造成缓存管理方式不够灵活的问题,能够根据硬件配置中物理内存的不同容量进行动态调整,提高了缓存管理的灵活性以及合理性。

本发明技术方案既能够实现开启数据缓存提升系统io性能,又能够通过简单的配置精细化准确化管理应用内存,避免内存耗尽对系统的影响,并且支持动态调整内存空间,可根据硬件配置中内存的不同实现缓存数据量的动态调整。

上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

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