确定内存回收阈值的方法及相关设备与流程

文档序号:29205150发布日期:2022-03-11 23:36阅读:266来源:国知局
确定内存回收阈值的方法及相关设备与流程

1.本技术实施例涉及计算机技术领域,特别涉及一种确定内存回收阈值的方法及相关设备。


背景技术:

2.为了应对计算机设备中内存不足的现象,在计算机设备的内存中划分出一个压缩分区。如此,计算机设备原本的内存包括系统分区和压缩分区。系统分区用于放置原本放置在内存中的数据,压缩分区用于放置将系统分区中的数据压缩后的数据。另外,预先配置有内存回收阈值,该内存回收阈值包括低(low)阈值和高(high)阈值。当系统分区的剩余容量低于低阈值时,则从系统分区中获取部分数据压缩后放置在压缩分区中,直至系统分区的剩余容量超过高阈值,从而实现对系统分区中的内存的回收。
3.相关技术中,内存回收阈值中的低阈值和高阈值均是将计算机设备中预置的最小空闲字节数(min-free-kbytes)转换来的。由于计算机设备中的最小空闲字节数是固定不变的,从而导致确定的内存回收阈值也是固定不变的,使得基于该内存回收阈值进行内存回收时不能充分发挥回收内存技术的优势。


技术实现要素:

4.本技术实施例提供了一种确定内存回收阈值的方法及相关设备,可以提高确定内存回收阈值的灵活性。所述技术方案如下:
5.第一方面,提供了一种确定内存回收阈值的方法,该方法应用于计算机设备,计算机设备的内存包括第一分区和第二分区,第一分区用于存储处理器读取或写入的数据,第二分区用于存储从第一分区迁移出来且压缩后的数据。其中,在该方法中,获取内存使用参数或处理器运行参数,内存使用参数指示内存中第一分区或第二分区的使用情况,处理器运行参数指示处理器的运行情况;根据内存使用参数或处理器运行参数,调整内存回收阈值。
6.在本技术实施例中,可以基于计算机设备中的内存使用参数或处理器运行参数,对内存回收阈值进行调整。由此可知,本技术实施例提供了一种灵活调整内存回收阈值的方法,从而避免了在诸如zram技术的内存回收机制中内存回收阈值通常是固定不变的问题。此外,由于内存回收阈值可以灵活调整,因此不仅可以避免较低的内存回收阈值导致无法充分发挥内存回收技术的优势的问题,还可以避免较高的内存回收阈值导致的系统性能较低的问题。
7.基于第一方面提供的方法,在一种可能的实现方式中,内存使用参数包括第二分区的使用率,处理器运行参数包括内存回收操作指示参数,内存回收操作指示参数指示处理器是否正在进行内存回收操作。这种场景下,上述根据内存使用参数或处理器运行参数,调整内存回收阈值的实现方式可以为:确定第二分区的使用率超过使用率阈值,且内存回收操作指示参数指示处理器正在进行内存回收操作,则下调内存回收阈值。
8.在本技术实施例中,确定第二分区的使用率超过使用率阈值,表明当前第二分区的可用容量较少,此时则不宜进行内存回收操作。但是确定处理器当前正进行内存回收操作,此时可以下调内存回收阈值,以尽量避免后续再次触发内存回收操作并尽快结束当前正在进行的内存回收操作。
9.基于第一方面提供的方法,在一种可能的实现方式中,内存使用参数包括第一分区的空闲内存,内存回收阈值包括第一内存回收阈值和第二内存回收阈值,第一内存回收阈值大于第二内存回收阈值,第一内存回收阈值用于指示结束内存回收操作的临界值,第二内存回收阈值用于指示开始进行内存回收操作的临界值。这种场景下,上述根据内存使用参数或处理器运行参数,调整内存回收阈值的实现方式可以为:根据第一分区的空闲内存与第一内存回收阈值或第二内存回收阈值之间的大小关系,调整第一内存回收阈值或第二内存回收阈值。
10.在本技术实施例中,可以考虑第一分区的空闲内存。确定第一分区的空闲内存比较多,这种情况下假设不调整内存回收阈值,操作系统可能就不再进行内存回收操作,这样容易造成第二分区的空间的浪费。确定第一分区中的空闲内存较少,这种情况下假设不调整内存回收阈值,操作系统可能一直触发内存回收操作,导致第二分区中的可用空间很容易不足。因此,在这种场景下,可以基于第一分区的空闲内存与第一内存回收阈值或第二内存回收阈值之间的大小关系,调整第一内存回收阈值和第二内存回收阈值。
11.基于第一方面提供的方法,在一种可能的实现方式中,根据该空闲内存与第一内存回收阈值或第二内存回收阈值之间的大小关系,调整第一内存回收阈值或第二内存回收阈值的实现方式可以为:确定空闲内存超过第一内存回收阈值的次数大于或等于第一参考次数,则上调第二内存回收阈值。
12.基于第一方面提供的方法,在一种可能的实现方式中,根据第一分区的空闲内存与第一内存回收阈值或第二内存回收阈值之间的大小关系,调整第一内存回收阈值或第二内存回收阈值的实现方式可以为:确定空闲内存低于第二内存回收阈值的次数大于或等于第二参考次数,则下调第一内存回收阈值。可选地,还可以在空闲内存低于计算机设备中配置的最小空闲字节数转换得到的最小内存回收阈值下时,调第一内存回收阈值。
13.基于第一方面提供的方法,在一种可能的实现方式中,处理器运行参数包括内存回收操作指示参数,内存回收操作指示参数指示处理器是否正在进行内存回收操作。这种场景下,根据第一分区的空闲内存与第一内存回收阈值或第二内存回收阈值之间的大小关系,调整第一内存回收阈值或第二内存回收阈值的实现方式可以为:确定该空闲内存超过第二内存回收阈值但是低于第一内存回收阈值,且内存回收操作指示参数指示处理器正在进行内存回收操作,则下调第一内存回收阈值。
14.在本技术实施例中,基于第一分区的空闲内存与第一内存回收阈值或第二内存回收阈值之间的不同的大小关系,可以对内存回收阈值进行不同程度的调整。提高了调整内存回收阈值的灵活性。
15.基于第一方面提供的方法,在一种可能的实现方式中,计算机设备中配置有内存回收线程,处理器基于内存回收线程执行内存回收操作,内存回收操作指示参数为内存回收线程的处理器占用率。其中,内存回收线程的处理器占用率超过预设值时指示处理器正在进行内存回收操作,内存回收线程的处理器占用率低于预设值时指示处理器没有进行内
存回收操作。
16.在本技术实施例中,可以通过内存回收线程的处理器占用率来确定处理器是否正在进行内存回收操作,提高了本技术实施例提供的方法在调整内存回收阈值时的效率。
17.基于第一方面提供的方法,在一种可能的实现方式中,计算机设备还包括多个非统一内存访问nmua节点,多个numa节点中每个numa节点的内存包括第一分区和第二分区,调整内存回收阈值是指调整多个numa节点中任一nmua节点的内存回收阈值,多个numa节点中各numa节点的内存回收阈值相互独立。
18.本技术实施例提供的方法可以应用在包括多个numa节点的计算机设备中。由于各个numa节点本地的内存相互独立,因此,多个numa节点中各numa节点的内存回收阈值也相互独立。这种场景下,在本技术实施例中,对计算机设备中的内存回收阈值进行调整可以是对任意numa节点中的内存回收阈值进行调整。提高了本技术实施例提供的方法的应用灵活性。
19.基于第一方面提供的方法,在一种可能的实现方式中,计算机设备中配置有水线控制文件,水线控制文件用于存储指示内存回收阈值的参数。这种场景下,在该方法中,根据调整后的内存回收阈值,修改水线控制文件中的该参数的值。
20.由于本技术实施例提供的内存回收阈值可以灵活调整,因此,本技术实施例还在计算机设备中配置的水线控制文件,以便于存储调整后的内存回收阈值,从而相应提高了后续基于调整后的内存回收阈值进行内存回收操作的效率。
21.可选地,在该方法中,还可以显示配置界面,该配置界面包括水线调整控件;响应于针对该水线调整控件的选择操作,获取水线调整规则;其中,水线调整规则包括上调内存回收阈值的幅度、或下调内存回收阈值的幅度、或针对第二分区的使用率阈值。
22.在本技术实施例中,还可以通过人机交互的方式对调整水线过程中的一些规则进行配置,提高了本技术实施例提供的方法的灵活性。
23.第二方面,提供了一种计算机设备,该计算机设备具有实现上述第一方面中确定内存回收阈值的方法行为的功能。该计算机设备包括至少一个模块,该至少一个模块用于实现上述第一方面所提供的确定内存回收阈值的方法。
24.第三方面,提供了一种计算机设备,该计算机设备的结构中包括处理器和存储器,所述存储器用于存储程序代码,所述处理器用于执行所述程序代码以实现上述第一方面中任一方面所述的方法。
25.第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面中任一方面所述的方法。
26.第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面中任一方面所述的方法。
27.上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
附图说明
28.图1是本技术实施例提供的一种计算机设备的软件系统架构示意图;
29.图2是本技术实施例提供的一种uma机制中的计算机设备的硬件架构示意图;
30.图3是本技术实施例提供的一种numa机制中的计算机设备的硬件架构示意图;
31.图4是本技术实施例提供的一种确定内存回收阈值的方法流程图;
32.图5是本技术实施例提供的另一种确定内存回收阈值的方法流程图;
33.图6是本技术实施例提供的一种计算机设备的结构示意图。
具体实施方式
34.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
35.在对本技术实施例进行详细解释说明之前,先对本技术实施例的应用场景进行说明。
36.目前,无论为计算机设备的配置的内存有多大,计算机设备的操作系统在运行时总有可能出现内存不足的情况。当出现内存不足时,操作系统需要采取各种办法避免操作系统出现运行异常的情况。在一种可能的实现方式中,操作系统可以回收一部分当前正在使用的内存,用于满足新发生的内存需求。在linux系统中,这种回收内存的方法还称为“页面回收(page reclaim)”。
37.下面以压缩内存(zip random access memory,zram)技术为例说明上述内存回收的具体过程。需要说明的是,zram技术仅仅是内存回收的一种可能的实现方式,本技术实施例提供的确定内存回收阈值的方法不限于应用在zram技术中,还可以应用在其他类型的内存回收技术中。
38.zram技术是linux系统中的一种内存优化机制。在zram技术中,预先在内存中划分一部分空间来创建zram块设备,并将创建的zram设备作为压缩分区。该压缩分区还可以称为交换(swap)区。内存中剩余的空间则作为系统分区,系统分区用于存储原本放置在内存中的处理器读取或写入的数据。当系统分区中的剩余容量不足时,可以将系统分区中不活跃的内存页压缩并存储到压缩分区,并删除系统分区中这部分不活跃的内存页,从而让系统分区可用容量增多。
39.和基于磁盘上的空间配置的交换分区相比,由于zram技术中的压缩分区基于内存,因此,在zram技术中,当被压缩的数据需要再次使用时,直接从基于内存的压缩分区中读取即可,读取速度更快。因此,上述内存回收机制相对于基于磁盘的内存回收机制性能更优。
40.本技术实施例提供的确定内存回收阈值的方法就可以应用于上述zram技术中,也可以应用在其他能够调整内存回收阈值的内存回收技术中,本技术实施例对此不做具体限定。为了便于后续说明,将前述的系统分区称为第一分区,压缩分区称为第二分区。也即是,后续实施例中涉及的第一分区是指计算机设备的内存中用于存储处理器读取或写入的数据的分区,第二分区是指计算机设备的内存中用于存储从第一分区迁移出来且压缩后的数据。其中,从第一分区迁移出来且压缩后的数据是指:将第一分区中的数据从第一分区删除,然后将这部分删除的数据压缩后放入第二分区。
41.目前,在诸如zram技术的内存回收机制中,内存回收阈值通常是固定不变的。通常是先根据计算机设备中预置的最小空间字节数(min-free-kbytes)通过单位换算确定出最小水线(pages_min)。然后,根据最小水线确定出低水线(pages_low)和高水线(pages_
high)。确定出的低水线和高水线即为两个内存回收阈值,后续根据这两个参数便可确定什么时机下进行内存回收操作,并在什么时机下停止内存回收操作。
42.其中,低水线和高水线分别是将最小水线按照一定比例放大即可。比如,将最小水线放大15%得到低水线,将最小水线放大30%得到高水线。
43.在计算机设备中预置的最小空间字节数不变的情况下,上述低水线和高水线也是固定值。这样将可能导致如下两个技术问题:
44.(1)如果计算机设备中预置的最小空间字节数过小,这样确定的低水线和高水线也相应比较小。较小的低水线导致很难触发zram机制进行内存回收,且较小的高水线导致内存回收机制很快就结束,进而就无法发挥zram机制的作用。
45.(2)如果计算机设备中预置的最小空闲字节数较大,这样确定的低水线和高水线均将比较大。而较大的高水线将导致系统内存中预留过多内存,使得实际可使用内存降低。且较大的低水线会导致内存回收机制被频繁的触发,导致系统性能降低。
46.基于上述技术问题,本技术实施例提供的一种动态调整内存回收机制的方法,目的在于提供一种能够根据需求灵活调整内存回收阈值的方法,以充分发挥内存回收机制的优势。
47.目前的内存回收操作是由计算机设备中的操作系统来实现的。为了后续便于说明,下面先对本技术实施例涉及的计算机设备的软件系统架构进行简单说明。
48.图1是本技术实施例提供的一种计算机设备的软件系统架构示意图。如图1所示,该计算机设备100包括应用程序层(applications)101和操作系统102。其中,操作系统102用于为应用程序等101访问计算机设备中的硬件提供统一的中间层。应用程序层101中包括安装在计算机设备上的各类应用程序,应用程序还可以称为客户端、应用等。操作系统102用于管理计算机设备中诸如cpu、内存、磁盘等硬件资源,以向应用程序层101中的应用程序提供硬件资源。
49.此外,如图1所示,操作系统102中包括用户态空间(user space)1021和内核态空间(kernel space)1022。用户态空间1021为应用程序执行的空间。内核态空间中部署有操作系统的内核,内核态空间中还提供了用户态空间连接内核的系统调用接口。通过用户态空间1021和内核态空间1022的划分,可以实现对不同应用程序对计算机设备中的资源的访问权限的限制。关于如何对不同应用程序对计算机设备中的资源的访问权限的限制,本技术实施例不做详细说明。
50.如图1所示,内核态空间1022中部署内存回收线程(the kernel swap daemon,kswapd)和内存分配器。该内存回收线程用于执行内存回收操作。内存分配器用于管理内存。
51.需要说明的是,随着计算机设备技术的发展,一个计算机设备可以包括多个cpu,这多个cpu访问内存有两种访问机制。一种是统一内存访问(uniform memory access,uma)机制。在uma机制中,所有处理器共享统一的内存,此时,上述内存回收线程用于回收该统一的内存。另一种是非一致性内存访问(non-uniform memory access,numa)机制。在numa中,一个或多个处理器和以及这一个或多个处理器本地的内存称为一个numa节点,一个numa节点中的处理器优先访问本地的内存,同时也可以通过numa节点间的总线访问其他的nmua节点中的内存。此时,每个numa节点对应一个上述的内存回收线程,每个内存回收线程用于回
收相应nmua节点中的内存。
52.下面结合图2和图3对上述两种内存访问机制进行简单说明。
53.图2是本技术实施例提供的一种uma机制中的计算机设备的硬件架构示意图。如图2所示,该计算机设备包括多个中央处理器(central processing unit,cpu),任一cpu通过总线可以访问到共享内存。共享内存可以是各个cpu本地的内存组成的一个总共的内存空间,也可以是其他存储设备提供的统一的内存空间。
54.在uma机制中,总线保证所有的cpu的内存访问是一致的,即每个处理器共享相同的内存地址空间。但随着cpu数量的增加,这样的架构对总线的带宽带来挑战,并且可能引发不同处理器访问同一块内存的冲突问题。
55.图3是本技术实施例提供的一种numa机制中的计算机设备的硬件架构示意图。如图3所示,该计算机设备包括多个unma节点。每个nmua节点包括一个或多个cpu、以及这一个或多个cpu本地的内存。任一numa节点内部的处理器可以通过内部总线访问本地内存。不同nmua节点上的处理器可以通过外部总线互相访问内存。
56.在图3所示的多个numa节点中每个numa节点的内存包括第一分区和第二分区。此时在本技术实施例中,调整内存回收阈值是指调整多个numa节点中任一nmua节点的内存回收阈值。
57.本技术实施例提供的确定内存回收阈值的方法可以应用在图2所示的计算机设备中,也可以应用在图3所示的计算机设备中。本技术实施例对此不做具体限定。
58.为了能够实现操作系统对内存回收阈值进行动态调整,对图1所示计算机设备中的操作系统的配置进行了扩展。具体扩展内容如下:
59.1、在操作系统的用户态空间中配置水线调节线程,如图1所示。
60.该水线调节线程用于实现本技术实施例提供的方法以实现对内存回收阈值的调整。当应用程序层的某个应用程序或者操作系统触发该水线调节线程时,计算机设备中的处理器便可基于本技术实施例提供的方法调整内存回收阈值。
61.上述水线调节线程可以由应用程序层的应用程序或操作系统周期性地自动触发。其中,触发该水线调节线程的周期可以预先配置。可选地,上述水线调节线程可以由应用程序层的应用程序基于用户的操作来触发的。比如,在一种可能的实现方式中,当计算机设备确定当前达到触发水线调节线程的条件时,可以在当前显示界面显示提示信息,该提示信息用于提示用户是否触发水线调节线程。当检测到用户基于该提示信息的确认指令时,则触发该水线调节线程。前述达到触发水线调节线程的条件同样可以预先配置,本技术实施例对此不做限定。
62.需要说明的是,为了便于用户可以基于应用程序层的应用程序来触发上述水线调节线程,将上述水线调节线程配置在操作系统的用户态空间中。可选地,该水线调节线程也可以配置在内核态空间中,此时需要具有内核访问权限的应用程序才可以触发该内存回收线程。
63.此外,在本技术实施例中,还可以通过人机交互的方式来获取水线调整规则。该水线调整规则可以包括上调内存回收阈值的幅度、或下调内存回收阈值的幅度、或针对第二分区的使用率的阈值等等一些规则。以便于水线调节线程基于这些水线调整规则对内存回收阈值进行调整。
64.因此,在一种可能的实现方式中,计算机设备还可以显示配置界面,该配置界面包括水线调整控件,计算机设备响应于针对该水线调整控件的选择操作,获取水线调整规则。该选择操作可以由用户通过语音、点击、或触摸等方式触发。在计算机设备检测到该选择操作时,便可基于用户输入的信息获取该水线调整规则。
65.上述水线调整规则可以由用户基于需求任意设置,本技术实施例并不限定水线调整规则的具体内容。
66.2、在操作系统的内核态空间中配置水线控制文件,如图1所示。
67.该水线控制文件用于存储指示内存回收阈值的参数。具体的,在图3所示的numa机制中,水线控制文件用于存储指示每个nmua节点对应的内存回收阈值的参数。在图2所示的uma机制中,水线控制文件用于存储指示整个计算机设备对应的内存回收阈值的参数。
68.图1中的内存回收线程在执行内存回收操作时,从水线控制文件中读取指示内存回收阈值的参数的值,从而获取到内存回收阈值。内存回收线程基于获取的内存回收阈值执行内存回收操作。其中,内存回收阈值包括第一内存回收阈值和第二内存回收阈值,第二内存回收阈值小于第一内存回收阈值。内存回收线程基于获取的内存回收阈值执行内存回收操作具体是指:当内存中的第一分区的剩余容量低于第二内存回收阈值时,将第一分区中的部分数据压缩回收至内存中的第二分区,直至第一分区的剩余容量超过第一内存回收阈值。由此可知,第一内存回收阈值用于指示结束内存回收操作的临界值,第二内存回收阈值用于指示开始进行内存回收操作的临界值。
69.另外,由于目前内存回收操作是由内核态空间中的内存回收线程来实现的,因此,水线控制文件也相应配置在内核态空间中,以避免内存回收阈值被恶意应用程序随意修改。可选地,水线控制文件也可以基于需求适应性地配置在用户态空间中,本技术实施例对此不做限定。
70.3、新增内存分配器修改水线控制文件的功能。
71.在水线自动线程部署于用户态空间的情况下,在水线调节线程对内存回收阈值进行调整后,由于水线调节线程无法访问内核态空间中的信息,因此,本技术实施例中由内存分配器会将调整后的内存回收阈值更新到水线控制文件中,以便于内存回收线程基于调整后的内存回收阈值执行内存回收操作。
72.比如,在图3所示的numa机制中,如果水线调节线程当前对任一nmua节点的内存回收阈值进行了调整,则内存分配器可以根据调整后的内存回收阈值修改水线控制文件中该numa节点的内存回收阈值。
73.基于上述对操作系统的配置,操作系统中的水线调节线程便可通过下述实施例实现本技术实施例提供的确定内存回收阈值的方法。
74.图4是本技术实施例提供的一种确定内存回收阈值的方法流程图。如图4所示,该方法包括如下几个步骤。
75.步骤401:获取内存使用参数或处理器运行参数,该内存使用参数指示内存中第一分区或第二分区的使用情况,该处理器运行参数指示处理器的运行情况。
76.需要说明的是,步骤401中的获取内存使用参数或处理器运行参数包括三种情况。一种仅获取内存使用参数,一种是仅获取处理器运行参数,还有一种是同时获取内存使用参数和处理器运行参数。此外,内存使用参数指示内存中第一分区或第二分区的使用情况
也同样包括三种情况。一种是内存使用参数指示内存中第一分区的使用情况,一种是内存使用参数指示内存中第二分区的使用情况,还有一种是内存使用参数指示内存中第一分区和第二分区的使用情况。也即是,在本技术实施例中,a或b可以包括三种情况,一种是a,一种是b,另一种是a和b。
77.在一种可能的实现方式中,步骤401中的内存使用参数可以包括第一分区的空闲内存等参数。其中,第一分区的空闲内存能够指示第一分区的使用情况。第一分区的空闲内存越多,表明第一分区当前使用的可能比较少,这种情况下,当前没有必要进行内存回收操。第一分区的空闲内存越少,表明第一分区当前使用的可能比较多,这种情况下,当前可能需要进行内存回收操作了。因此通过第一分区的使用情况可以指示当前是否有必要进行内存回收操作。因此,在本技术实施例中,可以基于第一分区的使用情况来调整内存回收阈值。
78.需要说明的是,第一分区的空闲内存仅仅是指示第一分区的使用情况的一种可能的参数,第一分区的使用情况也可以通过其他参考来表征,比如,第一分区的已使用容量、第一分区的闲置率、或第一分区的使用率等等。第一分区的闲置率是指第一分区的空闲内存和第一分区的总容量之间的比值,第一分区的使用率是指第一分区的已使用容量和第一分区的总容量之间的比值。
79.此外,步骤401中的内存使用参数还可以包括第二分区的使用率等参数。第二分区的使用率能够指示第二分区的使用情况。第二分区的使用率越大,表明第二分区中存储的数据越多,第二分区的剩余空间越小。第二分区的使用率越小,表明第二分区中存储的数据越少,第二分区的剩余空间越大。其中,通过第二分区的使用情况能够指示允许回收的内存的多少。所以,在本技术实施例中,可以通过第二分区的使用情况调整内存回收阈值,以实现基于实际情况灵活调整内存回收阈值。
80.同样需要说明的是,第二分区的使用率仅仅是指示第二分区的使用情况的一种可能的参数,第二分区的使用情况也可以通过其他参考来表征,比如,第二分区的已使用容量、第二分区的闲置率、或第二分区的使用率等等。关于第二分区的已使用容量、第二分区的闲置率、或第二分区的使用率的解释可以参考第一分区中相应概念,在此不再赘述。
81.此外,上述处理器运行参数可以包括内存回收操作指示参数,该内存回收操作指示参数指示处理器是否正在进行内存回收操作。
82.在一种可能的实现方式中,基于图1所示的软件系统架构可知,操作系统配置有内存回收线程(kswapd),处理器基于内存回收线程执行内存回收操作。因此,上述内存回收操作指示参数具体可以是指该内存回收线程的处理器占用率。此时,判断处理器是否正在执行内存回收操作的实现方式可以为:如果内存回收线程的处理器占用率超过预设值,则确定处理器正在进行内存回收操作。相应地,如果内存回收线程的处理器占用率低于预设值,则确定处理器没有进行内存回收操作。前述预设值为预先配置的数值,该预设值可以为0,也可以为其他接近0的一个数值。
83.其中,操作系统中各个线程的处理器占用率可以直接从处理器的运行状态相关参数中获取,本技术实施例对此不做过多说明。可选地,也可以通过其他指标来表征内存回收操作指示参数。比如,可以通过该内存回收线程启动关闭情况来表征内存回收操作指示参数,本技术实施例对此不做限定。
84.此外,上述内存回收操作指示参数仅仅为指示处理器运行情况的一种可能的方式。可选地,该处理器运行操作还可以包括处理器当前进行内存回收操作的能力等参数。这种情况下,在后续需要调整内存回收阈值时,还可以将处理器当前进行内存回收操作的能力考虑在内,对此不做过多说明。
85.步骤402:根据内存使用参数或处理器运行参数,调整内存回收阈值。
86.在步骤402中调整内存回收阈值可以基于第二分区的使用率的不同,分别执行不同的调整动作。因此,步骤402可以通过以下几个场景分别来说明。
87.场景一:第二分区的使用率超过使用率阈值。
88.在场景一中,第二分区的使用率超过使用率阈值,表明当前第二分区的可用容量较少,此时不宜进行内存回收操作。但是如果处理器当前正进行内存回收操作,此时可以下调内存回收阈值,以尽量避免后续再次触发内存回收操作并尽快结束当前正在正在进行的内存回收操作。如果处理器当前没有进行内存回收操作,由于不确定后续使用率阈值是否会发生变化,可以先维持内存回收阈值不变。
89.因此,在一种可能的实现方式中,如果第二分区的使用率超过使用率阈值,且内存回收操作指示参数指示处理器正在进行内存回收操作,则下调内存回收阈值。相应地,如果第二分区的使用率超过使用率阈值,且内存回收操作指示参数指示处理器没有进行内存回收操作,则维持内存回收阈值不变。
90.上述使用率阈值为预先配置的阈值,该使用率阈值可以基于需求设置。比如,该使用率阈值可以为90%。
91.上述下调内存回收阈值可以是指同时下调第一内存回收阈值和第二内存回收阈值。比如,可以按照相同的比例下调第一内存回收阈值和第二内存回收阈值,也可以按照不同的比例下调第一内存回收阈值和第二内存回收阈值。本技术实施例对此不做具体限定。
92.此外,在本技术实施例中,超过可以为大于、也可以为大于或等于。低于可以为小于,也可以为小于或等于。当超过表示大于时,低于相应表示为小于或等于。当超过表示大于或等于时,低于相应表示为小于。
93.场景二:第二分区的使用率低于使用率阈值。
94.在场景二中,第二分区的使用率低于使用率阈值,表明当前第二分区的可用容量较多,此时适合进行内存回收操作。这种场景下,可以直接上调内存回收阈值,以尽快触发内存回收操作。
95.可选地,在这种场景下,还可以进一步考虑第一分区的空闲内存。如果第一分区的空闲内存比较多,这种情况下假设不调整内存回收阈值,操作系统可能就不再进行内存回收操作,这样容易造成第二分区的空间的浪费。如果第一分区中的空闲内存较少,这种情况下假设不调整内存回收阈值,操作系统可能一直触发内存回收操作,导致第二分区中的可用空间很容易不足。
96.因此,在一种可能的实现方式中,如果第二分区的使用率低于使用率阈值,则根据第一分区的空闲内存与第一内存回收阈值或第二内存回收阈值之间的大小关系,来灵活调整第一内存回收阈值和第二内存回收阈值。
97.上述根据第一分区的空闲内存与第一内存回收阈值或第二内存回收阈值之间的大小关系,调整第一内存回收阈值和第二内存回收阈值具体分为以下三种情况:
98.(1)如果空闲内存超过第一内存回收阈值的次数大于或等于第一参考次数,则上调第二内存回收阈值,以使第二低内存回收阈值超过空闲内存。
99.如果空闲内存超过第一内存回收阈值的次数大于或等于第一参考次数,相当于空闲内存持续超过第一内存回收阈值,表明在一段较长的时间处理器均不会触发内存回收操作,这样不利于发挥内存回收机制的优势,因此,这种场景下可以加大继续进行内存回收操作的力度。具体地,可以上调第二内存回收阈值,以使第二低内存回收阈值超过空闲内存,目的在于快速触发内存回收操作、并尽量减缓结束内存回收操作。
100.此外,上述上调第二内存回收阈值也可以不设置“以使第二低内存回收阈值超过空闲内存”的目标,只是简单上调下即可。
101.在上调第二内存回收阈值后,可以实现空闲内存相对于第二内存回收阈值较少,从而实现在空闲内存较多的情况下触发内存回收操作。
102.此外,上述上调第二内存回收阈值的同时,也可以上调第一内存回收阈值。在一种可能的实现方式中,可以按照相同的比例上调第一内存回收阈值和第二内存回收阈值。比如,分别将第一内存回收阈值和第二内存回收阈值上调至原来的110%。
103.另外,上述第一分区的空间内存超过第一内存回收阈值的次数大于或等于第一参考次数可以是指:在周期性检测第一分区的空间内存是否超过第一内存回收阈值的情况下,超过第一参考次数次出现第一分区的空间内存超过第一内存回收阈值的情况。该第一参考次数可以是三次,也可以是其他次数。此外,前述周期性检测的周期也可以预先配置,在此不再详细说明。
104.此外,如果在一段较长的第一参考时间段内第一分区的空间内存均超过第一内存回收阈值,此时也可以按照上述相同的方式调整内存回收阈值,具体调整方式和上述上调第二内存回收阈值的相关实现方式一样,在此不再赘述。该第一参考时间段可以预先配置,本技术实施例对此不做限定。
105.(2)如果空闲内存低于第二内存回收阈值的次数大于或等于第二参考次数,则下调第一内存回收阈值,以使第一内存回收阈值低于空闲内存。
106.如果空闲内存于第二内存回收阈值的次数大于或等于第二参考次数,相当于空闲内存持续低于第二内存回收阈值,表明按照已经有的内存回收阈值进行多次内存回收操作之后,空闲内存仍然低于第二内存回收阈值,此时在已有的内存回收阈值下,已经没有必要再进行内存回收操作了。因此,可以下调第一内存回收阈值。在下调第一内存回收阈值后,可以实现空闲内存相对于第一内存回收阈值较多,从而实现停止内存回收操作。
107.和情况一种类似,上述下调第一内存回收阈值也可以不设置“以使第一内存回收阈值低于空闲内存”的目标,只是简单下调下即可。上述第二参考时间段和情况一中的第一参考时间段可以相同,也可以不同。此外,情况二中的连续多次可以和情况一中的连续多次可以为相同的次数,也可以为不相同的次数。
108.此外,上述下调第一内存回收阈值的同时,也可以下调第二内存回收阈值。在一种可能的实现方式中,可以按照相同的比例下调第一内存回收阈值和第二内存回收阈值。比如,分别将第一内存回收阈值和第二内存回收阈值下调至原来的95%。
109.另外,上述第一分区的空间内存于第二内存回收阈值的次数大于或等于第二参考次数可以是指:处理器在超过第二参考次数次执行内存回收读操作后,第一分区的空间内
存均低于第二内存回收阈值。该第二参考次数可以为三次,也可以为其他次数,在此不做具体限定。
110.此外,如果在一段较长的第二参考时间段内第一分区的空间内存均低于第二内存回收阈值,此时也可以按照上述相同的方式调整内存回收阈值,具体调整方式和上述下调第一内存回收阈值的相关实现方式一样,在此不再赘述。该第二参考时间段可以预先配置,本技术实施例对此不做限定。
111.上述情况(1)和情况(2)中的第一参考次数和第二参考次数可以为相同次数,也可以为不同次数。上述情况(1)和情况(2)中的第一参考时间段和第二参考时间段可以为相同时长,也可以为不同时长。
112.此外,在第一分区的空闲内存低于计算机设备中配置的最小空闲字节数转换得到的最小内存回收阈值的情况下,可以无需等待这种情况的持续发生,直接下调第一内存回收阈值即可。可选地,也可以等待这种情况的持续发生,再去下调第一内存回收阈值。
113.(3)如果空闲内存超过第二内存回收阈值但是低于第一内存回收阈值,且内存回收操作指示参数指示处理器正在进行内存回收操作,则下调第一内存回收阈值,以使内存回收阈值中的第一内存回收阈值低于空闲内存。相应地,如果空闲内存超过第二低内存回收阈值但是低于第一内存回收阈值,且内存回收操作指示参数指示处理器没有进行内存回收操作,则维持第一内存回收阈值不变。
114.在空闲内存超过第二内存回收阈值但是低于第一内存回收阈值的情况下,可以继续参考处理器的运行情况来确定是否需要调整内存回收阈值。如果空闲内存超过第二内存回收阈值但是低于第一内存回收阈值,表明当前没有需要进行内存回收的强烈需求。这种场景下,如果内存回收操作指示参数指示处理器正在进行内存回收操作,此时可以下调第一内存回收阈值。在下调第一内存回收阈值后,可以实现空闲内存相对于第一内存回收阈值较多,从而实现处理器停止当前正在进行的内存回收操作。
115.可选地,在空闲内存超过第二内存回收阈值但是低于第一内存回收阈值的情况下,还可以不考虑其他因素维持内存回收阈值不变,本技术实施例对此不做限定。
116.需要说明的是,上述场景一以及场景二,以及场景二的三种情况均没有先后顺序之分,可以并行实现。
117.另外,上述根据第一分区的空闲内存与第一内存回收阈值或第二内存回收阈值之间的大小关系,调整第一内存回收阈值和第二内存回收阈值的三种情况是在第二分区的使用率低于使用率阈值的场景下实现的。可选地,也可以不考虑第二分区的使用率是否低于使用率阈值,根据第一分区的空闲内存与第一内存回收阈值或第二内存回收阈值之间的大小关系,调整第一内存回收阈值和第二内存回收阈值。本技术实施例对此不做限定。
118.需要说明的是,上述步骤402是以第二分区的使用率或第一分区的空闲内存作为指示内存的使用情况的参数为例进行说明。可选地,如果选择第二分区的其他参数以及第一分区的其他参数来指示内存的使用情况,具体调整内存回收回收的过程同样可以参考上述实现步骤402,原理上实质是相同的,只不过使用的参数不同而已。
119.综上所述,在本技术实施例中,可以基于计算机设备中的内存使用参数或处理器运行参数,对内存回收阈值进行调整。由此可知,本技术实施例提供了一种灵活调整内存回收阈值的方法,从而避免了在诸如zram技术的内存回收机制中内存回收阈值通常是固定不
变的问题。此外,由于内存回收阈值可以灵活调整,因此不仅可以避免较低的内存回收阈值导致无法充分发挥内存回收技术的优势的问题,还可以避免较高的内存回收阈值导致的系统性能较低的问题。
120.下面结合图5对本技术实施例提供的方法进一步进行解释说明。需要说明的是,图5所示的实施例仅仅是前述图4所示实施例中的部分可选的技术方案,并不构成对本技术实施例提供的调整内存回收阈值的方法的限定。
121.如图5所示,该调整内存回收阈值的方法包括如下几个步骤:
122.1、初始化第一内存回收阈值和第二内存回收阈值。其中,初始化的第一内存回收阈值和第二内存回收阈值可以为基于计算机设备中配置的最小空闲字节数(min-free-kbytes)转换得到的,具体实现方式详见前述实施例。
123.2、基于kswapd的cpu占用率和第二分区的使用率、第二分区的空闲内存,调整内存回收阈值。
124.具体地,以使用率阈值为90%为例进行说明,在第二分区的使用率超过使用率阈值90%的情况下:
125.如果kswapd的cpu占用率为预设值0,且第二分区的使用率超过使用率阈值90%,则维持内存回收阈值不变。
126.如果kswapd的cpu占用率大于预设值0,且第二分区的使用率超过使用率阈值90%,则下调内存回收阈值。
127.在第二分区的使用率低于使用率阈值90%的情况下:
128.如果空闲内存超过第一内存回收阈值(也即是高水线)的次数大于或等于3次时,表明空闲内存持续超过第一内存回收阈值,则上调第一内存回收阈值和第二内存回收阈值的值,从而触发内存压缩。该3次为图4实施例中第一参考次数的一种举例说明,并不构成对图4实施例中的第一参考次数的限定。
129.如果空闲内存低于第二内存回收阈值(也即是低水线)的次数小于或等于3次、表明空闲内存持续低于第二内存回收阈值,则下调第一内存回收阈值和第二内存回收阈值的值,从而停止内存压缩。该3次为图4实施例中第二参考次数的一种举例说明,并不构成对图4实施例中的第二参考次数的限定。或者,如果空闲内存低于最小空闲字节数(min-free-kbytes)转换得到的最小水线时,则下调第一内存回收阈值和第二内存回收阈值的值,从而停止内存压缩。
130.如果空闲内存介于第一内存回收阈值和第二内存回收阈值之间,且kswapd的cpu占用率大于预设值0,则下调第一内存回收阈值和第二内存回收阈值的值,从而停止内存压缩。
131.关于图5所示的实施例的详细实现方式可以参考图4所示实施例,在此不再赘述。
132.需要说明的是,上述使用率阈值90%、kswapd的cpu占用率对应的预设值0均是用于举例说明,本技术实施例并不限定使用率阈值以及预设值的具体数值。另外,上述各个场景下的调整内存回收阈值的操作并没有先后顺序,是可以并列实现的。
133.图6是本技术实施例提供的一种计算机设备。如图6所示,该计算机设备600包括:
134.获取模块601,用于获取内存使用参数或处理器运行参数,内存使用参数指示内存中第一分区或第二分区的使用情况,处理器运行参数指示处理器的运行情况;
135.调整模块602,用于:根据内存使用参数或处理器运行参数,调整内存回收阈值。
136.可选地,内存使用参数包括第二分区的使用率,处理器运行参数包括内存回收操作指示参数,内存回收操作指示参数指示处理器是否正在进行内存回收操作;
137.调整模块用于:
138.确定第二分区的使用率超过使用率阈值,且内存回收操作指示参数指示处理器正在进行内存回收操作,则下调内存回收阈值。
139.可选地,内存使用参数包括第一分区的空闲内存,内存回收阈值包括第一内存回收阈值和第二内存回收阈值,第一内存回收阈值大于第二内存回收阈值,第一内存回收阈值用于指示结束内存回收操作的临界值,第二内存回收阈值用于指示开始进行内存回收操作的临界值;
140.调整模块用于
141.根据第一分区的空闲内存与第一内存回收阈值或第二内存回收阈值之间的大小关系,调整第一内存回收阈值或第二内存回收阈值。
142.可选地,调整模块用于:
143.确定空闲内存超过第一内存回收阈值的次数大于或等于第一参考次数,则上调第二内存回收阈值。
144.可选地,调整模块用于:
145.确定空闲内存低于第二内存回收阈值的次数大于或等于第二参考次数,则下调第一内存回收阈值。
146.可选地,处理器运行参数包括内存回收操作指示参数,内存回收操作指示参数指示处理器是否正在进行内存回收操作;
147.调整模块用于:
148.确定空闲内存超过第二内存回收阈值但是低于第一内存回收阈值,且内存回收操作指示参数指示处理器正在进行内存回收操作,则下调第一内存回收阈值。
149.可选地,操作系统配置有内存回收线程,处理器基于内存回收线程执行内存回收操作,内存回收操作指示参数为内存回收线程的处理器占用率;
150.其中,内存回收线程的处理器占用率大于预设值时指示处理器正在进行内存回收操作,内存回收线程的处理器占用率等于预设值时指示处理器没有进行内存回收操作。
151.可选地,计算机设备还包括多个非统一内存访问nmua节点,多个numa节点中每个numa节点的内存包括第一分区和第二分区,调整内存回收阈值是指调整多个numa节点中任一nmua节点的内存回收阈值,多个numa节点中各numa节点的内存回收阈值相互独立。
152.可选地,计算机设备中配置有水线控制文件,水线控制文件用于存储指示内存回收阈值的参数;
153.该计算机设备还包括:
154.修改模块,用于:根据调整后的内存回收阈值,修改水线控制文件中该参数的值。
155.可选地,该计算机设备还包括:
156.显示模块,用于显示配置界面,该配置界面包括水线调整控件;
157.获取模块,还用于:响应于针对水线调整控件的选择操作,获取水线调整规则;
158.其中,水线调整规则包括上调内存回收阈值的幅度、或下调内存回收阈值的幅度、
或针对第二分区的使用率阈值。
159.综上所述,在本技术实施例中,可以基于计算机设备中的内存使用参数或处理器运行参数,对内存回收阈值进行调整。由此可知,本技术实施例提供了一种灵活调整内存回收阈值的方法,从而避免了在诸如zram技术的内存回收机制中内存回收阈值通常是固定不变的问题。此外,由于内存回收阈值可以灵活调整,因此不仅可以避免较低的内存回收阈值导致无法充分发挥内存回收技术的优势的问题,还可以避免较高的内存回收阈值导致的系统性能较低的问题。
160.需要说明的是:上述实施例提供的计算机设备在调整内存回收阈值时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的计算机设备与确定内存回收阈值的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
161.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(digital subscriber line,dsl))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(digital versatile disc,dvd))、或者半导体介质(例如:固态硬盘(solid state disk,ssd))等。
162.本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。需要指出的是,以上所述为本技术提供的实施例,并不用以限制本技术实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1