CN116700904B - 内存快照生成方法、装置、计算机设备及存储介质 - Google Patents
内存快照生成方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN116700904B CN116700904B CN202310989495.4A CN202310989495A CN116700904B CN 116700904 B CN116700904 B CN 116700904B CN 202310989495 A CN202310989495 A CN 202310989495A CN 116700904 B CN116700904 B CN 116700904B
- Authority
- CN
- China
- Prior art keywords
- memory
- page data
- size
- dirty page
- storage area
- 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.)
- Active
Links
- 230000015654 memory Effects 0.000 title claims abstract description 890
- 238000000034 method Methods 0.000 title claims abstract description 93
- 230000005012 migration Effects 0.000 claims description 21
- 238000013508 migration Methods 0.000 claims description 21
- 238000004891 communication Methods 0.000 claims description 20
- 230000008569 process Effects 0.000 abstract description 18
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 2
- 210000001503 joint Anatomy 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
- G06F3/0667—Virtualisation aspects at data level, e.g. file, record or object virtualisation
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及虚拟机技术领域,公开了内存快照生成方法、装置、计算机设备及存储介质,该方法包括:确定用于存储内存快照的固定存储区,固定存储区的大小不小于目标设备的内存所占存储空间大小;获取需要迁移至内存快照的当前内存脏页数据;以覆盖固定存储区中历史内存脏页数据的方式,将当前内存脏页数据迁移至固定存储区的相应位置;当前内存脏页数据和历史内存脏页数据源于目标设备的同一内存页。本发明所生成的内存快照大小是基于目标设备的内存所设置的,且大小固定,内存快照所占空间较小,不会出现内存快照远大于内存规格值的情况,且在后续也可快速基于该内存快照恢复虚拟机等目标设备的内存。
Description
技术领域
本发明涉及虚拟机技术领域,具体涉及内存快照生成方法、装置、计算机设备及存储介质。
背景技术
虚拟机(Virtual Machine,VM)在运行时会生成包括内存和CPU(中央处理器)等相关信息的内存脏页数据,内存快照技术是将虚拟机在运行时的内存脏页数据,全部保存在磁盘文件上,形成内存快照,该内存快照中可以包含虚拟机内存以及其他物理设备内存状态信息,其可用于恢复某时刻的运行状态,是一种容灾的有效措施。
在传统生成内存快照的过程中,随着虚拟机运行时产生内存脏页数据,新增加的内存脏页数据会追加到内存快照末尾。这种追加写的方式逻辑简单,但是在虚拟机业务压力大时,在生成内存快照期间,会不断产生内存脏页数据,新增加的数据会不断追加到内存快照末尾,导致内存快照所占空间较大,这样不仅可能会造成内存快照远大于虚拟机内存值的情况,还会影响后续从内存快照恢复虚拟机以及业务的过程。
发明内容
有鉴于此,本发明提供了一种内存快照生成方法、装置、计算机设备及存储介质,以解决内存快照所占空间较大的技术问题。
第一方面,本发明提供了一种内存快照生成方法,包括:
确定用于存储内存快照的固定存储区,所述固定存储区的大小不小于目标设备的内存所占存储空间大小;
获取需要迁移至所述内存快照的当前内存脏页数据;
以覆盖所述固定存储区中历史内存脏页数据的方式,将所述当前内存脏页数据迁移至所述固定存储区的相应位置;所述当前内存脏页数据和所述历史内存脏页数据源于所述目标设备的同一内存页。
本实施例提供的内存快照生成方法,为内存快照分配固定大小的固定存储区,使得内存快照的大小是固定的,且内存快照的大小足以存储目标设备的内存,从而能够为目标设备的每个内存页分配相应的固定位置,在需要存储当前内存脏页数据时,通过覆盖之前存储的历史内存脏页数据,即可实现对当前内存脏页数据的存储。该方法所生成的内存快照大小是基于目标设备的内存所设置的,且大小固定,内存快照所占空间较小,不会出现内存快照远大于内存规格值的情况;并且,由于内存快照大小固定,且所占空间小,在后续也可快速基于该内存快照恢复虚拟机等目标设备的内存。
在一种可选的实施方式中,所述目标设备的数量为多个,且多个所述目标设备包括虚拟机和至少一个物理设备;所述固定存储区的大小不小于多个所述目标设备的内存所占存储空间大小之和。
在一种可选的实施方式中,所述确定用于存储内存快照的固定存储区,包括:查询多个所述目标设备的内存大小;根据多个所述目标设备的内存大小,确定多个所述目标设备的内存所占存储空间大小之和;划分出大小不小于多个所述目标设备的内存所占存储空间大小之和的固定存储区。
目标设备的内存大小是固定的,且容易查询得到,基于目标设备的内存大小可以简单快速地确定目标设备的内存所占存储空间的大小,方便划分出所需的固定存储区。
在一种可选的实施方式中,所述查询多个所述目标设备的内存大小,包括:从所述内存快照的内存开始段中提取出多个所述目标设备的内存大小。从内存开始段中提取目标设备的内存大小,方便快捷。
在一种可选的实施方式中,所述根据多个所述目标设备的内存大小,确定多个所述目标设备的内存所占存储空间大小之和,包括:为每个所述目标设备的内存页增加页面偏移地址,确定多个所述目标设备的内存所占存储空间大小之和;其中,所述目标设备的内存所占存储空间大小,包括:所述目标设备的内存大小以及所述目标设备所有内存页的页面偏移地址的大小。在内存快照中,为目标设备的内存页增加页面偏移地址,可以区分不同内存页所对应的内存脏页数据。
在一种可选的实施方式中,多个所述目标设备的内存所占存储空间大小之和,满足:TotalRAM=(Total_ram_bytes / Page_size) × (Page_size + Page_offset);其中,TotalRAM表示多个所述目标设备的内存所占存储空间大小之和,Total_ram_bytes表示多个所述目标设备的内存大小之和,Page_size表示所述内存页的大小,Page_offset表示页面偏移地址的大小。这种计算方式不需要关注每个目标设备的内存独自的大小,可以方便快速地计算出多个目标设备的内存所占存储空间大小之和。
在一种可选的实施方式中,Page_size = 4096。将内存页的大小Page_size设为4096,可以符合主流设备,适用于主流设备。
在一种可选的实施方式中,所述内存快照还用于存储虚拟机开始段和虚拟机状态信息;所述固定存储区的大小不小于,虚拟机开始段大小、虚拟机状态信息大小以及多个目标设备的内存所占存储空间大小之和。
在一种可选的实施方式中,所述内存快照还用于存储虚拟化管理平台元数据,所述虚拟化管理平台用于对所述虚拟机进行虚拟化管理;所述固定存储区的大小不小于,虚拟化管理平台元数据大小、虚拟机开始段大小、虚拟机状态信息大小以及多个目标设备的内存所占存储空间大小之和。
在一种可选的实施方式中,所述获取需要迁移至所述内存快照的当前内存脏页数据,包括:建立进程间通信链路,将进程间通信链路的写文件描述符发送至所述虚拟机;基于所述虚拟化管理平台,从所述进程间通信链路的读文件描述符接收需要迁移至所述内存快照的当前内存脏页数据。基于进程间通信链路可以明确读端和写端,可以快速且准确地获取到需要迁移的当前内存脏页数据。
在一种可选的实施方式中,所述内存快照包括多个内存部分段,且所述内存部分段用于存储唯一目标设备的内存脏页数据。一个内存部分段用于存储唯一目标设备的内存脏页数据,有利于对内存脏页数据的管理。
在一种可选的实施方式中,所述将所述当前内存脏页数据迁移至所述固定存储区的相应位置,包括:确定所述当前内存脏页数据所属的设备类型,并确定目标内存部分段;所述目标内存部分段用于存储具有所述设备类型的目标设备的内存脏页数据;将所述当前内存脏页数据迁移至所述固定存储区中所述目标内存部分段的相应位置。基于当前内存脏页数据所属的设备类型,可以快速定位到内存快照中用于存储该当前内存脏页数据的位置,可以提高快照速度。
在一种可选的实施方式中,所述将所述当前内存脏页数据迁移至所述固定存储区中所述目标内存部分段的相应位置,包括:确定所述当前内存脏页数据的页面偏移地址;将所述当前内存脏页数据迁移至所述目标内存部分段的目标内存页中;所述目标内存页的页面偏移地址与所述当前内存脏页数据的页面偏移地址相一致。利用页面偏移地址可以准确确定当前内存脏页数据与内存部分段中内存页之间的对应关系,从而可以将当前内存脏页数据准确地存储至相应的内存页中。
在一种可选的实施方式中,所述内存部分段设有与所述目标设备一一对应的标识符,以方便确定该内存部分段用于存储哪一目标设备的内存脏页数据。
在一种可选的实施方式中,该方法还包括:按照所述目标设备的内存所占存储空间大小,或者所述目标设备在所述内存快照的内存开始段中的位置,对多个所述目标设备进行排序;按照多个所述目标设备的排列顺序,在所述固定存储区中为每个所述目标设备依次分配内存部分段。基于内存部分段在内存快照中的顺位,即可确定该内存部分段用于存储哪一目标设备的内存脏页数据;并且,无论是按照目标设备的内存所占存储空间大小进行排序,还是按照目标设备在内存快照的内存开始段中的位置进行排序,都不需要目标设备参与,所确定的排列顺序也是比较准确的。
在一种可选的实施方式中,所述固定存储区位于裸磁盘中。其中,内存快照大小是固定的,可以实现在裸磁盘中保存内存快照,能够实现与裸磁盘的对接。
在一种可选的实施方式中,所述将所述当前内存脏页数据迁移至所述固定存储区的相应位置,包括:在未迁移的剩余内存脏页数据的大小大于预设阈值的情况下,迭代迁移所述剩余内存脏页数据至所述固定存储区的相应位置;在未迁移的剩余内存脏页数据的大小小于预设阈值的情况下,一次性迁移所有所述剩余内存脏页数据至所述固定存储区的相应位置。
在一种可选的实施方式中,所述一次性迁移所有所述剩余内存脏页数据至所述固定存储区的相应位置,包括:暂停虚拟机,再一次性迁移所有所述剩余内存脏页数据至所述固定存储区的相应位置,之后恢复所述虚拟机。
第二方面,本发明提供了一种内存快照生成装置,包括:
存储区确定模块,用于确定用于存储内存快照的固定存储区,所述固定存储区的大小不小于目标设备的内存所占存储空间大小;
数据获取模块,用于获取需要迁移至所述内存快照的当前内存脏页数据;
迁移模块,用于以覆盖所述固定存储区中历史内存脏页数据的方式,将所述当前内存脏页数据迁移至所述固定存储区的相应位置;所述当前内存脏页数据和所述历史内存脏页数据源于所述目标设备的同一内存页。
第三方面,本发明提供了一种计算机设备,包括:存储器和处理器,存储器和处理器之间互相通信连接,存储器中存储有计算机指令,处理器通过执行计算机指令,从而执行上述第一方面或其对应的任一实施方式的内存快照生成方法。
第四方面,本发明提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机指令,计算机指令用于使计算机执行上述第一方面或其对应的任一实施方式的内存快照生成方法。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的内存快照生成方法的流程示意图;
图2是根据本发明实施例的另一内存快照生成方法的流程示意图;
图3是本发明实施例提供的内存快照的一种格式示意图;
图4是本发明实施例提供的内存快照中内存开始段的一种格式示意图;
图5是根据本发明实施例的内存快照生成方法中获取内存脏页数据的流程示意图;
图6是根据本发明实施例的又一内存快照生成方法的流程示意图;
图7是本发明实施例提供的内存快照的另一格式示意图;
图8是本发明实施例提供的内存快照中内存部分段的一种格式示意图;
图9是根据本发明实施例的再一内存快照生成方法的流程示意图;
图10是根据本发明实施例的再一内存快照生成方法的流程示意图;
图11是根据本发明实施例的内存快照生成装置的结构框图;
图12是本发明实施例的计算机设备的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
虚拟机技术可以通过软件模拟具有完整硬件系统功能,生成运行在一个完全隔离环境中的完整计算机系统,其可应用于多种场景。例如,在云计算场景中,通过虚拟化技术可以构建虚拟服务器,能够充分利用昂贵的硬件资源,并且还可以隔离硬件体系结构和软件系统之间的依赖关系,改进系统的安全性能,提高计算资源的利用率。虚拟服务器易于扩展和创建,可以根据客户需求按需分配所需的硬件基础设施,达到客户业务快速部署、减少客户业务上线的时间及节约客户成本的目的。
为保存虚拟机当前的运行状态,一般对虚拟机创建内存快照。当虚拟机的运行状态发生改变时,其相应内存页的数据会发生改变,需要迁移至内存快照,这些需要迁移至内存快照的内存页数据,称为内存脏页数据。若虚拟机业务压力大,则会一直生成内存脏页数据,导致内存快照所占空间较大,甚至导致内存快照远大于虚拟机内存。例如,虚拟机内存规格值为8G,在虚拟机业务压力较大时,生成的内存快照可能会远大于8G。
为避免内存快照所占空间较大,本发明实施例提供了一种内存快照生成方法,通过设置固定大小的内存快照,以使得内存快照所占空间不会过大。
根据本发明实施例,提供了一种内存快照生成方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中提供了一种内存快照生成方法,可用于计算机或服务器,例如云服务器等,图1是根据本发明实施例的内存快照生成方法的流程图,如图1所示,该流程包括如下步骤:
步骤S101,确定用于存储内存快照的固定存储区,该固定存储区的大小不小于目标设备的内存所占存储空间大小。
本实施例中,划分出用于存储内存快照的存储区,并且,该存储区的大小是固定的,为方便描述,将该固定大小的存储区称为“固定存储区”。例如,一般情况下,内存快照存储在硬盘中,故可以在硬盘中划分出一片固定大小的存储区作为该固定存储区,基于硬盘中的固定存储区存储内存快照。并且,该固定存储区也可以是位置固定的存储区,即存储内存快照的位置也是固定的。
其中,内存快照用于存储设备运行时的内存数据,故该固定存储区需要能够存储这些内存数据。为方便描述,将该设备称为“目标设备”,即内存快照用于存储目标设备的内存脏页数据。例如,该目标设备可以为虚拟机,该内存快照可以存储虚拟机的内存脏页数据。
为使得该固定存储区能够存储目标设备的所有内存脏页数据,该固定存储区的大小不能小于目标设备的内存所占存储空间大小。例如,该目标设备可以是虚拟机,该固定存储区的大小,不能小于虚拟机的内存所占存储空间大小。
可选地,本实施例中,目标设备的数量可以为多个,且多个目标设备包括虚拟机和至少一个物理设备;即,该内存快照除了能够存储虚拟机的内存脏页数据之外,还可存储其他物理设备的内存脏页数据。换句话说,该目标设备可以是虚拟机,也可以是其他的物理设备;例如,该物理设备可以是网卡、BIOS(Basic Input Output System,基本输入输出系统)设备、VGA(Video Graphics Array,视频图形阵列)设备等。相应地,内存快照用于存储这些目标设备的内存脏页数据,该固定存储区的大小不小于多个目标设备的内存所占存储空间大小之和;即,该固定存储区的大小,不能小于虚拟机的内存所占存储空间大小以及所有物理设备的内存所占存储空间大小之和。
步骤S102,获取需要迁移至内存快照的当前内存脏页数据。
步骤S103,以覆盖固定存储区中历史内存脏页数据的方式,将当前内存脏页数据迁移至固定存储区的相应位置;当前内存脏页数据和历史内存脏页数据源于目标设备的同一内存页。
本实施例中,在划分出固定存储区之后,即可将目标设备的内存脏页数据存储至该固定存储区中,形成内存快照。
目标设备在运行过程中,对于发生变化的内存数据,可以生成相应的内存脏页数据,这些内存脏页数据需要迁移至内存快照中。在获取到该内存脏页数据之后,即可将该内存脏页数据迁移并保存至固定存储区。
与传统追加写内存脏页数据的方式不同,本实施例中,由于内存快照的大小固定,且内存快照的大小足以保存目标设备的内存,故可以在内存快照中为目标设备的内存页划分出相应的存储空间,该存储空间用于存储由相应目标设备的内存页所生成的内存脏页数据。若内存快照中已存有目标设备的内存页所对应的内存脏页数据,在需要将该目标设备的内存页所对应的另一新的内存脏页数据存储至内存快照中时,本实施例以覆盖之前的内存脏页数据的方式,对新的内存脏页数据进行存储,将其存储至内存快照中预先分配好的固定位置。
为方便描述,本实施例中,将内存快照中已经存在的内存脏页数据称为“历史脏页数据”,将在当前时刻需要迁移至内存快照的内存脏页数据称为“当前内存脏页数据”,并且,当前内存脏页数据和历史内存脏页数据源于目标设备的同一内存页,即目标设备的某内存页先后生成了历史内存脏页数据和当前内存脏页数据。在需要将当前内存脏页数据存储至内存快照中时,以该当前内存脏页数据覆盖替换历史内存脏页数据的方式,将该当前内存脏页数据存储至之前存储该历史内存脏页数据的位置。
在目标设备的数量为多个的情况下,源于同一目标设备同一内存页的两个内存脏页数据作为当前内存脏页数据和历史内存脏页数据,同样以覆盖的方式实现对当前内存脏页数据的存储。
例如,在第一次迁移过程中,一般会将所有目标设备的所有内存页均标脏,即将所有目标设备的所有内存页所对应的内存脏页数据传输至内存快照中,内存快照中存有相应的内存脏页数据,即初始的历史内存脏页数据;在之后的迁移过程中,对于生成的新的内存脏页数据,即当前内存脏页数据,将该当前内存脏页数据替换掉之前的历史内存脏页数据,从而实现对内存脏页数据的存储。可以理解,对于存储至内存快照中的当前内存脏页数据,在之后时刻,该当前内存脏页数据也可能作为历史内存脏页数据而被覆盖。
本实施例提供的内存快照生成方法,为内存快照分配固定大小的固定存储区,使得内存快照的大小是固定的,且内存快照的大小足以存储目标设备的内存,从而能够为目标设备的每个内存页分配相应的固定位置,在需要存储当前内存脏页数据时,通过覆盖之前存储的历史内存脏页数据,即可实现对当前内存脏页数据的存储。该方法所生成的内存快照大小是基于目标设备的内存所设置的,且大小固定,内存快照所占空间较小,不会出现内存快照远大于内存规格值的情况;并且,由于内存快照大小固定,且所占空间小,在后续也可快速基于该内存快照恢复虚拟机等目标设备的内存。
在本实施例中提供了一种内存快照生成方法,可用于计算机或服务器,例如云服务器等,图2是根据本发明实施例的内存快照生成方法的流程图,如图2所示,该流程包括如下步骤:
步骤S201,确定用于存储内存快照的固定存储区,该固定存储区的大小不小于多个目标设备的内存所占存储空间大小之和。其中,多个目标设备包括虚拟机和至少一个物理设备。
其中,上述步骤S201“确定用于存储内存快照的固定存储区”具体可以包括以下步骤S2011至步骤S2013。
步骤S2011,查询多个目标设备的内存大小。
本实施例中,可以以查询的方式,确定虚拟机以及每个物理设备的内存大小。例如,可以分别查询虚拟机、物理设备的大小;或者,由于本实施例主要关注所有目标设备的内存之和,故也可以直接查询这些目标设备的内存大小之和。
在一些可选的实施方式中,上述步骤S2011“查询多个目标设备的内存大小”可以包括以下步骤A1。
步骤A1,从内存快照的内存开始段中提取出多个目标设备的内存大小。
本实施例中,内存快照中一般可以设有内存开始段,该内存开始段中保存有每个目标设备的内存大小;并且,该内存开始段也可以包含所有目标设备的内存大小之和,故从该内存开始段中也可以直接提取出多个目标设备的内存大小之和。从内存开始段中提取目标设备的内存大小,方便快捷。
内存快照的一种格式可参见图3所示,内存快照包含虚拟机开始段(startsection)、虚拟机状态信息(vmsd)以及用于存储内存脏页数据的部分段(part section)和结束段(end section)。其中,虚拟机开始段(start section)中包含内存开始段(RAMstart section),该内存开始段(RAM start section)中包含内存块元数据(RAM Blocksmetadata),该内存块元数据(RAM Blocks metadata)用于存储各个目标设备的内存大小。
具体地,图4示出了内存开始段(RAM start section)的一种格式示意图。参见图4所示,该内存开始段(RAM start section)包括多个字段:类型(type)、开始的段ID(section id)、设备标识长度(len)、设备标识(idstr)、事例ID(instance id)、版本ID(version id),这些字段的长度(Length)分别为:0x01、0x04、0x01、0x03、0x04、0x04,这些字段的值(Value)分别为:0x01、0x02、0x03、ram、0x00、0x04;并且,该内存开始段(RAMstart section)还包括:内存块元数据(RAM Blocks metadata)、页脚(footer)、结束的段ID(section id)。
其中,如图4所示,内存块元数据(RAM Blocks metadata)中包含多个目标设备的相关信息:设备标识长度(len)、设备标识(idstr)以及设备内存大小(used length)。图4示出了九个目标设备,包括虚拟机(pc.ram)、VGA设备(vga.ram)、高级电源管理设备(/rom@etc/acpi/tables)、BIOS设备(pc.bios)等。并且,该内存块元数据(RAM Blocks metadata)还包括所有目标设备的内存大小之和,即总长度(total length),还可以设置内存结束标识符(RAM SAVE FLAG EOS)。因此,从该内存块元数据(RAM Blocks metadata)中可以提取出每个目标设备的内存大小,以及所有目标设备的内存大小之和。
步骤S2012,根据多个目标设备的内存大小,确定多个目标设备的内存所占存储空间大小之和。
本实施例中,目标设备的内存大小,指的是该内存所能存储数据的长度;目标设备的内存所占存储空间大小,指的是在内存快照中存储目标设备的内存时,所需要的空间大小。为了能够在内存快照中存储目标设备的内存,一般需要比目标设备的内存更大的存储空间。
例如,目标设备一般包含多个内存页,而内存脏页数据对应相应的内存页;为能够区分目标设备中不同的内存页,使得可以将内存脏页数据存储至内存快照相应的固定位置,需要对内存快照中用于存储不同内存脏页数据的区域进行标识。
在一些可选的实施方式中,为能够区分目标设备中不同的内存页,需要为内存页设置相应的页面偏移地址,在这种情况下,上述步骤S2012“根据多个目标设备的内存大小,确定多个目标设备的内存所占存储空间大小之和”,具体可以包括:为每个目标设备的内存页增加页面偏移地址,确定多个目标设备的内存所占存储空间大小之和。其中,目标设备的内存所占存储空间大小,包括:目标设备的内存大小以及目标设备所有内存页的页面偏移地址的大小。
本实施例中,在内存快照中,为目标设备的内存页增加页面偏移地址,可以区分不同内存页所对应的内存脏页数据。相应地,目标设备的内存所占存储空间大小,需要包括:目标设备的内存大小以及目标设备所有内存页的页面偏移地址的大小,以使得所划分出的固定存储区能够存储内存脏页数据以及相应的页面偏移地址;在后续基于内存快照虚拟机进行恢复时,基于该页面偏移地址即可确定内存快照中内存脏页数据所对应的目标设备的内存页。
在一些可选的实施方式中,多个目标设备的内存所占存储空间大小之和,满足:
TotalRAM=(Total_ram_bytes / Page_size) × (Page_size + Page_offset);
其中,TotalRAM表示多个目标设备的内存所占存储空间大小之和,Total_ram_bytes表示多个目标设备的内存大小之和,Page_size表示内存页的大小,Page_offset表示页面偏移地址的大小。
本实施例中,在计算多个目标设备的内存所占存储空间大小之和时,不需要关注每个目标设备的内存所占存储空间大小。具体而言,可以确定多个目标设备的内存大小之和Total_ram_bytes;例如,参见图4所示,内存块元数据(RAM Blocks metadata)中的总长度(total length)即表示多个目标设备的内存大小之和,以图4为例,Total_ram_bytes =0x1004D2000。
并且,内存页的大小Page_size和页面偏移地址的大小Page_offset一般是固定的,且不同的目标设备,其内存页大小一般相同,且页面偏移地址的大小也相同,可以基于上式直接计算得到为所有目标设备的内存页增加页面偏移地址后的大小之和,即多个目标设备的内存所占存储空间大小之和TotalRAM。这种计算方式不需要关注每个目标设备的内存独自的大小,可以方便快速地计算出多个目标设备的内存所占存储空间大小之和。
其中,在一些可选的实施方式中,Page_size = 4096。由于内存页的大小主流为4096,将内存页的大小Page_size设为4096,可以符合主流设备。页面偏移地址的大小一般为8,故TotalRAM=(Total_ram_bytes / 4096) × (4096 + 8)。
步骤S2013,划分出大小不小于多个目标设备的内存所占存储空间大小之和的固定存储区。
本实施例中,在确定多个目标设备的内存所占存储空间大小之和TotalRAM后,即可划分出不小于多个目标设备的内存所占存储空间大小之和的存储区作为固定存储区,以该固定存储区存储内存快照,可以存储每个目标设备的内存脏页数据,以及内存脏页数据所对应的其他信息,例如页面偏移地址。由于目标设备的内存大小是固定的,且容易查询得到,基于目标设备的内存大小可以简单快速地确定目标设备的内存所占存储空间的大小,方便划分出所需的固定存储区。
在一些可选的实施方式中,内存快照还用于存储虚拟机开始段和虚拟机状态信息;相应地,固定存储区的大小不小于,虚拟机开始段大小、虚拟机状态信息大小以及多个目标设备的内存所占存储空间大小之和。
本实施例中,在内存快照还用于存储虚拟机开始段和虚拟机状态信息的情况下,为能够完整存储内存快照,该固定存储区的大小需要不小于,虚拟机开始段大小、虚拟机状态信息大小以及多个目标设备的内存所占存储空间大小之和。其中,虚拟机开始段包含虚拟机的一些配置信息,例如,虚拟机的设备类型等。
例如,该虚拟机可基于qemu(Quick EMUlator,快速仿真器)实现,即该虚拟机可以为qemu虚拟机。qemu是一个通用的、开源的硬件模拟器,可以模拟不同硬件架构(如x86、ARM、ARM64、MIPS、PowerPC等),是目前比较流行的跨平台仿真软件。如图3所示,需要存储至内存快照的虚拟机内存数据(qemu memory data)包括虚拟机开始段(start section)、虚拟机状态信息(vmsd)以及用于存储内存脏页数据的其他段(section),例如内存部分段(RAM part section)等。
如图3所示,该虚拟机开始段(start section)可以包括:魔数(Magic)、版本信息(Version)、配置段(Configuration section)以及上述的内存开始段(RAM startsection);配置段(Configuration section)可以包括类型(type)、机器类型长度(Machinetype len)、机器类型(Machine type)等字段。虚拟机状态信息(vmsd)可以包括:虚拟机状态段(VM state section)和虚拟机描述段(VM description section)等。其中,图3只是示出了内存快照的一种格式,也可采用其他的格式。例如,图3中部分信息是非必须的,如配置段(Configuration section)、虚拟机描述段(VM description section)等。
例如,以qemu_start_section表示虚拟机开始段大小,以qemu_vmsd表示虚拟机状态信息大小,以TotalRAM表示多个目标设备的内存所占存储空间大小之和,则固定存储区的大小不小于上述三者之和,即不小于qemu_start_section + qemu_vmsd +TotalRAM。
可选地,内存快照还用于存储虚拟化管理平台元数据,该虚拟化管理平台用于对虚拟机进行虚拟化管理;相应地,固定存储区的大小不小于,虚拟化管理平台元数据大小、虚拟机开始段大小、虚拟机状态信息大小以及多个目标设备的内存所占存储空间大小之和。
本实施例中,可以使用虚拟化管理平台对虚拟机进行虚拟化管理,相应地,内存快照中也需要包含该虚拟化管理平台的元数据。
例如,该虚拟化管理平台为libvirt,基于libvirt实现对虚拟机(例如,qemu虚拟机)的虚拟化管理。相应地,参见图3所示,内存快照还用于存储平台元数据,例如libvirt元数据(libvirt metadata)。
例如,以libvirt_metadata表示虚拟化管理平台元数据大小,以qemu_start_section表示虚拟机开始段大小,以qemu_vmsd表示虚拟机状态信息大小,以TotalRAM表示多个目标设备的内存所占存储空间大小之和,则固定存储区的大小不小于上述四者之和,即不小于libvirt_metadata + qemu_start_section + qemu_vmsd +TotalRAM。
步骤S202,获取需要迁移至内存快照的当前内存脏页数据。
其中,详细可以参见图1所示实施例的步骤S102,在此不再赘述。
此外可选地,本实施例中,在基于虚拟化管理平台对虚拟机进行管理的情况下,可以通过进程间通信链路获取到当前内存脏页数据。具体地,上述步骤S202“获取需要迁移至内存快照的当前内存脏页数据”可以包括以下步骤B1至步骤B2。
步骤B1,建立进程间通信链路,将进程间通信链路的写文件描述符发送至虚拟机。
步骤B2,基于虚拟化管理平台,从进程间通信链路的读文件描述符接收需要迁移至内存快照的当前内存脏页数据。
本实施例中,可以基于虚拟化管理平台建立进程间通信链路,该进程间通信链路例如可以是管道(pipe)、套接字(Socket)等,以实现进程间的通信;例如,基于libvirt创建一条管道(pipe),并将管道的写文件描述符(file descriptor,fd)发送至虚拟机;之后向虚拟机进程发送迁移指令,使得虚拟机迁移到上述管道的写文件描述符所对应的一端,这样即可开始执行保存内存快照的任务。具体地,虚拟机将内存脏页数据写入管道,基于虚拟化管理平台,从管道的读文件描述符接收需要写入至管道的内存脏页数据,从而可以接收到当前内存脏页数据。基于管道可以明确读端和写端,可以快速且准确地获取到需要迁移的当前内存脏页数据。
例如,可以通过pipe函数创建的两个文件描述符fd[0]和fd[1],分别构成管道的两端,两个文件描述符fd[0]、fd[1]指向管道的读端和写端,往fd[1]写入的数据可以从fd[0]读出。参见图5所示,在建立内存快照(snap file)之后,保存虚拟化管理平台libvirt的头信息(libvirt header,其为libvirt metadata的一部分),并基于监视器(monitor.sock)将管道的写文件描述符(pipefd[1])发送至虚拟机(qemu);虚拟机(qemu)向管道的写端迁移内存脏页数据(migrate memory data);之后,从管道的读文件描述符(pipefd[0])接收并分析数据(parse data),执行快照任务(snapshot),从而将相应的内存脏页数据存储至内存快照(snap file)中。
步骤S203,以覆盖固定存储区中历史内存脏页数据的方式,将当前内存脏页数据迁移至固定存储区的相应位置;当前内存脏页数据和历史内存脏页数据源于同一目标设备的同一内存页。
其中,详细可以参见图1所示实施例的步骤S103,在此不再赘述。
在本实施例中提供了一种内存快照生成方法,可用于计算机或服务器,例如云服务器等,图6是根据本发明实施例的内存快照生成方法的流程图,如图6所示,该流程包括如下步骤:
步骤S601,确定用于存储内存快照的固定存储区,该固定存储区的大小不小于多个目标设备的内存所占存储空间大小之和。其中,该多个目标设备包括虚拟机和至少一个物理设备。
其中,详细可以参见图1所示实施例的步骤S101,或者,图2所示实施例的步骤S201,在此不再赘述。
步骤S602,获取需要迁移至内存快照的当前内存脏页数据。
其中,详细可以参见图1所示实施例的步骤S102,或者,图2所示实施例的步骤S202,在此不再赘述。
步骤S603,以覆盖固定存储区中历史内存脏页数据的方式,将当前内存脏页数据迁移至固定存储区的相应位置;当前内存脏页数据和历史内存脏页数据源于同一目标设备的同一内存页。
如图3所示,内存快照一般包括多个内存部分段(RAM part section),该内存部分段(RAM part section)用于存储内存脏页数据,传统生成内存快照的方法,新增的内存脏页数据会追加到内存快照中,同一个内存部分段(RAM part section)可能会存储不同设备的内存脏页数据。在本实施例中,预先为目标设备的每个内存页分配内存快照的一页的文件空间,而一个内存部分段(RAM part section)包含多页的文件空间,故本实施例中可以将内存部分段(RAM part section)设置为只存储某个唯一目标设备的内存脏页数据,即内存部分段用于存储唯一目标设备的内存脏页数据。一个内存部分段(RAM part section)用于存储唯一目标设备的内存脏页数据,有利于对内存脏页数据的管理。
在一种可能的实现方式中,上述步骤S603“将当前内存脏页数据迁移至固定存储区的相应位置”,具体包括以下步骤S6031至步骤S6032。
步骤S6031,确定当前内存脏页数据所属的设备类型,并确定目标内存部分段;该目标内存部分段用于存储具有设备类型的目标设备的内存脏页数据。
本实施例中,在获取到当前内存脏页数据后,可以确定该当前内存脏页数据所属的设备类型,该设备类型可以表示该当前内存脏页数据来自于哪一目标设备,即可以确定该当前内存脏页数据是来自于虚拟机或其他物理设备。如上所述,内存快照中的内存部分段(RAM part section)用于存储特定目标设备的内存脏页数据,故基于当前内存脏页数据所属的设备类型,可以确定需要将该当前内存脏页数据存储至哪一内存部分段(RAM partsection),即哪一内存部分段(RAM part section)用于存储具有该设备类型的目标设备的内存脏页数据;为方便描述,将存储该当前内存脏页数据的内存部分段称为“目标内存部分段”。
例如,参见图7所示,内存快照的第一个内存部分段(RAM part section)用于存储虚拟机(pc.ram)的内存脏页数据,第二个内存部分段(RAM part section)用于存储VGA设备(vga.ram)的内存脏页数据。若当前内存脏页数据的设备类型为虚拟机,则可将第一个内存部分段(RAM part section)作为目标内存部分段。
步骤S6032,将当前内存脏页数据迁移至固定存储区中目标内存部分段的相应位置。
在确定目标内存部分段后,即可确定目标内存部分段中用于存储当前内存脏页数据的位置,并将该当前内存脏页数据存储至该位置。基于当前内存脏页数据所属的设备类型,可以快速定位到内存快照中用于存储该当前内存脏页数据的位置,可以提高快照速度。
此外,如图3和图7所示,内存快照中包含内存结束段(RAM end section),该内存结束段(RAM end section)与内存部分段(RAM part section)格式基本相同,只是段的类型(type)不同;如图7所示,内存部分段(RAM part section)的类型(type)为0x02,内存结束段(RAM end section)的类型(type)为0x03。因此,该内存结束段(RAM end section)也可用于存储内存脏页数据。例如,为每个目标设备均分配一个内存部分段(RAM partsection)和内存结束段(RAM end section),以存储相应目标设备的内存脏页数据。在这种情况下,还需要确定目标内存结束段,该目标内存结束段用于存储具有设备类型的目标设备的内存脏页数据;并且,上述步骤S6032具体可以包括:将当前内存脏页数据迁移至固定存储区中目标内存部分段或目标内存结束段的相应位置。
在一些可选的实施方式中,上述步骤S6032“将当前内存脏页数据迁移至固定存储区中目标内存部分段的相应位置”具体可以包括以下步骤C1和步骤C2。
步骤C1,确定当前内存脏页数据的页面偏移地址。
步骤C2,将当前内存脏页数据迁移至目标内存部分段的目标内存页中;目标内存页的页面偏移地址与当前内存脏页数据的页面偏移地址相一致。
内存脏页数据是以内存页为单位生成的,该内存页的页面偏移地址,即可为相应内存脏页数据的页面偏移地址;并且,本实施例中的内存快照为目标设备的每个内存页分配有固定的位置,且同样以页面偏移地址区分不同的内存页,因此,在需要将当前内存脏页数据存储至内存快照中时,可以基于当前内存脏页数据的页面偏移地址确定需要将其存储至目标内存部分段的哪一内存页,即目标内存部分段的哪一内存页的页面偏移地址与该当前内存脏页数据的页面偏移地址相一致;为方便描述,将目标内存部分段中与当前内存脏页数据的页面偏移地址相一致的内存页称为“目标内存页”,且该当前内存脏页数据需要被存储至该目标内存页中。
例如,图8示出了内存部分段(RAM part section)的一种格式示意图。参见图8所示,该内存部分段(RAM part section)包含多个内存页,每个内存页均具有页头(pageheader)和主页(host page)。如图8所示,页头(page header)可以包含:页面偏移地址(page offset)、设备标识的长度(len)以及设备标识(idstr);主页(host page)用于存储相应的内存脏页数据。其中,该内存部分段(RAM part section)用于存储虚拟机(pc.ram)的内存脏页数据,故设备标识(idstr)的值(Value)为pc.ram;该内存部分段(RAM partsection)中的每个内存页,分别用于存储虚拟机相应内存页所生成的内存脏页数据。
例如,若当前内存脏页数据的设备类型为虚拟机(pc.ram),其页面偏移地址为0x0,则可将该当前内存脏页数据存储至图8所示内存部分段(RAM part section)的第一个主页(host page)中;若当前内存脏页数据的设备类型为虚拟机(pc.ram),其页面偏移地址为0x1,则可将该当前内存脏页数据存储至图8所示内存部分段(RAM part section)的第二个主页(host page)中,以此类推。
本实施例中,利用页面偏移地址可以准确确定当前内存脏页数据与内存部分段(RAM part section)中内存页之间的对应关系,从而可以将当前内存脏页数据准确地存储至相应的内存页中。
可选地,内存部分段(RAM part section)设有与目标设备一一对应的标识符,以方便确定该内存部分段(RAM part section)用于存储哪一目标设备的内存脏页数据。例如,参见图8所示,每个内存部分段(RAM part section)设有内存结束标识符(RAM SAVEFLAG EOS),可以将该内存结束标识符作为用于区分不同目标设备的标识符。
可以理解,在内存部分段(RAM part section)用于存储唯一目标设备的内存脏页数据的情况下,同一内存部分段(RAM part section)中所有内存页所对应的设备标识(idstr)是相同的,故在内存页的页头(page header)中可以只包含页面偏移地址(pageoffset),不需要设置设备标识的长度(len)以及设备标识(idstr),从而可以节省内存快照所占空间。
在一些可选的实施方式中,在内存部分段(RAM part section)用于存储唯一目标设备的内存脏页数据的情况下,该方法还可以包括以下步骤D1至步骤D2。
步骤D1,按照目标设备的内存所占存储空间大小,或者目标设备在内存快照的内存开始段中的位置,对多个目标设备进行排序。
步骤D2,按照多个目标设备的排列顺序,在固定存储区中为每个目标设备依次分配内存部分段。
本发明实施例中,按照一定的排列顺序,在固定存储区中为每个目标设备依次分配内存部分段(RAM part section),可以基于内存部分段(RAM part section)在内存快照中的顺位,即可确定该内存部分段(RAM part section)用于存储哪一目标设备的内存脏页数据。并且,无论是按照目标设备的内存所占存储空间大小进行排序,还是按照目标设备在内存快照的内存开始段(RAM start section)中的位置进行排序,都不需要目标设备参与,且所确定的排列顺序也是准确的。
例如,目标设备在内存开始段(RAM start section)中的位置可参见图4所示,其顺序依次为虚拟机(pc.ram)、VGA设备(vga.ram)、高级电源管理设备(/rom@etc/acpi/tables)、BIOS设备(pc.bios)等,故如图7所示,内存快照中的第一个内存部分段(RAM partsection)用于存储虚拟机(pc.ram)的内存脏页数据,第二个内存部分段(RAM partsection)用于存储VGA设备(vga.ram)的内存脏页数据,以此类推。在分配内存部分段(RAMpart section)之后,即可执行上述步骤S602以及步骤S603等。
在本实施例中提供了一种内存快照生成方法,可用于计算机或服务器,例如云服务器等,图9是根据本发明实施例的内存快照生成方法的流程图,如图9所示,该流程包括如下步骤:
步骤S901,确定用于存储内存快照的固定存储区,该固定存储区的大小不小于多个目标设备的内存所占存储空间大小之和。其中,该多个目标设备包括虚拟机和至少一个物理设备。
其中,详细可以参见图1所示实施例的步骤S101等,在此不再赘述。
步骤S902,获取需要迁移至内存快照的当前内存脏页数据。
步骤S903,以覆盖固定存储区中历史内存脏页数据的方式,将当前内存脏页数据迁移至固定存储区的相应位置;当前内存脏页数据和历史内存脏页数据源于同一目标设备的同一内存页。
具体地,上述步骤S903“将当前内存脏页数据迁移至固定存储区的相应位置”的过程,可以包括步骤S9031至步骤S9033。
步骤S9031,判断未迁移的剩余内存脏页数据的大小是否大于预设阈值。
本实施例中,在将目标设备的内存脏页数据迁移至内存快照的过程中,随着目标设备的运行,其仍然可能生成新的内存脏页数据;并且,也很难瞬间将所有的内存脏页数据均迁移至内存快照。因此,在将当前内存脏页数据迁移至内存快照的过程中,除该当前内存脏页数据之外,还存在其他需要迁移、但还未被发送至内存快照侧的内存脏页数据,本实施例将其称为“剩余内存脏页数据”。通过统计所有剩余内存脏页数据的大小,以确定是否适合一次性迁移所有的剩余内存脏页数据。
步骤S9032,在未迁移的剩余内存脏页数据的大小大于预设阈值的情况下,迭代迁移剩余内存脏页数据至固定存储区的相应位置。
步骤S9033,在未迁移的剩余内存脏页数据的大小小于预设阈值的情况下,一次性迁移所有剩余内存脏页数据至固定存储区的相应位置。
本实施例中,预先设置用于表示可以一次性迁移的阈值,即预设阈值,通过判断未迁移的剩余内存脏页数据的大小是否大于预设阈值,以确定是否可以一次性迁移。具体地,如上述步骤S9032和步骤S9033所示,若未迁移的剩余内存脏页数据的大小大于预设阈值,则说明当前剩余的内存脏页数据还较多,不适宜一次性迁移,故采用迭代迁移的方式,将剩余内存脏页数据存储至固定存储区的相应位置。可以理解,在迁移剩余内存脏页数据时,将获取到的剩余内存脏页数据作为当前内存脏页数据,对其执行存储处理,此处不做赘述。若未迁移的剩余内存脏页数据的大小小于预设阈值,则说明当前剩余的内存脏页数据已经较少,可以进行一次性迁移。
例如,上述步骤S9033“一次性迁移所有剩余内存脏页数据至固定存储区的相应位置”的过程,具体可以包括:暂停虚拟机,再一次性迁移所有剩余内存脏页数据至固定存储区的相应位置,之后恢复虚拟机。
本实施例中,在确定可以一次性迁移之后,首先暂停虚拟机,再一次性迁移所有剩余内存脏页数据,从而可以避免在一次性迁移过程中虚拟机产生新的内存脏页数据。在一次性迁移结束后,即可恢复虚拟机正常运行。
可以理解,若未迁移的剩余内存脏页数据的大小等于预设阈值,则可以按照上述步骤S9032进行迭代迁移,也可以按照上述步骤S9033进行一次性迁移,本实施例对此不做限定。
在本实施例中提供了一种内存快照生成方法,可用于计算机或服务器,例如云服务器等,图10是根据本发明实施例的内存快照生成方法的流程图,如图10所示,该流程包括如下步骤:
步骤S1001,从内存快照的内存开始段中提取出多个目标设备的内存大小之和。
其中,详细可以参见上述关于步骤A1的相关描述,在此不再赘述。
步骤S1002,根据多个目标设备的内存大小之和,确定多个目标设备的内存所占存储空间大小之和。
例如,以TotalRAM表示多个目标设备的内存所占存储空间大小之和,以Total_ram_bytes表示多个目标设备的内存大小之和,本实施例中,TotalRAM=(Total_ram_bytes /4096) × (4096 + 8)。
步骤S1003,确定用于存储内存快照的固定存储区的大小,划分出该固定存储区,并为每个目标设备的内存页分配相应的存储空间。
本实施例中,基于libvirt + qemu生成固定大小的内存快照,该固定存储区的大小即为内存快照的大小。
例如,以libvirt_metadata表示虚拟化管理平台libvirt元数据大小,以qemu_start_section表示虚拟机开始段大小,以qemu_vmsd表示虚拟机状态信息大小,以TotalRAM表示多个目标设备的内存所占存储空间大小之和,则内存快照的大小不小于上述四者之和,即不小于libvirt_metadata + qemu_start_section + qemu_vmsd +TotalRAM。
在一些可选的实施方式中,固定存储区可以位于裸磁盘中,即将内存快照存储至裸磁盘中,该裸磁盘例如可以是裸LUN。其中,裸磁盘没有部署文件系统,不支持动态扩展文件大小;而若将内存快照存储于裸磁盘中,需要在生成内存快照时指定划定裸磁盘的具体大小,传统生成的内存快照由于大小不固定,故无法支持将内存快照保存在裸磁盘中。而在本实施例中,内存快照大小是固定的,可以实现在裸磁盘中保存内存快照。
步骤S1004,建立管道,将管道的写文件描述符发送至虚拟机。
步骤S1005,基于虚拟化管理平台,从管道的读文件描述符接收需要迁移至内存快照的当前内存脏页数据。
步骤S1006,根据当前内存脏页数据所属的设备类型以及页面偏移地址,将该当前内存脏页数据存储至相应内存部分段的内存页中。
步骤S1007,在未迁移的剩余内存脏页数据的大小小于预设阈值的情况下,暂停虚拟机,再一次性迁移所有剩余内存脏页数据至固定存储区的相应位置,之后恢复虚拟机。
本实施例提供的内存快照生成方法,对生成内存快照的过程进行了优化,实现了内存快照的大小固定,且可以实现裸磁盘对内存快照的支持。在优化后,为每个目标设备的内存页都分配一块固定大小文件空间,根据内存脏页数据所属的目标设备以及页面偏移地址,将内存脏页数据填充到内存快照固定的位置;若后续有新的内存脏页数据,直接覆盖之前的数据,而不是追加到快照文件末尾,从而可以将内存快照大小固定,在节省存储空间的同时,还可以实现与裸磁盘的对接,而且可以在后续恢复内存快照时,能够加快虚拟机恢复运行。
在本实施例中还提供了一种内存快照生成装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本实施例提供一种内存快照生成装置,如图11所示,包括:
存储区确定模块1101,用于确定用于存储内存快照的固定存储区,所述固定存储区的大小不小于目标设备的内存所占存储空间大小;
数据获取模块1102,用于获取需要迁移至所述内存快照的当前内存脏页数据;
迁移模块1103,用于以覆盖所述固定存储区中历史内存脏页数据的方式,将所述当前内存脏页数据迁移至所述固定存储区的相应位置;所述当前内存脏页数据和所述历史内存脏页数据源于所述目标设备的同一内存页。
在一些可选的实施方式中,所述目标设备的数量为多个,且多个所述目标设备包括虚拟机和至少一个物理设备;所述固定存储区的大小不小于多个所述目标设备的内存所占存储空间大小之和。
在一些可选的实施方式中,所述存储区确定模块1101确定用于存储内存快照的固定存储区,包括:
查询多个所述目标设备的内存大小;
根据多个所述目标设备的内存大小,确定多个所述目标设备的内存所占存储空间大小之和;
划分出大小不小于多个所述目标设备的内存所占存储空间大小之和的固定存储区。
在一些可选的实施方式中,所述存储区确定模块1101查询多个所述目标设备的内存大小,包括:
从所述内存快照的内存开始段中提取出多个所述目标设备的内存大小。
在一些可选的实施方式中,所述存储区确定模块1101根据多个所述目标设备的内存大小,确定多个所述目标设备的内存所占存储空间大小之和,包括:
为每个所述目标设备的内存页增加页面偏移地址,确定多个所述目标设备的内存所占存储空间大小之和;其中,所述目标设备的内存所占存储空间大小,包括:所述目标设备的内存大小以及所述目标设备所有内存页的页面偏移地址的大小。
在一些可选的实施方式中,多个所述目标设备的内存所占存储空间大小之和,满足:
TotalRAM=(Total_ram_bytes / Page_size) × (Page_size + Page_offset);
其中,TotalRAM表示多个所述目标设备的内存所占存储空间大小之和,Total_ram_bytes表示多个所述目标设备的内存大小之和,Page_size表示所述内存页的大小,Page_offset表示页面偏移地址的大小。
在一些可选的实施方式中,Page_size = 4096。
在一些可选的实施方式中,所述内存快照还用于存储虚拟机开始段和虚拟机状态信息;所述固定存储区的大小不小于,虚拟机开始段大小、虚拟机状态信息大小以及多个目标设备的内存所占存储空间大小之和。
在一些可选的实施方式中,所述内存快照还用于存储虚拟化管理平台元数据,所述虚拟化管理平台用于对所述虚拟机进行虚拟化管理;所述固定存储区的大小不小于,虚拟化管理平台元数据大小、虚拟机开始段大小、虚拟机状态信息大小以及多个目标设备的内存所占存储空间大小之和。
在一些可选的实施方式中,所述数据获取模块1102具体用于:
建立进程间通信链路,将进程间通信链路的写文件描述符发送至所述虚拟机;
基于所述虚拟化管理平台,从所述进程间通信链路的读文件描述符接收需要迁移至所述内存快照的当前内存脏页数据。
在一些可选的实施方式中,所述内存快照包括多个内存部分段,且所述内存部分段用于存储唯一目标设备的内存脏页数据。
在一些可选的实施方式中,所述迁移模块1103将所述当前内存脏页数据迁移至所述固定存储区的相应位置,包括:
确定所述当前内存脏页数据所属的设备类型,并确定目标内存部分段;所述目标内存部分段用于存储具有所述设备类型的目标设备的内存脏页数据;
将所述当前内存脏页数据迁移至所述固定存储区中所述目标内存部分段的相应位置。
在一些可选的实施方式中,所述迁移模块1103将所述当前内存脏页数据迁移至所述固定存储区中所述目标内存部分段的相应位置,包括:
确定所述当前内存脏页数据的页面偏移地址;
将所述当前内存脏页数据迁移至所述目标内存部分段的目标内存页中;所述目标内存页的页面偏移地址与所述当前内存脏页数据的页面偏移地址相一致。
在一些可选的实施方式中,所述内存部分段设有与所述目标设备一一对应的标识符。
在一些可选的实施方式中,该装置还包括划分模块;所述划分模块用于:按照所述目标设备的内存所占存储空间大小,或者所述目标设备在所述内存快照的内存开始段中的位置,对多个所述目标设备进行排序;按照多个所述目标设备的排列顺序,在所述固定存储区中为每个所述目标设备依次分配内存部分段。
在一些可选的实施方式中,所述固定存储区位于裸磁盘中。
在一些可选的实施方式中,所述迁移模块1103将所述当前内存脏页数据迁移至所述固定存储区的相应位置,包括:
在未迁移的剩余内存脏页数据的大小大于预设阈值的情况下,迭代迁移所述剩余内存脏页数据至所述固定存储区的相应位置;
在未迁移的剩余内存脏页数据的大小小于预设阈值的情况下,一次性迁移所有所述剩余内存脏页数据至所述固定存储区的相应位置。
在一些可选的实施方式中,所述迁移模块1103一次性迁移所有所述剩余内存脏页数据至所述固定存储区的相应位置,包括:
暂停所述虚拟机,再一次性迁移所有所述剩余内存脏页数据至所述固定存储区的相应位置,之后恢复所述虚拟机。
上述各个模块和单元的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
本实施例中的内存快照生成装置是以功能单元的形式来呈现,这里的单元是指ASIC(Application Specific Integrated Circuit,专用集成电路)电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
本发明实施例还提供一种计算机设备,具有上述图11所示的内存快照生成装置。
请参阅图12,图12是本发明可选实施例提供的一种计算机设备的结构示意图,如图12所示,该计算机设备包括:一个或多个处理器10、存储器20,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相通信连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在计算机设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在一些可选的实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个计算机设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图12中以一个处理器10为例。
处理器10可以是中央处理器,网络处理器或其组合。其中,处理器10还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路,可编程逻辑器件或其组合。上述可编程逻辑器件可以是复杂可编程逻辑器件,现场可编程逻辑门阵列,通用阵列逻辑或其任意组合。
其中,所述存储器20存储有可由至少一个处理器10执行的指令,以使所述至少一个处理器10执行实现上述实施例示出的方法。
存储器20可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器20可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些可选的实施方式中,存储器20可选包括相对于处理器10远程设置的存储器,这些远程存储器可以通过网络连接至该计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
存储器20可以包括易失性存储器,例如,随机存取存储器;存储器也可以包括非易失性存储器,例如,快闪存储器,硬盘或固态硬盘;存储器20还可以包括上述种类的存储器的组合。
该计算机设备还包括通信接口30,用于该计算机设备与其他设备或通信网络通信。
本发明实施例还提供了一种计算机可读存储介质,上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可记录在存储介质,或者被实现通过网络下载的原始存储在远程存储介质或非暂时机器可读存储介质中并将被存储在本地存储介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件的存储介质上的这样的软件处理。其中,存储介质可为磁碟、光盘、只读存储记忆体、随机存储记忆体、快闪存储器、硬盘或固态硬盘等;进一步地,存储介质还可以包括上述种类的存储器的组合。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件,当软件或计算机代码被计算机、处理器或硬件访问且执行时,实现上述实施例示出的方法。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (19)
1.一种内存快照生成方法,其特征在于,所述方法包括:
确定用于存储内存快照的固定存储区,所述固定存储区的大小不小于目标设备的内存所占存储空间大小;所述目标设备的数量为多个,且多个所述目标设备包括虚拟机和至少一个物理设备;所述固定存储区的大小不小于多个所述目标设备的内存所占存储空间大小之和;
获取需要迁移至所述内存快照的当前内存脏页数据;
以覆盖所述固定存储区中历史内存脏页数据的方式,将所述当前内存脏页数据迁移至所述固定存储区的相应位置;所述当前内存脏页数据和所述历史内存脏页数据源于所述目标设备的同一内存页;
其中,所述确定用于存储内存快照的固定存储区,包括:
查询多个所述目标设备的内存大小;
根据多个所述目标设备的内存大小,确定多个所述目标设备的内存所占存储空间大小之和;
并且,所述根据多个所述目标设备的内存大小,确定多个所述目标设备的内存所占存储空间大小之和,包括:
为每个所述目标设备的内存页增加页面偏移地址,确定多个所述目标设备的内存所占存储空间大小之和;
其中,所述目标设备的内存所占存储空间大小,包括:所述目标设备的内存大小以及所述目标设备所有内存页的页面偏移地址的大小。
2.根据权利要求1所述的方法,其特征在于,所述确定用于存储内存快照的固定存储区,还包括:
划分出大小不小于多个所述目标设备的内存所占存储空间大小之和的固定存储区。
3.根据权利要求1所述的方法,其特征在于,所述查询多个所述目标设备的内存大小,包括:
从所述内存快照的内存开始段中提取出多个所述目标设备的内存大小。
4.根据权利要求1所述的方法,其特征在于,多个所述目标设备的内存所占存储空间大小之和,满足:
TotalRAM =(Total_ram_bytes / Page_size) × (Page_size + Page_offset);
其中,TotalRAM表示多个所述目标设备的内存所占存储空间大小之和,Total_ram_bytes表示多个所述目标设备的内存大小之和,Page_size表示所述内存页的大小,Page_offset表示页面偏移地址的大小。
5.根据权利要求4所述的方法,其特征在于,Page_size = 4096。
6.根据权利要求1所述的方法,其特征在于,所述内存快照还用于存储虚拟机开始段和虚拟机状态信息;
所述固定存储区的大小不小于,虚拟机开始段大小、虚拟机状态信息大小以及多个目标设备的内存所占存储空间大小之和。
7.根据权利要求6所述的方法,其特征在于,所述内存快照还用于存储虚拟化管理平台元数据,所述虚拟化管理平台用于对所述虚拟机进行虚拟化管理;
所述固定存储区的大小不小于,虚拟化管理平台元数据大小、虚拟机开始段大小、虚拟机状态信息大小以及多个目标设备的内存所占存储空间大小之和。
8.根据权利要求7所述的方法,其特征在于,所述获取需要迁移至所述内存快照的当前内存脏页数据,包括:
建立进程间通信链路,将进程间通信链路的写文件描述符发送至所述虚拟机;
基于所述虚拟化管理平台,从所述进程间通信链路的读文件描述符接收需要迁移至所述内存快照的当前内存脏页数据。
9.根据权利要求1所述的方法,其特征在于,所述内存快照包括多个内存部分段,且所述内存部分段用于存储唯一目标设备的内存脏页数据。
10.根据权利要求9所述的方法,其特征在于,所述将所述当前内存脏页数据迁移至所述固定存储区的相应位置,包括:
确定所述当前内存脏页数据所属的设备类型,并确定目标内存部分段;所述目标内存部分段用于存储具有所述设备类型的目标设备的内存脏页数据;
将所述当前内存脏页数据迁移至所述固定存储区中所述目标内存部分段的相应位置。
11.根据权利要求10所述的方法,其特征在于,所述将所述当前内存脏页数据迁移至所述固定存储区中所述目标内存部分段的相应位置,包括:
确定所述当前内存脏页数据的页面偏移地址;
将所述当前内存脏页数据迁移至所述目标内存部分段的目标内存页中;所述目标内存页的页面偏移地址与所述当前内存脏页数据的页面偏移地址相一致。
12.根据权利要求9所述的方法,其特征在于,所述内存部分段设有与所述目标设备一一对应的标识符。
13.根据权利要求9所述的方法,其特征在于,还包括:
按照所述目标设备的内存所占存储空间大小,或者所述目标设备在所述内存快照的内存开始段中的位置,对多个所述目标设备进行排序;
按照多个所述目标设备的排列顺序,在所述固定存储区中为每个所述目标设备依次分配内存部分段。
14.根据权利要求1所述的方法,其特征在于,所述固定存储区位于裸磁盘中。
15.根据权利要求1所述的方法,其特征在于,所述将所述当前内存脏页数据迁移至所述固定存储区的相应位置,包括:
在未迁移的剩余内存脏页数据的大小大于预设阈值的情况下,迭代迁移所述剩余内存脏页数据至所述固定存储区的相应位置;
在未迁移的剩余内存脏页数据的大小小于预设阈值的情况下,一次性迁移所有所述剩余内存脏页数据至所述固定存储区的相应位置。
16.根据权利要求15所述的方法,其特征在于,所述一次性迁移所有所述剩余内存脏页数据至所述固定存储区的相应位置,包括:
暂停虚拟机,再一次性迁移所有所述剩余内存脏页数据至所述固定存储区的相应位置,之后恢复所述虚拟机。
17.一种内存快照生成装置,其特征在于,所述装置包括:
存储区确定模块,用于确定用于存储内存快照的固定存储区,所述固定存储区的大小不小于目标设备的内存所占存储空间大小;所述目标设备的数量为多个,且多个所述目标设备包括虚拟机和至少一个物理设备;所述固定存储区的大小不小于多个所述目标设备的内存所占存储空间大小之和;
数据获取模块,用于获取需要迁移至所述内存快照的当前内存脏页数据;
迁移模块,用于以覆盖所述固定存储区中历史内存脏页数据的方式,将所述当前内存脏页数据迁移至所述固定存储区的相应位置;所述当前内存脏页数据和所述历史内存脏页数据源于所述目标设备的同一内存页;
其中,所述存储区确定模块确定用于存储内存快照的固定存储区,包括:
查询多个所述目标设备的内存大小;
根据多个所述目标设备的内存大小,确定多个所述目标设备的内存所占存储空间大小之和;
并且,所述存储区确定模块根据多个所述目标设备的内存大小,确定多个所述目标设备的内存所占存储空间大小之和,包括:
为每个所述目标设备的内存页增加页面偏移地址,确定多个所述目标设备的内存所占存储空间大小之和;其中,所述目标设备的内存所占存储空间大小,包括:所述目标设备的内存大小以及所述目标设备所有内存页的页面偏移地址的大小。
18.一种计算机设备,其特征在于,包括:
存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行权利要求1至16中任一项所述的内存快照生成方法。
19.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机指令,所述计算机指令用于使计算机执行权利要求1至16中任一项所述的内存快照生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310989495.4A CN116700904B (zh) | 2023-08-08 | 2023-08-08 | 内存快照生成方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310989495.4A CN116700904B (zh) | 2023-08-08 | 2023-08-08 | 内存快照生成方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116700904A CN116700904A (zh) | 2023-09-05 |
CN116700904B true CN116700904B (zh) | 2023-11-03 |
Family
ID=87834303
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310989495.4A Active CN116700904B (zh) | 2023-08-08 | 2023-08-08 | 内存快照生成方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116700904B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593259A (zh) * | 2013-10-16 | 2014-02-19 | 北京航空航天大学 | 虚拟集群内存快照方法和装置 |
CN109189546A (zh) * | 2018-07-11 | 2019-01-11 | 新华三云计算技术有限公司 | 一种虚拟机在线快照的制作方法及装置 |
CN110955560A (zh) * | 2019-11-15 | 2020-04-03 | 北京浪潮数据技术有限公司 | 一种虚拟机快照的生成方法、系统、电子设备及存储介质 |
CN111240890A (zh) * | 2018-11-29 | 2020-06-05 | 阿里巴巴集团控股有限公司 | 数据处理方法、快照处理方法、装置及计算设备 |
CN114138424A (zh) * | 2022-02-07 | 2022-03-04 | 苏州浪潮智能科技有限公司 | 一种虚拟机内存快照生成方法、装置及电子设备 |
WO2022143717A1 (zh) * | 2020-12-29 | 2022-07-07 | 华为云计算技术有限公司 | 一种虚拟机迁移方法、装置及系统 |
CN114860380A (zh) * | 2022-05-05 | 2022-08-05 | 北京天融信网络安全技术有限公司 | 数据同步的方法、装置、电子设备及计算机可读存储介质 |
-
2023
- 2023-08-08 CN CN202310989495.4A patent/CN116700904B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593259A (zh) * | 2013-10-16 | 2014-02-19 | 北京航空航天大学 | 虚拟集群内存快照方法和装置 |
CN109189546A (zh) * | 2018-07-11 | 2019-01-11 | 新华三云计算技术有限公司 | 一种虚拟机在线快照的制作方法及装置 |
CN111240890A (zh) * | 2018-11-29 | 2020-06-05 | 阿里巴巴集团控股有限公司 | 数据处理方法、快照处理方法、装置及计算设备 |
CN110955560A (zh) * | 2019-11-15 | 2020-04-03 | 北京浪潮数据技术有限公司 | 一种虚拟机快照的生成方法、系统、电子设备及存储介质 |
WO2022143717A1 (zh) * | 2020-12-29 | 2022-07-07 | 华为云计算技术有限公司 | 一种虚拟机迁移方法、装置及系统 |
CN114138424A (zh) * | 2022-02-07 | 2022-03-04 | 苏州浪潮智能科技有限公司 | 一种虚拟机内存快照生成方法、装置及电子设备 |
CN114860380A (zh) * | 2022-05-05 | 2022-08-05 | 北京天融信网络安全技术有限公司 | 数据同步的方法、装置、电子设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116700904A (zh) | 2023-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10599457B2 (en) | Importing and exporting virtual disk images | |
US8751768B2 (en) | Data storage reclamation systems and methods | |
CN105049486A (zh) | 静态文件的版本管理、文件拉取控制方法、装置及系统 | |
CN107544864B (zh) | 一种虚拟机数据拷贝方法及虚拟机数据拷贝系统 | |
CN104182257B (zh) | 应用软件的安装方法和应用软件的安装装置 | |
CN102402446A (zh) | 应用软件的安装方法和应用软件的安装装置 | |
CN102799464A (zh) | 虚拟机创建方法及系统、虚拟机重装方法及系统 | |
CN104731569A (zh) | 一种数据处理方法及相关设备 | |
CN112000277B (zh) | 精简置备文件拷贝方法、装置、设备及可读存储介质 | |
EP3432132B1 (en) | Data storage method and device | |
CN106855834B (zh) | 一种数据备份方法、装置和系统 | |
US9804878B2 (en) | Using a status indicator for a merge operation for writing data associated with a virtual machine | |
CN108604162A (zh) | 优化对生产数据的访问 | |
CN104461404A (zh) | 元数据存储方法、装置以及系统 | |
CN108205482B (zh) | 文件挂载恢复方法 | |
US10977049B2 (en) | Installing of operating system | |
US11593103B1 (en) | Anti-pattern detection in extraction and deployment of a microservice | |
CN116700904B (zh) | 内存快照生成方法、装置、计算机设备及存储介质 | |
CN109358813B (zh) | 一种分布式存储系统的扩容方法及装置 | |
CN109656674B (zh) | 一种计算机设备、虚拟化芯片及数据传输方法 | |
CN114138424B (zh) | 一种虚拟机内存快照生成方法、装置及电子设备 | |
US9436489B2 (en) | Virtual machine data replication with shared resources | |
CN113486025B (zh) | 数据存储方法、数据查询方法及装置 | |
TW201721403A (zh) | 記憶體系統協定中提供檔案資訊之系統及方法 | |
CN111124882B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |