掌桥专利:专业的专利平台
掌桥专利
首页

一种页缓存限制方法、系统、电子设备及存储介质

文献发布时间:2024-04-18 19:54:45


一种页缓存限制方法、系统、电子设备及存储介质

技术领域

本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种页缓存限制方法、系统、电子设备及存储介质。

背景技术

随着云原生时代的到来,越来越多用户开始使用容器。容器(container)是一种操作系统的内核虚拟化技术,可以用于隔离进程,以及可以为各个进程分配系统资源,如CPU、内存、磁盘I/O等。在实际应用中,通过内核功能系统资源管控组件s(control groups,Linux控制组),可以进行系统资源的记账、以及限制各个进程的资源使用量。

在云计算环境中部署的容器,可使用的内存容量通常是有限的;一旦容器的内存使用量超过限制量,可能发生OOM(Out of Memory,内存溢出),进而OOM killer进程会从系统中选择出至少一个进程“杀死”,并释放该进程所占用的全部内存页。

其中,如果被“杀死”的进程是核心服务进程,可能造成服务性能抖动,严重影响用户体验,因此需要尽量避免OOM情况的发生。

发明内容

本申请提供一种页缓存限制方法,应用于搭载有操作系统的终端,所述方法包括:

确定预先配置的需要限制页缓存的目标系统资源管控组件,以及确定为所述目标系统资源管控组件预先配置的针对页缓存的限制阈值和内存回收方式;

检测所述目标系统资源管控组件的页缓存所占用的内存容量是否超过所述限制阈值;

如果所述目标系统资源管控组件的页缓存所占用的内存容量超过所述限制阈值,则按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收。

可选地,为所述目标系统资源管控组件创建的内存资源管控结构体中包括限制功能开关变量、限制阈值变量和内存回收方式变量;

所述确定预先配置的需要限制页缓存的目标系统资源管控组件,包括:

根据所述内存资源管控结构体中包括的限制功能开关变量为第一数值,确定所述目标系统资源管控组件为预先配置的需要限制页缓存的系统资源管控组件;或者,根据所述内存资源管控结构体中包括的限制功能开关变量为第二数值,确定所述目标系统资源管控组件为预先配置的不需要限制页缓存的系统资源管控组件;

所述确定为所述目标系统资源管控组件预先配置的针对页缓存的限制阈值,包括:

将所述内存资源管控结构体中包括的限制阈值变量的取值,确定为为所述目标系统资源管控组件预先配置的针对页缓存的限制阈值;

所述确定为所述目标系统资源管控组件预先配置的内存回收方式,包括:

根据所述内存资源管控结构体中包括的内存回收方式变量为第三数值,确定为所述目标系统资源管控组件预先配置的内存回收方式为异步回收方式;或者,根据所述内存资源管控结构体中包括的内存回收方式变量为第四数值,确定为所述目标系统资源管控组件预先配置的内存回收方式为同步回收方式。

可选地,所述内存回收方式为同步回收方式;所述按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收,包括:

扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的未映射文件页进行同步回收;

如果所述目标系统资源管控组件的页缓存所占用的内存容量仍然超过所述限制阈值,则重新扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的未映射文件页进行同步回收,直至所述目标系统资源管控组件的页缓存所占用的内存容量不超过所述限制阈值;

如果针对所述目标系统资源管控组件的页缓存的扫描次数超过第一阈值,则允许针对所述目标系统资源管控组件的映射文件页进行同步回收。

可选地,所述内存回收方式为异步回收方式;所述按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收,包括:

扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的干净页进行异步回收;其中,所述干净页为其中缓存的数据已回写至存储介质的内存页;所述干净页包括未映射文件页和映射文件页;

如果所述目标系统资源管控组件的页缓存所占用的内存容量仍然超过所述限制阈值,则重新扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的干净页进行异步回收,直至所述目标系统资源管控组件的页缓存所占用的内存容量不超过所述限制阈值;

如果针对所述目标系统资源管控组件的页缓存的扫描次数超过第二阈值,则允许针对所述目标系统资源管控组件的脏页进行异步回收;其中,所述脏页为其中缓存的数据未回写至存储介质的内存页。

可选地,所述内存回收方式为异步回收方式;所述按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收,包括:

扫描所述目标系统资源管控组件的页缓存,确定出需要被异步回收的内存页,并针对需要被异步回收的内存页进行异步回收;

响应于检测到操作系统的可用CPU资源不足,将原用于内存回收进程针对需要被异步回收的内存页进行异步回收的CPU资源,调度给所述内存回收进程之外的其他进程。

可选地,所述方法还包括:

如果所述目标系统资源管控组件的页缓存所占用的内存容量未超过所述限制阈值,则检测所述目标系统资源管控组件的父系统资源管控组件的页缓存所占用的内存容量是否超过所述限制阈值;

如果所述父系统资源管控组件的页缓存所占用的内存容量超过所述限制阈值,则按照为所述父系统资源管控组件预先配置的内存回收方式,针对所述父系统资源管控组件的页缓存进行内存回收。

可选地,所述确定预先配置的需要限制页缓存的目标系统资源管控组件,包括:

响应于检测到所述操作系统的可用内存资源不足,从用于针对所述操作系统进行内存资源管理的至少一个系统资源管控组件中,确定出预先配置的需要限制页缓存的目标系统资源管控组件。

本申请还提供一种页缓存限制装置,应用于搭载有操作系统的终端,所述装置包括:

确定单元,用于确定预先配置的需要限制页缓存的目标系统资源管控组件,以及确定为所述目标系统资源管控组件预先配置的针对页缓存的限制阈值和内存回收方式;

第一检测单元,用于检测所述目标系统资源管控组件的页缓存所占用的内存容量是否超过所述限制阈值;

第一回收单元,用于如果所述目标系统资源管控组件的页缓存所占用的内存容量超过所述限制阈值,则按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收。

本申请还提供一种页缓存限制系统,所述页缓存限制系统用于实现上述方法。

本申请还提供一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;

所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述方法。

本申请还提供一种机器可读存储介质,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述方法。

通过以上实施例,通过为目标系统资源管控组件开启页缓存限制功能,并为目标系统资源管控组件预先配置针对页缓存的限制阈值和内存回收方式,可以在检测到目标系统资源管控组件的页缓存所占用的内存容量超过预先配置的限制阈值时,按照预先配置的内存回收方式,针对目标系统资源管控组件的页缓存进行内存回收。从而可以基于系统资源管控组件粒度或操作系统粒度进行页缓存限制,提升容器内存的使用效率,进而可以减少OOM情况的发生,改善用户体验。

附图说明

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

图1是一示例性的实施例示出的一种页缓存限制方法的流程图;

图2是一示例性的实施例示出的另一种页缓存限制方法的流程图;

图3是一示例性的实施例示出的一种页缓存限制装置所在电子设备的结构示意图;

图4是一示例性的实施例示出的一种页缓存限制装置的框图。

具体实施方式

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

需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。

随着云原生时代的到来,越来越多用户开始使用容器。容器(container)是一种操作系统的内核虚拟化技术,可以用于隔离进程,以及可以为各个进程分配系统资源,如CPU、内存、磁盘I/O等。

目前主流的操作系统都搭载有系统资源管控组件,通过系统资源管控组件可以对进程/线程使用的资源进行隔离、管控与记录等。例如,以Linux系统为例,Linux系统所搭载的系统资源管控组件可以为cgroup(control group,Linux控制组)。

在云计算环境中部署的容器,可使用的内存容量通常是有限的;一旦容器的内存使用量超过限制量,可能发生OOM(Out of Memory,内存溢出),进而OOM killer进程会从系统中选择出至少一个进程“杀死”,并释放该进程所占用的全部内存页。

其中,如果被“杀死”的进程是核心服务进程,可能造成服务性能抖动,严重影响用户体验,因此需要尽量避免OOM情况的发生。

在实际应用中,发现文件页缓存所占用的内存容量,在容器有限的总内存容量中占了很大一部分的比例。其中,所述文件页缓存,是指将从磁盘等存储介质或文件系统中读取的数据缓存至系统内存页中;文件页(File-backed Page)可以包括内核缓存的磁盘数据(Buffer)和内核缓存的文件数据(Cache);内存页(page)通常是操作系统内核进行内存管理的基本单位。

有鉴于此,本说明书旨在提出一种页缓存限制功能,可以用于限制各个系统资源管控组件的页缓存可占用的内存容量,减少OOM情况的发生。

在实现时,可以先确定预先配置的需要限制页缓存的目标系统资源管控组件,以及确定为所述目标系统资源管控组件预先配置的针对页缓存的限制阈值,以及确定为所述目标系统资源管控组件预先配置的内存回收方式;进一步地,可以检测所述目标系统资源管控组件的页缓存所占用的内存容量是否超过所述限制阈值;如果所述目标系统资源管控组件的页缓存所占用的内存容量超过所述限制阈值,则可以按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收。

由此可见,在本说明书中的技术方案中,通过为目标系统资源管控组件开启页缓存限制功能,并为目标系统资源管控组件预先配置针对页缓存的限制阈值和内存回收方式,可以在检测到目标系统资源管控组件的页缓存所占用的内存容量超过预先配置的限制阈值时,按照预先配置的内存回收方式,针对目标系统资源管控组件的页缓存进行内存回收。从而可以基于系统资源管控组件粒度或操作系统粒度进行页缓存限制,提升容器内存的使用效率,进而可以减少OOM情况的发生,改善用户体验。

下面通过具体实施例,并结合具体的应用场景对本申请进行描述。为了便于本领域技术人员更好地理解本说明书中的技术方案,下面以所述系统资源管控组件为Linux系统所搭载的cgroup为例进行说明,这并不代表本说明书对此做出特别限定。

请参见图1,图1是一示例性的实施例示出的一种页缓存限制方法的流程图。所述方法可以应用于搭载有Linux系统的终端。

在本说明书中,所述终端设备,具体可以包括搭载有Linux系统的一台服务器、或由多台服务器形成的服务器集群,也可以包括搭载有Linux系统的客户端侧网络设备,本说明书对此不做特别限制。

如图1所示,所述页缓存限制方法可以执行以下步骤:

步骤102:确定预先配置的需要限制页缓存的目标系统资源管控组件,以及确定为所述目标系统资源管控组件预先配置的针对页缓存的限制阈值和内存回收方式。

其中,在所述步骤102中,所述内存回收方式可以包括异步回收方式或同步回收方式;所述异步回收方式,可以指异步执行的、不会阻塞原进程的内存回收方式;所述同步回收方式,可以指同步执行的、会阻塞原进程的内存回收方式。

例如,可以确定预先配置的需要限制页缓存的目标cgroup为节点A,以及可以确定为节点A预先配置的针对页缓存的限制阈值为n1,以及可以确定为节点A预先配置的内存回收方式为同步回收方式。

又例如,可以确定预先配置的需要限制页缓存的目标cgroup为节点B,以及可以确定为节点B预先配置的针对页缓存的限制阈值为n2(n1与n2可以不同),以及可以确定为节点B预先配置的内存回收方式为异步回收方式。

其中,在所述步骤102中,所述目标系统资源管控组件可以为任一已开启页缓存限制功能的系统资源管控组件。例如,为节点A、节点B、节点C均开启了页缓存限制功能,则可以依次遍历上述节点,并将遍历到的节点确定为所述目标cgroup,针对所述目标cgroup执行本说明书中的技术方案。

需要说明的是,如果仅开启了部分系统资源管控组件的页缓存限制功能,则可以基于系统资源管控组件粒度进行页缓存限制;如果开启了全局页缓存限制功能或所有系统资源管控组件的页缓存限制功能,则可以基于操作系统粒度进行页缓存限制。

在示出的一种实施方式中,可以通过用户态开关,动态控制页缓存限制功能,不需要重新部署编译。

例如,可以面向用户提供以下接口:(1)memory.pagecache_limit.enable,该接口可以用于配置是否开启cgroup的页缓存限制功能,取值可以为0或1,其中,取值为0时可以表示禁用cgroup的页缓存限制功能,取值为1时可以表示开启cgroup的页缓存限制功能;(2)memory.pagecache_limit.size,该接口可以用于配置cgroup针对页缓存的限制阈值;(3)memory.pagecache_limit.sync,该接口可以用于配置是否开启cgroup的异步回收功能,取值可以为0或1,其中,取值为0时可以表示禁用异步回收功能(也即开启同步回收功能),取值为1时可以表示开启异步回收功能。

在实现时,所述目标系统资源管控组件创建的内存资源管控结构体中可以包括限制功能开关变量、限制阈值变量和内存回收方式变量。

在这种情况下,所述确定预先配置的需要限制页缓存的目标系统资源管控组件,具体可以包括:根据所述内存资源管控结构体中包括的限制功能开关变量为第一数值,确定所述目标系统资源管控组件为预先配置的需要限制页缓存的系统资源管控组件;或者,根据所述内存资源管控结构体中包括的限制功能开关变量为第二数值,确定所述目标系统资源管控组件为预先配置的不需要限制页缓存的系统资源管控组件。

所述确定为所述目标系统资源管控组件预先配置的针对页缓存的限制阈值,具体可以包括:将所述内存资源管控结构体中包括的限制阈值变量的取值,确定为为所述目标系统资源管控组件预先配置的针对页缓存的限制阈值。

所述确定为所述目标系统资源管控组件预先配置的内存回收方式,具体可以包括:根据所述内存资源管控结构体中包括的内存回收方式变量为第三数值,确定为所述目标系统资源管控组件预先配置的内存回收方式为异步回收方式;或者,根据所述内存资源管控结构体中包括的内存回收方式变量为第四数值,确定为所述目标系统资源管控组件预先配置的内存回收方式为同步回收方式。

例如,目标cgroup为节点A,为节点A创建的结构体“struct memcg”中可以包括限制功能开关变量“enable”、限制阈值变量“size”和内存回收方式变量“sync”;其中,“enable”与“sync”可以为布尔类型的变量,“size”可以为整数类型的变量。针对节点A,根据限制功能开关变量“enable=1”、限制阈值变量“size=n1”、内存回收方式变量“sync=0”,可以确定需要针对节点A进行页缓存限制,为节点A预先配置的针对页缓存的限制阈值为n1,以及为节点A预先配置的内存回收方式为同步回收方式。

又例如,目标cgroup可以为节点B,根据限制功能开关变量“enable=1”、限制阈值变量“size=n2”、内存回收方式变量“sync=1”,可以确定需要针对节点A进行页缓存限制,为节点A预先配置的针对页缓存的限制阈值为n2,以及为节点A预先配置的内存回收方式为异步回收方式。其中,为节点B创建的结构体“struct memcg”中还可以包括“struct work”,为节点B创建用于执行异步回收的任务队列。

需要说明的是,在以上示出的实施例中,所述第一数值为1,所述第二数值为0,所述第三数值为1,所述第四数值为0,仅仅是一种示例性的描述,并不对本说明书做出特别限定。

另外,需要说明的是,在以上示出的实施方式中,通过在“struct memcg”中添加限制功能开关变量“enable”、限制阈值变量“size”和内存回收方式变量“sync”,可以实现基于cgroup粒度的页缓存限制功能,但是“struct memcg”本身所占用的内存容量也会增加。在相关技术中,通常需要在“struct memcg”中添加上百个字节的变量(如pagecount等),对内存使用情况进行监测和管理;而在本说明书中,由于所述限制功能开关变量、所述内存回收方式变量可以为布尔类型的变量,所述限制阈值变量可以为整数类型的变量,因此可以只占用十几个字节,避免“struct memcg”本身占用过多的内存容量,从而在进行页缓存限制的同时,节约创建“struct memcg”所消耗的内存资源,还可以减少开发人员的代码工作量,减少实现页缓存限制功能所需的接口数量,简化用户的使用方式。

在示出的一种实施方式中,所述步骤102可以是由“内存不足事件”触发的。在这种情况下,所述确定预先配置的需要限制页缓存的目标系统资源管控组件,具体可以包括:响应于检测到操作系统的可用内存资源不足,从用于针对所述操作系统进行内存资源管理的至少一个系统资源管控组件中,确定出预先配置的需要限制页缓存的目标系统资源管控组件。

例如,响应于检测到Linux系统的可用内存资源不足,可以将已开启页缓存限制功能的各个cgroup分别确定为目标cgroup,并针对目标group执行本说明书中的技术方案。

在一些可能的实施例中,所述操作系统搭载有相互隔离的多个容器;具体地,响应于检测到所述操作系统搭载的任一容器的可用内存资源不足,可以从用于针对所述容器进行内存资源管理的至少一个系统资源管控组件中,确定出预先配置的需要限制页缓存的目标系统资源管控组件。

步骤104:检测所述目标系统资源管控组件的页缓存所占用的内存容量是否超过所述限制阈值。

步骤106:如果所述目标系统资源管控组件的页缓存所占用的内存容量超过所述限制阈值,则按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收。

例如,目标cgroup可以为节点A,在确定为节点A预先配置的针对页缓存的限制阈值为n1之后,可以检测节点A的页缓存当前所占用的内存容量nA是否超过限制阈值n1;如果nA>n1,则可以按照为节点A预先配置的内存回收方式,针对节点A的页缓存进行同步回收。

又例如,目标cgroup可以为节点B,在确定为节点B预先配置的针对页缓存的限制阈值为n2之后,可以检测节点B的页缓存当前所占用的内存容量nB是否超过限制阈值n2;如果nB>n2,则可以按照为节点B预先配置的内存回收方式,针对节点A的页缓存进行异步回收。

在示出的一种实施方式中,所述内存回收方式为同步回收方式。在这种情况下,所述按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收,具体可以包括:扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的未映射文件页进行同步回收;如果所述目标系统资源管控组件的页缓存所占用的内存容量仍然超过所述限制阈值,则重新扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的未映射文件页进行同步回收,直至所述目标系统资源管控组件的页缓存所占用的内存容量不超过所述限制阈值;如果针对所述目标系统资源管控组件的页缓存的扫描次数超过第一阈值,则允许针对所述目标系统资源管控组件的映射文件页进行同步回收。

例如,请参见图2,图2是一示例性的实施例示出的另一种页缓存限制方法的流程图。如图2所示,遍历到的目标cgroup为节点A,检测节点A的页缓存当前所占用的内存容量nA是否超过限制阈值n1;如果nA>n1,并且节点A未开启异步回收功能,则可以扫描节点A的页缓存,并针对节点A的未映射文件页进行同步回收;如果仍然nA>n1,则重新扫描节点A的页缓存,并针对节点A的未映射文件页进行同步回收,直至nA≤n1;其中,如果针对节点A的页缓存的扫描次数超过4次,则允许针对节点A的映射文件页进行同步回收。

需要说明的是,在以上示出的实施例中,所述第一阈值为4,仅仅是一种示例性的描述,并不代表对本说明书做出特别限定。

由于同步回收方式会阻塞原有线程,而针对映射文件页的回收过程较为复杂,耗时较长,因此在相关技术中,为了尽快完成针对页缓存的同步回收,通常默认进行“直接页面回收”,也即通常默认只对未映射文件页进行回收。由此可见,在映射文件页耗用较多的场景中,上述相关技术中的同步回收方式的结果并不理想。在本说明书示出的实施方式中,如果针对目标系统资源管控组件的页缓存的扫描次数超过第一阈值,可以允许针对映射文件页进行同步回收,从而在映射文件页耗用较多的场景中,改善同步回收方式的效果。

在示出的另一种实施方式中,所述内存回收方式为异步回收方式。在这种情况下,所述按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收,具体可以包括:扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的干净页进行异步回收;其中,所述干净页为其中缓存的数据已回写至存储介质的内存页;所述干净页包括未映射文件页和映射文件页;如果所述目标系统资源管控组件的页缓存所占用的内存容量仍然超过所述限制阈值,则重新扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的干净页进行异步回收,直至所述目标系统资源管控组件的页缓存所占用的内存容量不超过所述限制阈值;如果针对所述目标系统资源管控组件的页缓存的扫描次数超过第二阈值,则允许针对所述目标系统资源管控组件的脏页进行异步回收;其中,所述脏页为其中缓存的数据未回写至存储介质的内存页。

例如,如图2所示,遍历到的目标cgroup为节点B,检测节点B的页缓存当前所占用的内存容量nB是否超过限制阈值n2;如果nB>n2,并且节点B开启异步回收功能,则可以扫描节点B的页缓存,并针对节点B的干净页进行异步回收;如果仍然nB>n2,则重新扫描节点B的页缓存,并针对节点B的干净页进行异步回收,直至nB≤n2;其中,如果针对节点B的页缓存的扫描次数超过2次,则允许针对节点B的脏页进行异步回收。

需要说明的是,在以上示出的实施例中,所述第二阈值为2,仅仅是一种示例性的描述,并不代表对本说明书做出特别限定。

由于针对脏页进行内存回收更复杂,因此在以上示出的实施方式中,可以优先针对干净页进行异步回收,如果重新扫描一定次数后,可用内存容量仍然不足,则可以允许针对脏页进行异步回收,以改善异步回收方式的效果。

在示出的另一种实施方式中,可以采用工作队列(work queue)的方式进行异步回收;并且,为了避免内存回收进程占用过多CPU资源的情况,在每一次回收路径中,内存回收进程可以主动让出原本用于异步回收的CPU资源,以保证其他进程的正常运行。

在这种情况下,所述按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收,具体可以包括:扫描所述目标系统资源管控组件的页缓存,确定出需要被异步回收的内存页,并针对需要被异步回收的内存页进行异步回收;响应于检测到操作系统的可用CPU资源不足,将原用于内存回收进程针对需要被异步回收的内存页进行异步回收的CPU资源,调度给所述内存回收进程之外的其他进程。

例如,遍历到的目标cgroup为节点A,如果节点A的页缓存所占用的内存容量nA超过限制阈值n1,则可以扫描节点A的页缓存,确定出需要被异步回收的内存页,并针对需要被异步回收的内存页进行异步回收;在上述过程中,响应于检测到Linux系统的可用CPU资源不足,可以将原用于内存回收进程针对需要被异步回收的内存页进行异步回收的CPU资源,调度给所述内存回收进程之外的其他进程。

需要说明的是,在以上示出的实施例中,操作系统可以将原用于内存回收进程进行异步回收的CPU资源直接调度给其他进程,也可以只是内存回收进程释放原用于内存回收进程进行异步回收的CPU资源,使得其他进程有机会调用这部分CPU资源,在此不做赘述。

在示出的另一种实施方式中,在针对各个需要进行页缓存限制的目标系统资源管控组件进行遍历的过程中,可以优先针对目标系统资源管控组件的父系统资源管控组件进行遍历。所述方法还可以包括:

步骤108:如果所述目标系统资源管控组件的页缓存所占用的内存容量未超过所述限制阈值,则检测所述目标系统资源管控组件的父系统资源管控组件的页缓存所占用的内存容量是否超过所述限制阈值。

步骤110:如果所述父系统资源管控组件的页缓存所占用的内存容量超过所述限制阈值,则按照为所述父系统资源管控组件预先配置的内存回收方式,针对所述父系统资源管控组件的页缓存进行内存回收。

例如,如图2所示,为节点A、节点B、节点C均开启了页缓存限制功能,则可以依次遍历上述节点,并将遍历到的节点确定为所述目标cgroup,其中,节点C为节点A的父组group;如果目标cgroup为节点A,检测到节点A的页缓存当前所占用的内存容量nA未超过限制阈值n1,则进一步可以检测节点A的父组group节点C的页缓存当前所占用的内存容量nC是否超过为节点C预先配置的限制阈值n3;如果nC>n3,则可以按照为节点C预先配置的内存回收方式,针对节点C的页缓存进行内存回收。

其中,关于针对所述目标cgroup的父组cgroup进行内存回收的具体实现方式,与针对遍历到的目标cgroup进行内存回收的具体实现方式类似,在此不再赘述。

接着以上示出的实施例继续举例,如果nC≤n3,则可以继续遍历节点C的父组cgroup;或者,如果nC≤n3,则可以结束本轮迭代,继续遍历下一个目标cgroup(也即节点B)。

需要说明的是,在以上示出的实施方式中,所述目标cgroup的父组cgroup也应当开启了页缓存限制功能。

在示出的另一种实施方式中,如果所述目标cgroup(也即节点A)的页缓存所占用的内存容量未超过所述限制阈值,则可以直接结束本轮迭代,继续遍历下一个目标cgroup(也即节点B)。

通过以上技术方案可知,通过为目标系统资源管控组件开启页缓存限制功能,并为目标系统资源管控组件预先配置针对页缓存的限制阈值和内存回收方式,可以在检测到目标系统资源管控组件的页缓存所占用的内存容量超过预先配置的限制阈值时,按照预先配置的内存回收方式,针对目标系统资源管控组件的页缓存进行内存回收。从而可以基于系统资源管控组件粒度或操作系统粒度进行页缓存限制,提升容器内存的使用效率,进而可以减少OOM情况的发生,改善用户体验。

与上述页缓存限制方法的实施例对应的,本说明书还提供了一种页缓存限制系统的实施例,以及一种页缓存限制装置的实施例。

在本说明书中,所述页缓存限制可以执行所述步骤102-步骤106,以实现本说明书的技术方案。

请参见图3,图3是一示例性的实施例示出的一种页缓存限制装置所在电子设备的硬件结构图。在硬件层面,该设备包括处理器302、内部总线304、网络接口306、内存308以及非易失性存储器310,当然还可能包括其他所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器302从非易失性存储器310中读取对应的计算机程序到内存308中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

请参见图4,图4是一示例性的实施例示出的一种页缓存限制装置的框图。该页缓存限制装置可以应用于如图3所示的电子设备中,以实现本说明书的技术方案。其中,所述页缓存限制装置可以包括:

确定单元402,用于确定预先配置的需要限制页缓存的目标系统资源管控组件,以及确定为所述目标系统资源管控组件预先配置的针对页缓存的限制阈值和内存回收方式;

第一检测单元404,用于检测所述目标系统资源管控组件的页缓存所占用的内存容量是否超过所述限制阈值;

第一回收单元406,用于如果所述目标系统资源管控组件的页缓存所占用的内存容量超过所述限制阈值,则按照所述内存回收方式,针对所述目标系统资源管控组件的页缓存进行内存回收。

在本实施例中,为所述目标系统资源管控组件创建的内存资源管控结构体中包括限制功能开关变量、限制阈值变量和内存回收方式变量;

所述确定单元402,具体用于:

根据所述内存资源管控结构体中包括的限制功能开关变量为第一数值,确定所述目标系统资源管控组件为预先配置的需要限制页缓存的系统资源管控组件;或者,根据所述内存资源管控结构体中包括的限制功能开关变量为第二数值,确定所述目标系统资源管控组件为预先配置的不需要限制页缓存的系统资源管控组件;

所述确定单元402,具体还用于:

将所述内存资源管控结构体中包括的限制阈值变量的取值,确定为为所述目标系统资源管控组件预先配置的针对页缓存的限制阈值;

所述确定单元402,具体还用于:

根据所述内存资源管控结构体中包括的内存回收方式变量为第三数值,确定为所述目标系统资源管控组件预先配置的内存回收方式为异步回收方式;或者,根据所述内存资源管控结构体中包括的内存回收方式变量为第四数值,确定为所述目标系统资源管控组件预先配置的内存回收方式为同步回收方式。

在本实施例中,所述内存回收方式为同步回收方式;所述第一回收单元406,具体用于:

扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的未映射文件页进行同步回收;

如果所述目标系统资源管控组件的页缓存所占用的内存容量仍然超过所述限制阈值,则重新扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的未映射文件页进行同步回收,直至所述目标系统资源管控组件的页缓存所占用的内存容量不超过所述限制阈值;

如果针对所述目标系统资源管控组件的页缓存的扫描次数超过第一阈值,则允许针对所述目标系统资源管控组件的映射文件页进行同步回收。

在本实施例中,所述内存回收方式为异步回收方式;所述第一回收单元406,具体用于:

扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的干净页进行异步回收;其中,所述干净页为其中缓存的数据已回写至存储介质的内存页;所述干净页包括未映射文件页和映射文件页;

如果所述目标系统资源管控组件的页缓存所占用的内存容量仍然超过所述限制阈值,则重新扫描所述目标系统资源管控组件的页缓存,并针对所述目标系统资源管控组件的干净页进行异步回收,直至所述目标系统资源管控组件的页缓存所占用的内存容量不超过所述限制阈值;

如果针对所述目标系统资源管控组件的页缓存的扫描次数超过第二阈值,则允许针对所述目标系统资源管控组件的脏页进行异步回收;其中,所述脏页为其中缓存的数据未回写至存储介质的内存页。

在本实施例中,所述内存回收方式为异步回收方式;所述第一回收单元406,具体用于:

扫描所述目标系统资源管控组件的页缓存,确定出需要被异步回收的内存页,并针对需要被异步回收的内存页进行异步回收;

响应于检测到操作系统的可用CPU资源不足,将原用于内存回收进程针对需要被异步回收的内存页进行异步回收的CPU资源,调度给所述内存回收进程之外的其他进程。

在本实施例中,所述装置还包括:

第二检测单元,用于如果所述目标系统资源管控组件的页缓存所占用的内存容量未超过所述限制阈值,则检测所述目标系统资源管控组件的父系统资源管控组件的页缓存所占用的内存容量是否超过所述限制阈值;

第二回收单元,用于如果所述父系统资源管控组件的页缓存所占用的内存容量超过所述限制阈值,则按照为所述父系统资源管控组件预先配置的内存回收方式,针对所述父系统资源管控组件的页缓存进行内存回收。

在本实施例中,所述确定单元402,具体用于:

响应于检测到操作系统的可用内存资源不足,从用于针对所述操作系统进行内存资源管理的至少一个系统资源管控组件中,确定出预先配置的需要限制页缓存的目标系统资源管控组件。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例只是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

相关技术
  • 一种分布式系统部署方法、系统、电子设备及存储介质
  • 一种操作系统的预安装方法、系统、电子设备及存储介质
  • 一种日志缓存方法、系统、设备及计算机可读存储介质
  • 一种自动清理缓存文件的方法、存储介质、设备及系统
  • 一种基于H5页面的海报生成方法、系统、装置及存储介质
  • 一种文件系统页缓存回写方法、系统、装置及存储介质
  • 一种文件系统页缓存回写方法、系统、装置及存储介质
技术分类

06120116381060