CN116225693A - 元数据管理方法、装置、计算机设备及存储介质 - Google Patents
元数据管理方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN116225693A CN116225693A CN202211679912.7A CN202211679912A CN116225693A CN 116225693 A CN116225693 A CN 116225693A CN 202211679912 A CN202211679912 A CN 202211679912A CN 116225693 A CN116225693 A CN 116225693A
- Authority
- CN
- China
- Prior art keywords
- memory
- metadata
- memory block
- management information
- linked list
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供一种元数据管理方法、装置、设备及存储介质,所述方法应用于操作***的第一内存管理模块,所述第一内存管理模块和所述操作***的第二内存管理模块分别管理内存的不同内存块,所述第一内存管理模块管理的内存块的元数据存储于从所述第二内存管理模块申请到的内存块中;所述方法包括:响应于内存块中存储的元数据被释放,若确定满足预设保留条件,保留所述内存块;响应于目标元数据的存储请求,若从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的所述内存块存储所述目标元数据。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及元数据管理方法、装置、计算机设备及存储介质。
背景技术
计算机设备可以采用传统的内存管理架构,即由操作***的内存管理模块(通常称为内核的内存管理模块)管理整个内存。在另一些场景中,例如虚拟机场景下,计算机设备可以采用预留内存的内存分配架构,例如,在内核的内存管理模块基础上,操作***还具有其他的内存管理模块(例如,预留内存管理模块)。两个内存管理模块可以用于管理内存的不同存储空间,并可以采用不同的管理粒度,例如内核的内存管理模块采用较小的管理粒度,预留内存管理模块采用较大的管理粒度。
其中,对于预留内存管理模块管理的存储空间,预留内存管理模块对该存储空间的内存块会利用元数据记录各个内存块的信息,并且可以通过内核的内存管理模块申请内存块以存储其管理的内存块的元数据。
实际应用中,例如内存交换等场景下会出现内存块的状态频繁变动导致其元数据频繁变动的情况,因此预留内存管理模块需要频繁与内核的内存管理模块交互以申请或释放内存块,带来较大的处理开销。
发明内容
为克服相关技术中存在的问题,本说明书提供了元数据管理方法、装置、计算机设备及存储介质。
根据本说明书实施例的第一方面,提供一种元数据管理方法,所述方法应用于操作***的第一内存管理模块,所述第一内存管理模块和所述操作***的第二内存管理模块分别管理内存的不同内存块,所述第一内存管理模块管理的内存块的元数据存储于从所述第二内存管理模块申请到的内存块中;
所述方法包括:
响应于内存块中存储的元数据被释放,若确定满足预设保留条件,保留所述内存块;
响应于目标元数据的存储请求,若从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的所述内存块存储所述目标元数据。
根据本说明书实施例的第二方面,提供一种元数据管理装置,所述装置应用于操作***的第一内存管理模块,所述第一内存管理模块和所述操作***的第二内存管理模块分别管理内存的不同内存块,所述第一内存管理模块管理的内存块的元数据存储于从所述第二内存管理模块申请到的内存块中;
所述装置包括:
保留处理模块,用于:响应于内存块中存储的元数据被释放,若确定满足预设保留条件,保留所述内存块;
存储处理模块,用于:响应于目标元数据的存储请求,若从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的所述内存块存储所述目标元数据。
根据本说明书实施例的第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现前述第一方面所述方法实施例的步骤。
根据本说明书实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述第一方面所述方法实施例的步骤。
本公开实施例提供的技术方案可以包括以下有益效果:
本公开实施例中,第一内存管理模块针对先申请到的用于存储元数据的内存块,当该元数据释放时,并未将存储该元数据的内存块释放回第二内存管理模块,而是在满足保留条件的情况下保留该内存块并进行管理,后续再次需要存储元数据时,可以先从被管理的各个内存块中选取是否有合适的内存块,从而可以减少开销,降低第一内存管理模块与第二内存管理模块交互造成的性能损耗。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1A是本说明书根据一示例性实施例示出的一种页表数据的示意图。
图1B是本说明书根据一示例性实施例示出的一种内存的示意图。
图2A是本说明书根据一示例性实施例示出的一种元数据管理方法的流程图。
图2B是本说明书根据一示例性实施例示出的一种NUMA架构的示意图。
图3是本说明书根据一示例性实施例示出的一种元数据管理装置所在计算机设备的框图。
图4是本说明书根据一示例性实施例示出的一种元数据管理装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
进程运行时,操作***会为进程分配虚拟地址空间和物理地址空间,并创建该进程对应的页表,页表用于记录虚拟地址空间和物理地址空间的映射关系。操作***还对管理的内存维护有元数据,用于管理内存。内存交换时,由于进程的数据的存储位置发生了变更,需要更新该进程的页表;由于数据的存储位置发生变更也导致内存块的状态发生变更,因此也需要更新元数据。
页表是虚拟内存技术的概念。为了让程序获得更多的可用内存、将物理内存扩充成更大的逻辑内存,操作***还使用了虚拟内存的技术。它将物理内存抽象为地址空间,操作***为每个进程分配独立的一套虚拟地址,不同进程的虚拟地址和不同内存的物理地址映射起来。如果程序要访问虚拟地址的时候,由操作***转换成不同的物理地址。此处涉及两个地址的概念:
程序所使用的内存地址叫做虚拟地址(Virtual Memory Address,VA);
实际存在硬件里面的空间地址叫做物理地址(Physical Memory Address,PA)。
虚拟地址与物理地址之间通过页表来映射。页表存储在内存中,通过CPU(CentralProcessing Unit,处理器)的MMU(Memory Management Unit,内存管理单元)来实现虚拟内存到物理内存的转换。而当进程要访问的虚拟地址在页表中查不到时,***会产生缺页异常,进入***内核空间分配物理内存、更新进程的页表,最后再返回用户空间,恢复进程的运行。
如图1A所示,是本说明书根据一示例性实施例示出的一种页表数据的示意图,相关技术中,操作***的内存管理单元将内存按设定的管理粒度进行划分,每一管理粒度可称为页(page),或者也可称为块。本实施例以该进程所分配的页为0至N为例,页表中包括N个页表项,每一个页表项即用于表示每一页的虚拟地址与物理地址之间的对应关系。从而,整个页表记录进程的虚拟地址空间、页表和物理地址空间之间的关系,进程的某个虚拟地址可以通过页表映射至对应的物理地址。
在一些例子中,计算机设备可以采用传统的内存管理架构,即由操作***管理整个内存。在另一些场景中,例如虚拟机场景下,计算机设备可以采用预留内存的内存分配架构,如图1B所示,是本说明书根据一示例性示出的预留内存场景的示意图,在该架构中,宿主机的内存可以包括多种存储空间,如图1B中采用不同填充方式示出了内存的其中两个存储空间,包括供内核使用的非预留存储空间a(图中采用斜线填充),以及供虚拟机使用的预留存储空间b(图中采用竖线及灰度填充)。也即是,非预留存储空间a用于供图中的内核使用,运行于操作***上的应用(如图中示例的应用1至应用3)可使用该非预留存储空间a。而预留存储空间b则可供虚拟机(VM,Virtual Machine)使用,如图中示出的VM1至VMn共n个虚拟机。两个存储空间可以采用不同的管理粒度,即对内存的划分方式可以是不同的。图1B中为了示例方便,两个存储空间在图中是以连续的方式进行示意的。可以理解,实际应用中,两个存储空间可以是非连续的。实际应用中,内存中还可以划分更多的存储空间。
预留存储空间占据内存的大部分,且对于宿主机内核不可用,可以在操作***的内核中***一模块专门用于对预留存储空间进行管理。为了方便管理这一系列的内存同时避免大量元数据对内存的占用,以及考虑到为虚拟机分配内存时往往最少也是数百MB(MByte,兆字节)起,因此预留存储空间采用以较大的粒度划分,例如将预留存储空间划分为2MB等大小的内存块(Memory Section,ms)进行管理;在一些场景中,大粒度也普遍被使用,如1GB
(GigaByte,吉字节)等都是可选的,本实施例对此不进行限定。
应用于预留内存场景时,操作***可以采用不同的模块分别管理预留存储空间与非预留存储空间,例如,操作***的预留内存管理模块管理预留存储空间,内核的内存管理模块管理非预留存储空间。其中,对于预留内存管理模块管理的存储空间,预留内存管理模块对该存储空间的内存块会利用元数据记录各个内存块的信息,并且可以通过内核的内存管理模块申请内存块以存储其管理的内存块的元数据。
实际应用中,例如内存交换等场景下会出现内存块的状态频繁变动导致其元数据频繁变动的情况,因此预留内存管理模块需要频繁与内核的内存管理模块交互以申请或释放内存块,从而带来较大的处理开销。
基于此,本实施例提供一种元数据管理方法,方法应用于操作***的第一内存管理模块,所述第一内存管理模块和所述操作***的第二内存管理模块分别管理内存的不同内存块,所述第一内存管理模块管理的内存块的元数据存储于从所述第二内存管理模块申请到的内存块中。
如图2A所示,是本说明书根据一示例性实施例示出的元数据管理方法的流程图,所述方法包括:
在步骤202中,响应于内存块中存储的元数据被释放,若确定满足预设保留条件,保留所述内存块。
在步骤204中,响应于目标元数据的存储请求,若从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的所述内存块存储所述目标元数据。
在一些例子中,本实施例方案可以应用于前述的预留内存场景中,第一内存管理模块可以是前述的用于管理预留存储空间的预留内存管理模块,第二内存管理模块可以是前述的用于管理非预留存储空间的内核的内存管理模块。
本实施例的方案可以应用于任一计算机设备中,计算机设备可以是单核CPU设备,也可以包括多个物理CPU的设备,根据需要可以采用非一致内存访问(Non Uniform MemoryAccess Architecture,NUMA)架构,NUMA架构包括至少两个NUMA节点(NUMA node),如图2B所示,以两个NUMA节点作为示例,宿主机可以包括NUMA节点1和NUMA节点2。在NUMA架构下,宿主机的多个物理CPU以及多个内存从属于不同的NUMA节点。每个NUMA节点均包括至少一个物理CPU与至少一个物理内存,图2B以NUMA节点包括一个物理CPU和一个物理内存为例。在NUMA节点内部,物理CPU与物理内存之间使用集成内存控制器总线(Integrated MemoryController Bus,IMC Bus)进行通信,而NUMA节点之间则使用快速通道互联(Quick PathInterconnect,QPI)进行通信。由于QPI的延迟高于IMC Bus的延迟,因此宿主机上物理CPU对内存的访问就有了远近之别(remote/local)。物理CPU访问本节点的物理内存速度较快,物理CPU访问其他NUMA节点的物理内存速度较慢。
在NUMA架构场景中,本实施例的内存可以包括上述任一物理内存。可选的,NUMA架构中任一物理内存还可以采用预留内存架构。基于此,本实施例所管理的存储空间还可以是指NUMA架构中任一物理内存中的预留存储空间。
可以理解,实际应用中,计算机设备还可以采用其他架构,根据实际需要,本实施例所指的内存根据实际应用场景可以有多种实现方式,在此不再一一列举。
为了便于区分,将第一内存管理模块管理的内存块称为第一类内存块,将第二内存管理模块管理的内存块称为第二类内存块。第一内存管理模块管理的内存块的元数据,是存储于从所述第二内存管理模块申请到的内存块中的。本实施例的第一内存管理模块所保留的内存块,即第一内存管理模块从第二内存管理模块申请到的内存块。
在一些例子中,第一类内存块的第一类元数据有多种类型,根据不同场景,元数据可以包括但不限于表示内存块是否分配的元数据、内存的总元数据或表示内存块的冷热状态元数据、表示内存块所属进程的元数据、表示内存块所属的进程的内存分配情况的元数据等等。以虚拟机场景为例,一些方案中计算机设备专用于虚拟机,对虚拟机的内存分配方案中,对各个虚拟机配置了固定的虚拟地址空间,为了便于查询虚拟地址与物理地址的对应关系,在页表数据的基础上,还额外创建了用于表示内存分配情况的元数据mmap(memorymap,内存的虚拟地址与物理地址的映射关系),通过该元数据可以实现虚拟地址与物理地址的双向查询,可提升查询效率。
第一内存管理模块可以向第二内存管理模块申请第二类内存块,以存储第一类内存块的元数据,示例性的,在预留内存场景下,预留存储空间中各个内存块的元数据较小,而内核的内存管理模块提供有小块内存功能,能够提供较小粒度的内存块。例如,内核的内存管理模块为了存储较小粒度的数据,提供有32字节(Byte)、64字节或128字节等等多种小粒度的内存块;另外,一些内核的内存管理模块还可提供特定大小的内存块。
当某个第二类内存块存储的元数据被销毁,该第二类内存块无需存储数据,由第一内存管理模块与第二内存管理模块交互,将该第二类内存块的释放给第二内存管理模块。
实际应用中,存在第一类内存块的元数据频繁创建和销毁的情况。例如,对于已分配给各个进程的各个内存块,内存管理模块会记录这些内存块的冷热状态信息,对于冷状态的内存块,通过一些处理机制将其进行释放,以腾出空间提高资源利用率。例如,内存换出至二级存储、内存压缩或内存合并等等。以内存交换为例,交换过程中需要涉及大量的元数据更新,可能存在大量元数据的分配释放,频繁的进行分配释放对性能的损耗比较大。
为了减少第一内存管理模块与第二内存管理模块的交互,本实施例中,第一内存管理模块对于先申请到的用于存储元数据的内存块,当该元数据释放时,并未将存储该元数据的内存块释放回第二内存管理模块,而是在满足保留条件的情况下保留该内存块并进行管理,后续再次需要存储元数据时,可以先从被管理的各个内存块中选取是否有合适的内存块,从而可以减少开销,降低第一内存管理模块与第二内存管理模块交互造成的性能损耗。
其中,内存块中存储的元数据被释放表示该元数据被删除,使得内存块处于空闲状态。本实施例中可以根据预设保留条件确定内存块是否保留。例如,可以是第一内存管理模块保留的内存块已足够多,则可确定内存块可以不保留,由第二内存管理回收。
所述预设保留条件可以有多种实现方式,例如可以基于第一内存管理模块需要保留的内存块的数量确定,也可以结合第一内存管理模块需要保留的内存块的总大小确定,实际应用中可以根据需要灵活配置。
由于第一内存管理模块需要管理保留的内存块,保留的内存块有至少一个。为了实现高效的管理,在一些例子中,所述方法还可包括:对保留的所述内存块建立管理信息并存储,所述管理信息用于管理被保留的内存块。
所述若从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据,包括:
若根据存储的各份管理信息,从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据。
本实施例中,管理信息可以根据需要灵活配置,可以包括内存块的大小信息或地址信息等。管理信息,可以是由第一内存管理模块所管理的第一类内存块存储,也可以是第一内存管理模块从第二内存管理模块申请到第二类内存块进行存储。
第一内存管理模块将第二类内存块保留,也即是将第二类内存块进行缓存;对保留的第二类内存块的管理信息进行存储,可以理解为建立缓存池,以对各个管理信息进行维护。每个保留的第二类内存块的管理信息可以理解为第二类内存块的元数据。实际应用中,第一内存管理模块管理的第一类内存块的元数据,可以有多种类型,可以是每种元数据对应一个缓存池。
实际应用中,同一类型的各个第一类内存块的元数据的大小可以相同或不同。例如,对于表示内存块的分配状态的元数据等,其大小是固定。对于进程的元数据,其大小是不固定的,例如,表示进程的各个内存块的合并状态的元数据等。例如,前述的表示虚拟机的内存情况的元数据mmap,该结构体包括一entry字段,记录着虚拟机的每一个内存块,当对应的内存块发生变化时就需要更新这个entry,但是整个mmap结构的entry是数组形式,如果增加或减少条目就需要重新分配一个新的mmap结构进行更新。
对于大小不固定的元数据,存储元数据的第二类内存块的大小也是不固定的。基于此,为了便于管理各个第二类内存块,可以通过多个分组管理不同大小的第二类内存块,在分配时可以快速准确地查找到合适的内存块。作为一个例子,所述管理信息包括内存块的大小;
所述对保留的所述内存块建立管理信息并存储,包括:
根据保留的所述内存块的大小,建立管理信息,并将所述管理信息分配至对应的分组中进行存储;其中,不同分组对应不同的大小范围;
所述若根据存储的各份管理信息,从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据,包括:
若根据所述目标元数据的大小,获取与所述目标元数据的大小所属的分组对应的各个管理信息,从获取的各个管理信息对应的保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据。
本实施例中,分组的数量可以根据需要灵活配置,每个分组对应的大小范围可以根据需要灵活配置,本实施例对此均不进行限定。可选的,可以存储各个分组与对应的大小范围的对应关系,或者还可以设置一根据大小映射至对应的分组的处理函数。
其中,所述分组的数据结构可以有多种实现方式,例如通过多个队列实现,每个分组对应一个队列,每个队列中包括一个或多个成员,每个成员对应一个被管理的内存块的管理信息。
在一些例子中,所述分组对应一个第一链表;同一分组的各个管理信息分别链接至该分组对应的第一链表的各个节点中;
所述将所述管理信息分配至对应的分组中,包括:
将所述管理信息链接至对应的第一链表的节点中;
所述获取与所述目标元数据的大小所属的分组对应的各个管理信息,包括:
获取与所述目标元数据的大小对应的第一链表中各个节点链接的各个管理信息。
本实施例中,对于每个分组,可以采用链表实现。通过链表可以实现非连续、非顺序的存储结构,适用于本实施例的各个内存块的管理信息的存储,通过链表也可以实现更高效的管理信息的查找、***与删除。
在一些例子中,各个所述第一链表链接至总链表的各个节点中,各个所述第一链表按照设定顺序排序;
所述将所述管理信息链接至对应的第一链表的节点中,包括:
根据所述设定顺序和各个第一链表对应的大小范围,从所述总链表中确定所述管理信息所属的第一链表,并将所述管理信息链接至所述管理信息所属的第一链表中;
所述获取与所述目标元数据的大小对应的第一链表中各个节点链接的各个管理信息,包括:
根据所述设定顺序和各个第一链表对应的大小范围,从所述总链表中确定与所述目标元数据的大小对应的第一链表,获取与所述目标元数据的大小对应的第一链表中各个节点链接的各个管理信息。
本实施例中,为了高效地访问各个第一链表,本实施例将各个第一链表通过总链表进行链接,总链表中的各个节点链接至各个所述第一链表,可以是总链表中的各个节点存储第一链表的根节点。各个第一链表可以按照设定顺序排序,例如,根据第一链表所对应的大小范围从高至低或从低至高排序;以从低至高排序为例,总链表中各个节点的从前至后的顺序,与从低至高排序的各个第一链表对应。
基于此,在需要从所述目标存储空间中确定所述第一大小所属的分组时,可以根据所述设定顺序和各个第一链表对应的大小范围,从所述总链表中确定所述第一大小所属的第一链表。在需要将所述目标第二类内存块的元数据存储至所述第二大小所属的分组中时,可以根据所述设定顺序和各个第一链表对应的大小范围,从总链表中确定所述第二大小所属的第一链表,将所述目标第二类内存块的元数据存储至所述第二大小所属的第一链表中。
在一些例子中,所述内存块的管理信息存储于所述内存块中,所述内存块的管理信息的地址存储于所述第一链表的节点中。本实施例中,管理信息大小通常较小,通过存储于管理信息对应的内存块中,不需要专门建立管理信息和内存块之间的对应关系,当通过访问第一链表的节点读取管理信息时,就可以直接访问到管理信息所属的内存块。
接下来再通过一个实施例进行说明。以预留内存虚拟机场景为例,每个虚拟机创建时,都会为该虚拟机创建元数据mmap,用于记录分配给该虚拟机的存储空间的信息,该mmap结构体里面记录这次分配的物理内存范围、对应的虚拟地址、所属进程等信息,所有分配出去的内存都会被挂载到mmap的链表里面。
为了管理内存冷热的老化情况,可以通过表示内存冷热状态的元数据发现处于冷状态的内存块集合。这部分内存在内存紧张的情况下,是可以被迁移到二级存储上,以便腾出更多的内存给活跃的虚拟机使用。当然也可以将腾挪出来的内存空间用于库存调度使用,以便提高宿主机资源的利用率。但每次这种腾挪都需要更新记录虚拟机内存情况的元数据,比如前述的mmap结构体,该mmap结构体中包括一采用数组形式表示的字段,该字段记录着虚拟机的每一个内存块,当对应的内存块发生变化时就需要更新该数组,由于数组形式,如果增加或减少条目就需要重新分配一个新的mmap结构进行更新。
这种腾挪是临时性的,如果二级存储不是可以直接访问的设备(例如磁盘),后续虚拟机继续访问到的话,会触发缺页异常,这时候就需要进行快速的重新换入操作。也可以根据调度等需要,主动将这些换出到二级存储上的内存块重新换回到主内存中;这样同样需要更新元数据mmap,从而造成整个结构体的中的数组需要频繁的增大或减小,也就导致该元数据可能被频繁的申请和释放,导致较大的性能开销。
为了减少性能开销,本实施例提供了一种元数据管理方案,可以应用于操作***的第一内存管理模块(例如预留内存场景下的预留内存管理模块等),本实施例可以设计缓存池,该缓存池通过管理信息来管理从操作***的第二内存管理模块申请到的第二类内存块。
示例性的,可以通过如下数据结构表示缓存池:
(1)一个主结构体pool,用于记录缓存池的整体信息。
例如可以包括缓存的总水位(该总水位用于进行是否满足预设保留条件的判断)、缓存结构体的数量(即保留的内存块的数量)、队列数量(即分组数量),还可以包括根据内存块大小映射到队列的处理函数list_seq,多队列数组,以及可能用到的专用缓存结构、相关统计信息等。
作为例子,统计信息可以有多种,例如可以包括未从管理的内存块找到适配的内存块并向第二内存管理申请第二类内存块的次数,基于此该次数信息,若次数较大,表示第一内存管理保留的内存块未能较好地满足分配需求,可以调整保留条件,从而提升从被保留的内存块中获取到适配的内存块的概率,减少第一内存管理模块与第二内存管理模块的交互。
(2)主结构体的下一层是队列,即主结构体下链接各个队列,队列结构体pool_list可以记录每个队列的队列信息,包括队列中的缓存数量(即队列中管理的内存块的数量)、队列的水位以及队列成员列表。
(3)队列的下一层是成员pool_elem,每个成员对应所需要管理的第二类内存块。其中,每个第二类内存块的头部被复用为链表指针,链接在缓存队列中。
实际应用中,可以根据所要管理的第一类内存块的元数据的类型,确定是否实施本实施例的方案。例如,内存管理过程中,内存交换功能可以根据需要启动,由于内存交换的元数据频繁变动,可以通过本实施例方案减少开销。
在需要实施本实施例方案时,可以创建一个缓存池pool,创建缓存池的实现方式,即创建缓存池对应的元数据,该元数据的结构体可参考上述实施例。可选的,根据设定的队列个数确定队列数量,并创建队列相应的元数据结构。其中,队列个数根据需要灵活配置,例如可以是一个或多个。
如前述实施例,第二内存管理模块可以提供有通用的内存块,也提供有特定大小的内存块;本实施例将通用的方式称为通用缓存,将特定大小的内存块称为专用缓存。对于单队列的情况,可以根据是否传递了专用缓存参数,来决定是否建立对应的专用缓存,后续分配就可以通过专用缓存进行处理;如果没有传递,则通过通用缓存进行处理。
当第一内存管理模块需要存储第一类内存块的元数据时,可以通过缓存池的结构体先查询是否有合适的第二类内存块。例如,对于多队列的情况,一个特定大小的第二类内存块的信息会被保存在特定队列中,本实施例通过list_seq函数,可以根据所需的大小转换成队列的序号,根据队列的序号访问对应的队列。若队列中没有成员,则可确定未有适配该大小的内存块。在该队列中查找队列成员中是否有适配该大小的内存块。队列中存在成员的情况下,队列中的成员的大小也不一定适配所需要的大小,因此,需要确定队列中各个成员的大小。如果找到适配的队列成员,表示找到适配的第二类内存块;如果未找到,则通过与第二内存管理模块的交互,向其申请合适的第二类内存块。
如果是固定大小的第一类元数据,则可以采用单队列的方式。单队列中各个成员所对应的第二类内存块的大小是相同的。分配时,不需要进行大小到队列的映射,也不需要检查队列,只需要看队列是否存在成员,如果存在取出一个成员,否则向第二类内存管理模块申请第二类内存块。可选的,可以判断是否配置了专用缓存,如果配置了从专用缓存分配,否则从通用缓存分配。
当某个第一类元数据需要释放,则存储该第一类元数据的第二类内存块可以释放,即该第二类内存块恢复为空闲状态。在释放时,可以根据需要确定是否释放至第二内存管理模块,或者是仍由第一内存管理模块进行管理。本实施例中通过预设保留条件实现,未满足预设保留条件,表示当前第一内存管理模块管理的内存块较多,无需再管理,可以由第二内存管理模块回收。
示例性的,可以配置多种参数,例如当前由第一内存管理模块所管理的第二类内存块的个数,或者是所管理的所有第二类内存块的总大小等等。在有多个分组的情况下,还可以细化至每个分组的参数,例如每个分组的第二类内存块的个数,或每个分组的第二类内存块的总大小等等。基于上述参数可以设置多种预设保留条件,例如可以包括如下任一:当前由第一内存管理模块所管理的第二类内存块的个数小于或等于第一个数阈值、管理的所有第二类内存块的总大小小于或等于第一大小阈值、分组的第二类内存块的个数小于或等于第二个数阈值或分组的第二类内存块的总大小小于或等于第二大小阈值等等。
针对某个第二类内存块,在释放的时候,对于多队列的方案需要通过list_seq函数进行队列映射,如果映射后的队列的水位已经大于设定水位,或者整个缓存池的水位大于设定水位,则直接将内存块还给内核通用缓存,否则将内存块挂载到相应的缓存队列中去;
同理,释放的时候,对于单队列也会简化很多,不需要进行大小到队列的映射,直接判断池子的水位是否满足预设保留条件,如果满足表示水位未超标,可直接入队,否则如果配置了专用缓存,则释放给专用缓存,否则释放给通用缓存。
最后,缓存池的销毁,则需要先清空所有队列中的缓存元素,如果配置了专用缓存,释放给专用缓存否则释放给通用缓存;如果存在专用缓存,在释放结束,销毁专用缓存,并最终销毁整个缓存池的结构体。
如前述实施例,第一内存管理模块管理的内存块的元数据有多种类型,本实施例方案适用于各种类型的元数据的管理。针对内存合并场景,内存合并场景中,会通过合并相同内存块的方案来处理冷状态的内存块,从而减少内存的使用量。但是需要额外的元数据记录合并内存块的信息。例如,在预留内存场景下,预留内存块本来只需要一个字节来表示使用情况,但是合并之后则需要额外的结构体来记录每个合并内存块的信息。为了避免元数据开销过大以及对***稳定性的影响,本实施例对合并内存块的元数据进行优化,以减少元数据的开销,降低对***稳定性的影响。
其中,内存块合并的处理过程,是操作***的内存合并模块启动后,会取出冷状态的待释放内存块,一开始先作为候选内存块;之后,再取出的待释放内存块,会与各个候选内存块存储的数据进行比较,确定是否有可合并的内存块,直至找到可合并的候选内存块或者所有候选内存块遍历结束。若找到可合并的候选内存块,则待释放内存块的虚拟地址会映射至找到的候选内存块的物理地址,从而释放出待释放内存块的物理地址。
能够合并的各个合并内存块存储相同数据。对于待释放内存块,在一些实施例中,在内存合并时针对零块单独进行管理。其中,零块是指各个比特位是否都为零的内存块,各个零块也是属于合并内存块。
为了提升管理效率,从冷页集合中取出的内存块可能可以找到有合并的内存块,也可能暂未能找到可合并的内存块,基于此可以将已合并的候选内存块和未合并的候选内存块分别进行管理。作为例子,可以维护两颗树结构,一颗是合并树,另一颗是未合并树。合并树中管理的内存块都是已经有被合并的内存块(至少两个相同内存块),且页表属性已经被更改为只读权限;而未合并树则是从冷页集合中取出的还未能合并的内存块,页表属性仍是读写。即,已合并的候选内存块集合采用合并树维护,未合并的候选内存块集合采用未合并树维护。合并树和未合并树可以根据需要进行设计,例如,树的节点用于关联内存块,合并树中每个节点用于关联存储相同数据的各个合并内存块。
对于零块,则无需采用树结构,采用零块节点即可维护各个零块的元数据。
在一些例子中,所述第一内存管理模块管理的内存块的元数据包括:合并内存块的元数据;
所述合并内存块的元数据包括:用于记录所述合并内存块的非共用字段的非共用元数据和记录所述合并内存块的共用字段的共用元数据;其中,存储相同内容的各个所述合并内存块共用同一共用元数据。
本实施例的合并内存块,是指存储相同内容、参与合并的内存块,其包括上述的零块以及其他内存块。
对于存储相同内容的各个合并内存块,需要为每个内存块建立元数据以记录合并信息,元数据中包括多个字段,每个字段存储一种合并信息。对于存储相同内容的各个合并内存块,其中一些字段存储的信息是相同的。例如,合并标记、基础内存块的物理地址或内存块存储内容的编码信息等。
本实施例中,将这些相同的信息称为共用信息,并将这些共用信息分离出来单独建立结构体(本实施例称为item_ext)。从而,存储相同内容的各个所述合并内存块共用同一共用元数据。例如,有3个存储相同内容的合并内存块,每个合并内存块对应有各自的非共用元数据,3个合并内存块共用同一个共用元数据。本实施例中,item_ext的存储可以采用前述的缓存池实现。
在一些例子中,所述共用元数据用于存储如下至少一种共用信息:合并标记、基础内存块的物理地址或内存块存储内容的编码信息。
为了便于查找到共用元数据,在一些例子中,所述非共用元数据包括链接字段,所述链接字段存储所述共用元数据的地址,以使所述非共用元数据与所述共用元数据链接。因此,通过访问合并内存块的非共用元数据中的链接字段,即可通过其存储的地址快速访问到共用元数据,实现了非共用元数据与共用元数据的链接。
在一些例子中,所述方法还包括:
在合并树的节点挂载首个合并内存块时,将所述首个合并内存块的共用元数据中的信息记录于所述合并树的节点的元数据后,释放所述首个合并内存块的共用元数据。
若所述合并树的节点挂载的合并内存块被恢复,根据所述合并树的节点的元数据记录的信息,创建所述被恢复的合并内存块的共用元数据。
接下来再通过另一实施例对合并内存块的元数据进行说明。为了记录与内存合并相关的信息,本实施例中,第一内存管理模块中对合并内存块的元数据的数据结构可以采用如下实施例:
主结构体zsm,记录各种内存合并相关的数据结构,包括:
a)各个内存节点(即前述的NUMA架构下的NUMA节点)的合并内存信息node,每个节点所有合并和未合并的内存块都在各自的node结构体中;
b)建立后续提到的下一层的各种元数据(结构体)对应的缓存池,避免元数据频繁分配和释放产生的开销;其中,缓存池的建立可参考前述实施例。
本实施例的元数据,包括:每个进程的元数据slot;表示合并树结构体snode;合并树中每个节点上所挂载的内存块的元数据item。
c)用于连接所有进程的元数据slot的链接入口,包括链表入口和快速定位的哈希表入口;
d)用于记录每次扫描未合并页的位置,包括上次扫描到的进程,及其对应的slot,以及slot中的item位置,以便下一次记录开始扫描;
e)和合并内存对应的交换设备信息;
f)以及各种统计、锁保护字段等。
2、每个zsm节点结构体node中,会包含该节点的各种合并和非合并内存块的集合入口,主要包括:
a)该节点所有合并零页的节点入口,以及对应的锁保护,和统计信息字段;
b)该节点所有相同页的节点树入口,以及对应的锁保护,和统计信息字段;
c)该节点所有未合并页节点树的入口,以及对应的锁保护,和统计信息字段;
3、元数据snode,用于分别管理合并的零页和相同页,主要包括:
a)红黑树节点字段,用于把内存节点snode组合成一个红黑树;
b)链表字段head下,会挂载各个被合并的内存块的结构体item;
c)对于合并相同页(head非空)的节点,还会其记录合并基块的物理地址paddr
(physical address);
d)记录该基础内存块的内核态虚拟地址kva(kernel virtual address),以方便进行内容比较;
e)记录snode所属的节点nid,合并属性(零页还是相同页等),paddr对应的内存块ms序号、合并页数量统计信息等。
4、合并内存块的元数据item,这是内存合并的最基本操作单元,该结构体包含以下重要字段:
a)内存块的物理地址paddr;
b)一个内存块一般都是分配给用户态进程使用,内核态要访问它的内容的话,需要先建立起内核态的虚拟地址kva;
c)另外,在合并过程中会涉及更新其原来的页表结构,因此需要记录其对应的页表项pmd;
d)同时这个管理结构可能被链接在合并节点中,也可能被组织在未合并树中,因此会复用空间,分别建立一个链表的链接节点link和对应节点snode指针,和一个用于红黑树链接的节点node;
e)记录所处的合并属性(零页节点、相同页节点树、或者未合并树);
f)当然对于未合并的情况,还会记录其当前内容的checksum(内存中数据的哈希校验值);
g)最后还会有一些和slot相关联的字段。
5、为了分配将物理内存块和进程关联起来,元数据slot的结构体主要包括以下字段:
a)该结构体会记录对应的进程属性;为了方便和每次内存分配mmap对应上,这里会保存相关联的vma结构,vma和预留内存的每个内存分配信息mmap一一对应,mmap中也包含了进程pid等信息;
b)***中有很多进程,为了方便快速查找到对应的slot,这些slot会通过哈希链表的形式链接到主结构体zsm中;
c)另外所有的slot也会通过链表串联在zsm中,以方便全量遍历;
d)然后将该进程所有的item都链接在slot中;
e)还会有保护锁等辅助字段;
6、对于未合并的内存块,会根据item中的kva将其组织成一个红黑树;同时每次扫描的时候,都会重新构建红黑树;并会从上次扫描的位置开始,遍历后续各个slot中的各个item,对未合并的item将计算其checksum,如果和item中记录的原值一致,则进入未合并树,以便后续进一步比较发现相同内存块;否则,不一致,说明这段时间数据有变化,暂时不进入合并的候选选项。
为了节省元数据开销,例如预留内存场景的设计初衷是为了节省元数据开销,因此基础的预留内存场景中,每个内存块只需要一个字节来表示状态信息。而当前合并内存块需要为每个参与合并的内存块建立一个元数据item的结构体,用于表示内存块的各种合并信息,相比基础版本开销增加很多。
为了尽量减少这种元数据开销,本实施例可以对内存块的元数据的结构体进行优化,从而大幅度地减少元数据item结构体的大小。上述提到的元数据item中包括多个字段,需要记录内存块的物理地址paddr,编码信息checksum、以及属性flag等信息,而这些信息只有在内存块未合并的时候才有意义,而一旦内存块被合并,该内存块的元数据需要挂载到合并树的节点中,与合并树中节点snode记录的信息是一致的,因此可以将合并内存块的元数据中的这些信息优化掉。
其中,合并内存块的元数据中包括多个字段,本实施例可以为这些可以共用的字段分离出来,建立专门的结构体item_ext,同时在主结构体zsm中建立对应的缓存池,该缓存池item中增加一个ext字段,用来链接item_ext结构体。
当合并内存块的时候,其item需要合并入snode的时候,如果是第一个进入snode的item,则将item_ext中的paddr、flag、checksum等,记录到snode的对应字段中去,并释放item_ext结构体到其缓存pool中去。
当恢复内存块的时候,其item需要从snode恢复,如果后续要参与内存合并跟踪,需要重新分配其item_ext结构,并使用其恢复内存块地址paddr来填充到item_ext中,
同时重新计算checksum;
另外,在运行过程中,如果要获取某个item的物理地址paddr等信息的时候,则需要通过ext字段判断其是否存在自己的item_ext结构,如果存在从item_ext中解析,否则从其对应的snode中解析。
与前述元数据管理方法的实施例相对应,本说明书还提供了元数据管理装置及其所应用的计算机设备的实施例。
本说明书元数据管理装置的实施例可以应用在计算机设备上,例如服务器或终端设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在文件处理的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本说明书元数据管理装置所在计算机设备的一种硬件结构图,除了图3所示的处理器310、内存330、网络接口320、以及非易失性存储器340之外,实施例中元数据管理装置331所在的计算机设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图4所示,图4是本说明书根据一示例性实施例示出的一种元数据管理装置的框图,所述装置应用于操作***的第一内存管理模块,所述第一内存管理模块和所述操作***的第二内存管理模块分别管理内存的不同内存块,所述第一内存管理模块管理的内存块的元数据存储于从所述第二内存管理模块申请到的内存块中;
所述装置包括:
保留处理模块41,用于:响应于内存块中存储的元数据被释放,若确定满足预设保留条件,保留所述内存块;
存储处理模块42,用于:响应于目标元数据的存储请求,若从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的所述内存块存储所述目标元数据。
在一些例子中,所述保留处理模块还用于:
对保留的所述内存块建立管理信息并存储,所述管理信息用于管理被保留的内存块;
所述存储处理模块执行所述若从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据,包括:
若根据存储的各份管理信息,从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据。
在一些例子中,所述管理信息包括内存块的大小;
所述保留处理模块执行所述对保留的所述内存块建立管理信息并存储,包括:
根据保留的所述内存块的大小,建立管理信息,并将所述管理信息分配至对应的分组中进行存储;其中,不同分组对应不同的大小范围;
所述存储处理模块执行所述若根据存储的各份管理信息,从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据,包括:
若根据所述目标元数据的大小,获取与所述目标元数据的大小所属的分组对应的各个管理信息,从获取的各个管理信息对应的保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据。
在一些例子中,所述分组对应一个第一链表;同一分组的各个管理信息分别链接至该分组对应的第一链表的各个节点中;
所述保留处理模块执行所述将所述管理信息分配至对应的分组中,包括:
将所述管理信息链接至对应的第一链表的节点中;
所述存储处理模块执行所述获取与所述目标元数据的大小所属的分组对应的各个管理信息,包括:
获取与所述目标元数据的大小对应的第一链表中各个节点链接的各个管理信息。
在一些例子中,各个所述第一链表链接至总链表的各个节点中,各个所述第一链表按照设定顺序排序;
所述保留处理模块执行所述将所述管理信息链接至对应的第一链表的节点中,包括:
根据所述设定顺序和各个第一链表对应的大小范围,从所述总链表中确定所述管理信息所属的第一链表,并将所述管理信息链接至所述管理信息所属的第一链表中;
所述存储处理模块执行所述获取与所述目标元数据的大小对应的第一链表中各个节点链接的各个管理信息,包括:
根据所述设定顺序和各个第一链表对应的大小范围,从所述总链表中确定与所述目标元数据的大小对应的第一链表,获取与所述目标元数据的大小对应的第一链表中各个节点链接的各个管理信息。
在一些例子中,所述内存块的管理信息存储于所述内存块中,所述内存块的管理信息的地址存储于所述第一链表的节点中。
在一些例子中,所述第一内存管理模块管理的内存块的元数据包括:合并内存块的元数据;
所述合并内存块的元数据包括:用于记录所述合并内存块的非共用字段的非共用元数据和记录所述合并内存块的共用字段的共用元数据;其中,存储相同数据的各个所述合并内存块共用同一共用元数据。
在一些例子中,所述非共用元数据包括链接字段,所述链接字段存储所述共用元数据的地址,以使所述非共用元数据与所述共用元数据链接。
在一些例子中,所述装置还包括:
在合并树的节点挂载首个合并内存块时,将所述首个合并内存块的共用元数据中的信息记录于所述合并树的节点的元数据后,释放所述首个合并内存块的共用元数据;
若所述合并树的节点挂载的合并内存块被恢复,根据所述合并树的节点的元数据记录的信息,创建所述被恢复的合并内存块的共用元数据。
在一些例子中,所述共用元数据用于存储如下至少一种共用信息:合并标记、基础内存块的物理地址或内存块存储内容的编码信息。
上述元数据管理装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
相应的,本说明书实施例还提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现前述元数据管理方法实施例的步骤。
相应的,本说明书实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现元数据管理方法实施例的步骤。
相应的,本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现元数据管理方法实施例的步骤。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例可以应用于一个或者多个计算机设备中,所述计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,所述计算机设备的硬件包括但不限于微处理器、专用集成电路(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 (13)
1.一种元数据管理方法,所述方法应用于操作***的第一内存管理模块,所述第一内存管理模块和所述操作***的第二内存管理模块分别管理内存的不同内存块,所述第一内存管理模块管理的内存块的元数据存储于从所述第二内存管理模块申请到的内存块中;
所述方法包括:
响应于内存块中存储的元数据被释放,若确定满足预设保留条件,保留所述内存块;
响应于目标元数据的存储请求,若从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据。
2.根据权利要求1所述的方法,所述方法还包括:
对保留的所述内存块建立管理信息并存储,所述管理信息用于管理被保留的内存块;
所述若从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据,包括:
若根据存储的各份管理信息,从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据。
3.根据权利要求2所述的方法,所述管理信息包括内存块的大小;
所述对保留的所述内存块建立管理信息并存储,包括:
根据保留的所述内存块的大小,建立管理信息,并将所述管理信息分配至对应的分组中进行存储;其中,不同分组对应不同的大小范围;
所述若根据存储的各份管理信息,从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据,包括:
若根据所述目标元数据的大小,获取与所述目标元数据的大小所属的分组对应的各个管理信息,从获取的各个管理信息对应的保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的内存块存储所述目标元数据。
4.根据权利要求3所述的方法,所述分组对应一个第一链表;同一分组的各个管理信息分别链接至该分组对应的第一链表的各个节点中;
所述将所述管理信息分配至对应的分组中,包括:
将所述管理信息链接至对应的第一链表的节点中;
所述获取与所述目标元数据的大小所属的分组对应的各个管理信息,包括:
获取与所述目标元数据的大小对应的第一链表中各个节点链接的各个管理信息。
5.根据权利要求4所述的方法,各个所述第一链表链接至总链表的各个节点中,各个所述第一链表按照设定顺序排序;
所述将所述管理信息链接至对应的第一链表的节点中,包括:
根据所述设定顺序和各个第一链表对应的大小范围,从所述总链表中确定所述管理信息所属的第一链表,并将所述管理信息链接至所述管理信息所属的第一链表中;
所述获取与所述目标元数据的大小对应的第一链表中各个节点链接的各个管理信息,包括:
根据所述设定顺序和各个第一链表对应的大小范围,从所述总链表中确定与所述目标元数据的大小对应的第一链表,获取与所述目标元数据的大小对应的第一链表中各个节点链接的各个管理信息。
6.根据权利要求4所述的方法,所述内存块的管理信息存储于所述内存块中,所述内存块的管理信息的地址存储于所述第一链表的节点中。
7.根据权利要求1所述的方法,所述第一内存管理模块管理的内存块的元数据包括:合并内存块的元数据;
所述合并内存块的元数据包括:用于记录所述合并内存块的非共用字段的非共用元数据和记录所述合并内存块的共用字段的共用元数据;其中,存储相同数据的各个所述合并内存块共用同一共用元数据。
8.根据权利要求7所述的方法,所述非共用元数据包括链接字段,所述链接字段存储所述共用元数据的地址,以使所述非共用元数据与所述共用元数据链接。
9.根据权利要求7所述的方法,所述方法还包括:
在合并树的节点挂载首个合并内存块时,将所述首个合并内存块的共用元数据中的信息记录于所述合并树的节点的元数据后,释放所述首个合并内存块的共用元数据;
若所述合并树的节点挂载的合并内存块被恢复,根据所述合并树的节点的元数据记录的信息,创建所述被恢复的合并内存块的共用元数据。
10.根据权利要求7所述的方法,所述共用元数据用于存储如下至少一种共用信息:合并标记、基础内存块的物理地址或内存块存储内容的编码信息。
11.一种元数据管理装置,所述装置应用于操作***的第一内存管理模块,所述第一内存管理模块和所述操作***的第二内存管理模块分别管理内存的不同内存块,所述第一内存管理模块管理的内存块的元数据存储于从所述第二内存管理模块申请到的内存块中;
所述装置包括:
保留处理模块,用于:响应于内存块中存储的元数据被释放,若确定满足预设保留条件,保留所述内存块;
存储处理模块,用于:响应于目标元数据的存储请求,若从保留的各个内存块中确定有适配所述目标元数据的内存块,利用确定的所述内存块存储所述目标元数据。
12.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现权利要求1至10任一所述方法的步骤。
13.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至10任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211679912.7A CN116225693A (zh) | 2022-12-26 | 2022-12-26 | 元数据管理方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211679912.7A CN116225693A (zh) | 2022-12-26 | 2022-12-26 | 元数据管理方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116225693A true CN116225693A (zh) | 2023-06-06 |
Family
ID=86579528
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211679912.7A Pending CN116225693A (zh) | 2022-12-26 | 2022-12-26 | 元数据管理方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116225693A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116821058A (zh) * | 2023-08-28 | 2023-09-29 | 腾讯科技(深圳)有限公司 | 元数据访问方法、装置、设备及存储介质 |
-
2022
- 2022-12-26 CN CN202211679912.7A patent/CN116225693A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116821058A (zh) * | 2023-08-28 | 2023-09-29 | 腾讯科技(深圳)有限公司 | 元数据访问方法、装置、设备及存储介质 |
CN116821058B (zh) * | 2023-08-28 | 2023-11-14 | 腾讯科技(深圳)有限公司 | 元数据访问方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10552337B2 (en) | Memory management and device | |
CN105740164B (zh) | 支持缓存一致性的多核处理器、读写方法、装置及设备 | |
US10289555B1 (en) | Memory read-ahead using learned memory access patterns | |
US8095736B2 (en) | Methods and systems for dynamic cache partitioning for distributed applications operating on multiprocessor architectures | |
CN114860163B (zh) | 一种存储***、内存管理方法和管理节点 | |
CN110555001B (zh) | 数据处理方法、装置、终端及介质 | |
KR20120068454A (ko) | 원격 페이지 폴트 처리 장치 및 그 방법 | |
US9208088B2 (en) | Shared virtual memory management apparatus for providing cache-coherence | |
CN113674133A (zh) | Gpu集群共享显存***、方法、装置及设备 | |
CN116302491A (zh) | 内存管理方法、装置、计算机设备及存储介质 | |
WO2024099448A1 (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN115617542A (zh) | 内存交换方法、装置、计算机设备及存储介质 | |
CN116225693A (zh) | 元数据管理方法、装置、计算机设备及存储介质 | |
US20200409833A1 (en) | Reducing fragmentation of computer memory | |
US20140289739A1 (en) | Allocating and sharing a data object among program instances | |
WO2019245445A1 (en) | Memory allocation in a hierarchical memory system | |
CN113138851B (zh) | 一种数据管理方法、相关装置及*** | |
CN115793957A (zh) | 写数据的方法、装置及计算机存储介质 | |
US20170364442A1 (en) | Method for accessing data visitor directory in multi-core system and device | |
CN113535392B (zh) | 基于cma实现支持大内存连续分配的内存管理方法及*** | |
US8762647B2 (en) | Multicore processor system and multicore processor | |
CN114518962A (zh) | 内存的管理方法及装置 | |
CN114116194A (zh) | 一种内存的分配方法及*** | |
CN112114962A (zh) | 一种内存分配方法及装置 | |
US11928336B2 (en) | Systems and methods for heterogeneous 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 |