CN114675959A - 一种内存回收的方法及相关装置 - Google Patents
一种内存回收的方法及相关装置 Download PDFInfo
- Publication number
- CN114675959A CN114675959A CN202011549662.6A CN202011549662A CN114675959A CN 114675959 A CN114675959 A CN 114675959A CN 202011549662 A CN202011549662 A CN 202011549662A CN 114675959 A CN114675959 A CN 114675959A
- Authority
- CN
- China
- Prior art keywords
- page
- memory
- performance
- processes
- recovery
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请公开了一种内存回收方法,可以应用于终端。该方法包括根据各个进程的性能参数计算各个进程的性能稳定系数,该性能稳定系数用于表示进程的性能的稳定状态,然后根据该稳定系数选择目标进程,回收该目标进程的页面。本方案通过选出性能稳定系数较高的目标进程并对该目标进程执行内存回收,能够避免对性能较差的进程进行内存回收,提高进程间性能的均衡性,保证进程的正常运行。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种内存回收的方法及相关装置。
背景技术
在云计算、大数据及机器学习等场景下,计算机的工作负载常常表现为巨大的工作集。巨大的工作集往往需要占用计算机中大量的内存。由于计算机的内存容量有限,在计算机的运行过程中,往往会出现空闲内存的容量无法满足进程的内存分配请求的局面。因此,计算机中的系统会周期性地回收内存,以满足进程的内存分配请求。
目前,现有的内存回收方法仅从系统的角度判断页面的访问热度,并基于页面的访问热度来执行页面的回收。该内存回收方法没有考虑运行中的进程的实时状态,容易给内存敏感型的进程带来严重的性能损失,导致进程间的性能差距较大,影响进程的正常运行。
发明内容
本申请提供了一种内存回收的方法及相关装置,用于提高进程间性能的均衡性,保证进程的正常运行。
本申请第一方面提供一种内存回收方法,该方法可以应用于终端中。该方法包括:终端获取第一进程集合中的进程的性能参数,所述第一进程集合包括终端当前正在运行的N个进程,所述N为大于1的整数,所述性能参数包括页缺失次数、页面换出数和/或页面换入数。其中,页缺失次数是指进程发生页缺失的次数。具体地,当进程试图访问某一个已映射在虚拟地址空间中的页面时,发现该页面并没有加载在内存中则可以称为发生了一次页缺失。页面换出数是指进程在内存中的页面被换出至磁盘的次数,该页面换出数可以包括文件页换出数和/或匿名页换出数。页面换入数是指进程在磁盘中的页面被换入至内存的次数,该页面换入数可以包括文件页换入数和/或匿名页换入数。
终端根据获取到的进程的性能参数计算所述进程的性能稳定系数,所述性能稳定系数用于表示所述进程的性能的稳定状态。由于性能参数是用于指示进程运行过程中的性能信息的参数,基于性能参数可以确定进程当前性能的稳定状态。具体来说,如果相对于上一个周期,进程的页缺失次数变大,则进程的性能越不稳定;如果相对于上一个周期,进程的页缺失次数变小,则进程的性能趋向稳定;如果相对于上一个周期,进程的页缺失次数不变,则进程的性能没有波动。
终端回收所述目标进程在内存中的页面,所述目标进程为所述第一进程集合中性能稳定系数满足第一预设条件的进程。在终端基于进程的性能参数确定进程的性能稳定系数之后,终端可以基于进程的性能稳定系数在第一进程集合中确定需要回收页面的目标进程。具体地,终端可以将第一进程集合中性能稳定系数满足第一预设条件的进程选择为目标进程。简单来说,终端可以选择第一进程集合中性能稳定系数较低的进程作为目标进程,即尽可能选择性能较稳定的进程作为目标进程,以回收性能较为稳定的进程在内存中的页面。
本方案中,终端基于进程的性能参数来计算进程的性能稳定系数,从而选出性能稳定系数较高的目标进程。通过对性能稳定系数较高的目标进程执行内存回收,能够避免对性能较差的进程进行内存回收,提高进程间性能的均衡性,保证进程的正常运行。
在一种可能的实现方式中,所述方法还包括:终端可以按照所述性能稳定系数从小到大的顺序,在所述第一进程集合中选取n个进程作为目标进程。所述n个进程为所述第一进程集合中性能稳定系数满足所述第一预设条件的进程,即第一预设条件为进程是性能稳定系数最小的n个进程中的一个。其中,n的取值可以是预先设定的数值,例如n的取值为3或5等数值;又例如,n的取值为N的50%,即n的取值为第一进程集合中所有进程的数量的50%。
本方案中,终端通过选取性能稳定系数最小的n个进程作为回收页面的目标进程,能够实现对性能最稳定的n个进程进行页面回收,避免对性能较差的进程进行内存回收,提高进程间性能的均衡性,保证进程的正常运行。
在一种可能的实现方式中,所述方法还包括:终端在第一进程集合中选取性能稳定系数小于第一阈值的进程作为目标进程。所述性能稳定系数小于第一阈值的进程为所述第一进程集合中性能稳定系数满足所述第一预设条件的进程,即第一预设条件为进程的性能稳定系数小于第一阈值。其中,第一阈值为预先设定的阈值,第一阈值例如可以为0.8或1等数值。
本方案中,终端通过选取性能稳定系数小于特定阈值的进程作为回收页面的目标进程,能够对性能稳定程度达标的进程进行页面回收,避免对性能较差的进程进行内存回收,提高进程间性能的均衡性,保证进程的正常运行。
在一种可能的实现方式中,所述终端获取第一进程集合中的进程的性能参数之前,所述方法还包括:终端获取第二进程集合中的进程的内存占用量,所述第二进程集合包括M个进程,所述M为大于N的整数。终端按照所述内存占用量从大到小的顺序,在所述第二进程集合中选取N个进程,得到所述第一进程集合。简单来说,终端可以在正在运行的进程中选取内存占用量较大的多个进程作为第一进程集合中的进程,以执行后续的内存回收流程。
本方案中,终端通过选取内存占用量较大的进程来执行页面回收,基于少量的进程即可回收得到较多的空间内存,避免对大量内存占用量较小的进程执行页面回收,有效地提高了内存回收效率。
在一种可能的实现方式中,所述终端根据所述进程的性能参数计算所述进程的性能稳定系数,包括:终端根据所述进程在第一周期的页缺失次数以及第二周期的页缺失次数,计算第一稳定系数,所述第二周期为所述第一周期的上一个周期,且所述第二周期与所述第一周期的周期长度相同。终端根据所述进程的匿名页换出数和匿名页换入数,计算第二稳定系数。终端根据所述第一稳定系数和所述第二稳定系数,计算所述进程的性能稳定系数。
本方案中,终端基于进程运行的实时指标,即页缺失次数、匿名页换出数和匿名页换入数,评估进程在某一阶段内的性能,从而指导进程的内存回收,提高进程间性能的均衡性,保证进程的正常运行。
在一种可能的实现方式中,所述方法还包括:终端计算目标进程的页面回收量。所述终端回收所述目标进程在内存中的页面,包括:终端根据所述页面回收量,回收所述目标进程在内存中的页面。
本方案中,通过预先计算目标进程的页面回收量,能够基于目标进程的性能来实现页面的针对性回收,避免目标进程的页面回收过多,而导致目标进程的性能下降严重。
在一种可能的实现方式中,所述终端计算目标进程的页面回收量,包括:终端获取所述目标进程在内存中的非活跃的文件页总量和非活跃的匿名页总量。终端根据所述非活跃的文件页总量、回收系数、所述进程在第一周期的页缺失次数以及第二周期的页缺失次数,计算所述目标进程的文件页回收量。终端根据所述非活跃的匿名页总量、所述回收系数、所述进程的匿名页换出数和匿名页换入数,计算所述目标进程的匿名页回收量。终端根据所述文件页回收量和所述匿名页回收量,回收所述目标进程在内存中的文件页和匿名页。
本方案中,通过感知进程匿名页和文件页的敏感程度,来确定匿名页和文件页的回收权重,并差异化回收目标进程的匿名页和文件页,能够解决由于匿名页和文件页回收不准确而导致系统内存紧张的问题,并且保证文件页和匿名页的合理化回收。
在一种可能的实现方式中,在终端回收所述目标进程在内存中的页面之后,所述方法还包括:终端重新计算所述目标进程的性能稳定系数。若所述目标进程的性能稳定系数满足第二预设条件,则终端调整回收系数,以调整所述目标进程的页面回收量。若所述目标进程的性能稳定系数不满足第二预设条件,则终端停止回收所述目标进程在内存中的页面。
本方案中,在对进程执行页面回收后,基于进程的性能变化情况,反馈地调整对进程的页面回收策略,避免进程的性能下降过于严重,提高进程间性能的均衡性,保证进程的正常运行。
在一种可能的实现方式中,所述第二预设条件包括所述目标进程的性能稳定系数仍满足所述第一预设条件、所述目标进程的性能稳定系数小于第二阈值、所述目标进程的性能稳定系数的增长率小于第三阈值和/或所述目标进程的回收次数小于第四阈值。
本方案中,通过多维度来确定目标进程的性能变化情况,能够有效评估目标进程在执行页面回收后的性能变化情况,提高了方案的灵活性。
在一种可能的实现方式中,所述终端调整回收系数,包括:若所述目标进程的性能稳定系数的增加量小于第五阈值,则终端减小所述回收系数,以增加所述目标进程的页面回收量。若所述目标进程的性能稳定系数的增加量大于或等于所述第五阈值,则终端增大所述回收系数,以减少所述目标进程的页面回收量。
本方案中,通过基于目标进程的性能变化情况,反馈性地调整目标进程的页面回收量,从而实现准确地回收目标进程的页面,避免进程的性能下降过于严重,提高进程间性能的均衡性,保证进程的正常运行。
本申请第二方面提供一种终端,包括:获取单元和处理单元。所述获取单元,用于获取第一进程集合中的进程的性能参数,所述第一进程集合包括N个进程,所述N为大于1的整数,所述性能参数包括页缺失次数、页面换出数和/或页面换入数。所述处理单元,用于根据所述进程的性能参数计算所述进程的性能稳定系数,所述性能稳定系数用于表示所述进程的性能的稳定状态。所述处理单元,还用于回收所述目标进程在内存中的页面,所述目标进程为所述第一进程集合中性能稳定系数满足第一预设条件的进程。
在一种可能的实现方式中,所述处理单元,还用于按照所述性能稳定系数从小到大的顺序,在所述第一进程集合中选取n个进程作为目标进程,所述n为小于所述N的整数,所述n个进程为所述第一进程集合中性能稳定系数满足所述第一预设条件的进程。
在一种可能的实现方式中,所述处理单元,还用于在第一进程集合中选取性能稳定系数小于第一阈值的进程作为目标进程,所述性能稳定系数小于第一阈值的进程为所述第一进程集合中性能稳定系数满足所述第一预设条件的进程。
在一种可能的实现方式中,所述获取单元,还用于获取第二进程集合中的进程的内存占用量,所述第二进程集合包括M个进程,所述M为大于N的整数;所述处理单元,还用于按照所述内存占用量从大到小的顺序,在所述第二进程集合中选取N个进程,得到所述第一进程集合。
在一种可能的实现方式中,所述处理单元,还用于根据所述进程在第一周期的页缺失次数以及第二周期的页缺失次数,计算第一稳定系数,所述第二周期为所述第一周期的上一个周期,且所述第二周期与所述第一周期的周期长度相同;所述处理单元,还用于根据所述进程的匿名页换出数和匿名页换入数,计算第二稳定系数;所述处理单元,还用于根据所述第一稳定系数和所述第二稳定系数,计算所述进程的性能稳定系数。
在一种可能的实现方式中,所述处理单元,还用于计算目标进程的页面回收量;所述处理单元,还用于根据所述页面回收量,回收所述目标进程在内存中的页面。
在一种可能的实现方式中,所述获取单元,还用于获取所述目标进程在内存中的非活跃的文件页总量和非活跃的匿名页总量;所述处理单元,还用于根据所述非活跃的文件页总量、回收系数、所述进程在第一周期的页缺失次数以及第二周期的页缺失次数,计算所述目标进程的文件页回收量;所述处理单元,还用于根据所述非活跃的匿名页总量、所述回收系数、所述进程的匿名页换出数和匿名页换入数,计算所述目标进程的匿名页回收量;所述处理单元,还用于根据所述文件页回收量和所述匿名页回收量,回收所述目标进程在内存中的文件页和匿名页。
在一种可能的实现方式中,所述处理单元,还用于重新计算所述目标进程的性能稳定系数;所述处理单元,还用于若所述目标进程的性能稳定系数满足第二预设条件,则调整回收系数,以调整所述目标进程的页面回收量;所述处理单元,还用于若所述目标进程的性能稳定系数不满足第二预设条件,则停止回收所述目标进程在内存中的页面。
在一种可能的实现方式中,所述第二预设条件包括所述目标进程的性能稳定系数仍满足所述第一预设条件、所述目标进程的性能稳定系数小于第二阈值、所述目标进程的性能稳定系数的增长率小于第三阈值和/或所述目标进程的回收次数小于第四阈值。
在一种可能的实现方式中,所述处理单元,还用于若所述目标进程的性能稳定系数的增加量小于第五阈值,则减小所述回收系数,以增加所述目标进程的页面回收量;所述处理单元,还用于若所述目标进程的性能稳定系数的增加量大于或等于所述第五阈值,则增大所述回收系数,以减少所述目标进程的页面回收量。
本申请第三方面提供一种终端,该终端包括:处理器、非易失性存储器和易失性存储器;其中,非易失性存储器或易失性存储器中存储有计算机可读指令;处理器读取计算机可读指令以使终端实现如第一方面任意一种实现方式的方法。
本申请第四方面提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行如第一方面任意一种实现方式的方法。
本申请第五方面提供一种计算机程序产品,当其在计算机上运行时,使得计算机执行如第一方面任意一种实现方式的方法。
本申请第六方面提供一种芯片,包括一个或多个处理器。处理器中的部分或全部用于读取并执行存储器中存储的计算机程序,以执行上述任一方面任意可能的实现方式中的方法。
可选地,该芯片该包括存储器,该存储器与该处理器通过电路或电线与存储器连接。可选地,该芯片还包括通信接口,处理器与该通信接口连接。通信接口用于接收需要处理的数据和/或信息,处理器从该通信接口获取该数据和/或信息,并对该数据和/或信息进行处理,并通过该通信接口输出处理结果。该通信接口可以是输入输出接口。本申请提供的方法可以由一个芯片实现,也可以由多个芯片协同实现。
附图说明
图1为本申请实施例提供的一种终端101的结构示意图;
图2为本申请实施例提供的一种内存回收方法200的流程示意图;
图3为本申请实施例提供的在新的周期内回收内存的流程示意图;
图4为本申请实施例提供的一种系统架构的示意图;
图5为本申请实施例提供的一种内存回收方法的实现过程的示意图;
图6为本申请实施例提供的一种内存回收方法600的流程示意图;
图7为本申请实施例提供的4个进程的性能参数结构的示意图;
图8为本申请实施例提供的一种进程的性能稳定系数的示意图;
图9为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存的系统性能对比示意图;
图10为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时已用内存的对比示意图;
图11为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时各进程的运行性能示意图;
图12为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时各进程的已用内存的示意图;
图13为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存的系统性能对比示意图;
图14为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时已用内存的对比示意图;
图15为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时各进程的运行性能示意图;
图16为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时各进程的已用内存的示意图;
图17为本申请实施例提供的一种终端1700的结构示意图;
图18为本申请实施例提供的一种计算机程序产品1800的结构示意图。
具体实施方式
下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。在本申请中出现的对步骤进行的命名或者编号,并不意味着必须按照命名或者编号所指示的时间/逻辑先后顺序执行方法流程中的步骤,已经命名或者编号的流程步骤可以根据要实现的技术目的变更执行次序,只要能达到相同或者相类似的技术效果即可。
在云计算、大数据及机器学习等场景下,计算机的工作负载常常表现为巨大的工作集。巨大的工作集往往需要占用计算机中大量的内存,从而出现了对机器内存过度使用的现象,使得计算机中空闲的内存资源变得尤为紧张。简单来说,由于计算机的内存容量有限,计算机中大量的进程在运行的过程中均需要请求分配内存,从而出现了计算机中空闲内存的容量无法满足进程的内存分配请求的局面。基于此,计算机中的系统会周期性地回收内存,以满足进程的内存分配请求。
然而,计算机中的系统执行内存回收容易给进程带来一些性能上的问题,例如页面颠簸(page thrashing)。其中,页面颠簸是指一种频繁的页面调度行为,其原因是刚丢弃或刚置换出去的页面又要换入内存,且刚刚换入的页面马上就要换出内存。因此,有效地回收非活跃的内存是提高内存利用率和保持进程性能稳定的重要手段。
相关技术中,Linux系统采用内存水位(watermark)机制,来判断内存资源是否已变得紧张,从而触发页面回收。具体而言,Linux系统中内存的每个区域(zone)都拥有独立的三个水位值:最低水位值(watermark_min)、低水位值(watermark_low)和高水位值(watermark_high)。其中,最低水位表示内存已经明显不够用了;低水位表示内存已经开始紧张;高水位则表示内存仍然够用。
具体地,linux系统触发页面回收的方式有两种。
第一种方式是在内存分配阶段发现空闲内存低于最低水位值时,启动直接内存回收(direct reclaim)模式来回收内存。在这种方式下,内存分配的过程会被内存回收的操作所阻塞,增加内存分配的等待时间。页面回收过程中主要的回收对象是匿名页(anonymous page)和文件页(file page)。在匿名页的回收过程中,需要将匿名页换出到swap分区,从而引起速度较慢的输入输出(input/output,I/O)操作。在文件页的回收过程中,如果文件页是脏(dirty)的,也需要将文件页写回磁盘,从而引起速度较慢的I/O操作。也就是说,由于在回收匿名页和文件页的过程中都需要执行慢速的I/O操作,导致内存分配的等待时间较长,影响了进程的正常运行。
第二种方式是系统周期性地启动后台回收(backegroud reclaim)来执行内存的回收。具体地,系统在空闲内存低于低水位值时,唤醒内核线程kswapd扫描各个zone,以执行内存回收。
由此可知,上述两种方式的触发时机都是由系统内存的水位值决定的。而这两种方式下的内存回收都依赖于相同的内存回收策略。其中,内存回收策略使用一种最近最少使用(Least Recently Used,LRU)算法来执行内存中的页面的回收。
LRU算法的原理是回收最近一段时间最少使用的页面,即回收访问不频繁的页面。其中,访问不频繁的页面是指从处理器的角度出发,判断页面是否在前一段时间被访问过。如果页面长时间没有被访问过,则认为该页面的访问热度较低,该页面为访问不频繁的页面;如果页面短时间内被访问过,则认为该页面的访问热度较高,该页面为访问频繁的页面。
也就是说,相关技术中的内存回收策略是基于页面的访问热度来进行页面的回收。回收过程不考虑进程的实时状态,无差别地回收访问热度低的页面。基于页面访问热度的回收方式无法识别回收页面对性能的影响程度,即无法识别回收哪些进程的冷页面对进程的性能影响最小。
例如,某些进程在内存中的页面的访问热度较低,但是这些进程对于页面回收的敏感程度较大,如果回收该进程在内存中的页面,容易导致该进程的性能波动较大。又例如,某些进程在内存中的页面的访问热度较高,但是这些进程对于页面回收的敏感程度较小,回收该进程在内存中的页面,不会对该进程的性能产生太大的影响。
由于内存的使用差异,内存对于进程的重要程度不同,基于页面的访问热度来回收进程在内存中的页面,容易给内存敏感型的进程带来严重的性能损失,导致进程间的性能差距较大,影响进程的正常运行。
有鉴于此,本申请实施例提供了一种内存回收方法,该方法可以应用于终端中。基于进程的性能参数来计算进程的性能稳定系数,从而选出性能稳定系数较高的目标进程。通过对性能稳定系数较高的目标进程执行内存回收,能够避免对性能较差的进程进行内存回收,提高进程间性能的均衡性,保证进程的正常运行。
本申请实施例所涉及的终端可以为具有内存且终端中的进程的运行依赖于内存的设备。示例性地,该终端例如可以是个人电脑(personal computer,PC)、笔记本电脑、服务器、手机(mobile phone)、平板电脑、移动互联网设备(mobile internet device,MID)、可穿戴设备,虚拟现实(virtual reality,VR)设备、增强现实(augmented reality,AR)设备、工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程手术(remote medical surgery)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端等。该终端可以是运行安卓系统、IOS系统、windows系统以及其他系统的设备。
可以参阅图1,图1为本申请实施例提供的一种终端101的结构示意图。如图1所示,终端101包括处理器103,处理器103和系统总线105耦合。处理器103可以是一个或者多个处理器,其中每个处理器都可以包括一个或多个处理器核。显示适配器(video adapter)107,显示适配器可以驱动显示器109,显示器109和系统总线105耦合。系统总线105通过总线桥111和输入输出(I/O)总线耦合。I/O接口115和I/O总线耦合。I/O接口115和多种I/O设备进行通信,比如输入设备117(如:触摸屏等),多媒体盘(media tray)121,(例如,只读光盘(compact disc read-only memory,CD-ROM),多媒体接口等)。收发器123(可以发送和/或接收无线电通信信号),摄像头155(可以捕捉静态和动态数字视频图像)和外部USB端口125。其中,可选地,和I/O接口115相连接的接口可以是USB接口。
其中,处理器103可以是任何传统处理器,包括精简指令集计算(reducedinstruction set Computing,RISC)处理器、复杂指令集计算(complex instruction setcomputing,CISC)处理器或上述的组合。可选地,处理器可以是诸如ASIC的专用装置。
终端101可以通过网络接口129和软件部署服务器149通信。示例性的,网络接口129是硬件网络接口,比如,网卡。网络127可以是外部网络,比如因特网,也可以是内部网络,比如以太网或者虚拟私人网络(virtual private network,VPN)。可选地,网络127还可以是无线网络,比如WiFi网络,蜂窝网络等。
硬盘驱动器接口131和系统总线105耦合。硬件驱动接口和硬盘驱动器133相连接。系统内存135和系统总线105耦合。运行在系统内存135的数据可以包括终端101的操作系统(OS)137、应用程序143和调度表。
操作系统包括Shell 139和内核(kernel)141。Shell 139是介于使用者和操作系统的内核间的一个接口。shell是操作系统最外面的一层。shell管理使用者与操作系统之间的交互:等待使用者的输入,向操作系统解释使用者的输入,并且处理各种各样的操作系统的输出结果。
内核141由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。内核141直接与硬件交互,操作系统内核通常运行进程,并提供进程间的通信,提供CPU时间片管理、中断、内存管理和IO管理等等。
示例性地,在终端101为服务器的情况下,应用程序143包括云计算相关的程序。在一个实施例中,在需要执行应用程序143时,终端101可以从软件部署服务器149下载应用程序143。在一个实施例中,在终端101从软件部署服务器149下载应用程序143时,终端101也可以从软件部署服务器149下载与该应用程序143对应的调度表。
为了便于理解,以下将对本申请实施例所涉及的部分技术术语进行介绍。
匿名页,是指没有文件背景的页面,例如堆、栈、数据段等。匿名页不是以文件形式存在,无法和磁盘文件交换。通过在磁盘上划分额外的swap分区,可以将不活跃的匿名页交换到磁盘中,缓解内存紧张。其中,swap分区是系统在磁盘上开辟的一块存储空间,能够用作内存的缓存。
文件页,是指有文件背景的页面。文件页是程序读取文件后在内存产生的缓存,一般也叫文件缓存。
页缺失(Page fault)又名缺页中断、页故障等,指的是当软件试图访问已映射在虚拟地址空间中,但是并未被加载在物理内存中的一个分页时,由处理器的内存管理单元所发出的中断。
内存回收是指系统在保证应用的数据不丢失的前提下,回收进程在内存中的页面。页面回收的方式通常包括三种,分别为:页回写、页交换和页丢弃。
页回写是指如果回收的页面为文件页,则将该文件页写回至磁盘中该文件页对应的位置。
页交换是指如果回收的页面为匿名页,则将该匿名页交换到swap分区,在该匿名页再次被访问时,再从swap分区交换回内存中。
页丢弃是指如果回收的页面为文件页,但该文件页对应的文件内容在内存中是不能被修改的,则可以将该文件页丢弃。
可以参阅图2,图2为本申请实施例提供的一种内存回收方法200的流程示意图。如图2所示,该方法200包括以下的步骤201-203。
步骤201,获取第一进程集合中的进程的性能参数,所述第一进程集合包括N个进程,所述N为大于1的整数,所述性能参数包括页缺失次数、页面换出数和/或页面换入数。
本实施例中,第一进程集合中包括N个进程,该N个进程为终端当前正在运行的进程。性能参数是用于指示进程运行过程中的性能信息的参数,性能参数包括进程的页缺失次数、页面换出数和/或页面换入数。其中,页缺失次数是指进程发生页缺失的次数。具体地,当进程试图访问某一个已映射在虚拟地址空间中的页面时,发现该页面并没有加载在内存中则可以称为发生了一次页缺失。页面换出数是指进程在内存中的页面被换出至磁盘的次数,该页面换出数可以包括文件页换出数和/或匿名页换出数。页面换入数是指进程在磁盘中的页面被换入至内存的次数,该页面换入数可以包括文件页换入数和/或匿名页换入数。
可选的,在终端周期性地执行内存回收的情况下,终端可以获取第一进程集合中的进程在一个周期内的性能参数,即获取第一进程集合中的进程在一个周期内的页缺失次数、页面换出数和/或页面换入数。其中,终端执行内存回收的一个周期的时间长度例如可以为10毫秒、20毫秒或50毫秒等,即终端可以是每隔50毫秒则获取第一进程集合中的进程在这50毫秒内的性能参数。在实际应用中,终端执行内存回收的周期的时间长度可以根据终端的处理能力以及终端的内存大小来进行调整,本实施例并不对终端执行内存回收的周期的时间长度做具体限定。
在终端处理能力较强的情况下,在终端中可能同时运行有大量的进程,不同的进程所占用的内存大小也不一样。例如,一些进程可能占用了大部分的内存(如占用了80%的内存),另一些进程则可能只占用了很小一部分的内存(如只占用了1%的内存)。在这种情况下,对于占用了大部分内存的进程,只需要回收这些进程所占用的一部分内存,即可获得较多的空闲内存。对于只占用了很小一部分内存的进程,即便是将这些进程所占用的所有内存回收了,也只能够获得较少的空闲内存。
因此,在一个可能的实施例中,终端可以在正在运行的进程中选取内存占用量较大的多个进程作为第一进程集合中的进程,以执行后续的内存回收流程。
示例性地,终端获取第二进程集合中的进程的内存占用量,所述第二进程集合包括M个进程,所述M为大于N的整数。例如,第二进程集合中所包括的M个进程可以为终端上当前正在运行的所有进程。终端按照内存占用量从大到小的顺序,在所述第二进程集合中选取N个进程,得到所述第一进程集合。
例如,假设第二进程集合中包括10个进程,N的取值为5,终端可以获取第二进程集合中所包括的10个进程的内存占用量,并且按照内存占用量从大到小的顺序,依次对着10个进程进行排序,内存占用量越大的进程越靠前。基于N的取值为5,终端在排序好的10个进程中,选取排序靠前的5个进程,以得到第一进程集合。
其中,N的取值可以是预先设定的数值,例如N的取值为5、10或15等数值;又例如,N的取值为M的20%,即N的取值为当前正在运行的所有进程的数量的20%。在实际应用中,N的取值可以根据终端中的内存大小以及期望的内存回收率来调整,本实施例不对N的取值做具体限定。
步骤202,根据所述进程的性能参数计算所述进程的性能稳定系数,所述性能稳定系数用于表示所述进程的性能的稳定状态。
可以理解的是,由于性能参数是用于指示进程运行过程中的性能信息的参数,基于性能参数可以确定进程当前性能的稳定状态。具体来说,如果相对于上一个周期,进程的页缺失次数变大,则进程的性能越不稳定;如果相对于上一个周期,进程的页缺失次数变小,则进程的性能趋向稳定;如果相对于上一个周期,进程的页缺失次数不变,则进程的性能没有波动。此外,如果进程的页换出数远大于进程的页换入数,则代表进程所占用的内存不足,进程的性能并不稳定;如果进程的页换出数与进程的页换入数接近,则代表进程的页面发生了页面颠簸的现象,进程的性能极度不稳定;如果进程的页换出数接近0时,则代表进程所占用的内存较为充裕,进程的性能极为稳定。
在一个可能的实施例中,终端根据所述进程的性能参数计算所述进程的性能稳定系数,具体包括:终端根据所述进程在第一周期的页缺失次数以及第二周期的页缺失次数,计算第一稳定系数,其中所述第二周期为所述第一周期的上一个周期,且所述第二周期与所述第一周期的周期长度相同。即,终端基于进程当前周期的页缺失次数相对于上一周期的页缺失次数的变化情况来确定第一稳定系数。终端根据所述进程的匿名页换出数和匿名页换入数,计算第二稳定系数。即,终端基于进程的匿名页换出数与匿名页换入数之间的相对大小关系,来确定第二稳定系数。最后,终端根据所述第一稳定系数和所述第二稳定系数,计算所述进程的性能稳定系数。
可以理解的是,页缺失次数包括了文件页和匿名页的总缺失次数,即体现了文件页和匿名页总的页面换入情况。并且,由于文件页的换出数对于进程性能的影响并不大,因此可以不基于文件页的换出数来确定进程的性能稳定系数,即进程的性能稳定系数不基于文件页的换出数来体现。那么,基于匿名页的换入数、匿名页的换出数以及文件页和匿名页的总缺失次数所确定的进程的性能稳定系数,则能够有效地表示进程的性能稳定状态。
示例性地,终端可以根据进程的性能参数,通过公式1来计算进程的性能稳定系数。
具体地,公式1如下所示。
其中,Ri表示进程i的性能稳定系数,Ri越小,进程i的性能越稳定,Ri越大,进程i的性能越不稳定。表示第一稳定系数;表示第二稳定系数;RFi表示进程在第一周期的页缺失次数;PREV_PEi表示进程在第二周期的页缺失次数;所述第二周期为所述第一周期的上一个周期,且所述第二周期与所述第一周期的周期长度相同;SIi表示匿名页换入数;SOi表示匿名页换出数;a表示第一系数;b表示第二系数。具体地,第一系数a用于保证第一稳定系数中的分母不为0,第二系数b用于保证第二稳定系数中的分母不为0。第一系数a的取值例如可以为1,第二系数b的取值例如也可以为1,本实施例不对第一系数和第二系数的取值做具体限定。
由公式1可以看出,如果第一周期的页缺失次数PFi相对于第二周期的页缺失次数PREV_PEi变大,则第一稳定系数也越大,即进程的性能越不稳定。如果第一周期的页缺失次数PFi相对于第二周期的页缺失次数PREV_PFi变小,则第一稳定系数也越小,即进程的性能趋向稳定。如果第一周期的页缺失次数PFi相对于第二周期的页缺失次数PREV_PFi没变,则第一稳定系数为一相对固定的值,进程的性能没有波动。
此外,如果进程的页换出数SOi远大于进程的页换入数SIi,则代表进程所占用的内存不足,第二稳定系数较大,进程的性能并不稳定。如果进程的页换出数SOi与进程的页换入数SIi接近,则代表进程的页面发生了页面颠簸的现象,第二稳定系数接近最大值,进程的性能极度不稳定。如果进程的页换出数SOi接近0时,则代表进程所占用的内存较为充裕,第二稳定系数接近0,进程的性能极为稳定。
步骤203,回收所述目标进程在内存中的页面,所述目标进程为所述第一进程集合中性能稳定系数满足第一预设条件的进程。
本实施例中,在终端基于进程的性能参数确定进程的性能稳定系数之后,终端可以基于进程的性能稳定系数在第一进程集合中确定需要回收页面的目标进程。具体地,终端可以将第一进程集合中性能稳定系数满足第一预设条件的进程选择为目标进程。简单来说,终端可以选择第一进程集合中性能稳定系数较低的进程作为目标进程,即尽可能选择性能较稳定的进程作为目标进程,以回收性能较为稳定的进程在内存中的页面。
在一个可能的实施例中,终端可以按照所述性能稳定系数从小到大的顺序,在所述第一进程集合中选取n个进程作为目标进程。所述n个进程为所述第一进程集合中性能稳定系数满足所述第一预设条件的进程,即第一预设条件为进程是性能稳定系数最小的n个进程中的一个。其中,n的取值可以是预先设定的数值,例如n的取值为3或5等数值;又例如,n的取值为N的50%,即n的取值为第一进程集合中所有进程的数量的50%。在实际应用中,n的取值同样可以根据终端中的内存大小以及期望的内存回收率来调整,本实施例不对n的取值做具体限定。
简单来说,目标进程的个数是固定的。终端基于第一进程集合中的N个进程的性能稳定系数,对N个进程进行排序,性能稳定系数越小的进程则排序越靠前。然后,终端在N个进程中选取排序最靠前的n个进程作为目标进程。
例如,假设N为5,n为3,即第一进程集合中包括有{A1,A2,A3,A4,A5}这5个进程。终端计算得到{A1,A2,A3,A4,A5}这5个进程的性能稳定系数分别为{0.92,0.84,0.71,0.76,0.85}。然后,终端按照从小到达的顺序对这5个进程的性能稳定系数进行排序,得到:0.71<0.76<0.84<0.85<0.92。基于此,终端选择排序最前的3个进程作为目标进程,即性能稳定系数为0.11的进程A3、性能稳定系数为0.16的进程A4以及性能稳定系数为0.24的进程A2。
在另一个可能的实施例中,终端在第一进程集合中选取性能稳定系数小于第一阈值的进程作为目标进程。所述性能稳定系数小于第一阈值的进程为所述第一进程集合中性能稳定系数满足所述第一预设条件的进程,即第一预设条件为进程的性能稳定系数小于第一阈值。其中,第一阈值为预先设定的阈值,第一阈值例如可以为0.8或1等数值。在实际应用中,第一阈值的大小可以根据终端中的内存大小以及期望的内存回收率来调整,本实施例不对n的取值做具体限定。
简单来说,目标进程的个数是不固定的。对于第一进程集合中的N个进程来说,只要进程的性能稳定系数小于第一阈值,终端则可以将该进程确定为目标进程。
例如,假设N为5,n为3,第一阈值为0.8,即第一进程集合中包括有{A1,A2,A3,A4,A5}这5个进程。终端计算得到{A1,A2,A3,A4,A5}这5个进程的性能稳定系数分别为{0.92,0.84,0.71,0.76,0.85}。基于性能稳定系数小于0.8的条件,终端可以确定性能稳定系数为0.71的进程A3和性能稳定系数为0.76的进程A4为目标进程。
本实施例中,终端基于进程的性能参数来计算进程的性能稳定系数,从而选出性能稳定系数较高的目标进程。通过对性能稳定系数较高的目标进程执行内存回收,能够避免对性能较差的进程进行内存回收,提高进程间性能的均衡性,保证进程的正常运行。
在一个可能的实施例中,终端可以周期性地执行上述的内存回收方法200,即在每个周期内终端都重复执行上述的步骤201-203。也就是说,在每个周期内,终端都获取第一进程集合中的进程在本周期内的性能参数,并且基于进程的性能参数计算进程的性能稳定系数,从而回收性能稳定系数满足第一预设条件的进程的页面。通过周期性地执行上述的内存回收方法200,终端能够持续回收各个周期内性能最为稳定的一个或多个进程的页面,避免由于持续回收某进程的页面而导致该进程的性能下降严重,从而保证了全局进程的性能均衡性。
在一个可能的实施例中,在终端回收所述目标进程在内存中的页面之前,终端还可以计算目标进程的页面回收量。在得到目标进程的页面回收量之后,终端再根据所述页面回收量,回收所述目标进程在内存中的页面。
可以理解的是,由于终端所确定的多个目标进程的性能稳定状态以及非活跃的页面的数量并非是相同的,因此终端可以有差别地回收多个目标进程的页面。例如,对于性能越稳定的目标进程,终端回收该目标进程的页面也越多;对于在内存中存在越多非活跃的页面的目标进程,终端回收该目标进程的页面也越多。
可选的,终端计算目标进程的页面回收量,具体可以包括以下步骤S1-S3。
步骤S1,终端获取所述目标进程在内存中的非活跃的文件页总量和非活跃的匿名页总量。
具体地,在终端中可以运行有内核预回收(kpreclaimed)线程,kpreclaimed线程对内存中页面进行扫描,以得到各个线程在内存中的非活跃的文件页以及非活跃的匿名页。一般来说,对于内存中的页面,系统可以建立页面对应的队列或链表。
以队列为例,通过建立页面对应的队列,可以根据页面的访问时间对页面进行排序,得到由内存中的所有页面所构成的队列。在该队列中,如果页面的访问时间距离当前时刻越近,即距离访问该页面的时间越近,则该页面在队列中的顺序越靠前;如果页面的访问时间距离当前时刻越远,即距离访问该页面的时间越久,则该页面在队列中的顺序越靠后。那么,对于在队列中排序靠后的页面(例如在队列中排序靠后的10%或20%的页面),则可以认为这些页面为非活跃的页面,从而得到非活跃的文件页以及非活跃的匿名页。可选的,文件页和匿名页可以是在同一个队列中,文件页和匿名页也可以是不同的队列中。例如,假设队列中排序最靠后的20%的页面为非活跃页面,且当前队列中有1000个页面,则终端可以确定队列中排序最靠后的100个页面为非活跃页面。
以链表为例,系统可以通过建立LRU链表来确定页面的活跃程度。其中,LRU链表是按照页面近期的使用情况排列的,最近最多使用的页面存在于链表的首端,最近最少使用的页面存在于链表的末尾。具体地,LRU链表可以包括INACTIVE_ANON、ACTIVE_ANON、INACTIVE_FILE和ACTIVE_FILE这4个链表,且这4个链表中的物理页是可以回收的。其中,ANON代表匿名页,FILE代表文件页,INACTIVE代表处于非活动状态,ACTIVE代表处于活动状态,ACTIVE链表中的物理页的活跃度高于INACTIVE链表中的物理页。也就是说,处于活动状态的物理页,它的活跃度高于处于非活动状态的物理页。一般来说,当内存不足时,系统会优先对LRU链表中的INACTIVE_ANON和INACTIVE_FILE这两个链表中的物理页进行回收,当进程需要使用回收的物理页上的内容时,需要从磁盘中加载相应的物理页。
此外,在终端周期性地执行上述的方法200来回收内存的情况下,如果终端已经回收过目标进程的页面,则终端可以基于目标进程在上一个周期的非活跃的文件页总量以及上一个周期所回收的文件页数量,来计算得到目标进程对应的非活跃文件页总量(即使用上一个周期的非活跃的文件页总量减去上一个周期所回收的文件页数量)。类似地,如果终端已经回收过目标进程的页面,则终端可以基于目标进程在上一个周期的非活跃的匿名页总量以及上一个周期所回收的匿名页数量来计算得到目标进程对应的非活跃匿名页总量。
步骤S2,根据所述非活跃的文件页总量、回收系数、所述进程在第一周期的页缺失次数以及第二周期的页缺失次数,终端计算所述目标进程的文件页回收量。
示例性地,终端可以通过公式2来计算目标进程的文件页回收量。具体地,公式2如下所示。
其中,IAFi表示文件页回收量;INFCi表示非活跃的文件页总量;SIi表示匿名页换入数;SOi表示匿名页换出数;αi表示回收系数,αi的取值例如可以为5。由公式2可以看出,回收系数αi越大,则文件页回收量IANi越小;回收系数αi越小,则文件页回收量IANi越大。
步骤S3,根据所述非活跃的匿名页总量、所述回收系数、所述进程的匿名页换出数和匿名页换入数,终端计算所述目标进程的匿名页回收量。
示例性地,终端可以通过公式3来计算目标进程的匿名页回收量。具体地,公式3如下所示。
其中,IANi表示匿名页回收量;INACi表示非活跃的匿名页总量;PFi表示进程在第一周期的页缺失次数;PREV_PFi表示进程在第二周期的页缺失次数;αi表示回收系数,αi的取值例如可以为5。由公式3可以看出,回收系数αi越大,则匿名页回收量IANi越小;回收系数αi越小,则匿名页回收量IANi越大。
这样,在回收目标进程的页面时,终端可以根据计算得到的文件页回收量和所述匿名页回收量,回收所述目标进程在内存中的文件页和匿名页。
在一个可能的实施例中,在终端周期性地回收内存的情况下,在回收所述目标进程在内存中的页面之后,终端可以继续计算上一周期的目标进程的性能稳定系数。如果目标进程的性能稳定系数变化不大,即该目标进程的性能未有太大损失,则可以加大页面回收的力度,再次回收该目标进程的页面。如果目标进程的性能稳定系数变化较大,即该目标进程的性能损失太大,则可以减小页面回收的力度或者是停止回收该目标进程的页面。
具体地,终端在回收所述目标进程在内存中的页面之后,在新的周期内,终端可以重新执行上述的步骤201-202,以确定得到新的周期内的目标进程。对于新的周期内的目标进程来说,如果该目标进程在上一个周期也被确定为目标进程且执行了页面的回收,则终端可以判断该目标进程是否满足第二预设条件,从而调整回收系数并继续回收该目标进程的页面或者停止回收该目标进程的页面。如果新的周期内的目标进程在上一个周期没有被确定为目标进程,则终端可以通过执行上述的步骤203来回收该目标进程在内存中的页面。
示例性地,可以参阅图3,图3为本申请实施例提供的在新的周期内回收内存的流程示意图。
步骤301,终端确定新的周期内的目标进程。
在新的周期内,终端可以重新获取第一进程集合,并且获取第一进程集合中的进程的性能参数。然后,终端基于新的周期内第一进程集合中的进程的性能参数计算这些进程的性能稳定参数,并且基于这些进程的性能稳定系数确定新的周期内的目标进程。具体地,终端获取新的周期内的第一进程集合中的进程的性能参数的方式与步骤201类似,具体可以参考上述的步骤201,在此不再赘述。终端基于新的周期内第一进程集合中的进程的性能参数确定新的周期内的目标进程的方式与步骤202类似,具体可以参考上述的步骤202,在此同样不再赘述。
步骤302,终端判断新的周期内所确定的目标进程在上一个周期是否也被确定为目标进程。
由于终端在上一个周期回收了上一个周期所确定的目标进程的页面,因此这些目标进程的性能稳定系数在新的周期内可能发生了变化。在上一个周期所确定的目标进程的性能在新的周期内下降得比较多时,这些目标进程在新的周期内可能不再满足第一预设条件,从而在新的周期内不再被确定为目标进程;在上一个周期所确定的目标进程的性能在新的周期内下降得比较少时,这些目标进程在新的周期内可能仍然满足第一预设条件,从而在新的周期内继续被确定为目标进程。对于新的周期内仍然被确定为目标进程的进程,终端可以基于该进程的性能稳定系数变化情况,调整该进程的页面回收力度,以实现基于性能稳定系数的反馈动态调节进程的页面回收量。
基于此,终端可以判断新的周期内所确定的目标进程在上一个周期是否同样被确定为目标进程,即判断新的周期内所确定的目标进程是否连续两个周期都被确定为目标进程。
步骤303,如果新的周期内所确定的目标进程在上一个周期没有被确定为目标进程,则终端计算新的周期内所确定的目标进程的页面回收量并回收该目标进程在内存中的页面。
本实施例中,如果新的周期内所确定的目标进程在上一个周期没有被确定为目标进程,则可以认为该目标进程是新的周期内新确定的目标进程,无需调整该目标进程的页面回收力度。因此,终端可以按照预先设定的回收系数,计算新的周期内所确定的目标进程的页面回收量并回收该目标进程在内存中的页面。其中,终端计算新的周期内所确定的目标进程的页面回收量并回收该目标进程在内存中的页面的过程与上述的步骤203类似,具体可以参考上述的步骤203,在此不再赘述。
步骤304,如果新的周期内所确定的目标进程在上一个周期已被确定为目标进程,则终端判断新的周期内所确定的目标进程的性能稳定系数是否满足第二预设条件。
示例性地,第二预设条件包括所述目标进程的性能稳定系数仍满足所述第一预设条件、所述目标进程的性能稳定系数小于第二阈值、所述目标进程的性能稳定系数的增长率小于第三阈值和/或所述目标进程的回收次数小于第四阈值。其中,第二阈值例如可以为1.5,第三阈值例如可以为1.6,第四阈值例如可以为4,在实际应用中可以根据终端的内存大小和期望的内存回收率来调整第二阈值、第三阈值和第四阈值,本实施例不对第二阈值、第三阈值和第四阈值的取值做具体限定。
步骤305,如果新的周期内所确定的目标进程的性能稳定系数满足第二预设条件,则终端判断该目标进程的性能稳定系数的增加量是否小于第五阈值。
如果新的周期内所确定的目标进程的性能稳定系数满足第二预设条件,则可以认为该目标进程的性能下降得并不多,该目标进程仍然处于性能较为稳定的状态。因此,终端可以进一步确定目标进程的性能变化情况,以确定如何调整该目标进程的页面回收量。
具体来说,终端可以通过判断该目标进程的性能稳定系数的增加量是否小于第五阈值来调整目标进程对应的回收系数,以调整所述目标进程的页面回收量。其中,第五阈值的取值例如可以为0.5,在实际应用中可以根据终端的内存大小和期望的内存回收率来调整第五阈值,本实施例不对第五阈值的取值做具体限定。
此外,终端除了通过判断该目标进程的性能稳定系数的增加量是否小于第五阈值来确定目标进程的性能变化情况之外,终端还可以是通过判断该目标进程在上一个周期的性能稳定系数在第一进程集合中的排序序号以及该目标进程在新的周期的性能稳定系数在第一进程集合中的排序序号的变化情况,来确定目标进程的性能变化情况。如果两个周期对应的性能稳定系数的排序序号之间的差距小于预设的值,即排序序号无明显变化,则可以认为目标进程的性能变化并不明显。
步骤306,如果所述目标进程的性能稳定系数的增加量小于第五阈值,则终端减小所述回收系数,以增加所述目标进程的页面回收量。
简单来说,如果终端确定目标进程的性能稳定系数的增加量小于第五阈值,则可以认为目标进程的性能变化并不明显,即回收该目标进程在内存中的页面对该目标进程的性能的影响比较小,因此可以加大该目标进程的页面回收量。具体地,终端可以减小回收系数,例如将回收系数的值减去1,然后基于以下的公式4计算目标进程的文件页回收量,以及基于公式5计算目标进程的匿名页回收量,并根据计算得到的文件页回收量和匿名页回收量回收该目标进程的文件页和匿名页。
具体地,公式4如下所示。
其中,IAFi表示文件页回收量;INFCi表示非活跃的文件页总量;prev_IAFi表示目标进程上一个周期的文件页回收量;SIi表示匿名页换入数;SOi表示匿名页换出数;αi表示回收系数,αi的取值例如可以为4。
具体地,公式5如下所示。
其中,IANi表示匿名页回收量;INACi表示非活跃的匿名页总量;prev_IANi表示目标进程上一个周期的匿名页回收量;PFi表示进程在第一周期的页缺失次数;PREV_PFi表示进程在第二周期的页缺失次数;αi表示回收系数,αi的取值例如可以为4。
步骤307,如果所述目标进程的性能稳定系数的增加量大于或等于所述第五阈值,则终端增大所述回收系数,以减少所述目标进程的页面回收量。
简单来说,如果终端确定目标进程的性能稳定系数的增加量大于或等于第五阈值,则可以认为目标进程的性能变化较为明显,即回收该目标进程在内存中的页面对该目标进程的性能的影响比较大,因此可以减小该目标进程的页面回收量。具体地,终端可以增大回收系数,例如将回收系数的值加1,然后基于上述的公式4计算目标进程的文件页回收量,以及基于上述的公式5计算目标进程的匿名页回收量,并根据计算得到的文件页回收量和匿名页回收量回收该目标进程的文件页和匿名页。
步骤308,如果新的周期内所确定的目标进程的性能稳定系数不满足第二预设条件,则终端停止回收所述目标进程在内存中的页面。
如果新的周期内所确定的目标进程的性能稳定系数不满足第二预设条件,则可以认为该目标进程的性能下降得比较多,该目标进程处于性能非稳定的状态。因此,终端可以对该目标进程启动回收保护,停止回收该目标进程在内存中的页面,以避免该目标进程的性能损失过大。
以上介绍了本申请实施例提供的内存回收方法的执行流程,以下将结合用于实现该内存回收方法的系统架构介绍该内存回收方法的实现过程。
可以参阅图4,图4为本申请实施例提供的一种系统架构的示意图。如图4所示,系统架构包括:主动触发模块、被动触发模块、kpreclaimed线程和进程池模块。
主动触发模块用于在内存分配的过程中发现区域内存低于低水位值时,而触发直接内存回收的流程。
被动触发模块用于在系统内存低于区域最低水位值时,唤醒内核线程kswapd进程,以进行区域内的内存回收。
其中,系统还根据内存中的页面建立有活跃链表和非活跃链表,活跃链表中指示了内存中的活跃页面,非活跃链表指示了内存中的非活跃页面。主动触发模块和被动触发模块在触发内存回收时,则是对非活跃链表中所指示的非活跃页面进行回收。
进程池模块用于管理第一进程集合中的N个进程。具体地,进程池模块中包括有N个进程节点,这N个进程节点是按照进程的内存占用量从大到小的顺序,以K堆树结构进行组织得到的。其中,进程池模块可划分为三大模块:物理页表池模块、非活跃内存池模块和状态参数池模块。
物理页表池模块用于维护K堆树中N个进程的虚拟地址到物理地址的映射关系。
非活跃内存池模块用于管理各进程的非活跃物理页面,包括可回收的非活跃匿名页和非活跃文件页,具体可以由kpreclaimed的扫描模块通过扫描K堆树中的N个进程得到。
状态参数池模块用于维护进程的性能参数和稳定状态系数。其中,性能参数主要包括页缺失次数、页面换入数和页面换出数等实时参数;稳定状态系数包括进程的性能稳定系数(由监控模块计算得到)和进程的回收系数。
kpreclaimed线程可以分为四个模块,包括:扫描模块、监控模块、反馈模块和回收模块。
监控模块用于将进程的性能参数、性能稳定系数以及回收系数传递给反馈模块,然后计算这一周期内非活跃页面的总量,并根据性能稳定系数和回收系数指示回收模块进行页面回收。
扫描模块用于扫描进程池中内存占用量最大的N个进程的页表,将这N个进程的非活跃页面从系统zone区的非活跃链表中移动至进程非活跃链表池中。在扫描模块的两次扫描期间,如果页面被访问到,则将该页面移动到系统zone区的活跃链表中。
监控模块用于监控K堆树中N个进程的性能参数,并修改进程池模块中进程所属节点的性能参数,即状态参数池中的数据,主要包括页缺失次数、页面换入数和页面换出数等实时参数。
反馈模块用于根据监控模块所传递的性能参数,计算进程的性能稳定系数以及确定各进程所需回收的非活跃的匿名页总量、非活跃的文件页总量,从而细粒度地调节进程的页面回收过程。
回收模块用于根据反馈模块计算得到的性能稳定系数判断进程的稳定状态,在N个进程中选取性能稳定系数排在前n的进程(性能稳定系数越小,排序越靠前),反馈式地回收非活跃内存池中的匿名页和文件页。
示例性地,可以参阅图5,图5为本申请实施例提供的一种内存回收方法的实现过程的示意图。如图5所示,在进程池模块中,按照K堆树的结构组织有多个进程节点。在进程池模块所包括的物理页面池中,包括有每个进程节点对应的物理页面。kpreclaimed线程中的扫描模块通过扫描物理页面池中各个进程的物理页面,将非活跃的页面添加到进程的非活跃链表池中。kpreclaimed线程中的监控模块通过监控K堆树中的进程的性能,得到N个进程的性能参数。kpreclaimed线程中的反馈模块基于根据监控模块所传递的性能参数,计算进程的性能稳定系数以及确定各进程所需回收的非活跃的匿名页总量、非活跃的文件页总量。kpreclaimed线程中的回收模块则根据反馈模块计算得到的性能稳定系数判断进程的稳定状态,反馈式地回收非活跃内存池中的匿名页和文件页。
可以参阅图6,图6为本申请实施例提供的一种内存回收方法600的流程示意图。如图6所示,该内存回收方法600包括以下的步骤601-617。
步骤601,确定内存占用量最大的N个进程。
首先,终端确定所有运行中的进程所占用的内存,并且基于进程所占用的内存,确定内存占用量最大的N个进程。
步骤602,确定N个进程的性能稳定系数。
其中,终端确定N个进程的性能稳定系数的过程与上述的步骤201-202类似,具体可以参考上述的步骤201-202,在此不再赘述。
步骤603,选取性能稳定系数最小的n个进程。
在确定N个进程的性能稳定系数之后,终端在N个进程中选择性能稳定系数最小的n个进程。
步骤604,获取n个进程的非活跃页面总量。
终端可以通过kpreclaimed线程扫描n个进程在内存中的页面,来获取n个进程的非活跃页面总量。
步骤605,计算n个进程的页面回收量。
其中,终端计算n个进程的页面回收量的过程与上述的步骤S1-S3类似,具体可以参考上述的步骤S1-S3,在此不再赘述。
步骤606,回收n个进程的非活跃页面。
在确定了n个进程的页面回收量之后,终端基于n个进程对应的页面回收量,分别回收n个进程的非活跃的文件页和非活跃的匿名页。
步骤607,判断进程的回收次数是否小于4次。
在终端执行完进程的非活跃页面回收之后,终端确定进程对应的页面回收次数,并判断进程的回收次数是否小于4次。
步骤608,如果进程的回收次数小于4次,判断进程的性能损失是否严重。
其中,终端判断进程的性能损失是否严重的方式可以是:判断在执行页面回收后,进程的性能稳定系数的增加量是否大于或等于第五阈值。如果进程的性能稳定系数的增加量大于或等于第五阈值,则确定进程的性能损失严重;如果进程的性能稳定系数的增加量小于第五阈值,则确定进程的性能损失不严重。
步骤609,如果进程的性能损失严重或进程的回收次数不小于4次,则保护进程S个周期。
其中,保护进程S个周期是指在S个周期内不再回收该进程在内存中的页面。S的取值例如可以为3或4,在实际应用中可以根据终端的内存大小和期望的内存回收率来调整S的取值,本实施例不对S的取值做具体限定。
步骤610,判断进程在保护周期内性能是否稳定。
在进程处于保护周期的期间,终端可以持续获取进程的性能参数,并计算进程的性能稳定系数,以判断进程在保护周期内性能是否稳定。其中,判断进程在保护周期内性能是否稳定的方式是判断进程在保护周期内性能稳定系数是否变低,且保护周期结束后进程的性能稳定系数是否满足上述的第一预设条件。
如果进程在保护周期内性能稳定系数变低了,且保护周期结束后进程的性能稳定系数满足上述的第一预设条件,则可以确定进程在保护周期内性能稳定;如果进程在保护周期内性能稳定系数没有变低,或者保护周期结束后进程的性能稳定系数没有满足上述的第一预设条件,则可以确定进程在保护周期内性能不稳定。
步骤611,如果进程在保护周期内性能稳定,则增大回收系数,继续回收进程的页面。
如果进程在保护周期内性能稳定,则可以继续回收该进程在内存中的页面。由于该进程是已经执行过页面回收的且因为性能下降严重而进入了保护周期,因此增大该进程的回收系数,例如将该进程的回收系数增大至最大值,以尽可能减少回收该进程的页面。
步骤612,如果进程的性能损失不严重,则判断进程的性能稳定系数是否仍然排在前n。
如果进程的回收次数小于4次,且进程的性能损失不严重,则可以判断进程的性能稳定系数是否仍然排在前n,即判断进程的性能稳定系数是否仍然是N个进程中最小的n个之一。
步骤613,如果进程的性能稳定系数仍然排在前n,则增大回收系数,继续回收进程的页面。
如果进程的性能稳定系数仍然排在前n,则代表进程的性能仍然比其他的N-n个进程要稳定,可以继续回收该进程的页面。具体地,由于该进程是已经执行过页面回收的,因此增大该进程的回收系数,例如将该进程的回收系数的值加1,以尽可能减少回收该进程的页面。
步骤614,如果进程的性能稳定系数不再排在前n,则保护进程S个周期。
如果进程的性能稳定系数仍然排在前n,则代表由于页面的回收,进程的性能发生了下降,且其他的N-n个进程中已经存在比当前进程的性能更稳定的进程了。因此,终端可以保护该进程S个周期,不再继续回收该进程的页面。
步骤615,判断进程在保护周期内性能是否稳定。
其中,步骤615与步骤610类似,具体可以参考上述的步骤610,在此不再赘述。
步骤616,如果进程在保护周期内性能稳定,则保持回收系数不变,继续回收进程的页面。
如果进程在保护周期内性能稳定,则可以继续回收该进程在内存中的页面。由于该进程是已经执行过页面回收的但并非是性能下降严重而进入保护周期的,因此可以保持该进程的回收系数不变,并继续回收该进程的页面。
步骤617,如果进程在保护周期内性能不稳定,则增大回收系数,继续回收进程的页面。
如果进程在保护周期内性能不稳定,则可以增大该进程的回收系数再继续回收该进程的页面。例如将该进程的回收系数增大至最大值,以尽可能减少回收该进程的页面。
本实施例中,在回收进程的页面时,根据进程运行时的性能稳定状态来确定需要回收页面的进程,并细粒度地感知匿名页和文件页的敏感程度,来进行匿名页和文件页的回收。因此,本实施例既能使进程之间的性能更均衡,又能保证单个进程的内存利用率最优。
此外,通过感知进程的性能变化,并及时调整回收策略,保证进程的性能不会大幅度下降,能够避免进程的性能损失严重,并且使得本实施例提供的内存回收方法适用于进程内存需求多变的场景。
为了便于理解,以下将结合具体例子对本申请实施例所提供的内存回收方法进行介绍。
本实施例中,在一台服务器上同时运行4个进程PRO1,PRO2,PRO3,PRO4。服务器的内存为24吉字节(Gigabyte,GB),进程PRO1,PRO2,PRO3,PRO4的内存占有量分别为4GB,3GB,4GB,3GB。并且,进程PRO1,PRO2,PRO3,PRO4为系统中内存占有量最靠前的4个进程,由K堆树来进行维护。此时,4个进程中都存在着非活跃的页面,系统未启动内存回收,导致进程的非活跃的页面未能回收利用,降低了内存的利用率。
首先,服务器根据进程的内存占用量对进程进行排序,并基于内存占用量大于某一阈值的进程建立进程K堆树,例如本实施例基于内存占用量大于500兆(Mbyte,MB)的进程建立进程K堆树。
K堆树中的每个节点的数据用于维护进程的性能参数、进程的文件页的非活跃链表和进程的匿名页的非活跃链表。其中,性能参数包括进程在当前周期内的缺页次数、上一个周期的页缺失次数、页面换出数和页面换入数。进程的文件页的非活跃链表维护进程的待回收的非活跃文件页;进程的匿名页的非活跃链表维护进程的待回收的非活跃匿名页。本实施例中,服务器基于上述的4个进程PRO1,PRO2,PRO3,PRO4建立K堆树。
在对K堆树中的进程执行内存回收的过程中,kpreclaimed内核线程中的监控模块首次监控和记录K堆树中进程的性能指标参数,得到的性能参数结构如图7所示。图7为本申请实施例提供的4个进程的性能参数结构的示意图。如图7所示,常驻内存集大小(ResidentSet Size,RSS)表示进程的内存占用量;PF表示进程在当前周期的页缺失次数;prev_PF表示进程在上一个周期的页缺失次数;SO表示进程的页换出次数;SI表示进程的页换入次数。
由图7可知,进程PRO1,PRO2,PRO3,PRO4在当前周期的页缺失次数PF1、PF2、PF3、PF4分别为10、10、20、20。进程PRO1,PRO2,PRO3,PRO4在上一个周期的页缺失次数分别为5、5、15、30。进程PRO1,PRO2,PRO3,PRO4的页面换出次数SO1、SO2、SO3、SO4分别为10、0、5、5。进程PRO1,PRO2,PRO3,PRO4的页面换入数SI1、SI2、SI3、SI4分别为10、0、10、0。此外,设置K堆中进程的回收系数k为最高值(本实施例设置为4)。当回收系数最大时,此时代表进程性能状态不稳定,页面回收力度偏小。
基于上一步所得到的进程的性能参数,基于上述的公式1分别计算进程PRO1,PRO2,PRO3,PRO4的性能稳定系数。计算结果如图8所示,图8为本申请实施例提供的一种进程的性能稳定系数的示意图。如图8所示,进程PRO1,PRO2,PRO3,PRO4的性能稳定系数R1、R2、R3、R4分别为1.1、0.63、0.87、1.23。kpreclaimed内核线程中的监控模块负责周期性更新进程的性能稳定系数Ri。然后,kpreclaimed内核线程中的反馈模块按照进程的性能稳定系数对进程进行排序,并选取前n个(本实施例设置n为4)进程作为回收页面的目标进程。
如果进程的Ri大于阈值1(本实施例设置阈值1为1.5)或进程的Ri增长率大于阈值2(本实施例设置阈值2为1.5),则进程进入非稳定状态处理流程。在进入非稳定状态处理流程后,一方面是将进程应回收的非活跃的文件页的数量和非活跃的匿名页的数量设为0,以标志保护该进程若干个周期(本实施例将保护周期设为3);另一方面,将回收系数k的值设置成最大(本实施例中k的最大值设置为4)。如果进程的Ri小于或等于阈值1且进程的Ri增长率小于或等于阈值2,则进程进入稳定状态处理流程。
对于首次进入稳定状态的进程,服务器通过kpreclaimed进程扫描模块,扫描进程的物理页面表,将进程的非活跃页面从系统的非活跃链表移除,添加到进程的非活跃链表上,并更新进程对应的非活跃的匿名页总量INACi和非活跃的文件页总量INFCi。然后,按照上述的公式2和公式3计算本实施例中4个进程的应回收的页面,包括匿名页回收量IANi和文件页回收量IAFi。
对于本实施例中所提供的进程PRO1,PRO2,PRO3,PRO4,服务器计算得到这4个进程的匿名页回收量IANi分别为0、64MB、2MB、17MB;这4个进程的文件页回收量IAFi分别为20MB、20MB、60MB、158MB。并且,这4个进程的回收系数k的取值均为最大值4。然后,服务器使用kpreclaimed内核线程中的回收模块回收这4个进程中的非活跃的匿名页以及非活跃的文件页。其中,在kpreclaimed进程中的扫描模块的两次扫描间隔期间,如果匿名页或文件页因访问而变得活跃,则kpreclaimed进程中的回收模块将该页面放回系统非活跃链表中交由系统内存管理模块管理,否则留在进程的非活跃链表中等待回收。
针对上一周期处于稳定状态且已回收页面的进程,通过监控模块收集进程在回收页面后的性能参数。反馈模块则在下一个回收周期计算该进程的性能稳定系数,以确定进程的性能变化情况。若进程的性能未有太大损失,则增大回收力度,即减小回收系数k,并更新匿名页回收量IANi和文件页回收量IAFi。若进程性能损失严重,则代表进程的页面回收过度,导致该进程内存不足而发生性能波动,此时可以增大k值,降低页面回收的积极性。若下一周期,该进程性能持续损失,则保护进程若干个周期,尽量不进行页面回收,以免页面的性能损失过于严重。在保护周期结束后,通过kpreclaimed进程中的扫描模块扫描进程的物理页面表,更新进程的非活跃链表。
在基于进程的性能反馈调整进程页面回收程度的过程中,反馈模块主要是对某个进程执行回收后,重新采集进程的性能参数,计算进程当前周期的稳定状态Ri。如果进程的Ri大于阈值1或进程的Ri增长率大于阈值2,则进程进入非稳定状态处理流程。在进程进入非稳定状态处理流程后,更新应进程的应回收的页面数和回收系数k,并保护进程若干周期。如果进程的Ri小于或等于阈值1且进程的Ri增长率小于或等于阈值2,则继续保持回收状态,减小回收系数k,按照上述的公式4和公式5更新进程的匿名页回收量和文件页回收量。然后,下一周期继续计算进程的稳定状态,如果进程的性能稳定系数依旧满足上述要求,则减小回收系数k,继续回收进程的匿名页和文件页。
为了防止后续突发的页面回收过度,在稳定状态下进程的页面回收最多持续S个周期,然后对进程进行若干个周期的保护。在保护周期后,确定保护周期内进程的性能稳定系数的变化情况。若进程的性能依然保持稳定,则重新构建进程的非活跃内存池和更新进程的应回收的页面数量,增大回收系数k至最大值,进入页面的回收流程。若在保护周期期间进程的性能发生了波动,则延长进程的保护周期。
示例性地,本实施例中,在初始的回收周期内,进程的内存回收量如表1所示。
表1进程的内存回收量
PRO<sub>1</sub> | PRO<sub>2</sub> | PRO<sub>3</sub> | PRO<sub>4</sub> | |
非活跃的匿名页 | OMB | 64MB | 2MB | 17MB |
非活跃的文件页 | 20MB | 20MB | 60MB | 158MB |
总回收量 | 20MB | 84MB | 62MB | 175MB |
表1表示了在初始的回收周期中,四个进程已回收的物理内存量。同时,从表1中可以看出服务器差异化地回收了不同进程的匿名页和文件页,提高了内存使用率的同时,保证进程的性能不会受到太大的影响。
基于上述的内存回收方法,本实施例中初步进行了模拟实验,并对模拟结果进行分析,分析结果如下。
首先,介绍模拟实验的系统设置。
在模拟实验中,模拟内存中一个zone区的页面回收情况。对于该zone区来说,zone区中页面的分布可以由4个链表来指示,这4个链表分别为:活跃匿名页链表、活跃文件页链表、非活跃匿名页链表以及非活跃文件页链表。模拟实验初步实现了LRU算法。本次模拟实验的目标有两个,分别在两种不同场景下来验证。一种场景是在系统空闲内存充足的情况下,相对原有的基于全局LRU算法来实现内存回收的机制,本实施例所提供的内存回收方法能有效回收系统中的非活跃页面,并且不会严重影响系统性能。另一种场景是原有系统在空闲内存不足的情况下,基于本实施例所提供的进程级的内存回收方法能够有效缓解系统进入内存紧张的状态。
在模拟实验中,系统中存在3个进程,这3个进程分别有不同的内存访问模式,分别为均匀访问模式、非均匀访问模式和周期性访问模式。
均匀访问模式是指模拟访问文件区和匿名区这两个区域,且每次所访问的虚拟页面地址是完全随机产生的,其中文件区的访问概率大于匿名区。在每个周期内,进程的访问页面数量是随机产生的,其数值在4000-6000之间。
非均匀访问模式是指模拟访问文件区和匿名区这两个区域,且每次所访问的虚拟页面地址具有局部性,集中在上述两个区域的30%内,区域内部的虚拟地址是完全随机产生的,其中文件区的访问概率大于匿名区。在每个时间段内,进程的访问页面数量是随机产生的,其数值在4000-6000之间。
周期性访问模式是指模拟访问文件区和匿名区这两个区域,且每次所访问的虚拟页面地址具有周期性,两次访问的虚拟地址之间的间隔随机产生,该间隔可以设置为1-6,其中文件区的访问概率大于匿名区。在每个时间段内,进程的访问页面数量是随机产生的,其数值在4000-6000之间。
具体地,在模拟实验中对进程的模拟设置可以参阅表2。
表2
进程名称 | 访问模式 | 总访问数 | 进程区域信息 |
Pid 0 | 均匀访问模式 | 100 | 0,130000,130001,280000 |
Pid 1 | 非均匀访问模式 | 100 | 0,130000,130001,280000 |
Pid 2 | 周期性访问模式 | 100 | 0,130000,130001,280000 |
模拟实验的目标如下所示。
(1)在系统内存充足的情况下,进程级回收能够在不影响系统性能的前提下,有效回收系统中非活跃内存。
(2)在系统内存逐渐不足的情况下,进程级回收能够有效缓解系统进入内存紧张的状态。
模拟实验的结果分析如下所示。
其中,系统的总内存容量为777760MB。
1、模拟实验的目标为:在系统内存充足的情况下,以系统总的页缺失次数衡量系统性能,证明进程级回收内存能够在不严重影响系统性能的前提下,有效回收系统中非活跃页面。为便于描述,以下将本实施例提供的内存回收方法称为进程级回收方法。
可以参阅图9,图9为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存的系统性能对比示意图。在图9中,系统每次访问页面的数量达到10000次以上。从图9可以看出,在以系统总的页缺失次数来评估系统性能的情况下,与原有的LRU算法回收内存的方法相比,虽然基于进程级回收方法来回收内存导致系统总的页缺失次数在后期有所增加,但增加的幅度较小,平均在300个页面左右。
可以参阅图10,图10为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时已用内存的对比示意图。由图10可知,前期由于内存使用量较少,能回收的非活跃内存量较少,回收过程不明显。后期随着进程运行,系统中非活跃的页面逐渐增加,进程级回收方法相比于LRU算法所回收的内存量逐渐增大。由此可见,基于进程级回收方法来回收内存,虽然使得系统性能有小幅度的下降,却能够有效节约内存。
其次,评估LRU算法和进程级回收方法下内存回收对各进程性能的影响。进程的性能依然以页缺失次数为衡量标准,然后查看各个进程的实际内存占用量的变化情况。
可以参阅图11,图11为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时各进程的运行性能示意图。图11中的(a)是采用均匀访问模式的进程,图11中的(b)是采用非均匀访问模式的进程,图11中的(c)是采用周期性访问模式的进程。从图11中可以看出回收空闲内存未能大幅度影响进程的运行性能。并且,内存回收对采用均匀访问模式的进程影响较大,对采用周期性访问模式的进程影响最小。
可以参阅图12,图12为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时各进程的已用内存的示意图。图12中的(a)是采用均匀访问模式的进程,图12中的(b)是采用非均匀访问模式的进程,图12中的(c)是采用周期性访问模式的进程。从图12中可以看出不同进程所回收的空闲内存量有所区别,从回收量上看,采用周期性访问模式的进程回收内存相对较多,数值差距达到40万个页面。
2、模拟实验的目标为:在系统内存后期不足的情况下,以系统总的页缺失次数衡量系统性能,证明进程级回收方法能够有效缓解系统进入内存紧张的状态。
可以参阅图13,图13为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存的系统性能对比示意图。在图13中,系统每次访问页面的数量达到10000次以上。从图9可以看出,在以系统总的页缺失次数来评估系统性能的情况下,与原有的LRU算法回收内存的方法相比,虽然基于进程级回收方法来回收内存导致系统总的页缺失次数在后期有所增加,但增加的幅度较小,平均在300个页面左右。
可以参阅图14,图14为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时已用内存的对比示意图。由图14可知,前期由于内存使用量较少,能回收的非活跃内存量较少,回收过程不明显。后期随着进程运行,系统中非活跃的页面逐渐增加,进程级回收方法相比于LRU算法所回收的内存量逐渐增大。由此可见,基于进程级回收方法来回收内存,虽然使得系统性能有小幅度的下降,却能够有效节约内存。
其次,评估LRU算法和进程级回收方法下内存回收对各进程性能的影响。进程的性能依然以页缺失次数为衡量标准,然后查看各个进程的实际内存占用量的变化情况。
可以参阅图15,图15为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时各进程的运行性能示意图。图15中的(a)是采用均匀访问模式的进程,图15中的(b)是采用非均匀访问模式的进程,图15中的(c)是采用周期性访问模式的进程。从图15中可以看出,基于LRU算法的回收方式导致3个进程的性能都有所下降,其中对采用均匀访问模式的进程影响较大,其次是采用非均匀访问模式的进程。
可以参阅图16,图16为本申请实施例提供的基于LRU算法以及进程级回收方法回收内存时各进程的已用内存的示意图。图16中的(a)是采用均匀访问模式的进程,图16中的(b)是采用非均匀访问模式的进程,图16中的(c)是采用周期性访问模式的进程。从图16中可以看出不同进程所回收的空闲内存量有所区别,从回收量上看,采用周期性访问模式的进程回收内存相对较多,数值差距达到40万个页面。
在图1至图16所对应的实施例的基础上,为了更好的实施本申请实施例的上述方案,下面还提供用于实施上述方案的相关设备。
具体可以参阅图17,图17为本申请实施例提供的一种终端1700的结构示意图,该终端1700包括:获取单元1701和处理单元1702。所述获取单元1701,用于获取第一进程集合中的进程的性能参数,所述第一进程集合包括N个进程,所述N为大于1的整数,所述性能参数包括页缺失次数、页面换出数和/或页面换入数。所述处理单元1702,用于根据所述进程的性能参数计算所述进程的性能稳定系数,所述性能稳定系数用于表示所述进程的性能的稳定状态。所述处理单元1702,还用于回收所述目标进程在内存中的页面,所述目标进程为所述第一进程集合中性能稳定系数满足第一预设条件的进程。
在一种可能的实现方式中,所述处理单元1702,还用于按照所述性能稳定系数从小到大的顺序,在所述第一进程集合中选取n个进程作为目标进程,所述n为小于所述N的整数,所述n个进程为所述第一进程集合中性能稳定系数满足所述第一预设条件的进程。
在一种可能的实现方式中,所述处理单元1702,还用于在第一进程集合中选取性能稳定系数小于第一阈值的进程作为目标进程,所述性能稳定系数小于第一阈值的进程为所述第一进程集合中性能稳定系数满足所述第一预设条件的进程。
在一种可能的实现方式中,所述获取单元1701,还用于获取第二进程集合中的进程的内存占用量,所述第二进程集合包括M个进程,所述M为大于N的整数;所述处理单元1702,还用于按照所述内存占用量从大到小的顺序,在所述第二进程集合中选取N个进程,得到所述第一进程集合。
在一种可能的实现方式中,所述处理单元1702,还用于根据所述进程在第一周期的页缺失次数以及第二周期的页缺失次数,计算第一稳定系数,所述第二周期为所述第一周期的上一个周期,且所述第二周期与所述第一周期的周期长度相同;所述处理单元1702,还用于根据所述进程的匿名页换出数和匿名页换入数,计算第二稳定系数;所述处理单元1702,还用于根据所述第一稳定系数和所述第二稳定系数,计算所述进程的性能稳定系数。
在一种可能的实现方式中,所述处理单元1702,还用于计算目标进程的页面回收量;所述处理单元1702,还用于根据所述页面回收量,回收所述目标进程在内存中的页面。
在一种可能的实现方式中,所述获取单元1701,还用于获取所述目标进程在内存中的非活跃的文件页总量和非活跃的匿名页总量;所述处理单元1702,还用于根据所述非活跃的文件页总量、回收系数、所述进程在第一周期的页缺失次数以及第二周期的页缺失次数,计算所述目标进程的文件页回收量;所述处理单元1702,还用于根据所述非活跃的匿名页总量、所述回收系数、所述进程的匿名页换出数和匿名页换入数,计算所述目标进程的匿名页回收量;所述处理单元1702,还用于根据所述文件页回收量和所述匿名页回收量,回收所述目标进程在内存中的文件页和匿名页。
在一种可能的实现方式中,所述处理单元1702,还用于重新计算所述目标进程的性能稳定系数;所述处理单元1702,还用于若所述目标进程的性能稳定系数满足第二预设条件,则调整回收系数,以调整所述目标进程的页面回收量;所述处理单元1702,还用于若所述目标进程的性能稳定系数不满足第二预设条件,则停止回收所述目标进程在内存中的页面。
在一种可能的实现方式中,所述第二预设条件包括所述目标进程的性能稳定系数仍满足所述第一预设条件、所述目标进程的性能稳定系数小于第二阈值、所述目标进程的性能稳定系数的增长率小于第三阈值和/或所述目标进程的回收次数小于第四阈值。
在一种可能的实现方式中,所述处理单元1702,还用于若所述目标进程的性能稳定系数的增加量小于第五阈值,则减小所述回收系数,以增加所述目标进程的页面回收量;所述处理单元1702,还用于若所述目标进程的性能稳定系数的增加量大于或等于所述第五阈值,则增大所述回收系数,以减少所述目标进程的页面回收量。
本申请实施例提供的内存回收的方法具体可以由终端中的芯片来执行,该芯片包括:处理单元和通信单元,处理单元例如可以是处理器,通信单元例如可以是输入/输出接口、管脚或电路等。该处理单元可执行存储单元存储的计算机执行指令,以使服务器内的芯片执行上述图1至图16所示实施例描述的内存回收的方法。可选的,存储单元为芯片内的存储单元,如寄存器、缓存等,存储单元还可以是无线接入设备端内的位于芯片外部的存储单元,如只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)等。
参照图18,本申请还提供了一种计算机程序产品,在一些实施例中,上述图2所公开的方法可以实施为以机器可读格式被编码在计算机可读存储介质上的或者被编码在其它非瞬时性介质或者制品上的计算机程序指令。
图18示意性地示出根据这里展示的至少一些实施例而布置的示例计算机程序产品的概念性局部视图,示例计算机程序产品包括用于在计算设备上执行计算机进程的计算机程序。
在一个实施例中,计算机程序产品1800是使用信号承载介质1801来提供的。信号承载介质1801可以包括一个或多个程序指令1802,其当被一个或多个处理器运行时可以提供以上针对图2描述的功能或者部分功能。因此,例如,参考图2中所示的实施例,步骤201-203的一个或多个特征可以由与信号承载介质1801相关联的一个或多个指令来承担。此外,图18中的程序指令1802也描述示例指令。
在一些示例中,信号承载介质1801可以包含计算机可读介质1803,诸如但不限于,硬盘驱动器、紧密盘(CD)、数字视频光盘(DVD)、数字磁带、存储器、ROM或RAM等等。
在一些实施方式中,信号承载介质1801可以包含计算机可记录介质1804,诸如但不限于,存储器、读/写(R/W)CD、R/W DVD、等等。在一些实施方式中,信号承载介质1801可以包含通信介质1805,诸如但不限于,数字和/或模拟通信介质(例如,光纤电缆、波导、有线通信链路、无线通信链路、等等)。因此,例如,信号承载介质1801可以由无线形式的通信介质1805(例如,遵守IEEE 802.11标准或者其它传输协议的无线通信介质)来传达。
一个或多个程序指令1802可以是,例如,计算机可执行指令或者逻辑实施指令。在一些示例中,计算设备的计算设备可以被配置为,响应于通过计算机可读介质1803、计算机可记录介质1804、和/或通信介质1805中的一个或多个传达到计算设备的程序指令1802,提供各种操作、功能、或者动作。
应该理解,这里描述的布置仅仅是用于示例的目的。因而,本领域技术人员将理解,其它布置和其它元素(例如,机器、接口、功能、顺序、和功能组等等)能够被取而代之地使用,并且一些元素可以根据所期望的结果而一并省略。另外,所描述的元素中的许多是可以被实现为离散的或者分布式的组件的、或者以任何适当的组合和位置来结合其它组件实施的功能实体。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (13)
1.一种内存回收方法,其特征在于,包括:
获取第一进程集合中的进程的性能参数,所述第一进程集合包括N个进程,所述N为大于1的整数,所述性能参数包括页缺失次数、页面换出数和/或页面换入数;
根据所述进程的性能参数计算所述进程的性能稳定系数,所述性能稳定系数用于表示所述进程的性能的稳定状态;
回收目标进程在内存中的页面,所述目标进程为所述第一进程集合中性能稳定系数满足第一预设条件的进程。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
按照所述性能稳定系数从小到大的顺序,在所述第一进程集合中选取n个进程作为目标进程,所述n为小于所述N的整数,所述n个进程为所述第一进程集合中性能稳定系数满足所述第一预设条件的进程。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述第一进程集合中选取性能稳定系数小于第一阈值的进程作为目标进程,所述性能稳定系数小于第一阈值的进程为所述第一进程集合中性能稳定系数满足所述第一预设条件的进程。
4.根据权利要求1-3任意一项所述的方法,其特征在于,所述获取第一进程集合中的进程的性能参数之前,所述方法还包括:
获取第二进程集合中的进程的内存占用量,所述第二进程集合包括M个进程,所述M为大于N的整数;
按照所述内存占用量从大到小的顺序,在所述第二进程集合中选取N个进程,得到所述第一进程集合。
5.根据权利要求1-4任意一项所述的方法,其特征在于,所述根据所述进程的性能参数计算所述进程的性能稳定系数,包括:
根据所述进程在第一周期的页缺失次数以及第二周期的页缺失次数,计算第一稳定系数,所述第二周期为所述第一周期的上一个周期,且所述第二周期与所述第一周期的周期长度相同;
根据所述进程的匿名页换出数和匿名页换入数,计算第二稳定系数;
根据所述第一稳定系数和所述第二稳定系数,计算所述进程的性能稳定系数。
6.根据权利要求1-5任意一项所述的方法,其特征在于,所述方法还包括:
计算目标进程的页面回收量;
所述回收所述目标进程在内存中的页面,包括:
根据所述页面回收量,回收所述目标进程在内存中的页面。
7.根据权利要求6所述的方法,其特征在于,所述计算目标进程的页面回收量,包括:
获取所述目标进程在内存中的非活跃的文件页总量和非活跃的匿名页总量;
根据所述非活跃的文件页总量、回收系数、所述进程在第一周期的页缺失次数以及第二周期的页缺失次数,计算所述目标进程的文件页回收量;
根据所述非活跃的匿名页总量、所述回收系数、所述进程的匿名页换出数和匿名页换入数,计算所述目标进程的匿名页回收量;
根据所述页面回收量,回收所述目标进程在内存中的页面,包括:
根据所述文件页回收量和所述匿名页回收量,回收所述目标进程在内存中的文件页和匿名页。
8.根据权利要求1-7任意一项所述的方法,其特征在于,在回收所述目标进程在内存中的页面之后,所述方法还包括:
重新计算所述目标进程的性能稳定系数;
若所述目标进程的性能稳定系数满足第二预设条件,则调整回收系数,以调整所述目标进程的页面回收量;
若所述目标进程的性能稳定系数不满足第二预设条件,则停止回收所述目标进程在内存中的页面。
9.根据权利要求8所述的方法,其特征在于,所述第二预设条件包括所述目标进程的性能稳定系数仍满足所述第一预设条件、所述目标进程的性能稳定系数小于第二阈值、所述目标进程的性能稳定系数的增长率小于第三阈值和/或所述目标进程的回收次数小于第四阈值。
10.根据权利要求8或9所述的方法,其特征在于,所述调整回收系数,包括:
若所述目标进程的性能稳定系数的增加量小于第五阈值,则减小所述回收系数,以增加所述目标进程的页面回收量;
若所述目标进程的性能稳定系数的增加量大于或等于所述第五阈值,则增大所述回收系数,以减少所述目标进程的页面回收量。
11.一种终端,其特征在于,包括存储器和处理器;所述存储器存储有代码,所述处理器被配置为执行所述代码,当所述代码被执行时,所述终端执行如权利要求1至10任一所述的方法。
12.一种计算机可读存储介质,其特征在于,包括计算机可读指令,当所述计算机可读指令在计算机上运行时,使得所述计算机执行如权利要求1至10中任一项所述的方法。
13.一种计算机程序产品,其特征在于,包括计算机可读指令,当所述计算机可读指令在计算机上运行时,使得所述计算机执行如权利要求1至10任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011549662.6A CN114675959A (zh) | 2020-12-24 | 2020-12-24 | 一种内存回收的方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011549662.6A CN114675959A (zh) | 2020-12-24 | 2020-12-24 | 一种内存回收的方法及相关装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114675959A true CN114675959A (zh) | 2022-06-28 |
Family
ID=82070651
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011549662.6A Pending CN114675959A (zh) | 2020-12-24 | 2020-12-24 | 一种内存回收的方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114675959A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115421927A (zh) * | 2022-10-31 | 2022-12-02 | 统信软件技术有限公司 | 一种负载均衡方法、计算设备及存储介质 |
-
2020
- 2020-12-24 CN CN202011549662.6A patent/CN114675959A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115421927A (zh) * | 2022-10-31 | 2022-12-02 | 统信软件技术有限公司 | 一种负载均衡方法、计算设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10963387B2 (en) | Methods of cache preloading on a partition or a context switch | |
CN105740164B (zh) | 支持缓存一致性的多核处理器、读写方法、装置及设备 | |
US11138131B2 (en) | Detection of avoidable cache thrashing for OLTP and DW workloads | |
KR101761301B1 (ko) | 메모리 자원 최적화 방법 및 장치 | |
US6865647B2 (en) | Dynamic cache partitioning | |
US8321638B2 (en) | Cooperative mechanism for efficient application memory allocation | |
EP2437433B1 (en) | Memory access monitoring method and device | |
KR20180027327A (ko) | 동적으로 입도를 업데이트하는 적응적 캐시 대체 매니저 및 공유 플래시-기반 스토리지 시스템의 파티셔닝 방법 | |
US7774564B2 (en) | Multi-processor system, and method of distributing memory access load in multi-processor system | |
JP7340326B2 (ja) | メンテナンス動作の実行 | |
US9081692B2 (en) | Information processing apparatus and method thereof | |
US8966171B2 (en) | Access optimization method for main memory database based on page-coloring | |
CN102999444A (zh) | 一种用于替换缓存模块中数据的方法及装置 | |
CN114721844B (zh) | 数据缓存方法和装置、计算机设备、存储介质 | |
CN107562806B (zh) | 混合内存文件系统的自适应感知加速方法及系统 | |
US7702875B1 (en) | System and method for memory compression | |
CN109521970B (zh) | 一种数据处理方法及相关设备 | |
CN114675959A (zh) | 一种内存回收的方法及相关装置 | |
CN111639037A (zh) | 一种缓存的动态分配方法、装置及DRAM-Less固态硬盘 | |
US20170024147A1 (en) | Storage control device and hierarchized storage control method | |
CN106681830A (zh) | 一种任务缓存空间监测方法和装置 | |
KR101940382B1 (ko) | 페이지의 프리페칭 방법 및 장치 | |
CN101853219B (zh) | 基于虚拟化平台的磁盘页面换入的方法 | |
CN111338884B (zh) | 缓存缺失率监测方法、装置、电子设备及可读存储介质 | |
CN113010453A (zh) | 一种内存管理的方法、系统、设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |