CN115421924A - 一种内存分配方法、装置及设备 - Google Patents
一种内存分配方法、装置及设备 Download PDFInfo
- Publication number
- CN115421924A CN115421924A CN202211204785.5A CN202211204785A CN115421924A CN 115421924 A CN115421924 A CN 115421924A CN 202211204785 A CN202211204785 A CN 202211204785A CN 115421924 A CN115421924 A CN 115421924A
- Authority
- CN
- China
- Prior art keywords
- memory
- instance
- memory storage
- application program
- instances
- 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
- 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/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本说明书实施例提供了一种内存分配方法、装置、设备。可以基于当前设备中运行的应用程序的实例的重要程度,其中,在确定实例重要程度时,可以基于实例的内存访问活跃度、实例所属应用程序的优先级、实例所属应用程序的业务量中的一种或多种确定。然后可以基于该重要程度在第一内存存储器和第二内存存储器之间对应用程序的实例进行迁移,使得重要程度高的实例优先被存储在数据读写速度较快的第一内存存储器中。通过这种方式可以提高内存资源的利用率。
Description
技术领域
本说明书实施例涉及计算机技术领域,尤其涉及一种内存分配方法、装置及设备。
背景技术
针对一些内存密集型的场景,由于这些场景对内存资源的需求量较大,内存资源十分稀缺,因而可以采用混合内存的技术,即同时利用传统的内存存储器,比如,DRAM(Dynamic Random Access Memory,动态随机存取内存)和非易失性存储器(NonvolatileMemory,NVM)作为设备的内存存储器,以增大设备的存储空间。但是,目前针对设备中同时设置有DRAM等传统内存存储器和NVM的场景,并没有很好地对两种存储资源进行合理利用,内存利用率还有待提高。
发明内容
为克服相关技术中存在的问题,本说明书实施例提供了一种内存分配方法、装置及设备。
根据本说明书实施例的第一方面,提供一种内存分配方法,适用于目标设备,所述目标设备包括第一内存存储器以及第二内存存储器,所述第一内存存储器的数据读写速度大于所述第二内存存储器的数据读写速度,所述方法包括:
获取当前运行在所述目标设备的一个或多个应用程序的实例;
确定应用程序的实例的重要程度,并基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,以使得所述第一内存存储器中优先存储所述重要程度高的实例,所述重要程度正相关于以下一项或多项信息:实例的内存访问活跃度、实例所属应用程序的优先级、实例所属应用程序的业务量。
在一些实施例中,所述确定应用程序的实例的重要程度,并基于所述重要程度在第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,包括:
针对运行在所述目标设备的所有实例,分别确定每个实例的重要程度,其中,每个实例的重要程度正相关于以下一项或多项信息:实例的内存访问活跃度、实例所属应用程序的优先级以及实例所属应用程序的业务量;
基于每个实例的重要程度在第一内存存储器或第二内存存储器中为每个实例分配目标存储空间,其中,第一内存存储器中的存储空间优先分配给重要程度高的实例;
基于每个实例当前占用的存储空间和所述目标存储空间,在所述第一内存存储器和所述第二内存存储器之间对至少一个实例进行迁移。
在一些实施例中,所述确定应用程序的实例的重要程度,并基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,包括:
针对所述目标设备中当前运行的应用程序,按照优先级从高到低的顺序依次对每个应用程序执行以下操作:
针对当前应用程序,确定该当前应用程序当前业务处理所需的实例的数量;
在当前业务处理所需的实例的数量小于所述第一内存存储器中存储的该当前应用程序的实例的数量时,确定所述第一内存存储器中存储的该当前应用程序的各实例的重要程度,基于所述重要程度从各实例中确定待迁移实例,并迁移至第二内存存储器;
在当前业务处理所需的实例的数量大于所述第一内存存储器中存储的该当前应用程序的实例的数量时,确定所述第二内存存储器中存储的该当前应用程序的各实例的重要程度,基于所述重要程度从各实例中确定待迁移实例,并迁移至第一内存存储器;其中,所述重要程度正相关于实例的内存访问活跃度。
在一些实施例中,基于所述重要程度从各实例中确定待迁移实例,并迁移至所述第一内存存储器之前,还包括:
确定所述第一内存存储器的当前可用存储空间是否小于所确定的待迁移实例占用的存储空间;
如果是,将所述第一内存存储器中存储的目标应用程序的一个或多个实例迁出至第二内存存储器,以在所述第一内存储存储器腾出存储空间,其中,所述目标应用程序的优先级低于所述当前应用程序的优先级,所述一个或多个实例基于所述重要程度确定。
在一些实施例中,所述目标设备包括多个非统一内存访问NUMA节点,所述第一内存存储器包括多个,多个所述第一内存存储器分布在所述多个非统一内存访问NUMA节点上,每个非统一内存访问NUMA节点包括至少一个所述第一内存存储器,所述基于所述重要程度在第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,包括:
在基于所述重要程度确定将应用程序的实例从第二内存存储器迁移到第一内存储存储器的情况下,将该应用程序的实例从所述第二内存存储器迁移到同一个非统一内存访问NUMA节点上的所述第一内存存储器中。
在一些实施例中,所述目标设备包括多个非统一内存访问NUMA节点,所述第一内存存储器包括多个,多个所述第一内存存储器分布在所述多个非统一内存访问NUMA节点上,每个非统一内存访问NUMA节点包括至少一个所述第一内存存储器,所述重要程度负相关于实例当前占用的内存在非统一内存访问NUMA节点上的分散程度。
在一些实施例中,实例的内存访问活跃度基于实例的冷内存的大小与实例占用的总内存大小的比例确定,其中,所述冷内存为预设时间内被命中次数少于设定次数的内存页。
在一些实施例中,所述基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,包括:
针对基于所述重要程度确定的待迁移实例对应的内存页,从所述内存页中筛选出使用频率高于设定频率的目标内存页,并在所述第一内存存储器和所述第二内存存储器之间迁移所述目标内存页中存储的数据。
在一些实施例中,所述在基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间迁移对应用程序的实例进行迁移之前,所述方法还包括:
针对基于所述重要程度确定的待迁移实例对应的进程,将所述进程的状态切换至冻结状态;
在所述第一内存存储器和所述第二内存存储器之间迁移对应用程序的实例进行迁移之后,所述方法还包括:
将所述进程的状态从冻结状态切换至唤醒状态。
在一些实施例中,所述基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,包括:
针对基于所述重要程度确定的待迁移实例,从预先设置的线程池中获取多个线程,利用所述多个线程并行地对所述待迁移实例进行迁移。
在一些实施例中,所述第一内存存储器为动态随机存储器DRAM,所述第二内存存储器为非易失存储器NVM。
根据本说明书实施例的第二方面,提供一种内存分配装置,适用于目标设备,所述目标设备包括第一内存存储器以及第二内存存储器,所述第一内存存储器的数据读写速度大于所述第二内存存储器的数据读写速度,所述装置包括:
获取模块,用于获取当前运行在所述目标设备的一个或多个应用程序的实例;
迁移模块,用于确定应用程序的实例的重要程度,并基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,以使得所述第一内存存储器中优先存储所述重要程度高的实例,所述重要程度正相关于以下一项或多项信息:实例的内存访问活跃度、实例所属应用程序的优先级、实例所属应用程序的业务量。
根据本说明书实施例的第三方面,提供一种设备,所述设备包括多个非统一内存访问NUMA节点和第二内存存储器,每个非统一内存访问NUMA节点中包括第一内存存储器,所述第一内存存储器的数据读写速度大于所述第二内存存储器的数据读写速度,所述非统一内存访问NUMA节点用于执行上述第一方面提及的方法。
本说明书实施例的有益效果:对于在设备中设置有第一内存存储器和第二内存存储器,且第一内存存储器的数据读写速度大于第二内存存储器的数据读写速度的场景,可以基于当前设备中运行的应用程序的实例的重要程度,其中,在确定实例重要程度时,可以基于实例的内存访问活跃度、实例所属应用程序的优先级、实例所属应用程序的业务量中的一种或多种确定,实例的内存访问活跃度越高、实例所属应用程序的优先级越高、以及实例所属应用程序当前的业务量越大,则实例的重要程度越高。然后可以基于该重要程度在第一内存存储器和第二内存存储器之间对应用程序的实例进行迁移,使得重要程度高的实例优先被存储在第一内存存储器中。通过基于实例的重要程度动态地在第一内存存储器和第二内存存储器之间对实例进行迁移,即可以优先为重要程度高的实例分配数据读写速度快的内存,保证这类实例的处理效率,并且提高内存资源的利用率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
附图说明
此处的附图被并入说明书中并构成本说明书实施例的一部分,示出了符合本说明书实施例的实施例,并与说明书一起用于解释本说明书实施例的原理。
图1为本说明书一示例性实施例示出的一种内存分配方法的示意图;
图2为本说明书一示例性实施例示出的一种内存分配方法的流程图;
图3为本说明书一示例性实施例示出的一种确定待迁移实例的示意图;
图4为本说明书一示例性实施例示出的一种NUMA架构的示意图;
图5(a)为本说明书一示例性实施例示出的一种基于NUMA架构的目标设备的示意图;
图5(b)为本说明书一示例性实施例示出的对待迁移实例进行并发迁移的示意图;
图6(a)和图6(b)为本说明书示例性实施例示出的在DRAM和NVM之间迁移实例的示意图;
图7为本说明书一示例性实施例示出内存分配装置的逻辑框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书实施例的一些方面相一致的装置和方法的例子。
在本说明书实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书实施例。在本说明书实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
针对一些内存密集型的场景,比如,当设备中运行有在线推理、内存数据库、搜索引擎等在运行过程中需占用较多的内存资源的场景,由于这些应用程序运行时接收到的并发业务请求较多,需要创建多个该应用程序的实例去处理这些业务请求,因而,这类应用程序在运行过程中需为其分配较多的内存资源,以存储该应用程序的实例。这种场景下对内存资源的需求量较大,内存资源十分稀缺,尤其是当设备中运行有多个应用程序时,如何合理的为这些应用程序分配内存资源、提高内存资源利用率、并保证一些实时性要求较高的应用程序的处理效率非常关键。
针对内存资源密集型的场景,可以采用混合内存的技术,即同时利用传统的内存存储器,比如,DRAM,和非易失性存储器(nonvolatile memory,NVM)作为设备的内存存储器,以增大设备的存储空间。NVM的性能介于DRAM和固态硬盘(Solid State Drive,SSD)之间,其存储空间通常为DRAM的几倍,数据读取速度略低于DRAM,但是比SSD、磁盘等存储介质要高。在设备中增加NVM作为内存存储器,既可以大大增大设备的存储空间,又可以保证较快的数据读取速度。
但是,目前针对设备中同时设置DRAM等传统内存存储器和NVM的场景,仅仅是增大了存储空间,并没有很好地对两种存储资源进行合理利用,内存资源利用率的还有待提高。
基于此,本说明书实施例提供了一种内存分配方法,对于在设备中设置有第一内存存储器和第二内存存储器,且第一内存存储器的数据读写速度大于第二内存存储器的数据读写速度的场景,可以周期性地确定当前设备中运行的应用程序的实例的重要程度,其中,在确定实例重要程度时,可以基于实例的内存访问活跃度、实例所属应用程序的优先级、实例所属应用程序的业务量中的一种或多种确定,实例的内存访问活跃度越高、实例所属应用程序的优先级越高、以及实例所属应用程序当前的业务量越大,则实例的重要程度越高。然后可以基于该重要程度在第一内存存储器和第二内存存储器之间对应用程序的实例进行迁移,使得重要程度高的实例优先被存储在第一内存存储器中。通过基于实例的重要程度动态地在第一内存存储器和第二内存存储器之间对实例进行迁移,即可以优先为重要程度高的实例分配数据读写速度快的内存,保证这类实例的处理效率,并且提高内存资源的利用率。
本说明书实施例中的目标设备可以是各种电子设备,比如,手机、电脑、服务器、或者也可以是分布式系统中的某个计算节点。该目标设备中包括一个或多个第一内存存储器、以及一个或多个第二内存存储器。当然,目标设备还可以基于实际需求配置一个或多个处理器,其中,第一内存存储器的数据读写速度大于第二内存存储器的数据读写速度,即处理器对第一内存存储器的访问速度高于处理器对第二内存存储器的访问速度。
在一些场景,第一内存存储器可以是DRAM、SRAM等数据读写速度较快、但存储空间较小的存储器,第二内存存储器可以是NVM(非易失存储器)等数据读写速度稍慢,但存储空间较大的存储器。通过混合使用DRAM等存储器和NVM,可以增大设备的存储空间。
如图1所示,为本说明书一个实施例的内存分配方法的示意图,如图2所示,为本说明书实施例的内存分配方法的流程图,当一个或多个应用程序在目标设备运行的过程中,可以周期性的执行步骤S202-S204,以实现动态的对目标设备中运行的各应用程序的实例进行内存再分配。比如,可以每隔预设时间间隔执行一次实例迁移操作,对内存进行再分配。当然,也可以在检测到目标设备中运行的实例数量出现较大的变动的情况下,执行一次实例迁移操作。比如,每当有新的应用程序开启、或者有应用程序关闭的情况下,执行一次实例迁移操作。当然,也可以在检测到应用程序的业务量出现较大变动的情况下执行一次实例迁移操作,具体可以根据实际需求设置。
该内存分配方法具体可以包括以下步骤:
S202、获取当前运行在所述目标设备的一个或多个应用程序的实例;
每个应用程序在同一时间内可能接收到大量的业务请求,为了更快的处理这些业务请求,同一个应用程序可以包括多个副本,副本即应用程序的实例。如图1所示,应用程序A可以包括实例1-实例4,应用程序B包括实例1-实例5,每个实例对应操作系统上的一个进程,然后可以将接收到的多个业务请求分配给这多个实例处理,通过并行地处理这些业务请求,提高处理效率。
在步骤S202中,可以获取目标设备中当前运行的一个或多个应用程序的实例。
S204、确定应用程序的实例的重要程度,并基于所述重要程度在第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,以使得所述第一内存存储器中优先存储所述重要程度高的实例,所述重要程度正相关于以下一项或多项信息:实例的内存访问活跃度、实例所属应用程序的优先级、实例所属应用程序的业务量;
在步骤S204中,在获取到目标设备中当前运行的一个或多个应用程序的实例之后,可以确定应用程序的实例的重要程度。其中,可以根据实例的内存访问活跃度、实例所属应用程序的优先级、实例所属应用程序的业务量中的一种或多种确定应用程序的实例的重要程度。
其中,实例的内存访问活跃度越高,说明该实例越活跃,这种实例通常是比较重要的实例,或者说是性能较好的实例,即其重要程度越高。
通常,同一个设备中会运行多个应用程序,这些应用程序对应的业务的重要程度、以及实时性要求也不一样。因而,可以基于应用程序对应的业务的实时性要求以及业务的重要程度确定应用程序的优先级。业务的实时性要求越高、重要程度越高,则应用程序的优先级越高。针对优先级高的应用程序,应保证其对应的业务请求被优先处理,以保证处理效率。所以,实例所属的应用程序优先级越高,该实例的重要程序也越高。
此外,由于不同时刻,每个应用程序要处理的业务量也不同。比如,在应用程序业务量较大时,希望该应用程序的更多实例存储在数据读写速度更快的第一内存存储器中,以保证及时对业务请求进行处理。而在应用程序业务量较小时,则不需要那么多实例存储在第一内存存储器中,以便可以腾出第一内存存储器的存储空间给其他的有需要的应用程序的实例。因此,实例所属应用程序当前的业务量越大时,则实例的重要程度越高。其中,业务量可以用一段时间内应用程序接收到的业务请求的数量来衡量,比如,可以采用QPS(Queries-Per-Second,每秒查询率)、TPS(Transaction-Per-Second,每秒事务处理量)等来衡量应用程序的业务量。
在对应用程序的实例进行迁移时,可以以目标设备上运行的所有应用程序为维度,统一对所有应用程序的实例进行比较,确定各实例的重要程度,然后再统一进行内存分配和实例迁移。当然,也可以以一个应用程序作为维度,为该应用程序的实例确定重要程度,然后再进行内存分配和实例迁移,比如,可以按照应用程序优先级从高到低的顺序逐一对每个应用程序的实例进行迁移。针对不同的场景,在确定实例的重要程度时要考虑的因素也不同。比如,有些场景,可以仅考虑实例的内存访问活跃度。有些场景,则需同时考虑实例的内存访问活跃度、实例所属应用程序的优先级以及实例所属应用程序的业务量。
在确定应用程序的实例的重要程度后,即可以基于该重要程度在第一内存存储器和第二内存存储器之间对应用程序的实例进行迁移,以使得第一内存存储器中优先存储重要程度高的实例。通过这种方式,可以保证将数据读写速度更快的内存优先分配给重要程度高的实例,从而可以保证优先级高的业务被优先处理、业务量大的业务可以及时被处理,以及可以优先给性能好、更活跃的实例分配速度快的内存,提高内存的利用率和处理效率。
在一些实施例中,在对目标设备上的应用程序的实例进行迁移时,可以每隔一段时间获取目标设备上运行的所有实例,对所有实例进行重要程度排序,然后优先将第一内存存储器的存储空间优先分配给重要程度高的实例,第一内存存储器的存储空间分配完后,再分配第二内存存储器的存储空间。比如,针对运行在目标设备的所有实例,可以分别确定每个实例的重要程度。在这种场景下,在确定每个实例的重要程度时,可以根据实例的内存访问活跃度、实例所属应用程序的优先级以及实例所属应用程序的业务量中的一项或多项信息确定每个实例的重要程度。比如,实例的重要程度可以正相关于实例的内存访问活跃度、实例所属应用程序的优先级以及实例所属应用程序的业务量中的一项或多项。在确定每个实例的重要程度后,可以按照重要程度从高到低的顺序依次为每个实例分配第一内存存储器、第二内存存储器的存储空间,即第一内存存储器中的存储空间优先分配给重要程度高的实例,从而可以确定每个实例的目标存储空间。然后可以基于每个实例当前占用的存储空间和确定的目标存储空间,在第一内存存储器和第二内存存储器之间对每个实例进行迁移。
举个例子,当前目标设备上运行的实例包括:APP1的3个实例(APP1-1、APP1-2、APP1-3),APP2的3个实例(APP2-1、APP2-2、APP2-3)、APP3的3个实例(APP3-1、APP3-2、APP3-3)。然后可以基于实例的访问活跃度、实例所属应用程序的优先级、实例所属应用程序当前的业务量确定上述9个实例的重要程度,然后将第一内存储器的存储空间优先分配给重要程度高的几个实例,假设为APP1-1、APP1-2、APP1-3,APP2-1。如果此时APP1-3存储于第二内存存储器中,则根据分配结果将APP1-3从第二内存存储器迁移至第一内存存储器中。同理,如果此时APP3-3存储于第一内存存储器中,则根据分配结果将APP3-3从第一内存存储器迁移至第二内存存储器中。通过周期性地对目标设备上运行的所有实例的内存进行再分配,可以保证重要程度高的实例在数据读写速度快的内存中。
在一些实施例中,在对目标设备上的应用程序的实例进行迁移时,可以按照应用程序的优先级从高到低的顺序,依次根据每个应用程序当前的业务量对该应用程序的实例进行迁移,以优先满足优先级高、业务量大的应用程序的业务需求。比如,针对目标设备中当前运行的应用程序,可以按照优先级从高到低的顺序依次对每个应用程序执行以下操作:
针对当前应用程序,可以确定该当前应用程序当前业务处理所需的实例的数量。比如,可以基于业务量确定当前业务处理所需的实例的数量,当前业流量越大,需要的实例数量也越多,因而可以自动的基于业务量调整所需实例的数量。比如,以利用QPS来衡量业务量为例,针对某个应用程序,用户可以预先设置QPS与实例数量的比例,比如,每800个QPS对应一个实例,因而,如果监测到当前一段时间内的QPS平均数量为4000,则说明当前业务处理需要5个该应用程序的实例。
在确定当前业务处理所需实例的数量后,可以根据当前业务处理所需的实例的数量、第一内存存储器中当前存储的实例的数量从该应用程序的各实例中确定待迁移实例以及迁移方向。由于第一内存存储器的数据读写速度更快,因而,针对当前需要使用的实例,应尽可能存储在第一内存存储器中,针对当前不用的实例,可以先存储在第二内存存储器中备用,以便需要使用时,再从第二内存存储器中迁移到第一内存存储器。基于这个原则,可以根据当前业务处理所需的实例的数量、以及第一内存存储器中当前存储的实例的数量,确定需要从第二内存存储器中迁移多少个实例到第一内存存储器中,或者是需要将多少个实例从第一内存存储器迁移到第二内存存储器中,以符合当前的业务处理对实例数量的需求。
同时,在对实例进行迁移时,可以结合各实例的内存访问情况,确定哪些实例是更适合进行迁移的实例,比如,针对一些性能较好、内存访问较为活跃的实例,应考虑优先将其存储在第一内存存储器,保证这些实例的处理效率。反之,应优先存储在第二内存存储器中。所以,还可以进一步结合各实例对内存资源的访问情况,从应用程序的各实例中筛选出待迁移实例。
如图3所示,可以基于应用程序的业务量确定当前业务处理所需的实例的数量,然后可以基于应用程序各实例的内存访问活跃度确定各实例的重要程度,然后可以根据当前第一内存存储器中存储的应用程序的实例的数量、当前所需的实例的数量,以及各实例的重要程度,确定待迁移实例以及迁移方向,然后对待迁移实例进行迁移。
比如,在一些场景,如果当前业务处理所需的实例的数量小于第一内存存储器中存储的该当前应用程序的实例的数量,说明此时第一内存存储器中存储的实例的数量是过剩的,因而,可以确定第一内存存储器中存储的该当前应用程序的各实例的重要程度,其中,在这种场景,实例的重要程度仅需根据实例的内存访问活跃度确定。然后可以基于重要程度从各实例中确定待迁移实例,比如,将重要程度较低的一个或多个实例作为待迁移实例,并迁移至第二内存存储器。
举个例子,假设根据应用程序当前的业务量确定当前业务处理需要3个实例,因而同时运行3个实例即满足当前业务处理的需求,且为了保证处理效率,这3个实例可以存储在访问速度更快的第一内存存储器中。但是如果当前有5个实例存储在第一内存存储器中,说明第一内存存储器中存在多余的实例,因而可以从第一内存存储器的5个实例中确定重要程度最低的2个待迁移的实例,将这2个待迁移的实例从第一内存存储器迁移到第二内存存储器中,以在第一内存存储器中腾出存储空间给其他有需要的应用程序。
在一些场景,如果当前业务处理所需的实例的数量小于第一内存存储器中存储的该当前应用程序的实例的数量,说明此时第一内存存储器中存储的实例的数量无法满足当前的业务需求,因而,可以基于实例的内存访问活跃度确定第二内存存储器中存储的该当前应用程序的各实例的重要程度,基于重要程度从各实例中确定重要程度高的待迁移实例,并迁移至第一内存存储器。
举个例子,假设根据应用程序当前的业务量确定当前业务处理需要5个实例,因而需要同时运行5个实例才能满足当前业务处理的需求,考虑到处理器对第一内存存储器的访问速度更快,为了提高实例的处理速度,应尽量将这5个实例均存储到第一内存存储器中。如果当前只有3个实例对应的数据存储到第一内存存储器中,则可以根据实例的重要程度从存储于第二内存存储器的实例中确定重要程度最高的2个待迁移的实例,将这2个待迁移的实例从第二内存存储器迁移到第一内存存储器中,以保证应用程序对业务请求的处理效率。
按照应用程序的优先级从高到低的顺序,针对每个应用程序,都可以采用上述方式对该应用程序的实例进行迁移,直至第一内存存储器的存储空间被占用完,且第一内存存储器中没有比当前应用程序优先级更低的应用程序。
当然,由于第一内存存储器的存储空间往往比较小,大多数场景,不能容下所有应用程序业务处理所需的实例。因此,需要优先保证优先级高的应用程序的业务处理效率。所以,在一些实施例中,在按照优先级顺序依次对每个应用程序的实例进行迁移时,如果确定需要从第二内存存储器中将某个应用程序的待迁移实例迁移至第一内存存储器,在迁移之前,可以先确定第一内存存储器的当前可用存储空间是否小于所确定的待迁移实例占用的存储空间,如果是,则将第一内存存储器中存储的目标应用程序的一个或多个实例迁出至第二内存存储器,以在第一内存存储器腾出存储空间。其中,目标应用程序的优先级低于当前应用程序的优先级,该一个或多个实例也可以基于存储于第一内存存储器器中的目标应用程序的各实例的重要程度确定。
在优先级较高的应用程序的业务量较大时,将第一内存存储器中优先级较低的应用程序的实例迁移至第二内存存储器中,可以为优先级较高的应用程序腾出存储空间,保证优先级较高的应用程序对应的业务的处理效率。
举个例子,假设当前目标设备运行的应用程序有以下几个:应用程序A、应用程序B、应用程序C、应用程序D;四个应用程序的优先级排序如下:应用程序A>应用程序B>应用程序C>应用程序D。每隔一定的时间间隔,可以执行以下操作:
针对应用程序A,基于其业务量确定当前业务处理所需实例数,假设为3个,如果此时第一内存储存储器存储的应用程序A的实例数为5个,则基于这5个实例的内存访问活跃度确定各应用程序的重要程度,然后选出重要程度最低的2个实例,迁移到第二内存存储器中。如果此时第一内存储存储器存储的应用程序A的实例数为1个,则可以确定第二内存存储器中是否存储有应用程序A的实例,以及数量有多少(如果不够2个,则重新创建2个),假设第二内存存储器中存储有3个应用程序A的实例,则可以基于这3个应用程序的内存访问活跃度确定各应用程序的重要程度,然后选出重要程度最高的2个实例,迁移到第一内存存储器中。在迁移之前,可以先判定第一内存存储器中当前可用的存储空间,如果存储空间足够,则直接迁移,如果存储空间不够,则按照优先级从低到高的顺序,选取优先级最低的应用程序中重要程度最低的实例,迁移至第二内存存储器中,以腾出空间。比如,可以先看第一内存存储器中是否有应用程序D的实例,如果有,则迁移应用程序D的实例,如果迁移后,还不够,再考虑迁移应用程C、迁移应用程B的实例,以腾出存储空间。
完成应用程序A的实例的迁移后,然后再针对应用程序B,同样执行上述操作,对应用程序B的实例进行迁移。然后依次针对应用程序C、D执行相同的操作。当然,如果在处理完某个应用程序后,第一内存存储器中已经没有存储空间,且第一内存储器也不存在优先级比该应用程序更低的应用程序的实例(即也不存在可腾出的存储空间),则无需再往下执行。
在一些实施例中,在对目标设备上的应用程序的实例进行迁移时,也可以仅考虑其中优先级较高的一个或多个应用程序,比如,针对这些优先级高的应用程序,可以基于业务量对其实例进行迁移。而针对其余优先级低的应用程序,则可以基于当前设备的负载情况进行迁移。比如,假设当前目标设备中运行的多个应用程序中,应用程序A是对实时性要求较高、比较重要的应用程序,其余都是一些对实时性要求不高的应用程序,因此,可以按照一定的时间间隔检测应用程序A的业务量,在其业务量较小时,将第一内存存储器中该应用程序A的多余的实例迁移至第二内存存储器中,从而可以为其他应用程序腾出存储空间(比如,可以随机从其他应用程序的实例中选一个或多个迁移至第一内存存储器),提高其他应用程序对应的业务的处理效率,以最大化的对内存资源进行利用。同理,在其业务量较大时,则基于重要程度从第二内存存储器中确定一个或多个待迁移实例,并迁移至第一内存存储器中。当然,如果第一内存存储器当前的存储空间不够,则可以先随机从第一内存存储器存储的其他应用程序的实例中选取一个或多个,迁移至第二内存存储器,以在第一内存储器中腾出存储空间。
针对一些大型的服务器,其要处理的业务请求较多,处理任务较重,因而,其多采用NUMA架构,如图4所示,为一种基于NUMA结构的设备的示意图。该设备可以包括多个NUMA节点(如NUMA节点1、NUMA节点2),每个NUMA节点中包括多个处理器,即内核core,每个NUMA节点上还包括供这些处理器共同使用的存储器。其中,每个NUMA节点的任一处理器除了可以访问自身节点上的存储器,以从存储器中读取数据,还可以访问其他NUMA节点的存储器(即跨节点访问),以从其他节点的存储器读取数据,但是处理器访问本NUMA节点中的存储器的速度会大于访问其他NUMA节点的存储器的速度。
在一些实施例中,本说明书实施例的目标设备也可以是基于NUMA结构的设备,如图5(a)所示,该目标设备可以包括多个NUMA节点,该目标设备中可以包括多个处理器和多个第一内存存储器,这多个处理器和多个第一内存存储器分布在多个NUMA节点上,每个NUMA节点包括至少一个处理器和至少一个第一内存存储器。由于在给应用程序的实例分配存储空间时,可以分配不通过NUMA节点上的第一内存存储器的存储空间,考虑到处理器对本NUMA节点的第一内存存储器的访问速度较快,因而,在需要将基于重要程度确定的待迁移实例从第二内存存储器迁移到第一内存存储器,以满足当前的业务处理需求时,应尽可能将待迁移实例迁移到同一个NUMA节点上的第一内存存储器中。以便后续应用程序在进行业务处理时,可以减少进行跨NUMA节点的访问任务,提高处理效率。
在一些实施例中,如果目标设备是基于NUMA架构的设备,在确定实例的重要程度时,可以基于实例当前占用的内存在NUMA节点上的分散程度确定,其中,分散程度越大,实例的重要程度越小。由于NUMA架构中,每个NUMA节点上的处理器也可以访问邻近NUMA节点上的存储器,因此,一个实例的占用的内存也有可能被分配在多个NUMA节点上。由于某个NUMA节点上的处理器访问自身节点上的存储器的速度会大于访问其他NUMA节点上的存储器的速度,因而,如果一个实例占用的内存分布在同一个NUMA节点上,其对应的处理效率必然会更高,即这些实例的性能较好,对于这类实例,其重要程度更高,应优先存储于第一内存存储器中。如果一个是实例的内存分散在多个NUMA节点上,那该实例的处理效率会大大降低,即可以认为该实例为性能较差的实例,其重要程度更低,则优先考虑存储于第二内存存储器。
在一些实施例中,应用程序的各实例的内存访问活跃度可以基于各实例的冷内存的大小与各实例占用的总内存大小的占比确定。其中,冷内存为预设时间内被命中次数少于设定次数的内存页。举个例子,假设用户设定1min内被命中次数少于100次的内存页即为冷内存,当监控到某个内存页1min内被命中次数为80次,则该内存页即为冷内存。当一个实例的冷内存占比越大,说明其越不活跃,因而这类实例应优先迁移至第二内存存储器中。
当然,由于分配给每个实例的内存页是虚拟内存,其虚拟内存地址非常庞大,但是很对虚拟内存地址(即内存页)几乎不会用到,因而,在一些实施例中,为了提高迁移效率,在第一内存存储器和第二内存存储器之间迁移待迁移实例时,针对待迁移实例对应的内存页,可以从该内存页中筛选出使用频率高于设定频率的目标内存页,并将目标内存页中存储的数据从第一内存存储器迁移至第二内存存储器,或从第二内存存储器迁移至第一内存存储器。通过这种方式,在对待迁移实例进行迁移时,可以跳过一些不会使用到的内存页,提高迁移效率。
在一些实施例中,如果基于重要程度确定了待迁移实例和迁移方向,在第一内存存储器和第二内存存储器之间迁移该待迁移实例之前,针对待迁移实例对应的进程,可以将该进程的状态切换至冻结状态,进程处于冻结状态后,会停止运行。当在第一内存存储器和第二内存存储器之间完成待迁移实例的迁移后,可以再将该进程的状态从冻结状态切换至唤醒状态,以便该进程可以重新运行。
在一些实施例中,在第一内存存储器和第二内存存储器之间迁移待迁移实例时,为了提高处理效率,可以预先设置一个线程池,该线程池中的线程可以专门用于进行实例对应的数据的迁移,当需要进行实例迁移时,可以从该预先设置的线程池中获取多个线程,利用所述多个线程并行地对待迁移实例进行迁移,从而可以提高迁移效率。
比如,如图5(b)所示,在确定待迁移实例后,可以确定待迁移实例对应的内存页,然后从内存页中过滤掉未使用的内存页,并从线程池中获取多个线程,利用多个线程对过滤后的内存页进行并发迁移。
为了进一步解释本说明书实施例提供的内存分配方法,以下结合一个具体的实施例加以解释。
如图6(a)或6(b)所示,为一个服务器的结构示意图,该服务器中包括多个NUMA节点,每个NUMA节点中包括多个内核(core),以及DRAM。此外,服务器中还包括一个或多个非易失性存储器NVM。
服务器中可以同时运行多个应用程序,比如,APP1、APP2、APP3…其中,每个应用程序可以包括多个实例,比如,针对APP1,其可以包括实例APP1-1,APP1-2、APP1-3、APP1-4等。为了提高服务器对DRAM和NVM的利用率,以便在服务器中可以同时运行多个应用程序,增大部署密度。在各应用程序运行的过程中,可以基于应用程序的优先级、应用程序当前的业务处理流量、应用程序各实例的内存访问情况,在DRAM和NVM之间对应用程序的实例进行迁移,以提高内存资源的利用。
(1)监控应用程序的各实例的内存访问情况,确定各实例的可迁移度。
其中,可以采用公式(1)确定各实例的可迁移度:
B=a*Mem.cold/Mem+b*N公式(1)
其中,B表示应用程序的可迁移度;Mem.cold表示实例的冷内存的大小,其中,冷内存为预定时间内被命中次数小于设定次数的内存页;Mem表示实例占用的内存的大小;N表示实例占用的内存在NUMA节点上的分散程度,实例占用的内存分布在越多各NUMA节点上,则分散程度越大;a,b系数为预先设置的系数,可用于调整冷内存大小权重和内存分散程度的权重。
(2)针对优先级高的应用程序,可以基于应用程序的业务量触发实例迁移。
针对优先级高的应用程序,可以对应用程序的业务量进行监控,确定待迁移实例的数量和迁移方向(迁移方向包括从DRAM迁移至NVM,或从NVM迁移至DRAM)。然后可以根据待迁移实例的数量、迁移方向和该应用程序各实例的可迁移度确定待迁移实例。
比如,如图6(a)所示,针对APP1,可以监控APP1在最近一段时间(比如,5min)的业务请求,然后可以基于该APP1接收到的业务请求的数量,确定当前APP1进行业务处理所需实例的数量,假设为2个。假设当前位于DRAM中的APP1的实例数量为4,假设为APP1-1,APP1-2、APP1-3、APP1-4,即说明当前DRAM中存储的实例是过剩的,多余当前业务处理所需的实例数量,因而可以基于可迁移度从上述4个实例中确定2个待迁移实例,假设为APP1-3,APP1-4,将这2个实例从DRAM迁移到NVM中,以在DRAM中腾出内存给其他有需要的优先级低的应用程序。
当然,如图6(b),如果基于该APP1接收到的业务请求的数量,确定当前APP1进行业务处理所需实例的数量为4个,而当前位于DRAM中的APP1的实例数量为2(假设为APP1-1,APP1-2),说明当前DRAM中存储的实例是无法满足当前业务处理的需求,因而可以将APP1的2个实例(假设为APP1-3、APP1-4)从NVM中迁移到DRAM中,以便于可以满足当前业务处理的需求,提高处理效率。
(2)针对优先级低的应用程序,可以基于NUMA节点当前的负载情况触发实例的迁移。
比如,如图6(a)所示,当优先级高的APP1当前业务量较小时,可以而将APP1的2个实例(APP1-3,APP1-4,)从DRAM迁移到NVM中,由于有实例从DRAM迁出,因而DRAM中的腾出了存储空间,此时该NUMA节点上的负载减小,因此,可以从NVM中存储的优先级较低的APP2的实例中确定一个或多个实例,比如APP2-1,APP2-2(具体数量可以基于当前DRAM中可用的存储空间决定),然后迁移至DRAM中,通过这种方式,可以最大化的对内存资源进行利用,提高资源利用率。
当优先级高的APP1当前业务量较大时,如图6(b),需从NVM中迁入2个APP1的实例至DRAM中,以满足业务需求。此时,如果NUMA节点的负载较大,DRAM中的存储空间不够,则可以从DRAM中将优先级低的APP2的一个或多个实例(具体数量可以基于APP1需迁入的实例所需的存储空间决定)迁移至NVM中,以在DRAM中腾出存储空间给APP1的实例,通过这种方式,可以保证优先级的APP1的处理效率和实时性。
(3)在将APP1的实例或APP2的实例从NVM迁回至DRAM中时,应尽量将实例迁移至同一个NUMA节点上,避免迁移后出现跨节点访问,提高实例的处理效率。当确定需要迁移的一个或多个实例和迁移的方向后,可以冻结该实例对应的进程,设置该进程的cpu freeze_state为冻结或唤醒。另外,迁移过程中使用/proc/pid/maps中保存的信息进行过滤,只搬移maps中的内存页,该方法可以跳过未使用的内存页,增加搬移效率。在搬移时,可以使用多个线程进行并发迁移移来加速整个的迁移速度。
通过本实施例提供的方法,在业务量大时,能够快速从NVM中唤醒应用程序的新实例,提供最快速的服务,保证应用程序的处理效率,避免从磁盘或者其他慢速介质中获取数据,处理效率低的问题,并且能够尽可能减少跨NUMA的内存访问。在业务量小时,能够将应用程序的实例迁移到NVM中,释放内存资源,给其他又需要的应用程序使用,成倍增加部署密度,提升资源利用率。
与本说明书实施例提供的内存分配方法实施例相对应,本说明还提供了内存分配装置,该内存分配装置适用于目标设备,所述目标设备包括第一内存存储器以及第二内存存储器,所述第一内存存储器的数据读写速度大于所述第二内存存储器的数据读写速度,如图7所示,所述装置70包括:
获取模块72,用于获取当前运行在所述目标设备的一个或多个应用程序的实例;
迁移模块74,用于确定应用程序的实例的重要程度,并基于所述重要程度在第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,以使得所述第一内存存储器中优先存储所述重要程度高的实例,所述重要程度正相关于以下一项或多项信息:实例的内存访问活跃度、实例所属应用程序的优先级、实例所属应用程序的业务量。
在一些实施例中,所述迁移模块72用于确定应用程序的实例的重要程度,并基于所述重要程度在第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移时,具体用于:
针对运行在所述目标设备的所有实例,分别确定每个实例的重要程度,其中,每个实例的重要程度正相关于以下一项或多项信息:实例的内存访问活跃度、实例所属应用程序的优先级以及实例所属应用程序的业务量;
基于每个实例的重要程度在第一内存存储器或第二内存存储器中为每个实例分配目标存储空间,其中,第一内存存储器中的存储空间优先分配给重要程度高的实例;
基于每个实例当前占用的存储空间和所述目标存储空间,在所述第一内存存储器和所述第二内存存储器之间对至少一个实例进行迁移。
在一些实施例中,所述迁移模块72用于确定应用程序的实例的重要程度,并基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移时,具体用于:
针对所述目标设备中当前运行的应用程序,按照优先级从高到低的顺序依次对每个应用程序执行以下操作:
针对当前应用程序,确定该当前应用程序当前业务处理所需的实例的数量;
在当前业务处理所需的实例的数量小于所述第一内存存储器中存储的该当前应用程序的实例的数量时,确定所述第一内存存储器中存储的该当前应用程序的各实例的重要程度,基于所述重要程度从各实例中确定待迁移实例,并迁移至第二内存存储器;
在当前业务处理所需的实例的数量大于所述第一内存存储器中存储的该当前应用程序的实例的数量时,确定所述第二内存存储器中存储的该当前应用程序的各实例的重要程度,基于所述重要程度从各实例中确定待迁移实例,并迁移至第一内存存储器;其中,所述重要程度正相关于实例的内存访问活跃度。
在一些实施例中,所述迁移模块72用于基于所述重要程度从各实例中确定待迁移实例,并迁移至所述第一内存存储器之前,还用于:
确定所述第一内存存储器的当前可用存储空间是否小于所确定的待迁移实例占用的存储空间;
如果是,将所述第一内存存储器中存储的目标应用程序的一个或多个实例迁出至第二内存存储器,以在所述第一内存储存储器腾出存储空间,其中,所述目标应用程序的优先级低于所述当前应用程序的优先级,所述一个或多个实例基于所述重要程度确定。
在一些实施例中,所述目标设备包括多个非统一内存访问NUMA节点,所述第一内存存储器包括多个,多个所述第一内存存储器分布在所述多个非统一内存访问NUMA节点上,每个非统一内存访问NUMA节点包括至少一个所述第一内存存储器,所述迁移模块72用于基于所述重要程度在第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移时,具体用于:
在基于所述重要程度确定将应用程序的实例从第二内存存储器迁移到第一内存储存储器的情况下,将该应用程序的实例从所述第二内存存储器迁移到同一个非统一内存访问NUMA节点上的所述第一内存存储器中。
在一些实施例中,所述目标设备包括多个非统一内存访问NUMA节点,所述第一内存存储器包括多个,多个所述第一内存存储器分布在所述多个非统一内存访问NUMA节点上,每个非统一内存访问NUMA节点包括至少一个所述第一内存存储器,所述重要程度负相关于实例当前占用的内存在非统一内存访问NUMA节点上的分散程度。
在一些实施例中,实例的内存访问活跃度基于实例的冷内存的大小与实例占用的总内存大小的比例确定,其中,所述冷内存为预设时间内被命中次数少于设定次数的内存页。
在一些实施例中,所述迁移模块72用于基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移时,具体用于:
针对基于所述重要程度确定的待迁移实例对应的内存页,从所述内存页中筛选出使用频率高于设定频率的目标内存页,并在所述第一内存存储器和所述第二内存存储器之间迁移所述目标内存页中存储的数据。
在一些实施例中,所述迁移模块72在基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间迁移对应用程序的实例进行迁移之前,还用于:
针对基于所述重要程度确定的待迁移实例对应的进程,将所述进程的状态切换至冻结状态;
在所述第一内存存储器和所述第二内存存储器之间迁移对应用程序的实例进行迁移之后,所述方法还包括:
将所述进程的状态从冻结状态切换至唤醒状态。
在一些实施例中,所述迁移模块72用于基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移时,具体用于:
针对基于所述重要程度确定的待迁移实例,从预先设置的线程池中获取多个线程,利用所述多个线程并行地对所述待迁移实例进行迁移。
在一些实施例中,所述第一内存存储器为动态随机存储器DRAM,所述第二内存存储器为非易失存储器NVM。上述装置中各个单元的功能和作用的实现过程具体详见上述内存分配方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本说明书实施例还提供了一种电子设备,如图5所示,该电子设备包括多个NUMA节点和第二内存存储器,每个NUMA节点中包括至少一个第一内存存储器,所述第一内存存储器的数据读写速度大于所述第二内存存储器的数据读写速度,所述NUMA节点用于执行上述实施例中提供的内存分配方法。
本说明书实施例还提供了一种计算机程序产品,该计算机程序产品被处理器执行时可实现上述内存分配方法。
本说明书实施例还提供了一种计算机可读存储介质,该计算机程序可读存储介质上存储有计算机程序,该计算机程序被处理器执行时可实现上述内存分配方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (14)
1.一种内存分配方法,适用于目标设备,所述目标设备包括第一内存存储器以及第二内存存储器,所述第一内存存储器的数据读写速度大于所述第二内存存储器的数据读写速度,所述方法包括:
获取当前运行在所述目标设备的一个或多个应用程序的实例;
确定应用程序的实例的重要程度,并基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,以使得所述第一内存存储器中优先存储所述重要程度高的实例,所述重要程度正相关于以下一项或多项信息:实例的内存访问活跃度、实例所属应用程序的优先级、实例所属应用程序的业务量。
2.根据权利要求1所述的方法,所述确定应用程序的实例的重要程度,并基于所述重要程度在第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,包括:
针对运行在所述目标设备的所有实例,分别确定每个实例的重要程度,其中,每个实例的重要程度正相关于以下一项或多项信息:实例的内存访问活跃度、实例所属应用程序的优先级以及实例所属应用程序的业务量;
基于每个实例的重要程度在第一内存存储器或第二内存存储器中为每个实例分配目标存储空间,其中,第一内存存储器中的存储空间优先分配给重要程度高的实例;
基于每个实例当前占用的存储空间和所述目标存储空间,在所述第一内存存储器和所述第二内存存储器之间对至少一个实例进行迁移。
3.根据权利要求1所述的方法,所述确定应用程序的实例的重要程度,并基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,包括:
针对所述目标设备中当前运行的应用程序,按照优先级从高到低的顺序依次对每个应用程序执行以下操作:
针对当前应用程序,确定该当前应用程序当前业务处理所需的实例的数量;
在当前业务处理所需的实例的数量小于所述第一内存存储器中存储的该当前应用程序的实例的数量时,确定所述第一内存存储器中存储的该当前应用程序的各实例的重要程度,基于所述重要程度从各实例中确定待迁移实例,并迁移至第二内存存储器;
在当前业务处理所需的实例的数量大于所述第一内存存储器中存储的该当前应用程序的实例的数量时,确定所述第二内存存储器中存储的该当前应用程序的各实例的重要程度,基于所述重要程度从各实例中确定待迁移实例,并迁移至第一内存存储器;其中,所述重要程度正相关于实例的内存访问活跃度。
4.根据权利要求3所述的方法,基于所述重要程度从各实例中确定待迁移实例,并迁移至所述第一内存存储器之前,还包括:
确定所述第一内存存储器的当前可用存储空间是否小于所确定的待迁移实例占用的存储空间;
如果是,将所述第一内存存储器中存储的目标应用程序的一个或多个实例迁出至第二内存存储器,以在所述第一内存储存储器腾出存储空间,其中,所述目标应用程序的优先级低于所述当前应用程序的优先级,所述一个或多个实例基于所述重要程度确定。
5.根据权利要求1-4任一项所述的方法,所述目标设备包括多个非统一内存访问NUMA节点,所述第一内存存储器包括多个,多个所述第一内存存储器分布在所述多个非统一内存访问NUMA节点上,每个非统一内存访问NUMA节点包括至少一个所述第一内存存储器,所述基于所述重要程度在第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,包括:
在基于所述重要程度确定将应用程序的实例从第二内存存储器迁移到第一内存储存储器时,将该应用程序的实例从所述第二内存存储器迁移到同一个非统一内存访问NUMA节点上的所述第一内存存储器中。
6.根据权利要求1-4任一项所述的方法,所述目标设备包括多个非统一内存访问NUMA节点,所述第一内存存储器包括多个,多个所述第一内存存储器分布在所述多个非统一内存访问NUMA节点上,每个非统一内存访问NUMA节点包括至少一个所述第一内存存储器,所述重要程度负相关于实例当前占用的内存在非统一内存访问NUMA节点上的分散程度。
7.根据权利要求1-4任一项所述的方法,实例的内存访问活跃度基于实例的冷内存的大小与实例占用的总内存大小的比例确定,其中,所述冷内存为预设时间内被命中次数小于设定次数的内存页。
8.根据权利要求1-4任一项所述的方法,所述基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,包括:
针对基于所述重要程度确定的待迁移实例对应的内存页,从所述内存页中筛选出使用频率高于设定频率的目标内存页,并在所述第一内存存储器和所述第二内存存储器之间迁移所述目标内存页中存储的数据。
9.根据权利要求1-4任一项所述的方法,所述在基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移之前,所述方法还包括:
针对基于所述重要程度确定的待迁移实例对应的进程,将所述进程的状态切换至冻结状态;
在所述第一内存存储器和所述第二内存存储器之间迁移对应用程序的实例进行迁移之后,所述方法还包括:
将所述进程的状态从冻结状态切换至唤醒状态。
10.根据权利要求1-4任一项所述的方法,所述基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,包括:
针对基于所述重要程度确定的待迁移实例,从预先设置的线程池中获取多个线程,利用所述多个线程并行地对所述待迁移实例进行迁移。
11.根据权利要求1-4任一项所述的方法,所述第一内存存储器为动态随机存储器DRAM,所述第二内存存储器为非易失存储器NVM。
12.一种内存分配装置,适用于目标设备,所述目标设备包括第一内存存储器以及第二内存存储器,所述第一内存存储器的数据读写速度大于所述第二内存存储器的数据读写速度,所述装置包括:
获取模块,用于获取当前运行在所述目标设备的一个或多个应用程序的实例;
迁移模块,用于确定应用程序的实例的重要程度,并基于所述重要程度在所述第一内存存储器和所述第二内存存储器之间对应用程序的实例进行迁移,以使得所述第一内存存储器中优先存储所述重要程度高的实例,所述重要程度正相关于以下一项或多项信息:实例的内存访问活跃度、实例所属应用程序的优先级、实例所属应用程序的业务量。
13.一种电子设备,所述电子设备包括多个NUMA节点和第二内存存储器,每个NUMA节点中包括第一内存存储器,所述第一内存存储器的数据读写速度大于所述第二内存存储器的数据读写速度,所述NUMA节点用于执行上述权利要求1-11任一项所述的方法。
14.一种计算机存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1-11任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211204785.5A CN115421924A (zh) | 2022-09-29 | 2022-09-29 | 一种内存分配方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211204785.5A CN115421924A (zh) | 2022-09-29 | 2022-09-29 | 一种内存分配方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115421924A true CN115421924A (zh) | 2022-12-02 |
Family
ID=84206587
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211204785.5A Pending CN115421924A (zh) | 2022-09-29 | 2022-09-29 | 一种内存分配方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115421924A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116048643A (zh) * | 2023-03-08 | 2023-05-02 | 苏州浪潮智能科技有限公司 | 设备运行方法、系统、装置、存储介质及电子设备 |
CN117331525A (zh) * | 2023-11-21 | 2024-01-02 | 苏州元脑智能科技有限公司 | 信息调度方法、装置、计算机设备和存储介质 |
-
2022
- 2022-09-29 CN CN202211204785.5A patent/CN115421924A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116048643A (zh) * | 2023-03-08 | 2023-05-02 | 苏州浪潮智能科技有限公司 | 设备运行方法、系统、装置、存储介质及电子设备 |
CN117331525A (zh) * | 2023-11-21 | 2024-01-02 | 苏州元脑智能科技有限公司 | 信息调度方法、装置、计算机设备和存储介质 |
CN117331525B (zh) * | 2023-11-21 | 2024-02-23 | 苏州元脑智能科技有限公司 | 信息调度方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2645259B1 (en) | Method, device and system for caching data in multi-node system | |
CN115421924A (zh) | 一种内存分配方法、装置及设备 | |
CN104111897A (zh) | 一种数据处理方法、装置及计算机系统 | |
KR101356033B1 (ko) | 하이브리드 주메모리 시스템 및 이를 위한 태스크 스케줄링 방법 | |
CN111324427B (zh) | 一种基于dsp的任务调度方法及装置 | |
CN114579271A (zh) | 任务调度方法、分布式系统及存储介质 | |
CN107969153B (zh) | 一种资源分配方法、装置及numa系统 | |
US20220050722A1 (en) | Memory pool management | |
CN112988066A (zh) | 一种数据处理方法及装置 | |
CN115904212A (zh) | 数据处理的方法、装置、处理器和混合内存系统 | |
CN111708638A (zh) | 内存分配方法、装置、设备及存储介质 | |
Rathinaraja et al. | Dynamic ranking-based MapReduce job scheduler to exploit heterogeneous performance in a virtualized environment | |
CN111475099A (zh) | 一种数据存储方法、装置及其设备 | |
CN117234691A (zh) | 任务调度方法及装置 | |
CN110618872B (zh) | 混合内存动态调度方法及系统 | |
Bahn et al. | Reducing the Overhead of Virtual Memory Swapping by Considering Application Characteristics and Memory Situations | |
US20220382672A1 (en) | Paging in thin-provisioned disaggregated memory | |
US20220318042A1 (en) | Distributed memory block device storage | |
CN107102898B (zh) | 一种基于numa架构的内存管理、构建数据结构的方法及装置 | |
CN115328608A (zh) | 一种Kubernetes容器垂直伸缩调节方法和装置 | |
CN114518962A (zh) | 内存的管理方法及装置 | |
Al-Yatama et al. | Memory allocation algorithm for cloud services | |
CN116107843B (zh) | 确定操作系统性能的方法、任务调度方法、设备 | |
US20210373790A1 (en) | Inference in memory | |
Chum et al. | SLA-Aware Adaptive Mapping Scheme in Bigdata Distributed Storage Systems |
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 |