内存分配方法、装置、计算机设备和存储介质与流程
未命名
07-23
阅读:127
评论:0
1.本技术涉及计算机技术领域,特别是涉及一种内存分配方法、装置、计算机设备和存储介质。
背景技术:
2.随着计算机技术以及互联网技术的发展,在云计算场景中,任务运行时会有明显的峰谷特性,通常任务高峰期时,主机硬件资源利用率会比较高,任务低峰期时资源利用率降低。
3.然而,目前的内存分配方式中,通常将不同类型的任务混合部署在同一台云主机上,由于某些类型的任务需要持续消耗硬件资源,会对其它的任务产生严重干扰,导致其它的任务产生较大的延时,无法保证及时性,从而导致任务的内存服务质量(qos,quality of service)无法保证。
技术实现要素:
4.基于此,有必要针对上述技术问题,提供一种能够有效保证任务的内存服务质量的内存分配方法、装置、计算机设备和存储介质。
5.一种内存分配方法,所述方法包括:接收用于为目标任务申请内存的内存申请请求;所述内存申请请求中携带所述目标任务的第一内存服务质量优先级;当系统内存的剩余容量小于所述目标任务所需的内存空间时,查找不高于所述第一内存服务质量优先级的任务对应的进程;将所述任务对应的进程加入到加速调度队列中;当满足调度条件时,优先调度所述加速调度队列中的进程,以使调度的所述进程终止运行并释放占用的内存块;将释放的所述内存块分配给所述目标任务。
6.一种内存分配装置,所述装置包括:接收模块,用于接收用于为目标任务申请内存的内存申请请求;所述内存申请请求中携带所述目标任务的第一内存服务质量优先级;查找模块,用于当系统内存的剩余容量小于所述目标任务所需的内存空间时,查找不高于所述第一内存服务质量优先级的任务对应的进程;加入模块,用于将所述任务对应的进程加入到加速调度队列中;调度模块,用于当满足调度条件时,优先调度所述加速调度队列中的进程,以使调度的所述进程终止运行并释放占用的内存块;分配模块,用于将释放的所述内存块分配给所述目标任务。
7.在一个实施例中,所述装置还包括:选取模块,用于当所述系统内存的剩余容量大于或等于所述目标任务所需的内存空间时,在所述系统内存剩余的内存中,按照所述目标任务所需的内存空间选取内存块;分配模块还用于将选取的所述内存块分配给所述目标任务。
8.在一个实施例中,所述装置还包括:确定模块,用于确定当前运行的任务的第二内存服务质量优先级;对比模块,用于对比所述第二内存服务质量优先级与所述第一内存服务质量优先级;查找模块还用于在当前运行的所述任务对应的进程中,基于对比的结果查
找不高于所述第一内存服务质量优先级的任务对应的进程。
9.在一个实施例中,确定模块还用于当所述第二内存服务质量优先级符合离线任务优先级时,确定所述第二内存服务质量优先级对应的任务为离线任务;选取模块还用于在当前运行的所述任务对应的进程中,优先选取所述离线任务的进程;所述离线任务的内存服务质量优先级不高于所述第一内存服务质量优先级。
10.在一个实施例中,所述装置还包括:获取模块,用于当所述第一内存服务质量优先级符合所述离线任务优先级时,在当前运行的所述任务对应的进程中获取所述离线任务的进程;选取模块还用于在所述离线任务的进程中,优先选取内存占用值大于占用阈值的进程。
11.在一个实施例中,选取模块还用于在低于所述第一内存服务质量优先级的任务对应的进程中,优先选取所述第二内存服务质量优先级符合第一优先级条件的任务所对应的进程;若未查找到符合所述第一优先级条件的任务所对应的进程,则选取所述第二内存服务质量优先级符合第二优先级条件的任务所对应的进程;若未查找到符合所述第二优先级条件的任务所对应的进程,则在等于所述第一内存服务质量优先级的任务对应的进程中,选取内存占用值大于占用阈值的进程。
12.在一个实施例中,所述装置还包括:检查模块,用于优先检查所述加速调度队列是否为空队列;调度模块还用于若所述加速调度队列不为空队列,则从所述加速调度队列中调度进程,并将调度的所述进程作为下一个在处理器核心执行的进程,以使所述进程在所述处理器核心执行过程中终止运行并释放占用的内存块;所述加速调度队列用于存放待释放内存块的进程以使存放的所述进程被优先调度。
13.在一个实施例中,所述装置还包括:监测模块,用于监测调度事件;所述调度事件包括时钟中断或内核态返回的用户态;检查模块还用于当监测到所述调度事件时,优先检查所述加速调度队列是否为空队列。
14.在一个实施例中,所述装置还包括:发送模块,用于向调度的所述进程发送终止信号,基于所述终止信号唤醒调度的所述进程;将调度的所述进程作为下一个在处理器核心执行的进程;执行模块,用于当所述处理器核心未被抢占时,通过所述处理器核心执行调度的所述进程,以使调度的所述进程处理所述终止信号,直到处理完所述终止信号的相关逻辑后退出,并释放占用的内存块。
15.在一个实施例中,所述装置还包括:接收模块还用于通过优先级设置接口接收到各任务的内存服务质量优先级参数;存入模块,用于将所述内存服务质量优先级参数存入各所述任务的进程对应的数据集内;获取模块还用于在各所述任务的进程对应的数据集内,获取各所述任务的第二内存服务质量优先级;选取模块还用于在各所述任务的进程中,选取所述第二内存服务质量优先级不高于所述第一内存服务质量优先级的任务对应的进程。
16.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:接收用于为目标任务申请内存的内存申请请求;所述内存申请请求中携带所述目标任务的第一内存服务质量优先级;当系统内存的剩余容量小于所述目标任务所需的内存空间时,查找不高于所述第一内存服务质量优先级的任务对应的进程;将所述任务对应的进程加入到加速调度队列中;当满足调度条件时,优先调度
所述加速调度队列中的进程,以使调度的所述进程终止运行并释放占用的内存块;将释放的所述内存块分配给所述目标任务。
17.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:接收用于为目标任务申请内存的内存申请请求;所述内存申请请求中携带所述目标任务的第一内存服务质量优先级;当系统内存的剩余容量小于所述目标任务所需的内存空间时,查找不高于所述第一内存服务质量优先级的任务对应的进程;将所述任务对应的进程加入到加速调度队列中;当满足调度条件时,优先调度所述加速调度队列中的进程,以使调度的所述进程终止运行并释放占用的内存块;将释放的所述内存块分配给所述目标任务。
18.上述内存分配方法、装置、计算机设备和存储介质,通过接收用于为目标任务申请内存的内存申请请求;内存申请请求中携带目标任务的第一内存服务质量优先级;当系统内存的剩余容量小于目标任务所需的内存空间时,查找不高于第一内存服务质量优先级的任务对应的进程;将任务对应的进程加入到加速调度队列中;当满足调度条件时,优先调度加速调度队列中的进程,以使调度的进程终止运行并释放占用的内存块;将释放的内存块分配给目标任务。由于不同类型任务携带不同等级的内存服务质量优先级信息,故当系统内存不足时,云主机可以按内存服务质量优先级的高低顺序,选取回收不同级别的任务对应的进程所占用的内存,同时,通过将待回收的进程加入到加速调度队列中,以使得云主机能够优先调度加速调度队列中待回收内存的进程,即通过加速待回收进程被调度的流程,使得待回收进程能够在第一时间得到调度,以达到提升内存回收效率的目的,从而能够将回收的内存重新分配给目标任务,有效保障任务的内存服务质量。
附图说明
19.图1为一个实施例中内存分配方法的应用环境图;
20.图2为一个实施例中内存分配方法的流程示意图;
21.图3为一个实施例中查找不高于第一内存服务质量优先级的任务对应的进程步骤的流程示意图;
22.图4为一个实施例中在线任务和离线任务混合部署的产品应用示意图;
23.图5为一个实施例中在线任务和离线任务混合部署的应用框架示意图;
24.图6为一个实施例中混合部署场景下内存服务质量保障方法的实现架构示意图;
25.图7为一个实施例中优先级内存回收模块的逻辑处理示意图;
26.图8为一个实施例中加速内存回收模块的逻辑处理示意图;
27.图9为一个实施例中加速调度模块的逻辑处理示意图;
28.图10为一个实施例中内存分配装置的结构框图;
29.图11为一个实施例中计算机设备的内部结构图。
具体实施方式
30.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
31.在对本技术的实施例进行说明之前,先对本技术所涉及的专业术语或技术进行阐述,具体如下:
32.云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
33.目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(id,id entity)等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
34.存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(raid,redundant array of independent disk)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。
35.本技术提供的内存分配方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。服务器104接收用于为目标任务申请内存的内存申请请求;内存申请请求中携带目标任务的第一内存服务质量优先级;当系统内存的剩余容量小于目标任务所需的内存空间时,服务器104查找不高于第一内存服务质量优先级的任务对应的进程,并将任务对应的进程加入到加速调度队列中;当满足调度条件时,服务器104优先调度加速调度队列中的进程,以使调度的进程终止运行并释放占用的内存块;服务器104将释放的内存块分配给目标任务。
36.其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、便携式可穿戴设备、智能语音交互设备、智能家电、车载终端以及其它的车联网设备等。
37.服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现,可以理解,本技术实施例提供的服务器104也可以是区块链系统中的服务节点,该区块链系统中的各服务节点之间形成组成点对点(p2p,peer to peer)网络,p2p协议是一个运行在传输控制协议(tcp,transmission control protocol)协议之上的应用层协议。
38.服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术在此不做限制。
39.在一个实施例中,如图2所示,提供了一种内存分配方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
40.步骤202,接收用于为目标任务申请内存的内存申请请求;内存申请请求中携带目
标任务的第一内存服务质量优先级。
41.其中,目标任务是指在云计算场景中的不同业务类型对应的任务,即基于不同的角度,可以将业务对应的任务划分为多种类型的任务。例如,从业务对于延时的敏感程度的角度进行划分,业务对应的任务可划分为在线任务和离线任务,即目标任务可以包括离线任务和在线任务。例如,目标任务可以是某个业务类型对应的在线任务,在线任务属于延迟敏感型任务,即在线任务对延时敏感,但在线任务的整体资源占用率较低,例如,在线任务典型的业务场景可以包括:在线购物车、支付业务等在线任务。目标任务也可以是某个业务类型对应的离线任务,离线任务属于cpu(中央处理器,central processing unit,简称cpu)密集型任务。即离线任务对延时不敏感,可以容忍饥饿,但离线任务需要持续消耗硬件资源,离线任务的整体资源占用率高,典型的业务场景可以包括:ai(artificial intelligence)训练、函数计算等离线任务。可以理解,本技术实施例中的应用场景可以为不同类型的任务混合部署在同一台云主机中,不同类型的任务共享云主机的内存硬件资源,由于内存是不可压缩资源,因此需要合理分配。例如,在线任务和离线任务混合部署在同一台云主机上,在线任务和离线任务可以共享云主机的内存硬件资源。
42.内存申请请求是指用于为任务申请内存的请求,例如,基于用户设置的某个任务所需的内存大小,向云主机申请该任务所需的内存大小,以使得该任务能够正常运行和调度。
43.内存服务质量(quality of service,qos)是指内存的服务质量,为了实现资源被有效调度和分配的同时,提高资源的利用率,可以通过内存服务质量来进行服务质量管理。
44.内存服务质量优先级是指用户设置的不同任务或任务组对应的内存服务质量的优先级参数,例如预先定义好的内存服务质量的优先级参数的设置范围为0~7,0-7分别代表8个优先级的级别参数,0表示最低优先级,可以供离线任务使用;7表示最高优先级,可以供在线任务使用。
45.第一内存服务质量优先级是指目标任务对应的内存服务质量的优先级参数,例如,目标任务对应的内存服务质量的优先级参数为7,即表示第一内存服务质量优先级为7。
46.具体的,以云主机为linux操作系统为例进行说明。linux操作系统是指一种开源的操作系统。可以理解,本实施例中的云主机包括但不限于是linux操作系统,还可以是其他的操作系统,例如,云主机的操作系统还可以为windows、macos、chrome os、ios、android、ipad os等。使用不同操作系统的云主机均可以通过内存服务质量来进行服务质量管理。
47.云主机即服务器可以接收用于为目标任务申请内存的内存申请请求,内存申请请求中携带目标任务的第一内存服务质量优先级。例如,在混部场景中,当云主机接收到不同任务或者任务组的内存申请请求时,云主机需要对不同的任务按需分配内存,即云主机需要给不同任务分配对应的新内存时,云主机可以检测当前系统的剩余内存是否不足,若云主机检测到当前系统剩余的内存大小,已不足以满足新的内存分配请求时,则云主机可以判定当前系统的剩余内存不足;若云主机检测到当前系统剩余的内存大小,足以满足新的内存分配请求时,则云主机可以对不同类型的任务正常分配内存,例如,云主机可以对在线任务和离线任务正常分配内存。
48.举个例子,假设在线任务a所需的内存大小为64mb,当云主机接收到用于为在线任
务a申请内存的内存申请请求时,云主机可以基于目标任务所需的内存大小,检测当前系统的剩余内存是否不足,即当云主机检测到当前系统剩余内存大小为30mb时,表明不足以满足新的内存分配请求,即云主机检测到当前系统剩余内存大小不足以满足线任务a所需的内存大小,则云主机可以判定当前系统的剩余内存不足。当云主机检测到当前系统剩余内存大小为100mb时,则云主机可以按照在线任务a所需的内存大小正常分配内存。
49.步骤204,当系统内存的剩余容量小于目标任务所需的内存空间时,查找不高于第一内存服务质量优先级的任务对应的进程。
50.其中,系统内存是指云主机自身可以占用的物理内存的大小,即所有安装的物理内存都是由云主机的操作系统来管理的,操作系统会依据所安装的物理内存的总大小决定系统本身可以占用多大的物理内存以及应用程序可以分配多大的物理内存,并且动态的在物理内存与硬盘上的缓存之间进行调整。
51.进程(process)是指计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。本技术实施例中,云主机的操作系统以linux操作系统为例进行说明。在linux操作系统中,一个任务可以对应一个进程,一个进程可以用来管理一个或者多个线程,即线程是实际工作的单元。
52.具体的,当云主机接收用于为目标任务申请内存的内存申请请求之后,云主机的操作系统可以检测当前系统的剩余内存是否不足;当操作系统确定系统内存的剩余容量小于目标任务所需的内存空间时,则操作系统查找不高于第一内存服务质量优先级的任务对应的进程,即操作系统基于内存申请请求中携带目标任务的第一内存服务质量优先级,遍历查找所有进程或者进程组中不高于当前目标任务的进程的第一内存服务质量优先级的待回收进程。
53.在查找过程中,操作系统可以基于预设策略,优先查找所有进程或者进程组中内存服务质量优先级最低的进程,若存在内存服务质量优先级最低的进程,且该进程的内存服务质量优先级低于当前目标任务的第一内存服务质量优先级,则操作系统可以将该内存服务质量优先级最低的进程作为待回收进程。可以理解,本技术中查找待回收进程的方式包括但不限于上述方式,还可以为其他的查找方式。
54.举个例子,假设在线任务a所需的内存大小为64mb,且在线任务a的内存服务质量优先级为7,当云主机接收到用于为在线任务a申请内存的内存申请请求时,云主机可以检测当前系统的剩余内存是否不足,即当云主机检测到当前系统剩余内存大小为30mb时,表明不足以满足新的内存分配请求,即云主机检测到当前系统内存的剩余容量小于目标任务a所需的内存空间时,则云主机可以基于目标任务a的内存服务质量优先级7,遍历所有进程查找不高于内存服务质量优先级7的任务对应的进程,假设云主机遍历所有进程,查找到进程1的内存服务质量优先级为5,进程2的内存服务质量优先级为7,进程3的内存服务质量优先级为0,则云主机可以优先选择所有进程或者进程组中内存服务质量优先级最低的进程,由于进程3的内存服务质量优先级为0,0表示最低优先级级别,且进程3的内存服务质量优先级0低于目标任务a的内存服务质量优先级7,则云主机可以选取进程3作为待回收进程。
55.步骤206,将任务对应的进程加入到加速调度队列中。
56.其中,加速调度队列是指用于加速调度的队列,本技术实施例中的加速调度队列区别于传统的调度队列,即加速调度队列是额外创建的一个新的队列。例如,云主机中正常调度队列为m1,加速调度队列为a1,在系统运行时云主机的操作系统优先从加速调度队列a1中选取调度对象上核运行。
57.具体的,当系统内存的剩余容量小于目标任务所需的内存空间时,云主机查找不高于第一内存服务质量优先级的任务对应的进程之后,云主机可以将查找到的任务对应的待回收进程加入到加速调度队列中,以使得待回收进程能够优先被调度。假设待回收进程对应的任务为低优任务或者离线任务,若云主机没有将待回收进程加入到加速调度队列中,由于该进程对应的任务为低优任务或者离线任务,离线任务的调度优先级比较低,则该进程需要等待被调度,可能长时间得不到调度,即无法在第一时间得到调度,因而导致其长时间无法处理终止信号,从而导致其占用的内存长时间无法释放,最终导致目标任务的内存分配出现较大延时,同时也无法有效保证内存回收的及时性。因此,本技术实施例中通过提升待回收对象即待回收进程的调度优先级,能够实现加速低优任务或者离线任务的被调度流程。
58.举个例子,假设在线任务a的内存服务质量优先级为7以及调度优先级为7,离线任务b的内存服务质量优先级为0以及调度优先级为0,离线任务b对应的进程3的内存服务质量优先级为0,当系统内存的剩余容量小于在线任务a所需的内存空间时,云主机可以遍历所有进程查找不高于内存服务质量优先级7的任务对应的进程,并优先选择所有进程或者进程组中内存服务质量优先级最低的进程,由于进程3的内存服务质量优先级为0,0表示最低优先级级别,则云主机可以选取进程3作为待回收进程。进一步的,云主机可以将离线任务b对应的进程3加入到加速调度队列中,以使得进程3能够被优先调度,即加速进程3被调度的流程,从而保证内存回收的及时性。
59.步骤208,当满足调度条件时,优先调度加速调度队列中的进程,以使调度的进程终止运行并释放占用的内存块。
60.其中,调度条件是指操作系统内核的调度条件,不同的操作系统对应有不同的调度条件,例如,在linux操作系统中,调度条件可以为调度时机,常用的调度时机有时钟中断、内核态返回的用户态等。
61.终止运行是指进程处理终止信号相关逻辑后,使得进程主动退出,终止运行的处理流程。
62.内存块是指由多个可供分配的内存单元组成的内存区域,在内存池中可能存在多个用来满足内存申请请求的内存块,所有内存块组成了一个内存块链表,内存块用于保存进程运行时的程序和数据。
63.具体的,云主机将任务对应的进程加入到加速调度队列之后,当满足调度条件时,云主机优先调度加速调度队列中的进程,以使调度的进程终止运行并释放占用的内存块。其中,不同的操作系统对应有不同的调度条件。
64.举个例子,以云主机为linux操作系统为例进行说明。在linux操作系统中,调度条件可以为调度时机,常用的调度时机有时钟中断、内核态返回的用户态等。即云主机将离线任务b对应的进程3加入到加速调度队列之后,当下一次调度时机来临时,云主机优先调度加速调度队列中的进程3,以使调度的进程3能够及时处理终止信号并终止运行,同时释放
自身所占用的内存块。
65.步骤210,将释放的内存块分配给目标任务。
66.具体的,当满足调度条件时,云主机优先调度加速调度队列中的进程,以使调度的进程终止运行并释放占用的内存块,进一步的,云主机可以将终止运行的进程释放的内存块分配给目标任务,以保证目标任务的内存服务质量。
67.举个例子,以云主机为linux操作系统为例进行说明。云主机将离线任务b对应的进程3加入到加速调度队列之后,当下一次调度时机来临时,云主机优先调度加速调度队列中的进程3,以使调度的进程3能够及时处理终止信号并终止运行,同时释放自身所占用的内存块3。进一步的,云主机可以将终止运行的进程3释放的内存块3进行快速回收,并将回收的内存块3分配给目标任务a,以使得目标任务a能快速分配到所需内存,从而有效保障任务a的内存服务质量。
68.上述内存分配方法中,通过接收用于为目标任务申请内存的内存申请请求;内存申请请求中携带目标任务的第一内存服务质量优先级;当系统内存的剩余容量小于目标任务所需的内存空间时,查找不高于第一内存服务质量优先级的任务对应的进程;将任务对应的进程加入到加速调度队列中;当满足调度条件时,优先调度加速调度队列中的进程,以使调度的进程终止运行并释放占用的内存块;将释放的内存块分配给目标任务。由于不同类型任务携带不同等级的内存服务质量优先级信息,故当系统内存不足时,云主机可以按内存服务质量优先级的高低顺序,选取回收不同级别的任务对应的进程所占用的内存,同时,通过将待回收的进程加入到加速调度队列中,以使得云主机能够优先调度加速调度队列中待回收内存的进程,即通过加速待回收进程被调度的流程,使得待回收进程能够在第一时间得到调度,以达到提升内存回收效率的目的,从而能够将回收的内存重新分配给目标任务,有效保障目标任务的内存服务质量。
69.在一个实施例中,接收用于为目标任务申请内存的内存申请请求之后,所述方法还包括:
70.当系统内存的剩余容量大于或等于目标任务所需的内存空间时,在系统内存剩余的内存中,按照目标任务所需的内存空间选取内存块;
71.将选取的内存块分配给目标任务。
72.具体的,云主机接收用于为目标任务申请内存的内存申请请求之后,云主机可以基于目标任务所需的内存大小,检测当前系统的剩余内存是否不足,即当云主机检测到系统内存的剩余容量大于或等于目标任务所需的内存空间时,表明足以满足新的内存分配请求,则云主机在系统内存剩余的内存中,按照目标任务所需的内存空间选取内存块,并将选取的内存块分配给目标任务。
73.举个例子,假设在线任务a所需的内存大小为64mb,当云主机接收到用于为在线任务a申请内存的内存申请请求时,云主机可以基于目标任务所需的内存大小,检测当前系统的剩余内存是否不足,即当云主机检测到当前系统剩余内存大小为100mb时,表明足以满足新的内存分配请求,则云主机可以按照在线任务a所需的内存空间选取内存块1,并将选取的内存块1分配给在线任务a。由此使得,通过判断系统的剩余内存是否能够满足新的内存分配需求,以使得低优任务能够充分利用空闲内存的同时,当内存不足时也能够有效保证高优任务的内存服务质量。
74.在一个实施例中,如图3所示,查找不高于第一内存服务质量优先级的任务对应的进程的步骤,包括:
75.步骤302,确定当前运行的任务的第二内存服务质量优先级。
76.步骤304,对比第二内存服务质量优先级与第一内存服务质量优先级。
77.步骤306,在当前运行的任务对应的进程中,基于对比的结果查找不高于第一内存服务质量优先级的任务对应的进程。
78.其中,第二内存服务质量优先级是指除了目标任务以外的其他任务的内存服务质量优先级参数,第二内存服务质量优先级区别于目标任务的第一内存服务质量优先级,即表示不同任务对应的内存服务质量优先级。例如,目标任务a的第一内存服务质量优先级为3,其他任务b和任务c对应的第二内存服务质量优先级分别为4和6。
79.云主机接收用于为目标任务申请内存的内存申请请求之后,当云主机检测到系统内存的剩余容量小于目标任务所需的内存空间时,云主机查找不高于第一内存服务质量优先级的任务对应的进程。具体的,云主机可以确定当前运行的所有任务的第二内存服务质量优先级,对比第二内存服务质量优先级和第一内存服务质量优先级。在当前运行的任务对应的进程中,基于对比的结果查找不高于第一内存服务质量优先级的任务对应的进程。
80.举个例子,假设在线任务a所需的内存大小为64mb,且在线任务a的内存服务质量优先级为7,当云主机接收到用于为在线任务a申请内存的内存申请请求时,云主机可以基于在线任务a所需的内存大小,检测当前系统的剩余内存是否不足,即当云主机检测到当前系统剩余内存大小为30mb时,表明不足以满足新的内存分配请求,即云主机检测到当前系统内存的剩余容量小于目标任务a所需的内存空间时,则云主机可以基于目标任务a的内存服务质量优先级7,遍历查找当前运行的所有任务的第二内存服务质量优先级,假设云主机遍历当前运行的所有任务查找到任务1的内存服务质量优先级为5,任务2的内存服务质量优先级为7,任务3的内存服务质量优先级为0,即云主机可以确定当前运行的所有任务的第二内存服务质量优先级分别为0、5、7,进一步的,云主机可以将第二内存服务质量优先级与第一内存服务质量优先级进行对比,由于0小于7,且0为最低优先级,即在当前运行的任务对应的进程中,云主机基于对比的结果,查找得到不高于第一内存服务质量优先级7的3个任务,云主机基于预设策略,优先选取最低优先级0对应的进程,即云主机可以选取任务3对应的进程作为待回收进程。
81.若云主机遍历当前运行的所有任务,查找到任务1的内存服务质量优先级为5,任务2的内存服务质量优先级为7,即云主机可以确定当前运行的所有任务的第二内存服务质量优先级分别为5和7,云主机可以将第二内存服务质量优先级与第一内存服务质量优先级进行对比,由于5小于7,即在当前运行的任务对应的进程中,云主机基于对比的结果,云主机可以优先选取低于第一内存服务质量优先级7的任务1对应的进程,即云主机可以将任务1对应的进程作为待回收进程。
82.若云主机遍历当前运行的所有任务,查找到任务1的内存服务质量优先级为7,任务2的内存服务质量优先级为7,即云主机可以确定当前运行的所有任务的第二内存服务质量优先级分别为7和7,云主机可以将第二内存服务质量优先级与第一内存服务质量优先级进行对比,由于7等于7,即在当前运行的任务对应的进程中,云主机基于对比的结果,查找得到不高于第一内存服务质量优先级7的任务对应的进程为任务1和任务2对应的进程,则
云主机可以将任务1和任务2对应的进程均作为待回收进程。此外,云主机还可以基于预设策略,进一步从任务1和任务2中选取内存占用量最大的进程作为待回收进程,假设任务1对应的进程1的内存占用量为40mb;任务2对应的进程2的内存占用量为45mb,则云主机可以选取任务2对应的进程2作为待回收进程。
83.本实施例中,当系统内存不足时,能够自动按内存服务质量优先级的高低顺序进行内存回收,实现自动回收低内存服务质量优先级的任务所占用的内存,从而有效保障高优任务的内存服务质量。
84.在一个实施例中,基于对比的结果查找不高于第一内存服务质量优先级的任务对应的进程的步骤,包括:
85.当第二内存服务质量优先级符合离线任务优先级时,确定第二内存服务质量优先级对应的任务为离线任务;
86.在当前运行的任务对应的进程中,优先选取离线任务的进程;离线任务的内存服务质量优先级不高于第一内存服务质量优先级。
87.云主机中混合部署不同类型的任务,本实施例中以在线任务和离线任务混合部署的场景为例进行说明。在线任务和离线任务共享云主机的内存硬件资源,由于内存是不可压缩资源,意味着当云主机内存不足,同时云主机需要分配新内存时,必须通过一定的机制来回收一定的内存,以保证云主机和关键任务能正常运行。在线任务和离线任务各自按需申请自身需要的内存。当内存资源充足时,云主机进行内存分配时互不干扰;当内存资源不足时,云主机需要进行内存回收处理,即通过回收部分任务使用的内存,才能满足新的内存申请请求。具体的,当内存资源不足时,云主机可以确定当前运行的所有任务的第二内存服务质量优先级,对比第二内存服务质量优先级和第一内存服务质量优先级。当云主机检测到第二内存服务质量优先级符合离线任务优先级时,确定第二内存服务质量优先级对应的任务为离线任务。进一步的,在当前运行的任务对应的进程中,云主机可以优先选取离线任务的进程作为待回收进程,离线任务的内存服务质量优先级不高于第一内存服务质量优先级。
88.举个例子,假设预先定义好的在线任务的内存服务质量优先级为7,离线任务的内存服务质量优先级为0,任务a所需的内存大小为64mb,且任务a的内存服务质量优先级为7,则表明任务a为在线任务,当云主机接收到用于为在线任务a申请内存的内存申请请求时,云主机可以基于在线任务a所需的内存大小,检测当前系统的剩余内存是否不足。当内存资源不足时,云主机可以遍历查找当前运行的所有任务的第二内存服务质量优先级,假设云主机遍历当前运行的所有任务,查找到任务1的内存服务质量优先级为5,任务2的内存服务质量优先级为7,任务3的内存服务质量优先级为0,即云主机可以确定当前运行的所有任务的第二内存服务质量优先级分别为0、5、7,当云主机检测到第二内存服务质量优先级0符合离线任务优先级时,确定第二内存服务质量优先级对应的任务3为离线任务。进一步的,在当前运行的任务对应的进程中,云主机可以优先选取离线任务3的进程3作为待回收进程,离线任务的内存服务质量优先级0一定是低于在线任务a的第一内存服务质量优先级7的。由此使得,当系统内存不足时,能够自动按内存服务质量优先级的高低顺序进行内存回收,实现优先回收离线任务所占用的内存,从而保障在线任务的内存服务质量。
89.在其中一个实施例中,在当前运行的任务对应的进程中,优先选取离线任务的进
程的步骤,包括:
90.当第一内存服务质量优先级符合离线任务优先级时,在当前运行的任务对应的进程中获取离线任务的进程;
91.在离线任务的进程中,优先选取内存占用值大于占用阈值的进程。
92.具体的,当内存资源不足时,且当云主机检测到目标任务的第一内存服务质量优先级符合离线任务优先级时,云主机可以在当前运行的任务对应的进程中获取所有离线任务的进程。进一步的,云主机可以在所有离线任务的进程中,优先选取内存占用值大于占用阈值的进程。即在离线任务和在线任务混合部署的场景中,若目标任务为离线任务,则云主机优先选取内存占用值最大值的离线任务的进程作为待回收进程。
93.举个例子,假设预先定义好的在线任务的内存服务质量优先级为7,离线任务的内存服务质量优先级为0,任务b所需的内存大小为60mb,且在线任务b的内存服务质量优先级为0,则表明任务b为离线任务,当云主机接收到用于为离线任务b申请内存的内存申请请求时,云主机可以基于任务b所需的内存大小,检测当前系统的剩余内存是否不足。当内存资源不足时,由于任务b的内存服务质量优先级0符合离线任务优先级,因此,云主机可以在当前运行的任务对应的进程中获取所有离线任务的进程,并在所有离线任务的进程中,优先选取内存占用值大于占用阈值的进程作为待回收进程。由此,当系统内存不足时,能够自动按内存服务质量优先级的高低顺序进行内存回收,实现优先回收离线任务所占用的内存,有效避免了离线任务对在线业务产生的严重干扰,从而保障在线任务的内存服务质量。
94.在一个实施例中,所述方法还包括:
95.在低于第一内存服务质量优先级的任务对应的进程中,优先选取第二内存服务质量优先级符合第一优先级条件的任务所对应的进程;
96.若未查找到符合第一优先级条件的任务所对应的进程,则选取第二内存服务质量优先级符合第二优先级条件的任务所对应的进程;
97.若未查找到符合第二优先级条件的任务所对应的进程,则在等于第一内存服务质量优先级的任务对应的进程中,选取内存占用值大于占用阈值的进程。
98.其中,第一优先级条件和第二优先级条件是指预先设置好的不同的内存服务质量优先级条件。例如,第一优先级条件可以为0-2范围内的低优先级;第二优先级条件可以为3-5范围内的中优先级。
99.具体的,当内存资源不足时,云主机在当前运行的任务对应的进程中,基于对比的结果查找不高于第一内存服务质量优先级的任务对应的进程时,云主机可以在低于第一内存服务质量优先级的任务对应的进程中,优先选取第二内存服务质量优先级符合第一优先级条件的任务所对应的进程;若云主机未查找到符合第一优先级条件的任务所对应的进程,则云主机选取第二内存服务质量优先级符合第二优先级条件的任务所对应的进程;若云主机未查找到符合第二优先级条件的任务所对应的进程,则在等于第一内存服务质量优先级的任务对应的进程中,选取内存占用值大于占用阈值的进程。
100.举个例子,假设预先定义好的第一优先级条件为0-2范围内的低优先级;第二优先级条件为3-5范围内的中优先级,任务b所需的内存大小为60mb,且任务b的内存服务质量优先级为6,当云主机接收到用于为任务b申请内存的内存申请请求时,云主机可以基于任务b所需的内存大小,检测当前系统的剩余内存是否不足。
101.当内存资源不足时,云主机可以基于目标任务b的内存服务质量优先级6,遍历查找当前运行的所有任务的第二内存服务质量优先级,假设云主机遍历当前运行的所有任务,查找到任务1的内存服务质量优先级为5,任务2的内存服务质量优先级为7,任务3的内存服务质量优先级为0,即云主机可以确定当前运行的所有任务的第二内存服务质量优先级分别为0、5、7,由于任务3的内存服务质量优先级为0,符合第一优先级条件,则云主机可以在低于第一内存服务质量优先级6的任务对应的进程中,优先选取第二内存服务质量优先级符合第一优先级条件的任务3所对应的进程3作为待回收进程。
102.当内存资源不足时,云主机基于目标任务b的内存服务质量优先级6,遍历查找当前运行的所有任务的第二内存服务质量优先级,假设云主机遍历当前运行的所有任务,查找到任务1的内存服务质量优先级为5,任务2的内存服务质量优先级为7,即云主机可以确定当前运行的所有任务的第二内存服务质量优先级分别为5、7,由于没有符合第一优先级条件的任务,即云主机未查找到符合第一优先级条件的任务所对应的进程,则云主机选取第二内存服务质量优先级符合第二优先级条件的任务所对应的进程。由于任务1的内存服务质量优先级为5,符合第二优先级条件,则云主机可以选取第二内存服务质量优先级符合第二优先级条件的任务1所对应的进程1作为待回收进程。
103.当内存资源不足时,云主机基于目标任务b的内存服务质量优先级6,遍历查找当前运行的所有任务的第二内存服务质量优先级,假设云主机遍历当前运行的所有任务,查找到任务1的内存服务质量优先级为6,且任务1对应的进程1所占用的内存值为60mb,任务2的内存服务质量优先级为6,且任务2对应的进程2所占用的内存值为100mb,即云主机可以确定当前运行的所有任务的第二内存服务质量优先级分别为6、6,由于没有符合第一优先级条件和第二优先级条件的任务,即云主机未查找到符合第一优先级条件和第二优先级条件的任务所对应的进程,则云主机在等于第一内存服务质量优先级6的任务对应的进程中,选取内存占用值大于占用阈值的进程作为待回收进程。假设占用阈值为80mb,由于100mb大于80mb,则云主机在等于第一内存服务质量优先级6的任务对应的进程中,选取内存占用值大于占用阈值的进程2作为待回收进程。
104.本实施例中,当系统内存不足时,能够自动按内存服务质量优先级的高低顺序进行内存回收,实现自动回收低内存服务质量优先级的任务所占用的内存,从而保障高优任务的内存服务质量。
105.在一个实施例中,优先调度加速调度队列中的进程,以使调度的进程终止运行并释放占用的内存块的步骤,包括:
106.优先检查加速调度队列是否为空队列;
107.若加速调度队列不为空队列,则从加速调度队列中调度进程,并将调度的进程作为下一个在处理器核心执行的进程,以使进程在处理器核心执行过程中终止运行并释放占用的内存块;加速调度队列用于存放待释放内存块的进程以使存放的进程被优先调度。
108.具体的,当满足调度条件时,云主机优先检查加速调度队列是否为空队列。若云主机检测到加速调度队列不为空队列,则云主机从加速调度队列中调度进程,并将调度的进程作为下一个在处理器核心执行的进程,以使该进程在处理器核心执行过程中终止运行并释放占用的内存块;加速调度队列用于存放待释放内存块的进程以使存放的进程被优先调度。
109.举个例子,假设云主机中正常调度队列为m1,加速调度队列为a1,且加速调度队列a1中包括进程1和进程2,则当满足调度条件时,云主机优先检查加速调度队列a1是否为空队列。若云主机检测到加速调度队列a1不为空队列,则云主机从加速调度队列a1中调度进程1,并将调度的进程1作为下一个在处理器核心执行的进程,以使进程1在处理器核心执行过程中终止运行并释放占用的内存块。当下一次满足调度条件时,云主机继续优先检查加速调度队列a1是否为空队列。若云主机检测到加速调度队列a1不为空队列,则云主机从加速调度队列a1中调度进程2,并将调度的进程2作为下一个在处理器核心执行的进程,以使进程2在处理器核心执行过程中终止运行并释放占用的内存块。可以理解,在调用加速队列a1中的进程时,云主机可以按照先进先出的原则依次调度对应的进程,直到加速队列a1为空时,云主机按照先进先出原则,调度正常调度队列m1中进程。由此使得,通过将待回收的进程加入到加速调度队列中,以使得操作系统能够优先调度加速调度队列中待回收内存的进程,即通过加速被回收进程被调度的优先级,以达到提升内存回收效率的目的,从而能够有效保障目标任务的内存服务质量。
110.在一个实施例中,优先检查加速调度队列是否为空队列的步骤,包括:
111.监测调度事件;调度事件包括时钟中断或内核态返回的用户态;
112.当监测到调度事件时,优先检查加速调度队列是否为空队列。
113.具体的,云主机可以实时监测调度事件,调度事件包括时钟中断或内核态返回的用户态。当云主机监测到调度事件时,云主机优先检查加速调度队列是否为空队列。可以理解,不同的操作系统对应的调度事件不同。在linux操作系统中,调度事件可以为调度时机,调度时机有时钟中断、内核态返回的用户态等。当调度时机来临时,云主机优先检查加速调度队列是否为空队列,若云主机检测到加速调度队列不为空队列,则云主机从加速调度队列中调度进程,并将调度的进程作为下一个在处理器核心执行的进程,以使进程在处理器核心执行过程中终止运行并释放占用的内存块。其中,进程在处理器核心执行过程中,云主机可以关闭抢占功能,即防止处理器核心被其他进程抢占。例如,在ios操作系统中,在内核态处理信号时,也不允许被其他进程抢占。由此使得,能够有效保证低优任务及时得到调度机会,提升混部场景中低优任务的内存回收效率,保证内存回收的及时性,从而有效保证高优任务的内存服务质量。
114.在一个实施例中,所述方法还包括:
115.向调度的进程发送终止信号,基于终止信号唤醒调度的进程;
116.将调度的进程作为下一个在处理器核心执行的进程,以使进程在处理器核心执行过程中终止运行并释放占用的内存块,包括:
117.将调度的进程作为下一个在处理器核心执行的进程;
118.当处理器核心未被抢占时,通过处理器核心执行调度的进程,以使调度的进程处理终止信号,直到处理完终止信号的相关逻辑后退出,并释放占用的内存块。
119.其中,终止信号是指用于终止进程运行的信号,例如,终止信号可以为sigkill信号,在posix兼容的平台上,sigkill是发送给一个进程来导致它立即终止的信号。
120.具体的,云主机可以向调度的进程发送终止信号,云主机基于终止信号唤醒调度的进程,并将调度的进程作为下一个在处理器核心执行的进程。进一步的,当处理器核心未被抢占时,云主机通过处理器核心执行调度的进程,以使调度的进程处理终止信号,直到处
理完终止信号的相关逻辑后退出,并释放进程自身所占用的内存块。
121.举个例子,云主机进行加速内存回收的处理步骤可以包括:云主机通过优先级内存回收模块查找待回收对象,待回收对象可以是进程或进程组,云主机向待回收对象发送sigkill信号,同时唤醒待回收对象,并将待回收对象作为下一个在处理器核心执行的进程。进一步的,当处理器核心未被抢占时,云主机通过处理器核心执行调度的待回收对象,以使调度的待回收对象处理sigkill信号,直到处理完sigkill信号的相关逻辑后自动退出,并释放自身所占用的内存块。kill是指让一个进程立即终止的动作的计算机行话,由于内存回收通常是通过kill掉待回收进程,从而达到回收其占用的内存的目的。在执行kill待回收进程时,需要在被kill进程的上下文中处理sigkill信号,从而退出进程,回收内存。
122.由于处理sigkill信号需要在被kill进程的上下文中执行,因此回收内存依赖于待回收进程及时得到调度,如果该进程得不到调度,就无法处理sigkill信号,也就无法及时释放自身所占用的内存。尤其在混部场景中,由于低优进程的调度优先级很低,被压制得厉害,所以在高优任务比较繁忙时,低优任务很难得到调度运行,因此会出现回收内存慢的情况。而本实施例中,通过提升待回收对象即待回收进程的调度优先级,能够有效保证低优任务及时得到调度机会,提升混部场景中低优任务的内存回收效率,保证内存回收的及时性,从而有效保证高优任务的内存服务质量。
123.在一个实施例中,接收用于为目标任务申请内存的内存申请请求之前,所述方法还包括:
124.通过优先级设置接口接收到各任务的内存服务质量优先级参数;
125.将内存服务质量优先级参数存入各任务的进程对应的数据集内;
126.查找不高于第一内存服务质量优先级的任务对应的进程,包括:
127.在各任务的进程对应的数据集内,获取各任务的第二内存服务质量优先级;
128.在各任务的进程中,选取第二内存服务质量优先级不高于第一内存服务质量优先级的任务对应的进程。
129.其中,数据集是指进程或进程组对应的存放数据的数据集,例如数据集可以是任务块,每个任务块中存放每个任务对应的数据。
130.具体的,云主机接收用于为目标任务申请内存的内存申请请求之前,云主机可以通过优先级设置接口接收到用户设置的各任务的内存服务质量优先级参数,云主机可以将内存服务质量优先级参数存入各任务的进程对应的数据集内。当云主机在查找不高于第一内存服务质量优先级的任务对应的进程时,云主机可以在各任务的进程对应的数据集内,获取各任务的第二内存服务质量优先级,并选取第二内存服务质量优先级不高于第一内存服务质量优先级的任务对应的进程。
131.举个例子,以云主机为linux操作系统为例进行说明。在linux操作系统中,优先级设置接口可以包括proc文件系统接口和cgroup接口,proc文件系统是linux系统中用户态和内核的一种标准接口,是针对linux系统的一种实现方式。即用户可以通过proc文件系统接口实现进程的内存服务质量优先级的设置;或者用户也可以通过cgroup接口实现进程组的内存服务质量优先级的设置,可以理解,本实施例中的优先级设置接口也可以抽象定义为其他接口。例如,内存服务质量优先级设置范围为0-7,分别代表8个优先级级别,0表示最低优先级,供离线任务使用;7表示最高优先级,供在线任务使用。当用户需要设置指定进程
或进程组的内存服务质量优先级参数时,用户通过向相关接口写入指定的内存服务质量优先级参数即可。当内存服务质量优先级参数写入后,操作系统的内核中,将相应的优先级参数存入进程或进程组对应的数据结构中。后续在操作系统进行内存回收时,可以直接读取进程或进程组中存入的内存服务质量优先级参数。由此,通过为不同类型任务预先定义不同的内存服务质量优先级,使得在混部场景中,当系统内存不足时,云主机可以按内存服务质量优先级的高低顺序,选取回收不同级别的任务对应的进程所占用的内存,以达到提升内存回收效率的目的,从而能够有效保障高优任务的内存服务质量。
132.本技术实施例提供的方法,可以应用于云产品应用场景中。以下以混合部署的云计算场景为例,对本技术实施例提供的内存分配方法进行说明,包括以下步骤:
133.在传统的云计算场景中,业务类型多种多样,有cpu密集型的离线任务,也有延迟敏感型的在线任务。业务运行时会有明显的峰谷特性,通常业务高峰期时,主机硬件资源利用率会比较高,业务低峰期时资源利用率降低。为避免因主机资源争抢竞争而导致业务抖动和异常,通常在做业务容量规划时,只能按业务高峰期时的业务量的最大值来规划,同时留一定的余量来应对突发情况,由此导致业务低峰期时有较多的空闲硬件资源无法利用,导致资源闲置,成本高居不下。
134.同时,在混合部署的云计算场景中,将不同类型业务混合部署在同一台云主机上,例如,在线业务和离线业务混合部署的场景中,由于离线业务需要持续消耗硬件资源,会对在线业务产生严重干扰,导致在线业务产生较大的延时,或者导致业务异常。因此,离线业务和在线业务合部署的场景中,关键核心是底层资源隔离技术。底层资源通常包括:cpu(central processing unit,简称cpu)、内存、io(input/output)和网络,都需要各自隔离。
135.其中,内存资源是不可压缩资源,复用难度相对更大,内存隔离技术的难度也相对更大。内存隔离的核心是要保证高优先级任务的内存分配低延迟,意味着当高优任务需要内存时,需要云主机快速回收低优任务所占用的内存,而现有的云主机操作系统中,例如,在linux操作系统中,通常无法保证内存回收的及时性,一方面,由于内存回收需要在被回收进程的上下文中执行sigkill信号,即依赖于被回收进程及时得到调度;另一方面,由于混部场景中,低优任务的调度优先级比较低,当高优任务持续运行时,低优任务很难得到调度机会,或者运行时间不足,因而容易导致混部场景中的低优任务的内存回收时间不可控,无法保证及时性,也就无法保证高优任务的内存服务质量。
136.因此,为了解决上述问题,即针对混部场景中高优任务内存服务质量无法保证的问题,本实施例中提出了一种新的加速回收低优任务占用内存的方法,来保障云主机在离线、在线任务混部环境中高优任务的内存服务质量,在让低优任务充分利用空闲内存的同时,当内存紧张时也能保证高优任务的内存服务质量。可以理解,本实施例提供的方法适用于容器混部场景,同时也可扩展用于虚拟机混部场景。其核心内容包括:
137.1、设置任务的内存服务质量优先级。为不同类型任务定义不同的内存服务质量优先级,比如,在离线和在线任务混部的场景,在线任务和离线任务设置了不同的内存服务质量优先级。
138.2、内存不足时按照内存服务质量优先级回收内存。当内存不足时,云主机触发内存回收流程,内存回收流程中按照内存服务质量优先级的高低顺序,由低到高回收不同级别任务所占用的内存。
139.3、加速内存回收。回收指定内存服务质量优先级任务所占用的内存时,云主机通常优先回收低优任务所占的内存,即云主机通过加速待回收任务被调度执行的流程,以达到提升内存回收效率的目的,从而保障高优任务的内存服务质量。
140.此外,以云主机为linux操作系统为例,在现有linux操作系统中,当系统内存耗尽时,会触发oom(out of memory),标准oom的基本逻辑包括:
141.1、操作系统根据内存占用量和其他特征,给所有进程打分,得分最高的进程被选中作为需要被回收的进程,操作系统主要根据进程占用内存大小来打分,占用内存越多,得分越高;
142.2、操作系统向待回收的进程发送sigkill信号;
143.3、处理sigkill信号依赖于待回收进程得到调度,在该进程得到调度后才能在该进程的上下文中处理相关信号。
144.4、该进程被调度时,该进程处理sigkill信号后立即终止运行,并释放自身所占内存,即操作系统回收掉该进程所占用的所有内存。
145.上述现有技术有如下缺点:
146.1、内存回收时,即操作系统触发执行oom流程时,在选择待回收进程时,操作系统主要根据进程的内存占用量大小来选取待回收进程,并没有考虑进程的内存服务质量优先级,也就不会优先回收低优任务的内存,有可能导致高优任务被回收,因此高优任务的内存服务质量无法保证。
147.2、由于在混部场景中,低优任务的调度优先级最低,被高优先级任务压制,当高优先级任务负载较高或持续运行时,低优任务会长时间得不到调度,例如,由于高优先级任务的优先级相比低优先级任务高很多,假设为100:1,即高优先级任务运行100个单位时间片后,低优先级任务才能获得1个时间片。因此在操作系统执行oom流程时,也会使得低优任务长时间无法处理sigkill信号,导致内存回收阻塞,从而难以保障高优任务的内存服务质量。
148.3、被回收的进程由于其他各种原因,比如oom流程中等待锁被释放等,可能遇到阻塞,无法得到调度,被回收进程真正得到执行的时间不能控制,此时也无法保证内存回收的及时性。
149.因此,本实施例中提出了一种混合部署场景下内存服务质量保障方法,具体包括:
150.在产品侧,在云产品应用场景中,如图4所示,为在线任务和离线任务混合部署的产品应用示意图。即在云主机中,混合部署着不同类型的任务,比如,在线任务和离线任务。在线任务和离线任务共享主机的内存硬件资源,内存是不可压缩资源,意味着当主机内存不足,同时主机需要分配新内存时,必须通过一定的机制来回收一定的内存,以保证主机和关键任务能正常运行。
151.如图5所示,为在线任务和离线任务混合部署的应用框架示意图。即从任务分类角度看,应用框架为在主机上混合部署在线任务和离线任务。在线任务和离线任务各自按需分配自身需要的内存。当内存资源充足时,大家互不干扰;当内存资源不足时,云主机需要进行内存回收,回收掉部分任务使用的内存,才能满足新的内存申请请求。本实施例中最关键的技术有两点:
152.1、内存紧张回收时,如何选择被回收的任务。
153.2、如何保证内存快速回收,从而及时保障新的内存申请请求。
154.在技术侧,本实施例中方案整体的实现流程为:
155.一、修改操作系统内核,增强内存服务质量保障能力,主要实现如下功能:
156.1)定义不同任务的内存qos优先级,并给用户提供内存qos优先级设置接口;
157.2)在内存不足的情况下进行内存回收时,云主机按照内存qos优先级从低到高的顺序回收指定进程所占用的内存;
158.3)实现快速回收指定内存qos优先级的任务所占用的内存。
159.二、主机操作系统和虚拟机启动后,通过操作系统提供的接口设置:
160.1)设置离线任务相关进程的优先级为低优先级;
161.2)设置在线任务相关进程的优先级为高优先级。
162.三、不同任务按需分配内存。高优先级任务分配内存时,当云主机检测系统出现内存不足时,触发内存回收流程;
163.四、内存回收时,云主机按照内存qos优先级,优先选择离线任务相关进程作为回收对象。
164.五、触发加速内存回收流程,快速回收掉低优先级任务即离线任务所占用内存。
165.六、内存快速回收后,云主机将回收的内存分配给高优先级任务,以使得高优先级任务即在线任务能快速分配到所需内存,从而保障在线任务的内存服务质量。
166.可以理解,本技术实施例中云主机给高优先级任务分配内存出现内存不足时,或者云主机给低优先级任务分配内存出现内存不足时,均会触发操作系统执行内存回收流程,触发后云主机会选取低于或者等于触发内存回收流程的进程内存qos优先级的待回收进程,并将低于或者等于进程内存qos优先级的待回收进程所占用的内存进行回收。
167.如图6所示,为混合部署场景下内存服务质量保障方法的实现架构示意图。图6中虚线框部分为本实施例中需要实现的功能模块,具体来说主要包括如下三个模块:
168.1、内存qos优先级模块
169.内存qos优先级模块,用于定义和管理进程或者进程组的内存qos优先级。优先级范围可根据需要设定。同时,提供给用户内存qos优先级的设置接口,用于设置进程和进程组的内存qos优先级。
170.2、优先级内存回收模块
171.优先级内存回收模块,用于根据内存qos优先级来选择被回收对象。具体的,当云主机给任务分配内存,且出现系统内存不足时,云主机可以根据不同任务或者任务组的内存qos优先级,按照从低到高的次序来选择被回收的对象即进程或进程组。
172.3、加速内存回收模块
173.加速内存回收模块,用于加速低优先级任务的内存回收速度,尤其是在cpu比较繁忙的情况下,从而保证高优先级任务的内存服务质量。
174.由于传统方式中通用的内存回收机制存在如下问题:在cpu比较繁忙时,当离线任务被选中作为被回收对象时,通常是向离线任务发送sigkill信号,由于离线任务的调度优先级比较低,可能长时间得不到调度,导致其长时间无法处理sigkill信号,从而导致其占用的内存长时间无法释放,最终导致在线业务的内存分配出现较大延时。
175.为解决该问题,加速内存回收模块联合操作系统内核中的内存管理模块、进程调
度模块一起优化,在内存回收流程中向离线任务发送sigkill信号的同时,将该被回收对象加入到新建的加速调度队列中,以提升被回收对象即离线任务的调度优先级,并加速该待回收任务的被调度流程,保障其在第一时间能得到调度,从而保证内存回收的及时性。
176.其中,内存qos优先级模块的主要处理逻辑的实现如下:
177.1)通过proc文件系统接口实现进程内存qos优先级的设置;或者通过cgroup接口实现进程组内存qos优先级的设置。
178.2)优先级设置范围为0-7,分别代表8个级别优先级,0表示最低优先级,供离线任务使用;7表示最高优先级,供在线任务使用;可以理解,0-7级中每一级都可以供不同的任务或任务组使用,每一级之间的处理逻辑是相同的,只是在本实例中的离线、在线任务混部场景中,只设置了两个优先级参数。
179.3)当用户需要设置指定进程或者进程组的内存qos优先级时,通过向相关接口写入指定的优先级参数;
180.4)写入后,操作系统内核中,将相应的内存qos优先级信息存入进程或进程组对应的数据结构中;
181.5)后续在内存回收时,操作系统读取进程或进程组中已存入的内存qos优先级信息。
182.其中,如图7所示,为优先级内存回收模块的逻辑处理示意图。优先级内存回收模块的主要处理逻辑的实现如下:
183.1)系统正常运行过程中,在线任务和离线任务正常分配内存;
184.2)系统剩余内存逐渐减少,至内存紧张状态;
185.3)在线任务需要分配新内存时,操作系统进入内存分配流程;
186.4)判断当前系统剩余内存不足,操作系统进入内存回收流程;
187.5)操作系统按照内存qos优先级遍历所有进程或进程组,优先选择内存qos优先级最低的进程作为被回收对象。若没有查找到符合内存qos优先级最低条件的被回收对象,则依次向高优先级查找待回收对象;
188.6)若没有查找到比当前进程即在线进程的内存qos优先级低的进程或进程组,则在与当前进程同等级的内存qos优先级中,选择内存占用值最高的进程作为待回收对象。
189.如图8所示,为加速内存回收模块的逻辑处理示意图。具体实现逻辑如下:
190.1)通过优先级内存回收模块找到合适的被回收对象,例如,低优先级任务或者任务组;
191.2)向被回收对象发送sigkill信号,并唤醒被回收对象;
192.3)将被回收对象放入加速调度队列;
193.4)触发加速调度模块处理相关逻辑;
194.5)待加速调度模块处理完成后,被回收对象所占用的内存被成功回收,操作系统可将回收的内存分配给高优进程,以满足高优进程的内存分配请求。
195.如图9所示,为加速调度模块的逻辑处理示意图。具体实现逻辑如下:
196.1)被回收对象被放入加速回收队列;
197.2)紧接着的调度时机来临时,比如时钟中断,加速调度模块优先从加速回收队列中选择被调度对象;
198.3)当加速调度队列为空时,维持原有的调度逻辑;
199.4)当加速调度队列不为空时,从加速调度队列中取出一个对象,作为紧接着在cpu上运行的任务;
200.5)被选中的对象上核运行,直到该进程处理完sigkill信号等逻辑后,主动退出,在sigkill信号处理流程中操作系统可以关闭抢占功能,防止被抢占,即在sigkill信号处理期间其他任务不能抢占cpu;
201.6)每次调度时机来临时,操作系统均需优先检查加速调度队列是否空,以保障被回收对象被优先调度。
202.此外,目前新版本的linux内核中提出了一种新机制:oom reaper,oom reaper主要用来解决原来oom机制中,在高cpu和内存压力下容易出现的活锁或者死锁问题,也能提升内存回收速度。
203.oom reaper的基本原理如下:当即将被kill的进程满足预定条件时,由于被选中kill的进程不会再返回到用户态执行,也就不会再访问其当前占用的匿名内存,因此oom reaper机制下,操作系统可以通过新创建专用内核线程,在该线程的上下文中直接回收掉被kill进程所占用的匿名内存,这样就不需依赖于被kill进程等待被调度,而达到快速回收掉被kill进程的匿名内存的目的。
204.但oom reaper机制与本技术实施例中提供的方法相比,仍有如下不足:
205.1、由于oom reaper机制依赖于其他内核线程,其他内核线程执行也依赖于及时得到调度,也可能存在调度延迟,所以本质上还是无法保证内存回收的及时性。
206.2、oom reaper执行回收的过程是在单线程即内核线程的上下文中,当需要大量并发回收内存时,即离线任务比较多时,只能通过遍历所有任务来回收,性能和效率上会存在瓶颈。
207.3、oom reaper只能加速被kill进程的匿名内存回收,并不能加速被kill进程的退出流程,当被kill进程持锁导致其他流程阻塞时,oom reaper并不能加速锁的释放,不能解决类似死锁或活锁问题。
208.4、oom reaper执行过程中也有一些限制,比如需要依赖一些全局锁,如果多次尝试拿不到,也会放弃。这意味着,oom reaper不能确保一定成功,也不能确保回收及时性。
209.5、oom reaper只能在一定程度上提升内存回收速度,并非完整的针对混部场景的内存服务质量保障方案。
210.而本技术实施例中,由于不同类型任务预先设置了不同等级的内存服务质量优先级信息,故当系统内存不足时,云主机可以按内存服务质量优先级的高低顺序,选取回收不同级别的任务对应的进程所占用的内存,同时,通过将待回收的进程加入到加速调度队列中,以使得操作系统能够优先调度加速调度队列中待回收内存的进程,能够实现加速低优任务或者离线任务的被调度流程,因此,本实施例中提供的方法能够在保证低优任务充分利用空闲内存的同时,即使当内存不足时,也能够有效保证高优任务的内存服务质量。
211.应该理解的是,虽然图1-9的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-9中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行
完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
212.在一个实施例中,如图10所示,提供了一种内存分配装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:接收模块1002、查找模块1004、加入模块1006、调度模块1008和分配模块1010,其中:
213.接收模块1002,用于接收用于为目标任务申请内存的内存申请请求;内存申请请求中携带目标任务的第一内存服务质量优先级。
214.查找模块1004,用于当系统内存的剩余容量小于目标任务所需的内存空间时,查找不高于第一内存服务质量优先级的任务对应的进程。
215.加入模块1006,用于将任务对应的进程加入到加速调度队列中。
216.调度模块1008,用于当满足调度条件时,优先调度加速调度队列中的进程,以使调度的进程终止运行并释放占用的内存块。
217.分配模块1010,用于将释放的内存块分配给目标任务。
218.在一个实施例中,所述装置还包括:选取模块,用于当所述系统内存的剩余容量大于或等于所述目标任务所需的内存空间时,在所述系统内存剩余的内存中,按照所述目标任务所需的内存空间选取内存块;分配模块还用于将选取的所述内存块分配给所述目标任务。
219.在一个实施例中,所述装置还包括:确定模块,用于确定当前运行的任务的第二内存服务质量优先级;对比模块,用于对比所述第二内存服务质量优先级与所述第一内存服务质量优先级;查找模块还用于在当前运行的所述任务对应的进程中,基于对比的结果查找不高于所述第一内存服务质量优先级的任务对应的进程。
220.在一个实施例中,确定模块还用于当所述第二内存服务质量优先级符合离线任务优先级时,确定所述第二内存服务质量优先级对应的任务为离线任务;选取模块还用于在当前运行的所述任务对应的进程中,优先选取所述离线任务的进程;所述离线任务的内存服务质量优先级不高于所述第一内存服务质量优先级。
221.在一个实施例中,所述装置还包括:获取模块,用于当所述第一内存服务质量优先级符合所述离线任务优先级时,在当前运行的所述任务对应的进程中获取所述离线任务的进程;选取模块还用于在所述离线任务的进程中,优先选取内存占用值大于占用阈值的进程。
222.在一个实施例中,选取模块还用于在低于所述第一内存服务质量优先级的任务对应的进程中,优先选取所述第二内存服务质量优先级符合第一优先级条件的任务所对应的进程;若未查找到符合所述第一优先级条件的任务所对应的进程,则选取所述第二内存服务质量优先级符合第二优先级条件的任务所对应的进程;若未查找到符合所述第二优先级条件的任务所对应的进程,则在等于所述第一内存服务质量优先级的任务对应的进程中,选取内存占用值大于占用阈值的进程。
223.在一个实施例中,所述装置还包括:检查模块,用于优先检查所述加速调度队列是否为空队列;调度模块还用于若所述加速调度队列不为空队列,则从所述加速调度队列中调度进程,并将调度的所述进程作为下一个在处理器核心执行的进程,以使所述进程在所述处理器核心执行过程中终止运行并释放占用的内存块;所述加速调度队列用于存放待释
放内存块的进程以使存放的所述进程被优先调度。
224.在一个实施例中,所述装置还包括:监测模块,用于监测调度事件;所述调度事件包括时钟中断或内核态返回的用户态;检查模块还用于当监测到所述调度事件时,优先检查所述加速调度队列是否为空队列。
225.在一个实施例中,所述装置还包括:发送模块,用于向调度的所述进程发送终止信号,基于所述终止信号唤醒调度的所述进程;将调度的所述进程作为下一个在处理器核心执行的进程;执行模块,用于当所述处理器核心未被抢占时,通过所述处理器核心执行调度的所述进程,以使调度的所述进程处理所述终止信号,直到处理完所述终止信号的相关逻辑后退出,并释放占用的内存块。
226.在一个实施例中,所述装置还包括:接收模块还用于通过优先级设置接口接收到各任务的内存服务质量优先级参数;存入模块,用于将所述内存服务质量优先级参数存入各所述任务的进程对应的数据集内;获取模块还用于在各所述任务的进程对应的数据集内,获取各所述任务的第二内存服务质量优先级;选取模块还用于在各所述任务的进程中,选取所述第二内存服务质量优先级不高于所述第一内存服务质量优先级的任务对应的进程。
227.关于内存分配装置的具体限定可以参见上文中对于内存分配方法的限定,在此不再赘述。上述内存分配装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
228.在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储内存分配数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种内存分配方法。
229.本领域技术人员可以理解,图11中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
230.在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
231.在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
232.在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
233.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机
可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。
234.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
235.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
技术特征:
1.一种内存分配方法,其特征在于,所述方法包括:接收用于为目标任务申请内存的内存申请请求;所述内存申请请求中携带所述目标任务的第一内存服务质量优先级;当系统内存的剩余容量小于所述目标任务所需的内存空间时,查找不高于所述第一内存服务质量优先级的任务对应的进程;将所述任务对应的进程加入到加速调度队列中;当满足调度条件时,优先调度所述加速调度队列中的进程,以使调度的所述进程终止运行并释放占用的内存块;将释放的所述内存块分配给所述目标任务。2.根据权利要求1所述的方法,其特征在于,所述接收用于为目标任务申请内存的内存申请请求之后,所述方法还包括:当所述系统内存的剩余容量大于或等于所述目标任务所需的内存空间时,在所述系统内存剩余的内存中,按照所述目标任务所需的内存空间选取内存块;将选取的所述内存块分配给所述目标任务。3.根据权利要求1所述的方法,其特征在于,所述查找不高于所述第一内存服务质量优先级的任务对应的进程,包括:确定当前运行的任务的第二内存服务质量优先级;对比所述第二内存服务质量优先级与所述第一内存服务质量优先级;在当前运行的所述任务对应的进程中,基于对比的结果查找不高于所述第一内存服务质量优先级的任务对应的进程。4.根据权利要求3所述的方法,其特征在于,所述基于对比的结果查找不高于所述第一内存服务质量优先级的任务对应的进程,包括:当所述第二内存服务质量优先级符合离线任务优先级时,确定所述第二内存服务质量优先级对应的任务为离线任务;在当前运行的所述任务对应的进程中,优先选取所述离线任务的进程;所述离线任务的内存服务质量优先级不高于所述第一内存服务质量优先级。5.根据权利要求4所述的方法,其特征在于,所述在当前运行的所述任务对应的进程中,优先选取所述离线任务的进程,包括:当所述第一内存服务质量优先级符合所述离线任务优先级时,在当前运行的所述任务对应的进程中获取所述离线任务的进程;在所述离线任务的进程中,优先选取内存占用值大于占用阈值的进程。6.根据权利要求3所述的方法,其特征在于,所述方法还包括:在低于所述第一内存服务质量优先级的任务对应的进程中,优先选取所述第二内存服务质量优先级符合第一优先级条件的任务所对应的进程;若未查找到符合所述第一优先级条件的任务所对应的进程,则选取所述第二内存服务质量优先级符合第二优先级条件的任务所对应的进程;若未查找到符合所述第二优先级条件的任务所对应的进程,则在等于所述第一内存服务质量优先级的任务对应的进程中,选取内存占用值大于占用阈值的进程。7.根据权利要求1所述的方法,其特征在于,所述优先调度所述加速调度队列中的进
程,以使调度的所述进程终止运行并释放占用的内存块,包括:优先检查所述加速调度队列是否为空队列;若所述加速调度队列不为空队列,则从所述加速调度队列中调度进程,并将调度的所述进程作为下一个在处理器核心执行的进程,以使所述进程在所述处理器核心执行过程中终止运行并释放占用的内存块;所述加速调度队列用于存放待释放内存块的进程以使存放的所述进程被优先调度。8.根据权利要求7所述的方法,其特征在于,所述优先检查所述加速调度队列是否为空队列,包括:监测调度事件;所述调度事件包括时钟中断或内核态返回的用户态;当监测到所述调度事件时,优先检查所述加速调度队列是否为空队列。9.根据权利要求7所述的方法,其特征在于,所述方法还包括:向调度的所述进程发送终止信号,基于所述终止信号唤醒调度的所述进程;所述将调度的所述进程作为下一个在处理器核心执行的进程,以使所述进程在所述处理器核心执行过程中终止运行并释放占用的内存块,包括:将调度的所述进程作为下一个在处理器核心执行的进程;当所述处理器核心未被抢占时,通过所述处理器核心执行调度的所述进程,以使调度的所述进程处理所述终止信号,直到处理完所述终止信号的相关逻辑后退出,并释放占用的内存块。10.根据权利要求1至9任一项所述的方法,其特征在于,所述接收用于为目标任务申请内存的内存申请请求之前,所述方法还包括:通过优先级设置接口接收到各任务的内存服务质量优先级参数;将所述内存服务质量优先级参数存入各所述任务的进程对应的数据集内;所述查找不高于所述第一内存服务质量优先级的任务对应的进程,包括:在各所述任务的进程对应的数据集内,获取各所述任务的第二内存服务质量优先级;在各所述任务的进程中,选取所述第二内存服务质量优先级不高于所述第一内存服务质量优先级的任务对应的进程。11.一种内存分配装置,其特征在于,所述装置包括:接收模块,用于接收用于为目标任务申请内存的内存申请请求;所述内存申请请求中携带所述目标任务的第一内存服务质量优先级;查找模块,用于当系统内存的剩余容量小于所述目标任务所需的内存空间时,查找不高于所述第一内存服务质量优先级的任务对应的进程;加入模块,用于将所述任务对应的进程加入到加速调度队列中;调度模块,用于当满足调度条件时,优先调度所述加速调度队列中的进程,以使调度的所述进程终止运行并释放占用的内存块;分配模块,用于将释放的所述内存块分配给所述目标任务。12.根据权利要求11所述的内存分配装置,其特征在于,所述装置还包括:选取模块,用于当所述系统内存的剩余容量大于或等于所述目标任务所需的内存空间时,在所述系统内存剩余的内存中,按照所述目标任务所需的内存空间选取内存块;分配模块还用于将选取的所述内存块分配给所述目标任务。
13.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至10中任一项所述的方法的步骤。14.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至10中任一项所述的方法的步骤。15.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至10中任一项所述方法的步骤。
技术总结
本申请涉及一种内存分配方法、装置、计算机设备和存储介质。所述方法可以应用于对车载终端、云服务器或其它设备进行内存分配的应用场景,该方法包括:接收用于为目标任务申请内存的内存申请请求;所述内存申请请求中携带所述目标任务的第一内存服务质量优先级;当系统内存的剩余容量小于所述目标任务所需的内存空间时,查找不高于所述第一内存服务质量优先级的任务对应的进程;将所述任务对应的进程加入到加速调度队列中;当满足调度条件时,优先调度所述加速调度队列中的进程,以使调度的所述进程终止运行并释放占用的内存块;将释放的所述内存块分配给所述目标任务。采用本方法能够有效保证任务的内存服务质量。够有效保证任务的内存服务质量。够有效保证任务的内存服务质量。
技术研发人员:蒋彪
受保护的技术使用者:腾讯科技(深圳)有限公司
技术研发日:2022.01.06
技术公布日:2023/7/22
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:一种车辆控制系统的制作方法 下一篇:充放电控制电路、方法、设备及存储介质与流程
