CN115712500A - 内存释放、内存恢复方法、装置、计算机设备及存储介质 - Google Patents
内存释放、内存恢复方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN115712500A CN115712500A CN202211409950.0A CN202211409950A CN115712500A CN 115712500 A CN115712500 A CN 115712500A CN 202211409950 A CN202211409950 A CN 202211409950A CN 115712500 A CN115712500 A CN 115712500A
- Authority
- CN
- China
- Prior art keywords
- memory block
- memory
- released
- metadata
- page table
- 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
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本说明书提供一种内存释放、内存恢复方法、装置、计算机设备及存储介质,所述内存包括多个内存块,所述方法包括:确定所述内存中的待释放内存块;确定所述待释放内存块的各个比特位是否都为零;若是,将所述待释放内存块对应的页表项信息清空,以及创建与所述待释放内存块对应的元数据后,释放所述待释放内存块;其中,所述元数据包括预设标记信息,所述预设标记信息用于表示所述待释放内存块的各个比特位都为零。
Description
技术领域
本说明书涉及计算机技术领域,尤其涉及内存释放、内存恢复方法、装置、计算机设备及存储介质。
背景技术
操作系统对于每个进程,会为其分配一定数量的内存块,并为每个进程创建对应的页表数据,用于记录分配给该进程的各个内存块的信息。
为了灵活使用内存,对于已分配给各个进程的各个内存块,操作系统的内存管理模块还会记录这些内存块的冷热状态信息,对于冷状态的内存块,通过一些处理机制将其进行释放,以腾出空间提高资源利用率。
例如,可以调用数据压缩算法,将冷状态的内存块中的数据进行压缩,压缩后的数据则存储在特定存储空间中,该内存块可以释放,重新用于分配。释放内存块释放前,需要在该内存块所属进程的页表数据中,清空该内存块对应的页表项信息,并在用于管理各个已压缩内存块的元数据中,记录该内存块的压缩信息,如压缩数据的存储位置信息等等。
后续,若进程需要访问该内存块的数据,操作系统可以通过页表数据发现异常,通过元数据的记录,取出压缩数据并解压,并重新分配一个空闲内存块存储解压后的数据,以供进程访问。
由此可见,上述方案需要调用数据压缩算法对内存块中的数据进行压缩,执行数据压缩算法会有一定的开销,基于此,需要进行改进,以提升内存释放的速度。同理,在内存恢复时,也需要调用数据解压算法,也需要对内存恢复方案进行改进,以提升内存恢复的速度。
发明内容
为克服相关技术中存在的问题,本说明书提供了内存释放、内存恢复方法、装置、计算机设备及存储介质。
根据本说明书实施例的第一方面,提供一种内存释放方法,所述内存包括多个内存块,所述方法包括:
确定所述内存中的待释放内存块;
确定所述待释放内存块的各个比特位是否都为零;
若是,将所述待释放内存块对应的页表项信息清空,以及创建与所述待释放内存块对应的元数据后,释放所述待释放内存块;其中,所述元数据包括预设标记信息,所述预设标记信息用于表示所述待释放内存块的各个比特位都为零。
根据本说明书实施例的第二方面,提供一种内存恢复方法,所述方法包括:
响应于内存恢复请求,获取需恢复内存块的元数据,所述元数据包括预设标记信息或压缩数据的存储位置信息;
从内存中分配目标内存块;
若所述元数据包括预设标记信息,在页表数据中添加所述目标内存块的页表项信息,完成所述目标内存块的恢复;其中,所述预设标记信息用于表示所述需恢复内存块的各个比特位都为零。
根据本说明书实施例的第三方面,提供一种内存释放装置,所述内存包括多个内存块,所述装置包括:
内存块确定模块,用于:确定所述内存中的待释放内存块;
比特位确定模块,用于:确定所述待释放内存块的各个比特位是否都为零;
释放模块,用于:在确定所述待释放内存块的各个比特位都为零的情况下,将所述待释放内存块对应的页表项信息清空,以及创建与所述待释放内存块对应的元数据后,释放所述待释放内存块;其中,所述元数据包括预设标记信息,所述预设标记信息用于表示所述待释放内存块的各个比特位都为零。
根据本说明书实施例的第四方面,提供一种内存恢复装置,所述装置包括:
内存块确定模块,用于:响应于内存恢复请求,获取需恢复内存块的元数据,所述元数据包括预设标记信息或压缩数据的存储位置信息;
分配模块,用于:从内存中分配目标内存块;
恢复模块,用于:在所述元数据包括所述预设标记信息的情况下,在页表数据中添加所述目标内存块的页表项信息,完成所述目标内存块的恢复;其中,所述预设标记信息用于表示所述需恢复内存块的各个比特位都为零。
根据本说明书实施例的第五方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述第一方面所述方法实施例的步骤。
根据本说明书实施例的第六方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现前述第一方面所述方法实施例的步骤。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本说明书实施例中,对于内存释放方案,根据内存释放请求,确定待释放内存块后,先确定待释放内存块的各个比特位是否都为零;在确定该待释放内存块的各个比特位都为零的情况下,直接将所述待释放内存块对应的页表项信息清空,以及创建对应的元数据以记录所述待释放内存块被压缩,之后释放所述待释放内存块;由此可见,在释放时无需执行数据压缩操作,提升了内存释放的速度。并且,元数据中包括预设标记信息,从而在内存恢复时,通过预设标记信息,可以从内存中分配目标内存块,直接在页表数据中添加所述目标内存块的页表项信息,也无需执行数据解压操作,提升了内存恢复的速度。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书根据一示例性实施例示出的一种页表数据的示意图。
图2A是本说明书根据一示例性实施例示出的一种内存释放方法的流程图。
图2B是本说明书根据一示例性实施例示出的一种内存的示意图。
图2C是本说明书根据一示例性实施例示出的一种NUMA架构的示意图。
图2D是本说明书根据一示例性实施例示出的一种目标查找树的示意图。
图2E是本说明书根据一示例性实施例示出的一种内存恢复方法的流程图。
图3是本说明书根据一示例性实施例示出的一种内存释放装置/内存恢复装置所在计算机设备的框图。
图4是本说明书根据一示例性实施例示出的一种内存释放装置的框图。
图5是本说明书根据一示例性实施例示出的一种内存恢复装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
进程运行时,操作系统会为进程分配虚拟地址空间和物理地址空间,并创建该进程对应的页表,页表用于记录虚拟地址空间和物理地址空间的映射关系。操作系统还对管理的内存维护有元数据,用于管理内存。内存交换时,由于进程的数据的存储位置发生了变更,需要更新该进程的页表;由于数据的存储位置发生变更也导致内存块的状态发生变更,因此也需要更新元数据。
页表是虚拟内存技术的概念。为了让程序获得更多的可用内存、将物理内存扩充成更大的逻辑内存,操作系统还使用了虚拟内存的技术。它将物理内存抽象为地址空间,操作系统为每个进程分配独立的一套虚拟地址,不同进程的虚拟地址和不同内存的物理地址映射起来。如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址。此处涉及两个地址的概念:
程序所使用的内存地址叫做虚拟地址(Virtual Memory Address,VA);
实际存在硬件里面的空间地址叫做物理地址(Physical Memory Address,PA)。
虚拟地址与物理地址之间通过页表来映射。页表存储在内存中,通过CPU(CentralProcessing Unit,处理器)的MMU(Memory Management Unit,内存管理单元)来实现虚拟内存到物理内存的转换。而当进程要访问的虚拟地址在页表中查不到时,系统会产生缺页异常,进入系统内核空间分配物理内存、更新进程的页表,最后再返回用户空间,恢复进程的运行。
如图1所示,是本说明书根据一示例性实施例示出的一种页表数据的示意图,相关技术中,操作系统的内存管理单元将内存按设定的管理粒度进行划分,每一管理粒度可称为页(page),或者也可称为块。本实施例以该进程所分配的页为0至N为例,页表中包括N个页表项,每一个页表项即用于表示每一页的虚拟地址与物理地址之间的对应关系。从而,整个页表记录进程的虚拟地址空间、页表和物理地址空间之间的关系,进程的某个虚拟地址可以通过页表映射至对应的物理地址。
为了解决内存不够用的问题,可以通过压缩内存的方法来处理内存中不频繁使用的内存页(通常称为冷页),从而减少内存的使用量。原本分配给进程的某个内存页经过压缩,压缩的数据存储在内存中的指定位置。在发生内存压缩时,被压缩内存块对应的页表项信息需要更新。
另外,操作系统还维护有内存块的元数据,元数据的类型有多种,根据不同场景,元数据可以包括但不限于表示内存块是否分配的元数据、内存的总元数据或表示内存块的冷热状态元数据、表示内存块所属进程的元数据、表示内存块所属的进程的内存分配情况的元数据等等。以虚拟机场景为例,一些方案中计算机设备专用于虚拟机,对虚拟机的内存分配方案中,对各个虚拟机配置了固定的虚拟地址空间,为了便于通过物理地址查询虚拟地址,且提升查询效率,在页表数据的基础上,还额外创建了用于表示内存分配情况的元数据mmap(memory map,内存的虚拟地址与物理地址的映射关系),通过该元数据可以实现虚拟地址与物理地址的双向查询,可提升查询效率。当内存压缩时,被压缩内存页的各种元数据也需要更新。
当进程通过虚拟地址访问到已被压缩的内存页时,由于压缩时页表数据中该内存页的页表信息被清空,因此触发缺页异常,操作系统则进行内存块解压处理,具体是查找出被压缩的数据,分配新的物理内存页,将解压的数据存储至新的内存页中,更新页表数据,将该新的内存页的物理地址与虚拟地址进行映射,使进程恢复访问所需的内存页。
相关技术中,针对待压缩内存块,相关技术内存压缩方案直接调用数据压缩算法对其存储的数据进行压缩,数据压缩算法会有一定的开销,基于此,需要对内存压缩方案进行改进,以提升内存压缩的速度。同理,在内存解压时,也需要调用数据解压算法执行解压操作,基于此,也需要对内存解压方案进行改进,以提升内存解压的速度。
如图2A所示,是本说明书根据一示例性实施例示出的一种内存释放方法的示意图,包括如下步骤:
在步骤202、响应于内存释放请求,确定待释放内存块。
在步骤204、确定所述待释放内存块的各个比特位是否都为零。
在步骤206、若是,将所述待释放内存块对应的页表项信息清空,以及创建与所述待释放内存块对应的元数据后,释放所述待释放内存块;其中,所述元数据包括预设标记信息,所述预设标记信息用于表示所述待释放内存块的各个比特位都为零。
本实施例方法可以应用于任意计算机设备的操作系统中,可以用于对内存中已分配的内存块进行释放。
在一些例子中,计算机设备可以采用传统的内存管理架构,即由操作系统管理整个内存。在另一些场景中,例如虚拟机场景下,计算机设备可以采用预留内存的内存分配架构,如图2B所示,是本说明书根据一示例性示出的预留内存场景的示意图,在该架构中,宿主机的内存包括两个存储空间,如图2B中采用不同填充方式示出了内存的两个存储空间,包括供内核使用的非预留存储空间a(图中采用斜线填充),以及供虚拟机使用的预留存储空间b(图中采用竖线及灰度填充)。也即是,非预留存储空间a用于供图中的内核使用,运行于操作系统上的应用(如图中示例的应用1至应用3)可使用该非预留存储空间a。而预留存储空间b则可供虚拟机(VM,Virtual Machine)使用,如图中示出的VM1至VMn共n个虚拟机。两个存储空间可以采用不同的管理粒度,即对内存的划分方式可以是不同的。图2B中为了示例方便,两个存储空间在图中是以连续的方式进行示意的。可以理解,实际应用中,两个存储空间可以是非连续的。
预留存储空间占据内存的大部分,且对于宿主机内核不可用,可以在操作系统的内核中插入一模块专门用于对预留存储空间进行管理。为了方便管理这一系列的内存同时避免大量元数据对内存的占用,以及考虑到为虚拟机分配内存时往往最少也是数百MB(MByte,兆字节)起,因此预留存储空间采用以较大的粒度划分,例如将预留存储空间划分为2MB等大小的内存块(Memory Section,ms)进行管理;在一些场景中,大粒度也普遍被使用,如1GB(GigaByte,吉字节)等都是可选的,本实施例对此不进行限定。
应用于预留内存场景时,操作系统可以采用不同的模块分别管理预留存储空间与非预留存储空间,例如,本实施例方法可以应用于操作系统中管理非预留存储空间的模块,用于处理预留存储空间中内存块的压缩。
在另一些例子中,计算机设备可以是包括多个物理CPU的设备,根据需要可以采用非一致内存访问(Non Uniform Memory Access Architecture,NUMA)架构,NUMA架构包括至少两个NUMA节点(NUMA node),如图2C所示,以两个NUMA节点作为示例,宿主机可以包括NUMA节点1和NUMA节点2。在NUMA架构下,宿主机的多个物理CPU以及多个内存从属于不同的NUMA节点。每个NUMA节点均包括至少一个物理CPU与至少一个物理内存,图2C以NUMA节点包括一个物理CPU和一个物理内存为例。在NUMA节点内部,物理CPU与物理内存之间使用集成内存控制器总线(Integrated Memory Controller Bus,IMC Bus)进行通信,而NUMA节点之间则使用快速通道互联(Quick Path Interconnect,QPI)进行通信。由于QPI的延迟高于IMC Bus的延迟,因此宿主机上物理CPU对内存的访问就有了远近之别(remote/local)。物理CPU访问本节点的物理内存速度较快,物理CPU访问其他NUMA节点的物理内存速度较慢。
在NUMA架构场景中,本实施例的内存可以包括上述任一物理内存。可选的,NUMA架构中任一物理内存还可以采用预留内存架构。基于此,本实施例所管理的存储空间还可以是指NUMA架构中任一物理内存中的预留存储空间。
可以理解,实际应用中,计算机设备还可以采用其他架构,根据实际需要,本实施例所指的内存根据实际应用场景可以有多种实现方式,在此不再一一列举。
其中,步骤202中的内存释放请求可以通过多种方式获取到。在一些例子中,可以是,操作系统的内存管理模块可以有内存老化管理功能,该功能可以管理内存中各个内存块的冷热变化情况,根据需要维护有表示内存冷热状态的元数据。可以通过扫描内存中各个内存块的使用情况,确定各个内存块的冷热状态。例如,冷页集合中可以记录处于冷状态的内存块,热页集合可以记录处于热状态的内存块。作为一个示例,本实施例方案具体可以应用操作系统中的内存压缩模块,该内存压缩模块按照设定条件启动,例如可以是在接收到用户的启动指令,确定接收到内存释放请求;也可以周期性的启动,或者是接收到操作系统的其他模块的启动指令,确定接收到内存释放请求等等。接着,可以从冷页集合中确定需要释放的内存块,本实施例称为待释放内存块。示例性的,可以是批处理场景,例如可以从冷页集合中一次取出多个内存块,各个内存块可以采用串行的方式处理,即每次针对一个内存块,执行本实施例的方法进行释放。当然,并行处理也是可选的,本实施例对此不进行限定。
对于待释放内存块,本实施例未将其存储的数据直接进行压缩,而是先确定所述待释放内存块的各个比特位是否都为零,在确定都为零的情况下,本实施例无需进行数据压缩操作。如虚拟机等应用场景,宿主机设备上可以运行一个或多个虚拟机,虚拟机对于宿主机来说是一个进程,但虚拟机本身是一个虚拟的计算机设备,而一台计算机设备的内存使用率通常情况下不会到达100%,即通常情况下虚拟机对分配给其的内存,会剩余一些存储空间,而这些未使用的存储空间,其各个比特位都为零,这是由于宿主机在虚拟机创建、向其分配一定的存储空间时,会对所分配的存储空间进行初始化,初始化的过程即对存储空间的各个比特位置零。
因此,本实施例在确定所述待释放内存块的各个比特位是否都为零,直接将所述待释放内存块对应的页表项信息清空,以及在元数据中记录所述待释放内存块的压缩信息后,释放所述待释放内存块。若不是都为零,则对所述待释放内存块中的数据进行压缩后,存储所述压缩数据,将所述待释放内存块对应的页表项信息清空,以及创建对应的元数据以记录所述待释放内存块被压缩,之后释放所述待释放内存块。
为了提升确定内存块的各个比特位是否都为零的速度,在一些例子中,所述确定所述待释放内存块的各个比特位是否都为零,包括:
在未更改所述待释放内存块的读写权限的情况下,对所述待释放内存块各个字节是否都为零进行预判断;
若预判断出所述待释放内存块的各个比特位都为零,将所述待释放内存块的读写权限更改为只读后,再判断所述待释放内存块的各个比特位是否都为零。
本实施例中,考虑到在确定内存块的各个比特位都为零的过程需要耗费一定时间,且在确定的过程中内存块还可能发生更新;基于此,本实施例是在未更改所述待释放内存块的读写权限的情况下,先对所述待释放内存块各个字节是否都为零进行预判断,若预判断出所述待释放内存块的各个比特位不是都为零,确定所述待释放内存块的各个比特位不是都为零。在预判断出所述待释放内存块的各个比特位都为零,将所述待释放内存块的读写权限更改为只读后,再进一步判断所述待释放内存块的各个比特位是否都为零。一方面,先判断出待释放内存块的各个比特位不是都为零的情况,且预判断无需更改内存块的权限,可以减少开销;若预判断出待释放内存块的各个比特位都为零,再更改为只读权限,进一步做准确的判断,因此提升了确定的效率,也可以得到准确的判断结果。
预判断的目标是先确定待释放内存块的各个比特位不是都为零,实际应用中,预判断可以采用多种实现方式,在一些例子中,所述对所述待释放内存块的各个比特位是否都为零进行预判断,包括:
从所述待释放内存块中选取n个比特位,确定所述n个比特位是否都为零;其中,所述n为正整数;
若否,预判断出所述待释放内存块的各个比特位不是都为零;
若是,对所述待释放内存块除所述设定位数的比特位之外的其他比特位是否都为零进行预判断。
本实施例中,为了提升预判断的速度,可以先选取部分比特位先进行判断,只要其中有一个不为零,即可预判断出所述待释放内存块的各个比特位不是都为零。其中,选取的个数n可以根据需要灵活配置,例如可以基于内存块的大小和实际的开销需求而确定,本实施例对此不进行限定。
在一些例子中,所述从所述待释放内存块中选取n个比特位可以有多种方式,例如可以包括如下任一:
从所述待释放内存块的最高位开始选取n个比特位;
从所述待释放内存块的最低位开始选取n个比特位;或,
在所述待释放内存块中随机选取n个比特位。
其中,从所述待释放内存块的最高位开始选取n个比特位或从所述待释放内存块的最低位开始选取n个比特位,这两种选取方式较为快速;而在所述待释放内存块中随机选取n个比特位的方式,则可以提升做出准确的预判断的概率。
在其他例子中,判断是否为零的方式,可以是将每个比特位存储的信息与零进行比较。或者,还可以采用编码的方式进行判断,例如,可以将取出的n个比特位的信息进行编码,得到第一编码信息,将该第一编码信息与预设的第二编码信息进行比较,该第二编码信息是对n个零进行编码得到的信息,基于此,比较第一编码信息与第二编码信息是否相同,即可确定从待释放内存块中取出的n个比特位是否都为零。实际应用中,可以采用多种编码方式,例如已有的各种哈希(hash)算法,包括但不限于MD5(Message-Digest Algorithm,消息摘要算法)、SHA(Secure Hash Algorithm,安全散列算法)等等。或者,自定义的编码算法也是可选的,编码算法对任意输入能够产生唯一的编码信息即可。
实际应用中,操作系统为每个进程分配独立的一套虚拟地址,并利用页表将不同进程的虚拟地址和不同内存的物理地址映射起来。每个进程对应一份页表数据。本实施例中,每个进程的页表数据包括多个页表项信息,每个页表项对应一个内存块。实际应用中,为了减少页表数据占用的存储空间以及快速查找虚拟地址与物理地址的映射关系,一些操作系统还采用了多级页表的解决方案,即每个进程的页表数据可以按级别包括多份目录项。以常见的四级页表为例,页表数据包括如下四份记录有页表目录项的数据:
全局页目录项PGD(Page Global Directory);
上层页目录项PUD(Page Upper Directory);
中间页目录项PMD(Page Middle Directory);
页表项PTE(Page Table Entry)。
上述四级页表中所具体记录的信息以及通过页表查询虚拟地址与物理地址的映射关系的过程可以参考相关技术,本实施例在此不进行赘述。
因此,本实施例中待释放内存块被释放后,需要将所述待释放内存块对应的页表项信息清空,例如,进程的页表数据中,其中一个页表项记录的是虚拟地址VA1对应内存块的物理地址PA1,该PA1对应的内存块即本实施例的待释放内存块,本实施例的清空,即在页表项中将内存块的物理地址PA1清除。如上所述,一些例子中一些页表数据可以包括四级数据,可以根据实际的内存管理粒度对相应级别的数据进行更新,实际应用中可以根据需要灵活配置,本实施例对此不进行限定。
本实施例中还在元数据中记录所述待释放内存块的压缩信息。其中,该元数据用于管理各个被压缩的内存块的信息,该元数据中记录的信息可以包括但不限于:待释放内存块对应的虚拟地址(可以包括用户态的虚拟地址及内核态的虚拟地址)、压缩数据的存储位置的物理地址或压缩数据的大小信息等等。其中,本实施例中,在待释放内存块的各个比特位都为零的情况下,还可包括预设标记信息,该预设标记信息用于指示待释放内存块的各个比特位都为零。
在一些例子中,对于待释放内存块中的数据不是都为零的情况,对所述待释放内存块中的数据进行压缩后,存储所述压缩数据,将所述待释放内存块对应的页表项信息清空,以及创建与所述待释放内存块对应的元数据后,释放所述待释放内存块;其中,所述元数据包括所述压缩数据的存储位置信息。本实施例中,对于待释放内存块不是都为零的情况,则需要执行对所述待释放内存块中的数据进行压缩后,存储所述压缩数据的操作;以及前述的将所述待释放内存块对应的页表项信息清空,以及创建对应的元数据,其中包括所述压缩数据的存储位置信息。
其中,压缩数据的存储方式,根据不同场景有不同的实现方式。例如,传统的内存管理方案中,操作系统还有专门用于管理小块内存的小块内存管理模块,可以将压缩数据存储至更小管理粒度的存储空间中。或者,在预留内存等场景下,预留存储空间的内存管理方案中,内存包括多个内存块,对每个所述内存块还划分了多个内存段;将内存块设计为较大的粒度,从而减少内存块的块元数据的占用;另外,还可以对内存块中的内存段进行具体管理。因此,一个内存块压缩后数据变小,因此可以通过内存段存储压缩数据。
在一些例子中,所述存储所述压缩数据的步骤之前,还包括:确定所述压缩数据的大小满足预设释放条件。本实施例中,还可能出现内存块中数据压缩后,压缩数据仍然较大的情况,基于此,本实施例还可以先判断压缩数据的大小是否满足预设释放条件,若满足则在执行存储压缩数据的操作,若不满足,则不释放所述待释放内存块,即待释放内存块释放失败。其中,预设释放条件可以根据实际需要灵活配置,例如,可以是压缩数据的大小大于或等于预设大小阈值,可以是压缩数据的大小占内存块大小的比例大于或等于预设比例阈值等。
在完成上述将所述待释放内存块对应的页表项信息清空,以及在所述元数据中记录所述待释放内存块的压缩信息操作后,可以释放所述待释放内存块,该待释放内存块被内存管理模块回收,用于重新分配。可以理解,由于该待释放内存块被释放,其分配状态需要更新,实际应用中还可以包括该待释放内存块的其他元数据的更新,例如表示内存块是否分配的元数据、内存的总元数据、内存块的冷热状态元数据、内存中各个内存块所属进程的内存分配数据mmap等等。
元数据中可能记录很多个已压缩内存块,为了便于在内存恢复时快速查找出需要恢复的内存块,在一些例子中,元数据中还包括所述待释放内存块对应的页表项的地址;所述方法还包括:
根据所述元数据维护目标查找树,所述目标查找树中每个节点对应一个内存块的元数据,节点对应的内存块的元数据中页表项的地址作为所述节点的唯一标识。
其中,目标查找树用于快速查找,树的结构可以有多种选择,例如红黑树等,实际应用中可以根据需要灵活配置。本实施例中,需要为各个内存块确定唯一的关键字,基于此,从表示内存块被压缩的信息中,确定了页表项的地址作为关键字,目标查找树中每个节点用对应一个内存块的元数据,各个节点记录所述节点对应的内存块的元数据中页表项的地址作为唯一标识,从而在恢复时,通过页表项的标识快速查找出需要恢复的内存块及其信息。如图2D所示,是本说明书根据一示例性实施例示出的一种目标查找树的示意图,该树包括7个节点(N1至N7),以节点N2和节点N3为例,节点N2链接至某个内存块的压缩信息K2,且记录该压缩信息K2中的页表项的地址;节点N3链接至某个内存块的压缩信息K3,且记录该压缩信息K3中的页表项的地址。其中,节点链接至压缩信息的实现,可以是节点中存储压缩信息的指针。在另一些例子中,还可以是将各个元数据直接组织成树,即树的节点结构体直接包含至元数据中也是可选的。
实际应用中,计算机设备可以是单核CPU设备,也可以是多核CPU。在多核CPU场景下,还可以提升压缩处理的效率,例如,本实施例方法应用于计算机设备的多个CPU的当前CPU时,所述对所述待释放内存块中存储的数据进行压缩,可以包括:由所述当前CPU对所述待释放内存块中存储的数据进行压缩;或,从其他CPU中选取目标CPU,创建用于对所述待释放内存块中存储的数据进行压缩的进程;其中,所述进程与所述目标CPU绑定,以使操作系统调度所述目标CPU执行所述进程;其中,所述目标CPU的运行信息满足预设空闲条件,和/或,所述目标CPU与所述当前CPU之间的通信效率满足预设通信条件。实际应用中,上述预设空闲条件可以根据需要灵活配置,预设通信条件也可以根据需要灵活配置。例如,从是否是相同CPU核、是否是相同socket(套接字,网络中不同主机上的应用进程之间进行双向通信的端点的抽象)或是否位于相同的NUMA节点等多个维度确定。作为一个例子,如果当前CPU处于空闲状态则采用当前CPU,若未处于空闲状态,则基于通信效率进行确定,例如选取同一个socket上的CPU,因为他们会共享同一个缓存行(cache line),通信效率相对更高;再次选同一个NUMA上的CPU,最后选取跨NUMA的空闲CPU等。
如图2E所示,是本说明书根据一示例性实施例示出的一种内存恢复方法的流程图,包括如下步骤:
在步骤212中,响应于内存恢复请求,获取需恢复内存块的元数据,所述元数据包括预设标记信息或压缩数据的存储位置信息;
在步骤214中,从内存中分配目标内存块;
在步骤216中,若所述元数据包括所述预设标记信息,在页表数据中添加所述目标内存块的页表项信息,完成所述目标内存块的恢复;其中,所述预设标记信息用于表示所述需恢复内存块的各个比特位都为零。
内存恢复,也即是,原本分配给进程的内存块由于在内存压缩时被释放,在需要时,重新分配内存块给该进程。可以理解,恢复的内存块与原本分配给进程的内存块的物理地址不一定是相同的。
其中,内存恢复请求,可以是操作系统发现缺页异常时发起的。例如,前述实施例中提及,页表数据中,分配给进程的虚拟地址VA1对应的物理地址被清空,当操作系统发现进程访问到该虚拟地址VA1,由于页表数据未有记录,因此触发缺页异常,即触发一内存恢复请求,从而执行本实施例的内存恢复方案。或者,也可以是操作系统主动进行的内存恢复,例如操作系统检测到被压缩的内存块太多,或者内存的剩余存储空间较大等等。
内存恢复请求中携带虚拟地址,在一些例子中,如前述的目标查找树的设计,可以根据所述内存恢复请求携带的虚拟地址,从页表数据中获取与所述虚拟地址对应的页表项的地址;从预设的目标查找树中查找记录所述页表项的地址的节点,利用查找出的节点获取所述需恢复内存块的元数据。
通过压缩信息,若包括所述预设标记信息,可以在页表数据中添加所述目标内存块的页表项信息,也即是,以虚拟地址为VA1为例,也即是在页表数据中写入虚拟地址VA1所对应的目标内存块的物理地址。
在另一些例子中,若所述元数据中包括压缩数据的存储位置信息,根据所述存储位置信息获取所述压缩数据,将所述压缩数据解压并存储至所述目标内存块后,在页表数据中添加所述目标内存块的页表项信息后,完成所述目标内存块的恢复。
在多核CPU场景下,还可以提升解压处理的效率,本实施例方法应用于计算机设备的多个CPU的当前CPU,所述将所述压缩数据解压,包括:由所述当前CPU对所述压缩数据进行解压;或,从其他CPU中选取目标CPU,创建用于对所述压缩数据进行解压的进程;其中,所述进程与所述目标CPU绑定,以使操作系统调度所述目标CPU执行所述进程;其中,所述目标CPU的运行信息满足预设空闲条件,和/或,所述目标CPU与所述当前CPU之间的通信效率满足预设通信条件。目标CPU的选取方式具体可参考前述实施例,在此不再赘述。
接下来再通过如下实施例进行说明。
(1)以内存压缩为例
1、获取待压缩内存块ms(memory section)。
例如,可以从冷页集合中选取一个待压缩的内存块ms;如果没有则失败,否则继续。例如,还可以是批处理场景,可以一次获取到多个待压缩内存块,之后对各个内存块串行处理。
2、查询待换出内存块ms所属的内存分配数据mmap,方便后续将内存块的物理地址paddr转换为虚拟地址vaddr(virtual address),然后通过vaddr获得页表项pmd等。
可选的,所有进程的mmap都在一份数据(例如链表等)中,因此通过ms查询mmap时需要持锁,即需要暂时锁住链表,再通过遍历查询得到该ms对应的mmap。可选的,如前述实施例的批处理场景下,根据需要还可以对整份mmap数据建立副本。具体的,对于批处理的首个待压缩内存块ms,在查询时先对整份mmap持锁,建立副本后释放锁。批处理的其他待压缩内存块则可以利用副本查询对应的mmap。
3、根据mmap,可以获取到待换出内存块ms对应的虚拟地址vaddr,以及对应的页表项pmd(以2m粒度为例),并建立用于管理该内存块的压缩信息的元数据item。
示例性的,该item中记录的信息可以包括:ms对应的用户态的虚拟地址、ms对应的内核态的虚拟地址、ms对应的页表项地址,该ms中存储的数据被压缩后存储位置的物理地址、该ms中存储的数据被压缩后的长度等等信息,以便于后续页面压缩后使用,也用于在数据解压及内存块恢复时找到。
4、判断该待换出内存块ms是否是可疑的零页,如果是则跳转至步骤5;否则跳转至步骤9。
此步骤的判断是处于预判断阶段,并非是对整个内存块进行全量的判断,而是取内存块的部分内容进行判断。
5、读取整个内存块,判断内存块是不是零页;如果是则跳转至步骤6;否则跳转至步骤9。
此步骤的判断是对内存块的全量判断,即需要读取内存块的各个比特位。此步骤的判断仍处于预判断阶段,因为在对内存块判断时未修改该内存块的读写权限,在判断的过程中内存块可能有更新。
6、将内存块ms的读写权限改成只读,再次判断是否是零页。如果是则跳转至步骤7,否则跳转至步骤8。
7、将该内存块虚拟地址vaddr对应的页表项目pmd中的页表信息清零,则进程下次访问到该虚拟地址时,操作系统会通过缺页异常对该内存块中的数据进行恢复(缺页异常会执行后续实施例的数据解压及恢复流程),并且更新元数据item,在元数据中标记该内存块为零页,跳转至步骤19。
8、对该内存块ms(执行至步骤8,说明该内存块并非零页)进行压缩。
其中,需要一临时存储空间tm,用于临时保存内存块ms中数据的压缩结果。其中,考虑到极端情况下有可能压缩结果的大小大于原始数据,因此该临时存储空间tm的大小大于内存块ms大小,具体大小可以根据需要灵活设置,例如可以是内存块ms的两倍大等。在批处理场景中,对于首个待压缩内存块,可以分配该临时存储空间tm,后续的该临时存储空间tm可以复用,供其他待压缩内存块的压缩操作时使用。因此,可以先判断是否存在临时存储空间tm,若未有,则分配;若有,则可复用,由于临时存储空间tm可能存储数据,对该临时存储空间tm清零(即临时存储空间tm的初始化,对各个比特位置零)。
9、将待压缩的内存块ms的读写权限设置为只读,避免压缩过程中内存块中的数据出现改变。
10、在多CPU场景下,可以选取一CPU进行数据压缩。
数据压缩有一定的开销;在一些例子中,计算机设备只有一个CPU核(core),则可以不执行步骤10和步骤11。在计算机设备有多个CPU的场景下,可以根据需要选取扫描当前CPU的运行情况,判断是否存在空闲的CPU,如果不存在选用当前CPU,并跳转至步骤12,否则跳转至步骤11。
11、如果存在,选取一空闲CPU,并创建一用于执行数据压缩的压缩线程,该线程绑定选取到的空闲CPU,操作系统内核的线程调度模块在调度到该线程时,会将该线程分配给选取到的空闲CPU去执行。
其中,此处的选取规则可以通过多种方式确定,例如,可以从是否是相同CPU核、是否是相同socket(套接字,网络中不同主机上的应用进程之间进行双向通信的端点的抽象)或是否位于相同的NUMA节点等多个维度确定。作为一个例子,如果当前CPU处于空闲状态则采用当前CPU,若未处于空闲状态,其次选取同一个socket上的CPU,因为他们会共享同一个缓存行(cache line),通信效率相对更高;再次选同一个NUMA上的CPU,最后选取跨NUMA的空闲CPU。
12、由选取出的CPU执行上述压缩线程。
作为例子,压缩线程中可以指定数据压缩算法,以及是否利用硬件加速等;该CPU通过执行该线程,实现对内存块ms中数据的压缩,并将压缩结果保存在临时存储空间tm中。
13、判断压缩结果的大小tlen是否满足预设释放条件;例如,是否大于原始内存块ms的大小,如果大于,则压缩失败,跳转至步骤18;否则跳转至步骤14。
实际应用中,此处的预设释放条件还可以有其他实现方式,例如,可以设定阈值,确定压缩结果的大小tlen与内存块ms的大小的差异值,根据差异值与设定阈值的大小关系,确定是否压缩失败。其中,该设定阈值表示压缩是否失败的阈值,实际应用中可以根据需要进行配置,本实施例对此不进行限定。
14、分配一满足压缩结果的大小tlen的存储空间zm;若分配失败,则跳转至步骤18;否则跳转至步骤15。
此处的分配方式,根据实际的内存管理方案可以有多种方式。例如,可以是内存中有一指定的存储空间专门用于存储压缩数据,或者,可以是内存采用特定的管理方式,例如前述小块内存管理实施例中,内存划分为多个内存块,每个内存块中还划分多个内存段,本实施例可以根据压缩结果的大小tlen分配满足该tlen的内存段。
15、将tm中的压缩结果复制到存储空间zm中。
16、更新内存块ms在页表数据中对应的页表项信息pmd,将页表项信息都清空,以便后续进程访问到的时候触发缺页异常,操作系统则执行数据解压及内存块恢复的流程。
17、在管理压缩内存块的元数据item中,添加内存块ms的压缩信息后,跳转至步骤19。
此处的压缩信息,即步骤3中提及的ms对应的用户态的虚拟地址、ms对应的内核态的虚拟地址、该ms中存储的数据被压缩后存储位置的物理地址、该ms中存储的数据被压缩后的长度等等信息。
18、内存块ms压缩失败,将内存块恢复成读写状态,并返回失败原因。
19、内存块ms压缩成功,该内存块被释放,整个内存压缩过程完成。
(2)数据解压及内存块恢复
1、确定需恢复的进程a,获取该进程a的记录内存分配信息的元数据mmap,以便后续查询和更新使用。
2、从进程a的内存分配信息mmap中,选取一虚拟内存vaddr,该虚拟内存对应的物理内存块是一已被压缩的内存块。
上述实施例的步骤1和2是以操作系统主动恢复为例进行说明,实际应用中,还可以是操作系统在出现缺页异常时触发的。
3、根据页表数据,获取虚拟地址vaddr对应的页表项的地址,查找这个内存块对应的压缩管理元数据item。
4、分配一个内存块ms,对该ms初始化,即清零;若分配失败则退出(表示当前内存未有足够存储空间),否则继续。
5、根据item判断该压缩内存块ms是否属于零页;如果是零页,则调整至步骤6;否则跳转至步骤7。
6、由于内存块ms是零页,无需进行数据解压,将该虚拟地址vaddr对应页表项pmd中记录的物理地址信息更改为内存块ms对应的物理地址,并将页表的权限改为可读写,跳转至步骤10。
7、扫描当前cpu的运行情况,判断是否存在选空闲cpu,如果不存在选用当前cpu,并跳转至步骤9,否则步骤8;
8、如果存在,选取和当前运行cpu亲和度最高的空闲cpu(比如先依次选取相同core、然后相同socket的、相同node的);
9、根据先前配置的压缩算法,以及是否利用硬件加速等,利用选定的cpu,按照item中记录的压缩内存zm的位置和长度,进行解压,并将压缩后的结果保存在预分配的内存块ms中;
10、将vaddr对应页表项目pmd的物理地址改为ms对应的地址,并将页表属性改为读写;
11、释放保存压缩内存的小内存块zm;
12、至此,被压缩页面已经从压缩内存中恢复出来,释放管理元数据item,页面恢复过程结束。
与前述内存释放方法和内存恢复方法的实施例相对应,本说明书还提供了内存释放装置/内存恢复装置及其所应用的终端的实施例。
本说明书内存释放装置/内存恢复装置的实施例可以应用在计算机设备上,例如服务器或终端设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本说明书内存释放装置/内存恢复装置所在计算机设备的一种硬件结构图,除了图3所示的处理器310、内存330、网络接口320、以及非易失性存储器340之外,实施例中内存释放装置/内存恢复装置331所在的计算机设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图4所示,图4是本说明书根据一示例性实施例示出的一种内存释放装置的框图,所述装置包括:
内存块确定模块41,用于:响应于内存释放请求,确定待释放内存块;
比特位确定模块42,用于:确定所述待释放内存块的各个比特位是否都为零;
释放模块43,用于:在确定所述待释放内存块的各个比特位都为零的情况下,将所述待释放内存块对应的页表项信息清空,以及创建与所述待释放内存块对应的元数据后,释放所述待释放内存块;其中,所述元数据包括预设标记信息,所述预设标记信息用于表示所述待释放内存块的各个比特位都为零。
在一些例子中,所述释放模块43,还用于:在确定所述待释放内存块的各个比特位不是都为零的情况下,对所述待释放内存块中的数据进行压缩后,存储所述压缩数据,将所述待释放内存块对应的页表项信息清空,以及创建与所述待释放内存块对应的元数据后,释放所述待释放内存块;其中,所述元数据包括所述压缩数据的存储位置信息。
在一些例子中,所述比特位确定模块,还用于:
在未更改所述待释放内存块的读写权限的情况下,对所述待释放内存块各个字节是否都为零进行预判断;
若预判断出所述待释放内存块的各个比特位都为零,将所述待释放内存块的读写权限更改为只读后,再判断所述待释放内存块的各个比特位是否都为零。
在一些例子中,所述比特位确定模块,还用于:
从所述待释放内存块中选取n个比特位,确定所述n个比特位是否都为零;其中,所述n为正整数;
若否,预判断出所述待释放内存块的各个比特位不是都为零;
若是,对所述待释放内存块除所述设定位数的比特位之外的其他比特位是否都为零进行预判断。
在一些例子中,所述比特位确定模块,还用于:
从所述待释放内存块的最高位开始选取n个比特位;
从所述待释放内存块的最低位开始选取n个比特位;或,
在所述待释放内存块中随机选取n个比特位。
在一些例子中,所述元数据还包括所述待释放内存块对应的页表项的地址;所述装置还包括查找模块,用于:
根据所述元数据维护目标查找树,所述目标查找树中每个节点对应一个内存块的元数据,节点对应的内存块的元数据中页表项的地址作为所述节点的唯一标识。
在一些例子中,所述释放模块,还用于在存储所述压缩数据之前,确定所述压缩数据的大小满足预设释放条件。
在一些例子中,所述装置应用于计算机设备的多个CPU的当前CPU;
所述释放模块,还用于:
由所述当前CPU对所述待释放内存块中存储的数据进行压缩;或,
从其他CPU中选取目标CPU,创建用于对所述待释放内存块中存储的数据进行压缩的进程;其中,所述进程与所述目标CPU绑定,以使操作系统调度所述目标CPU执行所述进程;其中,所述目标CPU的运行信息满足预设空闲条件,和/或,所述目标CPU与所述当前CPU之间的通信效率满足预设通信条件。
如图5所示,图5是本说明书根据一示例性实施例示出的一种内存恢复装置的框图,所述装置包括:
获取模块51,用于:响应于内存恢复请求,获取根据元数据确定需恢复内存块的元数据,所述元数据记录每个已压缩内存块对应的压缩信息,所述压缩信息包括预设标记信息或压缩数据的存储位置信息;
分配模块52,用于:从内存中分配目标内存块;
恢复模块53,用于:在所述需恢复内存块的压缩信息元数据包括所述预设标记信息的情况下,在页表数据中添加所述目标内存块的页表项信息,完成所述目标内存块的恢复;其中,所述预设标记信息用于表示所述需恢复内存块的各个比特位都为零。
在一些例子中,所述恢复模块还用于:在所述元数据中包括压缩数据的存储位置信息的情况下,根据所述存储位置信息获取所述压缩数据,将所述压缩数据解压并存储至所述目标内存块后,在页表数据中添加所述目标内存块的页表项信息。
在一些例子中,所述获取模块,还用于:
根据所述内存恢复请求携带的虚拟地址,根据页表数据获取与所述虚拟地址对应的页表项的地址;
从预设的目标查找树中查找记录所述页表项的地址的节点,利用查找出的节点获取所述需恢复内存块的元数据;其中,所述目标查找树中每个节点对应一个内存块的元数据,节点对应的内存块的元数据中页表项的地址作为所述节点的唯一标识。
在一些例子中,所述装置应用于计算机设备的多个CPU的当前CPU;
所述恢复模块,还用于:
由所述当前CPU对所述压缩数据进行解压;或,
从其他CPU中选取目标CPU,创建用于对所述压缩数据进行解压的进程;其中,所述进程与所述目标CPU绑定,以使操作系统调度所述目标CPU执行所述进程;其中,所述目标CPU的运行信息满足预设空闲条件,和/或,所述目标CPU与所述当前CPU之间的通信效率满足预设通信条件。
相应的,本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述第一方面所述方法实施例的步骤。
本说明书实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现前述第一方面所述方法实施例的步骤。
上述装置中各个模块的功能和作用的实现过程具体详见上述内存释放/内存恢复方法中对应步骤的实现过程,在此不再赘述。
相应的,本说明书实施例还提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现前述内存释放/内存恢复方法实施例的步骤。
相应的,本说明书实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现内存释放/内存恢复方法实施例的步骤。
相应的,本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现内存释放/内存恢复方法实施例的步骤。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例可以应用于一个或者多个计算机设备中,所述计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,所述计算机设备的硬件包括但不限于微处理器、专用集成电路(Application Specific IntegratedCircuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机设备可以是任何一种可与用户进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(Internet Protocol Television,IPTV)、智能式穿戴式设备等。
所述计算机设备还可以包括网络设备和/或用户设备。其中,所述网络设备包括,但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(CloudComputing)的由大量主机或网络服务器构成的云。
所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该申请的保护范围内。
其中,“具体示例”、或“一些示例”等的描述意指结合所述实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (14)
1.一种内存释放方法,所述内存包括多个内存块,所述方法包括:
确定所述内存中的待释放内存块;
确定所述待释放内存块的各个比特位是否都为零;
若是,将所述待释放内存块对应的页表项信息清空,以及创建与所述待释放内存块对应的元数据后,释放所述待释放内存块;其中,所述元数据包括预设标记信息,所述预设标记信息用于表示所述待释放内存块的各个比特位都为零。
2.根据权利要求1所述的方法,所述方法还包括:
若否,对所述待释放内存块中的数据进行压缩后,存储所述压缩数据,将所述待释放内存块对应的页表项信息清空,以及创建与所述待释放内存块对应的元数据后,释放所述待释放内存块;其中,所述元数据包括所述压缩数据的存储位置信息。
3.根据权利要求1或2所述的方法,所述确定所述待释放内存块的各个比特位是否都为零,包括:
在未更改所述待释放内存块的读写权限的情况下,对所述待释放内存块各个字节是否都为零进行预判断;
若预判断出所述待释放内存块的各个比特位都为零,将所述待释放内存块的读写权限更改为只读后,再判断所述待释放内存块的各个比特位是否都为零。
4.根据权利要求3所述的方法,所述对所述待释放内存块的各个比特位是否都为零进行预判断,包括:
从所述待释放内存块中选取n个比特位,确定所述n个比特位是否都为零;其中,所述n为正整数;
若否,确定所述待释放内存块的各个比特位不是都为零;
若是,对所述待释放内存块除所述n个比特位之外的其他比特位是否都为零进行预判断。
5.根据权利要求1或2所述的方法,所述元数据还包括所述待释放内存块对应的页表项的地址;所述方法还包括:
根据所述元数据维护目标查找树,所述目标查找树中每个节点对应一个内存块的元数据,节点对应的内存块的元数据中页表项的地址作为所述节点的唯一标识。
6.根据权利要求2所述的方法,所述方法应用于计算机设备的多个CPU的当前CPU;
所述对所述待释放内存块中存储的数据进行压缩,包括:
由所述当前CPU对所述待释放内存块中存储的数据进行压缩;或,
从其他CPU中选取目标CPU,创建用于对所述待释放内存块中存储的数据进行压缩的进程;其中,所述进程与所述目标CPU绑定,以使操作系统调度所述目标CPU执行所述进程;所述目标CPU的运行信息满足预设空闲条件,和/或,所述目标CPU与所述当前CPU之间的通信效率满足预设通信条件。
7.一种内存恢复方法,所述方法包括:
响应于内存恢复请求,获取需恢复内存块的元数据;
从内存中分配目标内存块;
若所述元数据包括预设标记信息,在页表数据中添加所述目标内存块的页表项信息,完成所述目标内存块的恢复;其中,所述预设标记信息用于表示所述需恢复内存块的各个比特位都为零。
8.根据权利要求7所述的方法,所述方法还包括:
若所述元数据中包括压缩数据的存储位置信息,根据所述存储位置信息获取所述压缩数据,将所述压缩数据解压并存储至所述目标内存块后,在页表数据中添加所述目标内存块的页表项信息后,完成所述目标内存块的恢复。
9.根据权利要求7所述的方法,所述获取需恢复内存块的元数据,包括:
根据所述内存恢复请求携带的虚拟地址,从页表数据中获取与所述虚拟地址对应的页表项的地址;
从预设的目标查找树中查找记录所述页表项的地址的节点,利用查找出的节点获取所述需恢复内存块的元数据;其中,所述目标查找树中每个节点对应一个内存块的元数据,节点对应的内存块的元数据中页表项的地址作为所述节点的唯一标识。
10.根据权利要求8所述的方法,所述方法应用于计算机设备的多个CPU的当前CPU;
所述将所述压缩数据解压,包括:
由所述当前CPU对所述压缩数据进行解压;或,
从其他CPU中选取目标CPU,创建用于对所述压缩数据进行解压的进程;其中,所述进程与所述目标CPU绑定,以使操作系统调度所述目标CPU执行所述进程;所述目标CPU的运行信息满足预设空闲条件,和/或,所述目标CPU与所述当前CPU之间的通信效率满足预设通信条件。
11.一种内存释放装置,所述内存包括多个内存块,所述装置包括:
内存块确定模块,用于:确定所述内存中的待释放内存块;
比特位确定模块,用于:确定所述待释放内存块的各个比特位是否都为零;
释放模块,用于:在确定所述待释放内存块的各个比特位都为零的情况下,将所述待释放内存块对应的页表项信息清空,以及创建与所述待释放内存块对应的元数据后,释放所述待释放内存块;其中,所述元数据包括预设标记信息,所述预设标记信息用于表示所述待释放内存块的各个比特位都为零。
12.一种内存恢复装置,所述装置包括:
获取模块,用于:响应于内存恢复请求,获取需恢复内存块的元数据,所述元数据包括预设标记信息或压缩数据的存储位置信息;
分配模块,用于:从内存中分配目标内存块;
恢复模块,用于:在所述元数据包括所述预设标记信息的情况下,在页表数据中添加所述目标内存块的页表项信息,完成所述目标内存块的恢复;其中,所述预设标记信息用于表示所述需恢复内存块的各个比特位都为零。
13.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至10任一所述方法的步骤。
14.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现权利要求1至10任一所述方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211409950.0A CN115712500A (zh) | 2022-11-10 | 2022-11-10 | 内存释放、内存恢复方法、装置、计算机设备及存储介质 |
PCT/CN2023/131110 WO2024099448A1 (zh) | 2022-11-10 | 2023-11-10 | 内存释放、内存恢复方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211409950.0A CN115712500A (zh) | 2022-11-10 | 2022-11-10 | 内存释放、内存恢复方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115712500A true CN115712500A (zh) | 2023-02-24 |
Family
ID=85232881
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211409950.0A Pending CN115712500A (zh) | 2022-11-10 | 2022-11-10 | 内存释放、内存恢复方法、装置、计算机设备及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115712500A (zh) |
WO (1) | WO2024099448A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116107925A (zh) * | 2023-04-10 | 2023-05-12 | 阿里云计算有限公司 | 数据存储单元处理方法 |
WO2024099448A1 (zh) * | 2022-11-10 | 2024-05-16 | 杭州阿里云飞天信息技术有限公司 | 内存释放、内存恢复方法、装置、计算机设备及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2899353B1 (fr) * | 2006-03-31 | 2008-06-27 | Infovista Sa Sa | Systeme de gestion memoire pour la reduction de la fragmentation memoire |
EP2416251B1 (en) * | 2010-08-06 | 2013-01-02 | Alcatel Lucent | A method of managing computer memory, corresponding computer program product, and data storage device therefor |
JP5853734B2 (ja) * | 2012-02-02 | 2016-02-09 | 富士通株式会社 | 仮想ストレージ装置,制御装置及び制御プログラム |
WO2015142341A1 (en) * | 2014-03-20 | 2015-09-24 | Hewleet-Packard Development Company, L. P. | Dynamic memory expansion by data compression |
EP3674846B1 (en) * | 2017-10-13 | 2023-12-06 | Huawei Technologies Co., Ltd. | Method and apparatus for compressing and decompressing memory occupied by processor |
CN115712500A (zh) * | 2022-11-10 | 2023-02-24 | 阿里云计算有限公司 | 内存释放、内存恢复方法、装置、计算机设备及存储介质 |
-
2022
- 2022-11-10 CN CN202211409950.0A patent/CN115712500A/zh active Pending
-
2023
- 2023-11-10 WO PCT/CN2023/131110 patent/WO2024099448A1/zh unknown
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024099448A1 (zh) * | 2022-11-10 | 2024-05-16 | 杭州阿里云飞天信息技术有限公司 | 内存释放、内存恢复方法、装置、计算机设备及存储介质 |
CN116107925A (zh) * | 2023-04-10 | 2023-05-12 | 阿里云计算有限公司 | 数据存储单元处理方法 |
CN116107925B (zh) * | 2023-04-10 | 2023-09-26 | 阿里云计算有限公司 | 数据存储单元处理方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2024099448A1 (zh) | 2024-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11669444B2 (en) | Computing system and method for controlling storage device | |
US11467955B2 (en) | Memory system and method for controlling nonvolatile memory | |
US10983955B2 (en) | Data unit cloning in memory-based file systems | |
CN108628753B (zh) | 内存空间管理方法和装置 | |
CN115712500A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN107066498B (zh) | 键值kv存储方法和装置 | |
CN110018998B (zh) | 一种文件管理方法、系统及电子设备和存储介质 | |
CN115599544A (zh) | 内存管理方法、装置、计算机设备及存储介质 | |
CN114936188A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN114556309A (zh) | 内存空间的分配方法、装置及存储介质 | |
CN115617542A (zh) | 内存交换方法、装置、计算机设备及存储介质 | |
CN113835639B (zh) | 一种i/o请求处理方法、装置、设备及可读存储介质 | |
CN116302491A (zh) | 内存管理方法、装置、计算机设备及存储介质 | |
US20220035546A1 (en) | Base and compressed difference data deduplication | |
KR102114245B1 (ko) | 그래픽스 상태 관리 장치 및 방법 | |
CN115756838A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
EP3249539A1 (en) | Method and device for accessing data visitor directory in multi-core system | |
CN116225693A (zh) | 元数据管理方法、装置、计算机设备及存储介质 | |
US20180357000A1 (en) | Big Block Allocation of Persistent Main Memory | |
US20220318042A1 (en) | Distributed memory block device storage | |
CN109871355B (zh) | 一种快照元数据存储方法、装置及设备、介质 | |
US10168911B1 (en) | Defragmentation of persistent main memory | |
CN115576868B (zh) | 一种多级映射框架、数据操作请求处理方法及系统 | |
CN113741787B (zh) | 一种数据存储方法、装置、设备、介质 | |
CN116382579A (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 |