CN114780246A - 内存访问信息的确定方法、存储介质及程序产品 - Google Patents

内存访问信息的确定方法、存储介质及程序产品 Download PDF

Info

Publication number
CN114780246A
CN114780246A CN202210509868.9A CN202210509868A CN114780246A CN 114780246 A CN114780246 A CN 114780246A CN 202210509868 A CN202210509868 A CN 202210509868A CN 114780246 A CN114780246 A CN 114780246A
Authority
CN
China
Prior art keywords
memory
reserved memory
allocation information
cache
reserved
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
Application number
CN202210509868.9A
Other languages
English (en)
Inventor
郑豪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Alibaba China Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba China Co Ltd filed Critical Alibaba China Co Ltd
Priority to CN202210509868.9A priority Critical patent/CN114780246A/zh
Publication of CN114780246A publication Critical patent/CN114780246A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation

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

内存访问信息的确定方法、存储介质及程序产品
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种内存访问信息的确定方法、存储介质及程序产品。
背景技术
在虚拟化场景下的宿主机内存分配架构中,宿主机的大部分内存被预留以待分配给虚拟机使用。这部分被预留的内存对于宿主机内核是不可用的,宿主机的内核也无法直接确定这部分内存的访问情况。
通常,宿主机可以遍历虚拟机的内存分配信息查询内存对应的页表,从而来确定内存对应的访问信息,但是这个过程需要针对内存分配信息进行拿锁,来避免其针对内存分配信息进行的查询操作和其他针对内存的更新、释放操作冲突。但这会导致虚拟机针对内存的操作无法完成或完成的延时较高,极大地影响了虚拟机的运行。
有鉴于此,现有技术亟需解决的技术问题是如何减少或者避免内存访问信息确定过程和其他针对内存的操作的锁竞争。
发明内容
有鉴于此,本申请实施例提供一种内存访问信息的确定方法,以至少部分解决上述问题。
根据本申请实施例的第一方面,提供了一种内存访问信息的确定方法,包括:获得宿主机中预留内存的物理地址,以及获得所述预留内存所属的虚拟机进程;根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,从内存缓存数组中查询所述预留内存对应的缓存项,得到所述预留内存对应的缓存项中存储的内存分配信息,其中,所述内存缓存数组中包括多项所述缓存项;根据与所述预留内存对应的内存分配信息关联的页表,确定所述预留内存的内存访问信息。
根据本申请实施例的第二方面,提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的方法。
根据本申请实施例的第三方面,提供了一种计算机程序产品,包括计算机指令,所述计算机指令指示计算设备执行如上所述的方法对应的操作。
根据本申请实施例提供的方案,通过获得宿主机中预留内存的物理地址,以及获得所述预留内存所属的虚拟机进程;根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,从内存缓存数组中查询所述预留内存对应的缓存项,得到所述预留内存对应的缓存项中存储的内存分配信息,其中,所述内存缓存数组中包括多项所述缓存项,由此,可以通过增加用于记录内存分配信息的内存缓存数据,并可以在不持有内存分配信息的操作锁的前提下,通过内存缓存数组查询得到预留内存的内存分配信息;再根据与所述预留内存对应的内存分配信息关联的页表,确定所述预留内存的内存访问信息,可以在尽量减少持有内存分配信息的操作锁的前提下,确定预留内存的内存访问信息,且本方案通过在内存缓存数组中进行查询,可以快速确定预留内存对应的内存分配信息,进而可以快速确定预留内存的访问信息。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1A为本申请实施例提供的一种宿主机的结构示意图;
图1B为本申请实施例提供的一种内存访问信息的确定方法的流程示意图;
图2为本申请实施例提供的一种内存访问信息的确定方法的流程示意图;
图3为本申请实施例提供的一种宿主机的结构示意图;
图4为本申请实施例提供的一种内存访问信息的确定方法的流程示意图;
图5为根据本申请实施例的一种电子设备的结构示意图。
具体实施方式
为了使本领域的人员更好地理解本申请实施例中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请实施例一部分实施例,而不是全部的实施例。基于本申请实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请实施例保护的范围。
为了更加详细地说明本实施例提供的方案,下面先对本申请中的使用场景进行示例性说明。
图1A为宿主机的结构示意图,如图所示,一台宿主机上可以运行多台虚拟机VM1、VM2、…VMn。
宿主机的内存可以按照使用者的不同分为两类,一类是宿主机自身使用的内存,一类是供虚拟机使用的预留内存。为了保证为了更好的管理虚拟机使用的内存(比如减少元数据开销),宿主机中一般会从内存中划分出预设大小的预留内存,预留内存仅供虚拟机使用,不允许宿主机自身使用。当在宿主机中新创建一个虚拟机时,可以从预留内存中划分出部分内存供新创建的虚拟机使用。
在为虚拟机分配内存的过程中,可以生成内存分配信息,内存分配信息中可以包括预留内存的物理地址分布情况,和对应的虚拟地址,以及相关联的页表信息。内存分配信息一般采用链表的形式进行存储。
由于我们对预留内存的管理是采用物理内存方式组织的,若需要获得预留内存的内存访问信息,需要遍历所有已经存在的内存分配信息,从而获取物理内存对应的虚拟地址,并根据虚拟地址查询该虚拟机进程对应的页表,从而来确定该物理内存对应的访问信息,但是这个过程需要持有内存分配信息组成的链表的操作锁,来避免其针对内存分配信息进行的查询操作和其他针对内存的更新、释放操作冲突。
但是在获取物理内存访问情况的遍历过程中,如果长时间或者频繁持有内存分配信息的操作锁,会导致其他对虚拟机进行的内存操作无法或很难获得该操作锁,从而影响甚至阻塞宿主机对虚拟机的各种管理操作。
为此,本申请实施例提供了一种内存访问信息的确定方法,可以在尽量不拿锁或者少拿锁的前提下,获取待遍历物理地址所对应的虚拟地址及其页表。
图1B为本申请实施例提供的一种内存访问信息的确定方法的流程示意图,本实施例提供的步骤可以由上图中的宿主机执行,如图所示,其包括:
S101、获得宿主机中预留内存的物理地址,以及获得所述预留内存所属的虚拟机进程。
预留内存为可以分配至虚拟机的内存,虚拟机为通过虚拟化技术部署在宿主机上的服务或进程。
本实施例中,可以对宿主机中的物理内存进行划分,得到两类内存,一部分是宿主机使用的内存,另一部分是供虚拟机使用的预留内存。宿主机可以通过确定自身可以使用的内存地址,将除自身可使用的内存之外的确定为预留内存。
本实施例中,在为虚拟机分配预留内存时,一般会记录预留内存的物理地址和其对应的虚拟机进程,本实施例中,可以根据记录查询得到物理地址及其对应的虚拟机进程。当然,若已经得到需要确定访问信息的预留内存的物理地址,可以根据预留内存的物理地址查询记录得到预留内存对应的虚拟机进程,本实施例对此不进行限定。
S102、根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,从内存缓存数组中查询所述预留内存对应的缓存项,得到所述预留内存对应的缓存项中存储的内存分配信息。
内存分配信息可以在为虚拟机分配预留内存时生成。内存分配信息可以用于记录被分配预留内存的虚拟机进程、分配的预留内存的物理地址以及其映射至的虚拟地址,以及相关联的页表,且内存分配信息可以随着虚拟机使用预留内存的情况同步更新。
本实施例中,内存缓存数组用于记录内存分配信息。内存缓存数组中可以包括多个缓存项,每个缓存项中可以记录有内存分配信息以及内存分配信息对应的预留内存的物理地址和预留内存被分配至的虚拟机进程等。
本实施例中,可以根据预留内存的物理地址和预留内存所属的虚拟机进程查询到对应的缓存项,并获得缓存项中存储的内存分配信息。由于上述过程为通过内存缓存数组的查询操作,而并非针对内存分配信息的操作,因此,无需持有内存分配信息组成的链表的操作锁。
S103、根据与所述预留内存对应的内存分配信息关联的页表,确定所述预留内存的内存访问信息。
页表是一种特殊的数据结构,用于提供从虚拟页面到物理页面的映射。更具体的说,页表中可以记录有虚拟地址与物理地址的映射关系。一个虚拟机进程可以对应有一张或者多张页表,虚拟机对应的页表可以为单级或者多级,一张页表可以映射至多个不连续的物理地址,一个连续的物理地址可以被映射至不同的页表。
内存分配信息可以记录有每次为虚拟机进程分配内存时被分配的预留内存对应的页表信息。
本实施例中,在为虚拟机分配预留内存时,可以采用MMAP的方式将内存地址映射到虚拟地址,即预留内存的物理地址和虚拟地址的映射关系生成的为MMAP对应的内存分配信息。根据MMAP的信息为虚拟机创建页表,并将预留内存的虚拟地址映射到对应的物理地址,虚拟机可以根据虚拟地址对内存进行操作,同时建立好的页表也会记录到MMAP中。
在确定预留内存对应的页表后,可以根据页表中的访问位,确定预留内存被访问的情况,即确定预留内存的内存访问信息。预留内存对应的内存访问信息用于指示预留内存是否被访问。具体地,可以根据MMAP确定预留内存的物理地址所对应的虚拟地址,并根据虚拟地址查询页表的访问位来确定预留内存的内存访问信息。
本实施例提供的方案,通过获得宿主机中预留内存的物理地址,以及获得所述预留内存所属的虚拟机进程;根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,从内存缓存数组中查询所述预留内存对应的缓存项,得到所述预留内存对应的缓存项中存储的内存分配信息,其中,所述内存缓存数组中包括多项所述缓存项,由此,可以通过增加用于记录内存分配信息的内存缓存数据,并可以在不持有内存分配信息的操作锁的前提下,通过内存缓存数组查询得到预留内存的内存分配信息;再根据与所述预留内存对应的内存分配信息关联的页表,确定所述预留内存的内存访问信息,可以在尽量减少持有内存分配信息的操作锁的前提下,确定预留内存的内存访问信息,且本方案通过在内存缓存数组中进行查询,可以快速确定预留内存对应的内存分配信息,进而可以快速确定预留内存的访问信息。
本实施例的内存访问信息的确定方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如手机、PAD等)和PC机等。
图2为本申请实施例提供的一种内存访问信息的确定方法的流程示意图,如图所示,其包括:
S201、获得宿主机中预留内存的物理地址,以及获得所述预留内存所属的虚拟机进程。
本实施例中,需要确定访问信息的可以为分配出去的全部预留内存或者部分预留内存,本实施例对此不进行限定。
可选地,本实施例中,步骤S201可以包括:查询冷热老化数组,获得宿主机中预留内存的物理地址以及所述预留内存所属的虚拟机进程,其中,所述冷热老化数组中存储有预留内存的物理地址、预留内存的内存大小、预留内存所述的虚拟机进程。
在虚拟机领域,一般宿主机以一定的粒度分配预留内存,即将预留内存按照2M的粒度进行切片,并按照2M的倍数将预留内存分配给虚拟机。在宿主机的轻量级元数据设计中,一般维护预留内存的内存切片的只有一个状态位,而没有其他额外的元数据开销;但是,这也就导致没有可以用来表示内存切片的冷热状态的元数据,为此,申请人设计了一种新的内存老化管理架构,来记录预留内存的冷热变化情况,即上述的冷热老化数组。
具体地,参见图3,示出了一种宿主机的结构示意图。宿主机中可以部署有多个虚拟机VM1、VM2…,并且宿主机内核kernel可以维护有一个冷热内存管理结构体,其包括用于确定已被分配至虚拟机的预留内存Reserved Memory的冷热老化信息,冷热内存管理结构体具体可以包括多个冷热节点node结构以及总的老化功能的各种控制字段。
老化功能的各种控制字段可以例如,控制整个冷热扫描功能是否开启的字段,统计信息,反复分配释放的常用结构体的缓存池;每个节点下可以包括多个冷热老化数据。每次更新node中的数据后,可以更新老化功能的各种控制字段。
一个冷热节点node结构可以对应一个或者多个虚拟机,一个虚拟机可以对应一个或者多个冷热节点node结构,本实施例对此不进行限定。
参见图3,以节点node0、节点node1为例,每个节点下可以包括多个冷热老化数组,冷热老化数组可以分为inactive(不活动,即冷)、active(活动,即热)、paused(暂时不参与扫描)或者pinned(永久不参与扫描)四类,对应内存的四种状态。当然,本实施例中仅以这四类进行举例说明,并不作为本申请的限定。
每个冷热老化数组中可以包括多个冷热项item,多个冷热项可以按照时间排序,使得通过时间沉淀后的冷热老化数组可以表征内存的老化情况。
每个冷热项item中可以包括被分配的预留内存的物理地址idx和被分配的预留内存的大小size,其中还包括用于指示下一个冷热项的next以及被分配的预留内存所属的虚拟机进程pid。
由此,根据预留内存的物理地址可以查询冷热老化数组,获得所述预留内存所属的虚拟机进程pid。
需要说明的是,本实施例中可以重点关注部分内存,则针对该部分预留内存的物理地址,可以均查询冷热内存数组确定各自所属的虚拟机进程。
S202、确定用于存储内存缓存数组的存储空间的地址范围。
本实施例中,可以现在宿主机中初始化内存缓存数组,并在为虚拟机分配预留内存的过程中,根据每次预留内存的分配过程的信息写入内存缓存数组中。
假设每个缓存项的大小为n,则内存缓存数组lmap的初始化存储空间的大小可以为a*n+b*n,a、b大于1。其中a*n对应的部分作为正常的用于存储内存缓存数组的存储空间使用,用于写入缓存项,b*n对应的部分用于对内存缓存数组进行扩容,a可以与b相同。在具体使用过程中,若b*n对应的部分已经开始使用,则下次开始确定预留内存的内存访问信息之前,可以将内存缓存数组扩容至a*n+b*n+c*n,c大于1,后面的c*n用于后续的紧急扩容,优选地,c=a+b。
可选地,本实施例中,内存缓存数组中包括多个缓存项,所述缓存项用于存储一次预留内存分配过程中生成的内存分配信息、被分配的预留内存的物理地址和被分配的预留内存所属的虚拟机进程。
内存缓存数组中的缓存项可以通过下述方式更新:
1)获得将所述预留内存分配至所述虚拟机的过程中生成的内存分配信息;确定所述内存缓存数组中预留的缓存项,并将所述内存分配信息、所述内存分配信息对应的预留内存的物理地址和所述预留内存所属的虚拟机进程信息写入预留的缓存项中,以更新所述内存缓存数组。
具体地,当为虚拟机新分配预留内存时,可以获得新分配的预留内存的内存分配信息mmap。若需要对本次分配的预留内存进行扫描来确定对应的内存访问信息,则可以在进行扫描时将该内存分配信息加入到内存缓存数组lmap中,具体地加入的方法可以为:
a)判断lmap的数组是否已经满了;如果未满则执行步骤c;否则,执行步骤b;
b)判断用于扩容的部分是否被使用,如果未使用直接扩容出来使用,并更新影子标记为被使用;否则,报错lmap已经满员;
c)从lmap数组中查找出一个空闲的entry,空闲的entry即预生成的一个空的缓存项;
d)将内存分配信息mmap记录到这个entry中,并记录内存分配信息对应的虚拟机进程pid等。本实施例中,还可以记录内存分配信息对应的内存分配信息副本mmap2、与内存分配信息mmap对应的vma等相关信息;
e)更新lmap的统计信息,例如更新lmap中已被写入数据的entry的数量、剩余数量、下一被写入数据的空间entry等。
2)接收预留内存的释放操作,确定所述内存释放操作对应的内存分配信息;从所述内存缓存数组中确定出所述内存分配信息对应的缓存项并清空,以更新所述内存缓存数组。
具体地,当为虚拟机注销预留内存时,可以获得被注销的预留内存的内存分配信息mmap对应的vma,根据vma查找被注销的预留内存的缓存项,并将缓存项清零,得到空闲的entry。之后可以更新lmap的统计信息,具体更新的统计信息可以参考上述的步骤e。
本实施例中,由于后续需要遍历内存缓存数据来得到预留内存对应的内存分配信息。则本步骤中,可以先确定用于存储内存缓存数据的存储空间的地址范围,以在后续步骤中根据确定出的地址范围对内存缓存数组进行遍历。
因此本实施例中,在执行步骤S203之前,先确定内存缓存数组剩余部分的内存是否被使用,若被使用,则需要为内存缓存数组分配新的用于进行扩容的内存。
具体地,可以判断用于对内存缓存数组进行扩容的内存是否被使用,若被使用,则可以为内存缓存数据分配新的用于进行扩容的内存,以扩大内存缓存数组的存储空间;或者,还可以判断内存缓存数组使用的内存的大小是否小于a*n,若是,则将内存缓存数组的存储空间缩小为a*n+b*n,其中,a*n对应的部分作为正常的用于存储内存缓存数组的存储空间使用,用于写入缓存项,b*n对应的部分用于对内存缓存数组进行扩容。
通过这种方式,可以为内存缓存数组预留足够的空间,在后续执行步骤S203的过程中,仍然可以向内存缓存数组中写入缓存项,即在进行扫描过程中,可以通过预先确定的语义进行扩容的内存,及时对内存缓存数组进行扩容;并且分配内存是可能失败的,因此,通过在扫描前确定用于扩容的内存,可以避免在扫描过程中真正需要进行扩容时,出现分配不出内存定位情况。
另外需要说明的是,本实施例中,在对内存缓存数组进行操作时,为了防止出现竞争,需要持有内存缓存数组的操作锁,需要拿锁的操作可以例如,向内存缓存数组写入缓存项、删除缓存项、更新内存缓存数组、对内存缓存数组进行预扩容等;另外,访问内存缓存数组时需要拿读锁。
本实施例中,通过在进行遍历前(即步骤S203之前)预先确定用于扩容的内存作为影子内存shadow(例如上述的b*n或者c*n对应的部分内存),可以在真正需要扩容时,直接设置shadow被使用的标志位即可实现扩容,不需要持有操作锁,避免了锁竞争。
一般情况下,用于执行步骤S203-S204的扫描进程会持有内存缓存数组的操作锁,不允许其他进程进行缓存数组的相关操作,其他进程的操作可以先缓存起来,并在该进程不持有操作锁时再继续执行;进一步地,本实施例中,可以由执行步骤S203-S204的扫描进程进行内存缓存数组的更新操作,使得访问缓存数组和更新缓存数组的过程是串行的,进而使得进程在扫描过程中不需要持有内存缓存数组的操作锁。例如访问内存缓存数组并确定查找的缓存项不存在,则向内存缓存数组中添加对应的缓存项,或者访问内存缓存数组并确定查找的缓存项中存储的内存分配信息等已无效,则更新缓存项,这些缓存项的更新操作不与查找过程并行执行。
S203、根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,从内存缓存数组中查询所述预留内存对应的缓存项,得到所述预留内存对应的缓存项中存储的内存分配信息。
可选地,本实施例中,步骤S203可以包括:根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,遍历所述内存缓存数组中的缓存项,判断所述预留内存的物理地址和所述预留内存所属的虚拟机进程是否被存储在所述缓存项中;若被存储在所述缓存项中,则获得所述缓存项中存储的内存分配信息作为所述预留内存对应的内存分配信息。
具体地,当根据预留内存的物理地址idx从冷热老化数组查询得到预留内存所属的虚拟机进程pid后,可以利用idx和pid遍历内存缓存数组中的多个缓存项,得到与idx和pid匹配的缓存项,并可以获得缓存项中存储的内存分配信息mmap。
本实施例中,由于针对一个虚拟机进程可能进行多次内存分配操作,每一内存分配操作对应一内存分配信息mmap,因此,通过pid无法准确确定对应的内存分配信息,而一次内存分配可能分配有多个预留内存切片,可能会对应有多个idx,因此,通过idx确定对应的内存分配信息的难度较高。为此,本实施例中,结合利用idx和pid遍历内存缓存数组中的多个缓存项时,可以先利用pid确定出多个缓存项,再利用idx对多个缓存项中记录的内存分配信息进行查询,以从多个缓存项中准确确定出预留内存对应的缓存项,并获得准确地内存分配信息。
需要说明的是,由于利用idx对多个缓存项中记录的内存分配信息进行查询,需要短暂持有内存分配信息组成的链表的操作锁,进一步优选地,本实施例中,缓存项中可以存储有内存分配信息副本,则可以利用idx对多个缓存项中记录的内存分配信息副本进行查询,以进一步避免拿锁。
可选地,本实施例中,若确定所述预留内存的物理地址和所述预留内存所属的虚拟机进程不被存储在所述内存缓存数组中任一的缓存项中,则获得内存分配信息组成的链表的操作锁;根据所述物理地址遍历所述链表中包括的内存分配信息,以从中得到所述预留内存对应内存分配信息。
针对部分虚拟机,例如在应用内存缓存数组之前建立的虚拟机,或者一开始不参与扫描遍历后续策略变化又参与了,可能存在内存分配信息并未记录在内存缓存数组中的情况,若在遍历内存缓存信息lmap中的缓存项后,确定所述预留内存的物理地址和所述预留内存所属的虚拟机进程不被存储在所述内存缓存数组中任一的缓存项中,则说明该次内存分配对应的内存分配信息并未被记录在lmap中,则可以获得内存分配信息组成的链表的操作锁;根据所述物理地址遍历所述链表中包括的内存分配信息,以从中得到所述预留内存对应内存分配信息。
S204、根据与所述预留内存对应的内存分配信息关联的页表,确定所述预留内存的内存访问信息。
可选地,本实施例中,由于根据与所述预留内存对应的内存分配信息关联的页表仍然需要短暂持有内存分配信息的操作锁,因此,本实施例中,为了进一步缩短持有操作锁的时间,步骤S204可以包括:获得与所述预留内存对应的内存分配信息的内存分配信息副本;根据所述内存分配信息副本确定与所述内存分配信息关联的页表;根据所述页表确定所述预留内存的内存访问信息。通过副本实现内存访问信息的确定,无需持有内存分配信息的操作锁,即进一步避免了拿锁。
具体地,本实施例中,为了保证副本的有效性,所述方法还包括:根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,以及从内存缓存数组中得到的内存分配信息,判断所述预留内存的物理地址和所述预留内存所属的虚拟机进程是否存在于得到的内存分配信息中;若存在,则确定所述内存分配信息副本有效,继续执行根据所述内存分配信息副本确定与所述内存分配信息关联的页表的步骤。
具体地,由于根据副本确定内存访问信息的过程是无锁操作,导致内存访问信息(副本对应的源文件)可能会发生更新,导致副本与源文件不一致,因此本实施例中,可以使用预留内存对应的idx和pid对找到的内存访问信息mmap(副本对应的源结构体)做一次校验,如果不能在mmap中获取到idx和pid信息,则说明源结构体发生了变更,此时可以更新副本并再次查找预留内存对应的缓存项。
若确定副本与源文件一致,则可以根据副本确定预留内存的内存访问信息。具体确定内存访问信息的方法可参考相关技术,在此不再赘述。
示例地,参见图4,示出了本申请实施例的一种内存访问信息的确定方法的步骤流程图,如图所示,其包括:
S401、判断用于对内存缓存数组lmap的进行扩容的内存是否需要调整。
若需要,则调整后执行步骤S402进行遍历,以进行扫描,若不需要,则直接执行步骤S402进行遍历,以进行扫描。
S402、利用冷热老化信息中预留内存对应的idx和pid,无锁遍历内存缓存数组lmap中的缓存项。
S403、判断idx和pid是否属于缓存项。
若不属于则执行步骤S404判断是否遍历完成;若属于,则执行步骤S406。
S404、判断缓存项是否遍历完成。
若未遍历完成,则返回步骤S403继续执行,若遍历完成,则确定希望查找的内存分配信息并未被存储在内存缓存数组中,执行步骤S408。
S405、获得mmap链表的操作锁,根据idx和pid从链表中查找到对应的mmap,并将信息更新至内存缓存数组中。
之后继续执行步骤S408。
S406、返回缓存项中的mmap。
S407、获得mmap对应的mmap副本,根据idx和pid判断mmap与mmap副本是否一致。
本实施例中,由于进行的是无锁遍历内存缓存数组,因此,需要在查询到后,根据idx和pid判断mmap与mmap副本是否一致,进而判断查询结果是否有效。
若一致,则执行步骤S408,若不一致,则更新mmap副本,并再次执行步骤S403。
S408、得到预留内存的内存放访问信息。
具体地,可以根据预留内存对应的idx和通过步骤S407得到的mmap副本,获取预留内存对应的虚拟地址vaddr,并由vaddr查询根据mmap管理的vma中记录的页表,获得预留内存对应的idx所在内存最近是否被访问的信息。
本实施例的内存访问信息的确定方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如手机、PAD等)和PC机等。
参照图5,示出了本申请实施例提供的一种电子设备的结构示意图,本申请具体实施例并不对电子设备的具体实现做限定。
如图5所示,该电子设备可以包括:处理器(processor)502、通信接口(Communications Interface)504、存储器(memory)506、以及通信总线508。
其中:
处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。
通信接口504,用于与其它电子设备或服务器进行通信。
处理器502,用于执行程序510,具体可以执行上述内存访问信息的确定方法实施例中的相关步骤。
具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
处理器502可能是处理器CPU,或者是特定集成电路ASIC(Application SpecificIntegrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路。智能设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序510中各步骤的具体实现可以参见上述内存访问信息的确定方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
本申请实施例还提供了一种计算机程序产品,包括计算机指令,该计算机指令指示计算设备执行上述多个方法实施例中的任一内存访问信息的确定方法对应的操作。
需要指出,根据实施的需要,可将本申请实施例中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本申请实施例的目的。
上述根据本申请实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CDROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的内存访问信息的确定方法。此外,当通用计算机访问用于实现在此示出的内存访问信息的确定方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的内存访问信息的确定方法的专用计算机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。
以上实施方式仅用于说明本申请实施例,而并非对本申请实施例的限制,有关技术领域的普通技术人员,在不脱离本申请实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本申请实施例的范畴,本申请实施例的专利保护范围应由权利要求限定。

Claims (11)

1.一种内存访问信息的确定方法,包括:
获得宿主机中预留内存的物理地址,以及获得所述预留内存所属的虚拟机进程;
根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,从内存缓存数组中查询所述预留内存对应的缓存项,得到所述预留内存对应的缓存项中存储的内存分配信息,其中,所述内存缓存数组中包括多项所述缓存项;
根据与所述预留内存对应的内存分配信息关联的页表,确定所述预留内存的内存访问信息。
2.根据权利要求1所述的方法,其中,所述根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,从内存缓存数组中查询所述预留内存对应的缓存项,得到所述预留内存对应的缓存项中存储的内存分配信息,包括:
根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,遍历所述内存缓存数组中的缓存项,判断所述预留内存的物理地址和所述预留内存所属的虚拟机进程是否被存储在所述缓存项中;
若被存储在所述缓存项中,则获得所述缓存项中存储的内存分配信息作为所述预留内存对应的内存分配信息。
3.根据权利要求2所述的方法,其中,所述方法还包括:
若确定所述预留内存的物理地址和所述预留内存所属的虚拟机进程不被存储在所述内存缓存数组中任一的缓存项中,则获得内存分配信息组成的链表的操作锁;
根据所述物理地址遍历所述链表中包括的内存分配信息,以从中得到所述预留内存对应内存分配信息。
4.根据权利要求1所述的方法,其中,所述根据与所述预留内存对应的内存分配信息关联的页表,确定所述预留内存的内存访问信息,包括:
获得与所述预留内存对应的内存分配信息的内存分配信息副本;
根据所述内存分配信息副本确定与所述内存分配信息关联的页表;
根据所述页表确定所述预留内存的内存访问信息。
5.根据权利要求4所述的方法,其中,所述获得与所述预留内存对应的内存分配信息的副本之后,所述方法还包括:
根据所述预留内存的物理地址和所述预留内存所属的虚拟机进程,以及从内存缓存数组中得到的内存分配信息,判断所述预留内存的物理地址和所述预留内存所属的虚拟机进程是否存在于得到的内存分配信息中;
若存在,则确定所述内存分配信息副本有效,继续执行根据所述内存分配信息副本确定与所述内存分配信息关联的页表的步骤。
6.根据权利要求1所述的方法,其中,所述内存缓存数组中包括多个缓存项,所述缓存项用于存储一次预留内存分配过程中生成的内存分配信息、被分配的预留内存的物理地址和被分配的预留内存所属的虚拟机进程。
7.根据权利要求6所述的方法,其中,所述方法还包括:
获得将所述预留内存分配至所述虚拟机的过程中生成的内存分配信息;
确定所述内存缓存数组中预留的缓存项,并将所述内存分配信息、所述内存分配信息对应的预留内存的物理地址和所述预留内存所属的虚拟机进程信息写入预留的缓存项中,以更新所述内存缓存数组。
8.根据权利要求6所述的方法,其中,所述方法还包括:
接收内存释放操作,确定所述内存释放操作对应的内存分配信息;
从所述内存缓存数组中确定出所述内存分配信息对应的缓存项并清空,以更新所述内存缓存数组。
9.根据权利要求1所述的方法,其中,所述获得宿主机中预留内存的物理地址,以及获得所述预留内存所属的虚拟机进程,包括:
查询冷热老化数组,获得所述预留内存的物理地址以及所述预留内存所属的虚拟机进程,其中,所述冷热老化数组中存储有预留内存的物理地址、预留内存的内存大小、预留内存所述的虚拟机进程。
10.一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如权利要求1-9中任一所述方法。
11.一种计算机程序产品,包括计算机指令,所述计算机指令指示计算设备执行如权利要求1-9中任一所述方法。
CN202210509868.9A 2022-05-11 2022-05-11 内存访问信息的确定方法、存储介质及程序产品 Pending CN114780246A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210509868.9A CN114780246A (zh) 2022-05-11 2022-05-11 内存访问信息的确定方法、存储介质及程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210509868.9A CN114780246A (zh) 2022-05-11 2022-05-11 内存访问信息的确定方法、存储介质及程序产品

Publications (1)

Publication Number Publication Date
CN114780246A true CN114780246A (zh) 2022-07-22

Family

ID=82437947

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210509868.9A Pending CN114780246A (zh) 2022-05-11 2022-05-11 内存访问信息的确定方法、存储介质及程序产品

Country Status (1)

Country Link
CN (1) CN114780246A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112073519A (zh) * 2020-09-09 2020-12-11 星辰天合(北京)数据科技有限公司 操作请求的处理方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112073519A (zh) * 2020-09-09 2020-12-11 星辰天合(北京)数据科技有限公司 操作请求的处理方法和装置
CN112073519B (zh) * 2020-09-09 2023-06-02 北京星辰天合科技股份有限公司 操作请求的处理方法和装置

Similar Documents

Publication Publication Date Title
EP3608788B1 (en) Internal memory access method and computer system
US20240202135A1 (en) Memory system and method for controlling nonvolatile memory
EP2645259B1 (en) Method, device and system for caching data in multi-node system
US10838622B2 (en) Method and apparatus for improving storage performance of container
CN106294190B (zh) 一种存储空间管理方法及装置
CN106445835B (zh) 内存分配方法与装置
US20150113230A1 (en) Directory storage method and query method, and node controller
US10824555B2 (en) Method and system for flash-aware heap memory management wherein responsive to a page fault, mapping a physical page (of a logical segment) that was previously reserved in response to another page fault for another page in the first logical segment
US20130290636A1 (en) Managing memory
CN111177019B (zh) 一种内存分配管理方法、装置、设备及存储介质
CN107766258B (zh) 内存存储方法与装置、内存查询方法与装置
US20190347211A1 (en) System and method for managing memory for large keys and values
CN114327917A (zh) 内存管理方法、计算设备及可读存储介质
CN114780246A (zh) 内存访问信息的确定方法、存储介质及程序产品
CN106294189B (zh) 内存碎片整理方法及装置
US11256630B2 (en) Cache address mapping method and related device
CN110334034B (zh) 映射表动态加载的方法、装置、计算机设备及存储介质
CN116303661B (zh) 一种分布式数据库中针对序列的处理方法、装置及系统
EP3249539B1 (en) Method and device for accessing data visitor directory in multi-core system
US20230088344A1 (en) Storage medium management method and apparatus, device, and computer-readable storage medium
CN116225693A (zh) 元数据管理方法、装置、计算机设备及存储介质
CN113760858B (zh) 内存库数据动态迁移方法、装置、计算设备及存储设备
CN113535392A (zh) 基于cma实现支持大内存连续分配的内存管理方法及系统
CN108694209B (zh) 基于对象的分布式索引方法和客户端
US20150324279A1 (en) Hybrid memory table cluster system

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