一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

内存扫描方法及装置与流程

2022-06-05 13:54:50 来源:中国专利 TAG:


1.本说明书实施例涉及计算机技术领域,特别涉及一种内存扫描方法。


背景技术:

2.在新的虚拟化场景下宿主机内存分配架构中,为了节省宿主机内存管理的元数据开销,可以将宿主机的大多数内存都预留出来,以便将来分给虚拟机使用。这部分预留出来的内存,对于宿主机内核不可用,内核原来的lru等功能无法监测这部分预留出来的内存的冷热情况。由于这部分预留出来的内存往往是给虚拟机使用的,还具有一定的特殊性,为了获取这部分预留出来的内存的访问热度等情况,需要具备对这部分预留出来的内存的冷热程度扫描、信息收集等功能。
3.但是,获取到的这部分预留出来的内存的冷热情况,只是当前时刻的冷热情况,无法反映出这部分预留出来的内存冷热的变化情况,或者内存冷热的老化情况。


技术实现要素:

4.有鉴于此,本说明书实施例提供了一种内存扫描方法。本说明书一个或者多个实施例同时涉及一种内存扫描装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
5.根据本说明书实施例的第一方面,提供了一种内存扫描方法,应用于宿主机,包括:
6.根据预设时间间隔确定预留内存扫描范围,其中,所述预留内存为所述宿主机内存的一部分;
7.扫描所述预留内存扫描范围内的待扫描预留内存,确定所述待扫描预留内存的当前冷热状态;
8.根据所述待扫描预留内存的当前冷热状态,确定所述待扫描预留内存的当前冷热状态的目标记录表,并将所述待扫描预留内存的当前冷热状态记录至所述目标记录表。
9.根据本说明书实施例的第二方面,提供了一种内存扫描装置,应用于宿主机,包括:
10.扫描范围确定模块,被配置为根据预设时间间隔确定预留内存扫描范围,其中,所述预留内存为所述宿主机内存的一部分;
11.内存扫描模块,被配置为扫描所述预留内存扫描范围内的待扫描预留内存,确定所述待扫描预留内存的当前冷热状态;
12.内存状态记录模块,被配置为根据所述待扫描预留内存的当前冷热状态,确定所述待扫描预留内存的当前冷热状态的目标记录表,并将所述待扫描预留内存的当前冷热状态记录至所述目标记录表。
13.根据本说明书实施例的第三方面,提供了一种计算设备,包括:
14.存储器和处理器;
15.所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述内存扫描方法的步骤。
16.根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述内存扫描方法的步骤。
17.根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述内存扫描方法的步骤。
18.本说明书一个实施例实现了一种内存扫描方法及装置,其中,所述方法包括根据预设时间间隔确定预留内存扫描范围,其中,所述预留内存为所述宿主机内存的一部分;扫描所述预留内存扫描范围内的待扫描预留内存,确定所述待扫描预留内存的当前冷热状态;根据所述待扫描预留内存的当前冷热状态,确定所述待扫描预留内存的当前冷热状态的目标记录表,并将所述待扫描预留内存的当前冷热状态记录至所述目标记录表。
19.具体的,所述内存扫描方法通过周期性(预设时间间隔)的对宿主机内存中的预留内存进行冷热扫描,并将每次冷热扫描的预留内存的当前冷热状态记录至目标记录表中,使得后续可以根据该目标记录表对预留内存的冷热变化情况进行查询,并且可以根据该目标记录表中预留内存的冷热变化情况确定该预留内存冷热的老化情况。
附图说明
20.图1是本说明书一个实施例提供的一种内存扫描方法中的mmap结构体的示意图;
21.图2是本说明书一个实施例提供的一种内存扫描方法的流程图;
22.图3是本说明书一个实施例提供的一种内存扫描装置的结构示意图;
23.图4是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
24.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
25.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
26.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
27.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
28.vmem:一种管理宿主机预留内存的内存管理模块。
29.mmap结构体:管理分配给vm(虚拟机)内存信息的一个专用结构体。
30.access:页表里面会有一个access位,记录这个页面是否被访问;若该access位被置位,则可以确定这个页面被访问,属于热页;若该access位没有被置位,则可以确定这个页面没有被访问,属于冷页。
31.pin操作:绑定内存操作。
32.inactive:冷页集合。
33.active:热页集合。
34.paused表:暂停扫描页的集合。
35.pinned表:不参与扫描页的集合。
36.paddr:物理地址。
37.vaddr:虚拟地址。
38.ept页表:kvm虚拟化架构下vm的页表。
39.bitmap:内存冷热情况的位图。
40.reserved memory:预留内存。
41.kernel:内核。
42.kvm:一种虚拟化架构。
43.vstat:一种收集内存信息的计算机应用程序。
44.在本说明书中,提供了一种内存扫描方法,本说明书同时涉及一种内存扫描装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
45.参见图1,图1示出了根据本说明书一个实施例提供的一种内存扫描方法中的mmap结构体的示意图。
46.图1中包括预留内存102和内核104,其中,内核104中运行有虚拟机1042,预留内存102被分配给虚拟机1042使用,如虚拟内存1022。
47.如图1所示,每个vmem分配出去时,预留内存都会为其建立一个对应的mmap结构体,该mmap结构体中记录本次分配的物理内存范围、对应的虚拟地址、所属进程等信息,所有分配出去的预留内存都会被放到这个mmap结构体的链表里面。具体实施时,在对预留内存进行冷热状态扫描时,会根据该mmap结构体确定该预留内存对应的虚拟地址。
48.实际应用中,一个预留内存是否为热页,可以根据物理地址或虚拟地址通过遍历页表查询其页表的access位是否被置位。如果access位被置位,则表明是热页,否则表示为冷页。当然页面可能为大页或小页,实际在遍历页表时,需要根据页表的大小来查找对应层级页表的标志情况。
49.另外,一次遍历查询之后,需要清空该页表的access位,否则随着时间的推演很可能所有预留内存的access位都会被使用到而置1(即表示热页),从而不能反映出当前这个扫描周期内该预留内存是否有被访问的情况。
50.而且预留内存的冷热情况是不断在变化的,为了实时的获取这种预留内存变化,需要周期性的扫描这些冷热预留内存。同时,这些预留内存的冷热情况还在不断的变化,即上一时刻可能是冷页的话,下一时刻可能不变,也可能发生变化;所以,为了精确获得预留内存的使用情况,还需要知道预留内存的冷热老化情况。
51.参见图2,图2示出了根据本说明书一个实施例提供的一种内存扫描方法的流程图,其中,所述方法应用于宿主机,具体包括以下步骤。
52.实际应用中,对于预留内存的冷热状态的扫描会周期性的进行,为了便于理解,本说明书实施例中以预留内存的一轮扫描为例进行介绍,其他轮次的扫描方式均可以参见该实施例的具体实现步骤。
53.步骤202:根据预设时间间隔确定预留内存扫描范围,其中,所述预留内存为所述宿主机内存的一部分。
54.其中,预设时间间隔可以根据实际应用进行设置,本说明书对此不作任何限定,例如设置为1小时、1天等。
55.一种可实现方案中,为了防止虚拟机的启停等对内存扫描范围带来的影响,可以为内存扫描范围添加扫描范围锁。例如,每隔预设时间间隔(即周期性)的确定预留内存扫描范围,并为该预留内存扫描范围中的待扫描预留内存添加扫描范围锁。
56.实际应用中,宿主机会分配一个内核线程(或者在虚拟机启动的情况下),对被分配出去的使用的预留内存进行周期性的扫描监测,即内核线程会周期性的确定预留内存扫描范围,对预留内存扫描范围中的待扫描预留内存进行扫描;而为了避免跟该待扫描预留内存的冷热扫描相关的操作与本次的待扫描预留内存的冷热扫描操作冲突,会先获取一个扫描范围锁,锁定本轮需要扫描冷热情况的预留内存扫描范围中的待扫描预留内存。
57.步骤204:扫描所述预留内存扫描范围内的待扫描预留内存,确定所述待扫描预留内存的当前冷热状态。
58.具体的,所述扫描所述预留内存扫描范围内的待扫描预留内存,确定所述待扫描预留内存的当前冷热状态,包括:
59.确定所述预留内存扫描范围内的待扫描预留内存的物理内存地址;
60.在确定存在虚拟页表的情况下,通过预设查询方式确定所述待扫描预留内存的物理内存地址对应的虚拟地址;
61.通过所述虚拟地址遍历查询对应的虚拟页表的访问位,根据所述访问位的当前置位状态确定所述待扫描预留内存的当前冷热状态。
62.其中,内存扫描方法中针对每一轮预留内存的扫描算法的粒度可以为1g、2m、4k等,本说明书实施例对此不作任何限定。
63.并且在虚拟化场景下,会存在虚拟页表(即虚拟化页表,ept页表);而在其他预留内存使用场景下,可能不存在虚拟页表;因此,虚拟页表的存在情况可以通过实际的应用场景进行确定。
64.具体实施时,首先确定待扫描预留内存的物理内存地址,在根据待扫描预留内存的使用场景,确定存在虚拟页表的情况下,通过预设查询方式确定该待扫描预留内存的物理内存地址对应的虚拟地址;再通过该虚拟地址遍历查询对应的虚拟页表的访问位,根据该访问位的当前置位状态确定该待扫描预留内存的当前冷热状态。
65.而在不存在虚拟页表的情况下,可以直接查询内核页表,如通过待扫描预留内存的物理内存地址遍历查询对应的内核页表的访问位,通过该内核页表的访问位的当前置位状态确定待扫描预留内存的当前冷热状态,具体可参见上述实施例的详细实现方式。
66.本说明书实施例中,在虚拟化场景下,通过待扫描预留内存的物理内存地址对应的虚拟地址,遍历查询对应的虚拟页表的访问位,根据该访问位的当前置位状态快速的确定该待扫描预留内存的当前冷热状态。
67.实际应用中,对预留内存扫描范围中待扫描预留内存的扫描,是需要扫描待扫描预留内存对应的预留内存物理地址,而该预留内存扫描范围包括两部分:目标热页记录表和目标冷页记录表;在预留内存扫描范围对应目标热页记录表的情况下,具体扫描时会对该目标热页记录表中的待扫描预留内存的冷热状态进行扫描;而在预留内存扫描范围对应目标冷页记录表的情况下,具体扫描时会对该目标冷页记录表中的待扫描预留内存的冷热状态进行扫描。
68.具体实现方式如下所述:
69.所述确定所述待扫描预留内存的物理内存地址,包括:
70.确定所述预留内存扫描范围对应的目标记录表,其中,所述目标记录表包括目标热页记录表和目标冷页记录表;
71.确定所述目标热页记录表中所述待扫描预留内存的物理内存地址;以及
72.在所述目标冷页记录表中所有的待扫描预留内存均扫描结束,且所述目标冷页记录表或者所述目标热页记录表满足预设扫描条件的情况下,确定所述目标热页记录表中所述待扫描预留内存的物理内存地址。
73.其中,预设扫描条件可以根据实际应用进行设置,例如目标热页记录表的上次扫描时间距离当前时间超过预设时间阈值(即该目标热页记录表长时间未扫描),或者目标冷页记录表中的待扫描预留内存的数量小于等于预设数量阈值(即目标热页记录表中的待扫描预留内存的数量较少)。
74.具体的,确定待扫描预留内存的物理内存地址存在两种情况,一种是将目标冷页记录表中的待扫描预留内存的物理内存地址作为扫描地址;另一种是在目标冷页记录表中所有的待扫描预留内存均扫描结束、且目标冷页记录表或者目标热页记录表满足预设扫描条件的情况下,将目标热页记录表中待扫描预留内存的物理内存地址作为扫描地址。
75.首先,确定预留内存扫描范围对应的目标冷页记录表和目标热页记录表,然后确定目标冷页记录表中的待扫描预留内存的物理内存地址进行后续扫描;并且在该目标冷页记录表中所有的待扫描预留内存均扫描结束、且目标冷页记录表或者目标热页记录表满足预设扫描条件的情况下,再确定目标热页记录表中待扫描预留内存的物理内存地址进行后续扫描。
76.本说明书实施例中,会根据实际的扫描情况,对预留内存扫描范围对应的目标热页记录表和目标冷页记录表中的待扫描预留内存进行扫描,即获取目标热页记录表中待扫描预留内存的物理内存地址以及获取目标冷页记录表中待扫描预留内存的物理内存地址,通过该物理内存地址实现对待扫描预留内存的冷热状态的快速扫描确定。
77.具体实施时,对目标热页记录表中待扫描预留内存以及目标冷页记录表中待扫描预留内存的冷热情况的扫描方式均相同,即在确定存在虚拟页表的情况下,通过预设查询方式确定待扫描预留内存的物理内存地址对应的虚拟地址;并通过虚拟地址遍历查询对应的虚拟页表的访问位,根据访问位的当前置位状态确定待扫描预留内存的当前冷热状态。
78.而根据上述实施例以及图1可知,本说明书实施例中,每个vmem分配出去时,预留内存都会为其建立一个对应的mmap结构体,该mmap结构体中记录本次分配的物理内存范围、对应的虚拟地址、所属进程等信息,因此可以根据该mmap结构体获取待扫描预留内存的物理内存地址对应的虚拟地址。具体实现方式如下所述:
79.所述通过预设查询方式确定所述待扫描预留内存的物理内存地址对应的虚拟地址,包括:
80.在确定所述待扫描预留内存的物理内存地址存在对应的缓存内存映射结构的情况下,根据所述缓存内存映射结构确定所述待扫描预留内存的物理内存地址对应的虚拟地址;或者
81.在确定所述待扫描预留内存的物理内存地址不存在对应的缓存内存映射结构的情况下,获取分配预留内存的内存映射结构链表,并为所述内存映射结构链表添加链表锁;
82.遍历所述内存映射结构链表确定所述待扫描预留内存的物理内存地址对应的内存映射结构;
83.根据所述内存映射结构确定所述待扫描预留内存的物理内存地址对应的虚拟地址,并将所述内存映射结构添加至所述缓存。
84.实际应用中,通过mmap结构体查询待扫描预留内存的物理内存地址对应的虚拟地址存在两种情况,一种是该待扫描预留内存的物理内存地址对应的mmap结构体在缓存中,则可以直接从缓存中获取对应的mmap结构体,实现待扫描预留内存的物理内存地址对应的虚拟地址的查询;另一种情况下,该待扫描预留内存的物理内存地址对应的mmap结构体没有存在缓存中,则需要从mmap结构体链表中获取对应的mmap结构体,实现待扫描预留内存的物理内存地址对应的虚拟地址的查询。
85.具体的,判断待扫描预留内存的物理内存地址是否存在对应的缓存内存映射结构(mmap结构体);若是,则获取该待扫描预留内存的物理内存地址对应的缓存内存映射结构,并根据该内存映射结构确定待扫描预留内存的物理内存地址对应的虚拟地址;若否,则获取分配预留内存的内存映射结构链表,并为该内存映射结构链表添加链表锁;然后遍历内存映射结构链表确定待扫描预留内存的物理内存地址对应的内存映射结构;再根据该内存映射结构确定待扫描预留内存的物理内存地址对应的虚拟地址,同时将该内存映射结构添加至缓存,要保证在下次使用时可以直接从缓存中获取该内存映射结构,避免每次查询都要拿锁等,造成资源浪费。
86.而在确定待扫描预留内存的物理内存地址对应的虚拟地址之后,则可以根据该虚拟地址遍历查询对应的虚拟页表的访问位,从而可以通过该访问位的当前置位状态快速的确定待扫描预留内存的当前冷热状态。具体实现方式如下所述:
87.所述通过所述虚拟地址遍历查询对应的虚拟页表的访问位,根据所述访问位的当前置位状态确定所述待扫描预留内存的当前冷热状态,包括:
88.通过所述虚拟地址遍历查询对应的虚拟页表的访问位;
89.在查询成功的情况下,确定所述访问位的当前置位状态;
90.判断所述当前置位状态是否被置位,
91.若是,则清理所述访问位的当前置位状态,并确定所述待扫描预留内存的当前冷热状态为热状态;
92.若否,根据所述虚拟地址遍历查询对应的内核页表的访问位,并根据所述内存页表的访问位的当前置位状态确定所述待扫描预留内存的当前冷热状态。
93.其中,查询成功可以理解为虚拟地址对应有虚拟页表。而查询失败可以理解为虚拟地址对应的虚拟页表存在问题,很可能是在使用备份扫描的时候,该原始mmap已经被释
放,导致其内核页表也被释放,因此查询失败,此时,则可以直接进行下一个待扫描预留内存的冷热状态扫描。
94.具体的,通过虚拟地址遍历查询对应的虚拟页表的访问位,在查询成功的情况下,确定该访问位的当前置位状态,若该当前置位状态被置位,则清理所述访问位的当前置位状态,同时设置本轮扫描对应的bitmap(位图)中物理内存地址对应的位置为1(表示热页,且此设置为非必要操作步骤,具体根据实际情况进行设置),且确定该待扫描预留内存的当前冷热状态为热状态;若该当前置位状态没有被置位,则继续根据虚拟地址遍历查询对应的内核页表,根据所述内存页表的访问位的当前置位状态确定所述待扫描预留内存的当前冷热状态,具体方式如下所述:
95.所述根据所述虚拟地址遍历查询对应的内核页表的访问位,并根据所述内存页表的访问位的当前置位状态确定所述待扫描预留内存的当前冷热状态,包括:
96.通过所述虚拟地址遍历查询对应的内核页表的访问位,确定所述内核页表的访问位的当前置位状态;
97.判断所述当前置位状态是否被置位,
98.若是,则清理所述访问位的当前置位状态,并确定所述待扫描预留内存的当前冷热状态为热状态;
99.若否,则确定所述待扫描预留内存的当前冷热状态为冷状态。
100.具体的,在内核页表的访问位的当前置位状态被置位的情况下,清理该访问位的当前置位状态,同时设置本轮扫描对应的bitmap(位图)中物理内存地址对应的位置为1(表示热页),且确定该待扫描预留内存的当前冷热状态为热状态;若该当前置位状态没有被置位,则保持该访问位的当前置位状态,同时设置本轮扫描对应的bitmap(位图)中物理内存地址对应的位置为0(表示冷页),且确定该待扫描预留内存的当前冷热状态为冷状态。
101.步骤206:根据所述待扫描预留内存的当前冷热状态,确定所述待扫描预留内存的当前冷热状态的目标记录表,并将所述待扫描预留内存的当前冷热状态记录至所述目标记录表。
102.具体的,在获得待扫描预留内存的当前冷热状态之后,则可以根据该待扫描预留内存的当前冷热状态,确定待扫描预留内存的当前冷热状态的目标记录表,并将待扫描预留内存的当前冷热状态记录至目标记录表。具体实现方式如下所述:
103.所述根据所述待扫描预留内存的当前冷热状态,确定所述待扫描预留内存的当前冷热状态的目标记录表,并将所述待扫描预留内存的当前冷热状态记录至所述目标记录表,包括:
104.在确定所述待扫描预留内存的当前冷热状态为热状态的情况下,确定所述待扫描预留内存的热状态对应的目标热页记录表,并将所述待扫描预留内存的热状态记录至所述目标热页记录表;
105.在确定所述待扫描预留内存的当前冷热状态为冷状态的情况下,确定所述待扫描预留内存的冷状态对应的目标冷页记录表,并将所述待扫描预留内存的冷状态记录至所述目标冷页记录表。
106.其中,目标记录表包括目标热页记录表和目标冷记录表,目标热页记录表中记录的热页,目标冷记录表中记录的为冷页。
107.实际应用中,在待扫描预留内存的当前冷热状态为热状态的情况下,可以确定需要将待扫描预留内存的当前冷热状态为热状态记录在目标热页记录表中,在待扫描预留内存的当前冷热状态为冷状态的情况下,可以确定需要将待扫描预留内存的当前冷热状态为冷状态记录在目标冷页记录表中。
108.即扫描后的待扫描预留内存的冷热情况,会被分为两个部分,即inactive(即目标冷页记录表)和active(即目标热页记录表),表信息记录可以是链表结构,也可以是数组等其他结构,本说明书对此不作任何限定。inactive和active表中间记录的是预留内存的物理地址(不同进程虚拟地址可能重复),以便唯一标识一个预留内存;且表头都是最老的信息,即最久访问状态未改变的预留内存;表尾就是最新的信息,即最新改变过访问状态的预留内存;这样inactive的表头就是最近最旧未访问的内存,inactive表每轮扫描都会去判断其内部记录的预留内存的额冷热情况,而active表则按需扫描;当然,另外还可以增加一些额外的表,例如不想参与扫描的预留内存可以放到paused表中,明确特别活跃的页面可以放到pinned表中等等,本说明书对此不作任何限定。
109.而具体实施时,若待扫描预留内存之前在目标热页记录表中,但是本轮扫描发现该待扫描预留内存为冷状态的情况下,是需要将该待扫描预留内存从目标热页记录表中删除,然后将其添加至目标冷页记录表中;若待扫描预留内存之前在目标热页记录表中,本轮扫描发现该待扫描预留内存还是为热状态的情况下,则该待扫描预留内存在目标热页记录表中的信息保持不变;同理,若待扫描预留内存之前在目标冷页记录表中,但是本轮扫描发现该待扫描预留内存为热状态的情况下,是需要将该待扫描预留内存从目标冷页记录表中删除,然后将其添加至目标热页记录表中;若待扫描预留内存之前在目标冷页记录表中,本轮扫描发现该待扫描预留内存还是为冷状态的情况下,则该待扫描预留内存在目标冷页记录表中的信息保持不变。从而保证目标冷页记录表以及目标热页记录表中的信息不会出现错乱的情况。具体实现方式如下所述:
110.所述根据所述待扫描预留内存的当前冷热状态,确定所述待扫描预留内存的当前冷热状态的目标记录表,并将所述待扫描预留内存的当前冷热状态记录至所述目标记录表,包括:
111.在所述目标热页记录表中的待扫描预留内存的当前冷热状态为热状态的情况下,确定所述待扫描预留内存的热状态对应的目标热页记录表,并将所述待扫描预留内存的热状态记录至所述目标热页记录表;
112.在所述目标热页记录表中的待扫描预留内存的当前冷热状态为冷状态的情况下,确定所述待扫描预留内存的冷状态对应的目标冷页记录表,删除所述目标热页记录表中的待扫描预留内存并将所述待扫描预留内存的冷状态记录至所述目标冷页记录表;或者
113.在所述目标冷页记录表中的待扫描预留内存的当前冷热状态为热状态的情况下,确定所述待扫描预留内存的热状态对应的目标热页记录表,删除所述目标冷页记录表中的待扫描预留内存并将所述待扫描预留内存的热状态记录至所述目标热页记录表;
114.在所述目标冷页记录表中的待扫描预留内存的当前冷热状态为冷状态的情况下,确定所述待扫描预留内存的冷状态对应的目标冷页记录表,并将所述待扫描预留内存的冷状态记录至所述目标冷页记录表。
115.此外,由于目标热页记录表和目标冷页记录表的表头记录的均是较久的信息,即
表头就是较久访问状态未改变的预留内存;表尾记录的均是较新的信息,即表尾是较新改变过访问状态的预留内存,这样目标冷页记录表的表头就是最近最久未访问的预留内存,从而可以通过目标冷页记录表确定预留内存的老化情况。具体实现方式如下所述:
116.所述将所述待扫描预留内存的冷状态记录至所述目标冷页记录表,包括:
117.将所述待扫描预留内存的冷状态记录至所述目标冷页记录表的尾部;
118.相应地,所述将所述待扫描预留内存的热状态记录至所述目标热页记录表,包括:
119.将所述待扫描预留内存的热状态记录至所述目标热页记录表的尾部。
120.实际应用中,在每轮扫描过程中,若出现终止扫描的外部指令的情况下,则可以跳出扫描并设置下一扫描周期,等待下一轮扫描周期到来时,再对预留内存进行扫描。
121.同时,会判断每轮扫描持续的时间,若该持续的时间大于预设时间阈值的情况下,为了表面扫描过程太长,长时间占用cpu导致其他进程无法获取cpu运行,可以对内核进程进行主动调度,释放原来的扫描范围锁,主动调度再重新获取扫描范围锁,更新预留内存扫描范围(即进程调度过程中内存扫描范围可能会被更新),并从上一次扫描位置往后扫描。
122.具体实施时,在具体扫描过程中,预留内存的分配和释放还会同步发生,此时可能会影响到扫描预留内存的范围,例如对于新分配出去的预留内存,可以理解为需要扫描的预留内存的范围变大,如果扫描进程正在进行扫描,则暂缓对预留内存扫描范围的更新,等待这一轮扫描结束之后再更新待扫描预留内存的预留内存扫描范围(即将新分配出去的预留内存添加到下一轮扫描中),避免打断本轮的扫描进程;而如果扫描进程没有在运行,则可以直接更新待扫描预留内存的预留内存扫描范围,以保证扫描的完整性。具体实现方式如下所述:
123.所述方法,还包括:
124.在确定存在新增预留内存、且所述待扫描预留内存扫描结束的情况下,将所述新增预留内存添加至所述预留内存扫描范围中。
125.其中,新增预留内存可以理解为上述的新分配出去的内存。
126.实际应用中,新分配的预留内存很可能都会被访问到(比如内存的pin操作,即内存的绑定操作),其扫描出来也是热页,区分不出来真实的冷热情况(实际上很多页面并没有被真正使用),此时,则可以全部清除对应页表的访问位(即access位),将其标记为冷页,待下一轮扫描时再对新分配的预留内存的冷热状态进行确定更新。
127.另外一种情况,在具体扫描过程中,出现了预留内存(本轮的待扫描预留内存)的释放时,则需要获取预留内存扫描范围的扫描范围锁,以便更新扫描的预留内存扫描范围;在获取扫描范围锁后,暂停扫描进程,并将释放的预留内存从扫描进程中删除,同时删除记录这些释放的预留内存冷热情况的数据结构。具体实现方式如下所述:
128.所述方法,还包括:
129.在确定所述预留内存扫描范围中的待扫描预留内存存在被释放的情况下,获取所述扫描范围锁,暂停所述预留内存扫描范围中的待扫描预留内存的扫描;
130.从所述预留内存扫描范围中删除被释放的待扫描预留内存,且删除所述被释放的待扫描预留内存对应的内存映射结构。
131.具体实施时,由于更新预留内存扫描范围可能是异步操作,可能在更新预留内存扫描范围之前,待扫描预留内存已经被释放,此时就会出现本轮针对该待扫描预留内存扫
描失败的情况,即这种扫描失败的待扫描预留内存属于被释放的预留内存,符合预期逻辑,不影响后续的扫描操作。
132.而对于扫描过程中,出现被扫描进程(执行待扫描预留内存的扫描过程的内核线程)热升级等改变记录扫描信息数据的行为,也需要暂停扫描,并获取扫描范围锁,以便更新记录的冷热信息的数据结构,避免后续扫描的失败。
133.本说明书实施例提供的所述内存扫描方法通过周期性(预设时间间隔)的对宿主机内存中的预留内存进行冷热扫描,并将每次冷热扫描的预留内存的当前冷热状态记录至目标记录表中,使得后续可以根据该目标记录表对预留内存的冷热变化情况进行查询,并且可以根据该目标记录表中预留内存的冷热变化情况确定该预留内存冷热的老化情况。
134.即对于宿主机上预留内存的冷热老化情况的监测原理和框架,包括对预留内存的周期性扫描,扫描过程中预留内存扫描范围等信息的更新,以及冷热表的区分和老化情况的记录;以及在进行一轮周期性预留内存扫描过程中,遍历预留内存扫描范围内预留内存对应ept页表(虚拟页表,虚拟化页表)和内核页表获取其内存冷热情况,并更新相应的inactive和active老化表,后续可以根据该inactive和active表对预留内存的冷热变化以及老化情况进行查询。实际应用中,说最早放入inactive的页在表头;后续添加的都在表尾;这样随着时间推移,表头的页就会经过老化沉淀,相对于表尾,就是更长时间未使用的了,大概率将来也是处于非活跃状态,因此根据该inactive和active表即可确定预留内存的冷热变化以及老化情况。
135.与上述方法实施例相对应,本说明书还提供内存扫描装置实施例,图3示出了本说明书一个实施例提供的一种内存扫描装置的结构示意图。如图3所示,该装置包括:
136.扫描范围确定模块302,被配置为根据预设时间间隔确定预留内存扫描范围,其中,所述预留内存为所述宿主机内存的一部分;
137.内存扫描模块304,被配置为扫描所述预留内存扫描范围内的待扫描预留内存,确定所述待扫描预留内存的当前冷热状态;
138.内存状态记录模块306,被配置为根据所述待扫描预留内存的当前冷热状态,确定所述待扫描预留内存的当前冷热状态的目标记录表,并将所述待扫描预留内存的当前冷热状态记录至所述目标记录表。
139.可选地,所述内存扫描模块304,进一步被配置为:
140.确定所述预留内存扫描范围内的待扫描预留内存的物理内存地址;
141.在确定存在虚拟页表的情况下,通过预设查询方式确定所述待扫描预留内存的物理内存地址对应的虚拟地址;
142.通过所述虚拟地址遍历查询对应的虚拟页表的访问位,根据所述访问位的当前置位状态确定所述待扫描预留内存的当前冷热状态。
143.可选地,所述内存扫描模块304,进一步被配置为:
144.确定所述预留内存扫描范围对应的目标记录表,其中,所述目标记录表包括目标热页记录表和目标冷页记录表;
145.确定所述目标热页记录表中所述待扫描预留内存的物理内存地址;以及
146.在所述目标冷页记录表中所有的待扫描预留内存均扫描结束,且所述目标冷页记录表或者所述目标热页记录表满足预设扫描条件的情况下,确定所述目标热页记录表中所
述待扫描预留内存的物理内存地址。
147.可选地,所述内存扫描模块304,进一步被配置为:
148.在确定所述待扫描预留内存的物理内存地址存在对应的缓存内存映射结构的情况下,根据所述缓存内存映射结构确定所述待扫描预留内存的物理内存地址对应的虚拟地址;或者
149.在确定所述待扫描预留内存的物理内存地址不存在对应的缓存内存映射结构的情况下,获取分配预留内存的内存映射结构链表,并为所述内存映射结构链表添加链表锁;
150.遍历所述内存映射结构链表确定所述待扫描预留内存的物理内存地址对应的内存映射结构;
151.根据所述内存映射结构确定所述待扫描预留内存的物理内存地址对应的虚拟地址,并将所述内存映射结构添加至所述缓存。
152.可选地,所述内存扫描模块304,进一步被配置为:
153.通过所述虚拟地址遍历查询对应的虚拟页表的访问位;
154.在查询成功的情况下,确定所述访问位的当前置位状态;
155.判断所述当前置位状态是否被置位,
156.若是,则清理所述访问位的当前置位状态,并确定所述待扫描预留内存的当前冷热状态为热状态;
157.若否,根据所述虚拟地址遍历查询对应的内核页表的访问位,并根据所述内存页表的访问位的当前置位状态确定所述待扫描预留内存的当前冷热状态。
158.可选地,所述内存扫描模块304,进一步被配置为:
159.通过所述虚拟地址遍历查询对应的内核页表的访问位,确定所述内核页表的访问位的当前置位状态;
160.判断所述当前置位状态是否被置位,
161.若是,则清理所述访问位的当前置位状态,并确定所述待扫描预留内存的当前冷热状态为热状态;
162.若否,则确定所述待扫描预留内存的当前冷热状态为冷状态。
163.可选地,所述内存状态记录模块306,进一步被配置为:
164.在所述目标热页记录表中的待扫描预留内存的当前冷热状态为热状态的情况下,确定所述待扫描预留内存的热状态对应的目标热页记录表,并将所述待扫描预留内存的热状态记录至所述目标热页记录表;
165.在所述目标热页记录表中的待扫描预留内存的当前冷热状态为冷状态的情况下,确定所述待扫描预留内存的冷状态对应的目标冷页记录表,删除所述目标热页记录表中的待扫描预留内存并将所述待扫描预留内存的冷状态记录至所述目标冷页记录表;或者
166.在所述目标冷页记录表中的待扫描预留内存的当前冷热状态为热状态的情况下,确定所述待扫描预留内存的热状态对应的目标热页记录表,删除所述目标冷页记录表中的待扫描预留内存并将所述待扫描预留内存的热状态记录至所述目标热页记录表;
167.在所述目标冷页记录表中的待扫描预留内存的当前冷热状态为冷状态的情况下,确定所述待扫描预留内存的冷状态对应的目标冷页记录表,并将所述待扫描预留内存的冷状态记录至所述目标冷页记录表。
168.可选地,所述内存状态记录模块306,进一步被配置为:
169.在确定所述待扫描预留内存的当前冷热状态为热状态的情况下,确定所述待扫描预留内存的热状态对应的目标热页记录表,并将所述待扫描预留内存的热状态记录至所述目标热页记录表;
170.在确定所述待扫描预留内存的当前冷热状态为冷状态的情况下,确定所述待扫描预留内存的冷状态对应的目标冷页记录表,并将所述待扫描预留内存的冷状态记录至所述目标冷页记录表。
171.可选地,所述装置,还包括:
172.预留内存新增模块,被配置为:
173.在确定存在新增预留内存、且所述待扫描预留内存扫描结束的情况下,将所述新增预留内存添加至所述预留内存扫描范围中。
174.可选地,所述装置,还包括:
175.预留内存释放模块,被配置为:
176.在确定所述预留内存扫描范围中的待扫描预留内存存在被释放的情况下,获取所述扫描范围锁,暂停所述预留内存扫描范围中的待扫描预留内存的扫描;
177.从所述预留内存扫描范围中删除被释放的待扫描预留内存,且删除所述被释放的待扫描预留内存对应的内存映射结构以及所述被释放的待扫描预留内存在所述目标记录表中的冷热状态。
178.可选地,所述内存状态记录模块306,进一步被配置为:
179.将所述待扫描预留内存的冷状态记录至所述目标冷页记录表的尾部;
180.相应地,所述将所述待扫描预留内存的热状态记录至所述目标热页记录表,包括:
181.将所述待扫描预留内存的热状态记录至所述目标热页记录表的尾部。
182.本说明书实施例提供的所述内存扫描装置通过周期性(预设时间间隔)的对宿主机内存中的预留内存进行冷热扫描,并将每次冷热扫描的预留内存的当前冷热状态记录至目标记录表中,使得后续可以根据该目标记录表对预留内存的冷热变化情况进行查询,并且可以根据该目标记录表中预留内存的冷热变化情况确定该预留内存冷热的老化情况。
183.上述为本实施例的一种内存扫描装置的示意性方案。需要说明的是,该内存扫描装置的技术方案与上述的内存扫描方法的技术方案属于同一构思,内存扫描装置的技术方案未详细描述的细节内容,均可以参见上述内存扫描方法的技术方案的描述。
184.图4示出了根据本说明书一个实施例提供的一种计算设备400的结构框图。该计算设备400的部件包括但不限于存储器410和处理器420。处理器420与存储器410通过总线430相连接,数据库450用于保存数据。
185.计算设备400还包括接入设备440,接入设备440使得计算设备400能够经由一个或多个网络460通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备440可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
186.在本说明书的一个实施例中,计算设备400的上述部件以及图4中未示出的其他部
件也可以彼此相连接,例如通过总线。应当理解,图4所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
187.计算设备400可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备400还可以是移动式或静止式的服务器。
188.其中,处理器420用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述内存扫描方法的步骤。
189.上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的内存扫描方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述内存扫描方法的技术方案的描述。
190.本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述内存扫描方法的步骤。
191.上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的内存扫描方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述内存扫描方法的技术方案的描述。
192.本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述内存扫描方法的步骤。
193.上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的内存扫描方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述内存扫描方法的技术方案的描述。
194.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
195.所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
196.需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块
并不一定都是本说明书实施例所必须的。
197.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
198.以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献