CN107209705B - 用于计算环境的活动回滚 - Google Patents

用于计算环境的活动回滚 Download PDF

Info

Publication number
CN107209705B
CN107209705B CN201580075057.0A CN201580075057A CN107209705B CN 107209705 B CN107209705 B CN 107209705B CN 201580075057 A CN201580075057 A CN 201580075057A CN 107209705 B CN107209705 B CN 107209705B
Authority
CN
China
Prior art keywords
memory
entry
timestamp
entries
snapshot
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.)
Expired - Fee Related
Application number
CN201580075057.0A
Other languages
English (en)
Other versions
CN107209705A (zh
Inventor
C.沃德
S.斯科夫罗内克
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.)
Citrix Systems Inc
Original Assignee
Citrix Systems Inc
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 Citrix Systems Inc filed Critical Citrix Systems Inc
Publication of CN107209705A publication Critical patent/CN107209705A/zh
Application granted granted Critical
Publication of CN107209705B publication Critical patent/CN107209705B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1469Backup restoration techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3089Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
    • G06F11/3096Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents wherein the means or processing minimize the use of computing system or of computing system component resources, e.g. non-intrusive monitoring which minimizes the probe effect: sniffing, intercepting, indirectly deriving the monitored data from other directly available data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/815Virtual
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/835Timestamp
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/84Using snapshots, i.e. a logical point-in-time copy of the data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

提供了用于回滚计算环境的第一计算设备。计算设备包括被配置为获取包含条目的流的处理器,所述条目包括快照条目、存储器条目和输入/输出条目,其中每个条目包括信息并与时间戳相关联。处理器还被配置为接收与第一时间戳相关联的快照条目,使用在与第一时间戳之后的时间戳相关联的至少一个存储器条目中提供的信息来还原到存储器状态,并且重新执行先前执行的过程,其中过程的重新执行使用第一时间戳、来自所接收的快照条目的信息、以及用于与关联于第一时间戳之后的时间戳的输入/输出条目对应的输入/输出操作的信息而开始。

Description

用于计算环境的活动回滚
背景技术
现代计算系统能够运行各种各样的软件应用和平台。开发人员采用编程语言编写这些软件应用。例如,开发人员可以使用C、C++、Objective(目标)-C或Java编写应用。然后,开发人员可以将应用编译成处理器可以直接执行的目标代码或机器代码。
在运行时,处理器可以与计算机系统的其他组件交互。例如,处理器可以将数据存储在系统存储器中。处理器可以访问计算机系统存储器、图形存储器、高速缓存存储器或连接的存储设备(诸如硬盘)。此外,处理器可以与各种输入/输出(“I/O”)设备交互。例如,键盘或鼠标可以提供用户输入,图形监视器可以显示来自应用的输出,并且网络接口可以允许应用跨网络发送和接收数据。
操作系统(诸如Microsoft Windows、Linux或Max OS X)在基础硬件上运行,从而提供用于附加应用的平台。开发人员可以编写在特定操作系统上运行的应用。应用可以利用内置到操作系统中的软件库和功能来提供对底层硬件组件的访问。
虚拟化技术已经广泛用于共享有限的计算机硬件资源。在有时也称为平台虚拟化环境的硬件虚拟化环境中,一个或多个虚拟机可以利用其自身的操作系统来模拟主机计算机。特别地,在这些虚拟机上执行的软件可以与底层硬件资源分离。因此,在单个主机计算机上运行的多个虚拟机可以均具有其自身的操作系统。例如,运行Microsoft Windows操作系统的计算机可以主控多个虚拟机:模拟运行Linux操作系统的计算机的一个虚拟机,基于其可以执行基于Linux的软件;模拟运行OS X的计算机的第二虚拟机,在其上可以执行基于OS X的软件;以及每个均运行其自身的操作系统的附加虚拟机。
无论处理器是物理的还是虚拟的,处理器都可以通过遵循经编译的软件应用中的每个指令来执行计算机程序。当应用被编译时,程序被转换成可由特定类型的处理器读取的指令序列。过程可以通过将指令加载到处理器中、确定该指令需要什么动作、以及采取该动作来执行用于每个指令的指令周期。处理器可以对程序中的每个指令重复该周期,直到应用完成运行。
由处理器执行的指令可以直接影响计算环境的其他方面。指令可以将数据写入到存储器。此外,程序指令可以向连接到计算机的其他设备请求数据。例如,通常称为输入/输出设备或I/O设备的这些设备可以包括硬盘、键盘、鼠标或光驱。处理器可以将数据写入到I/O设备并从I/O设备读取数据。I/O设备可以通知处理器它们具有用于所述处理器的数据。该通知称为中断请求(“IRQ”)。当处理器从I/O设备接收到IRQ时,处理器可以中断其当前执行,从设备读取数据,并继续其执行。此外,处理器可以向I/O设备写入数据或者发起与I/O设备的交互。处理器通常将向I/O设备请求数据,等待直到I/O设备完成,然后从I/O设备读取数据。因为与I/O设备交互有时可能比其他处理器任务花费长得多的时间,所以现代处理器可以使用直接存储器访问(“DMA”)。使用DMA,处理器可以发起与I/O设备的交互,可以在等待I/O设备响应的同时继续执行其他指令,并且可以处置来自设备的IRQ,从而通知处理器所述请求完成。
处理器指令的次序和结果是确定性的。使用相同的输入数据和相同的指令,将发生相同的结果。这种确定性可以允许当执行应用指令时可预测的结果。然而,I/O数据是非确定性的。从I/O设备的读取或IRQ的结果将不总是产生与先前的读取或IRQ相同的结果。由于它们的非确定性,I/O操作本质上是不可预测的。当尝试确定处理器确切执行历史时,这种不可预测性可能引起困难。
存在用于调查处理器的过去操作和执行的许多实际使用。例如,开发人员通常需要重新运行部分软件应用,以便在应用中查找和修复漏洞和错误。不幸的是,I/O的非确定性本质致使能够精确地重放应用的执行的能力是不可能的。因为I/O操作是非确定性的,所以开发人员不能保证利用相同的输入和I/O操作运行相同的指令将产生相同的错误或结果。即使在执行的确定性方面保持不变的情况下,开发人员在重新运行应用时也不能保证确切相同的执行路径。因此,调试特定的应用故障或错误可能是困难和不精确的。
附图说明
现在将参考示出本公开的示例性实施例的附图。在图中:
图1是与本公开的实施例一致的示例性网络环境的框图。
图2A-2B是与本公开的实施例一致的示例性计算设备的框图。
图3是与本公开的实施例一致的示例性虚拟化环境的框图。
图4A-4C是图示与本公开的实施例一致的用于提供回滚能力的流和过程的框图。
图5是与本公开的实施例一致的用于存储流信息的示例性结构的框图。
图6是与本公开的实施例一致的用于生成流内容的示例性方法的流程图。
图7是与本公开的实施例一致的用于使用流来回滚系统的示例性方法的流程图。
具体实施方式
现在将详细参考根据本公开所实现的示例性实施例,其示例在附图中图示。在可能的任何地方,遍及附图将使用相同的附图标记来指代相同或相似的部件。
本文描述的实施例提供了用于从先前状态重放计算环境的执行的技术。这些技术允许以确定性和可预测的方式重新执行先前执行的过程。这些技术可以在虚拟和非虚拟计算环境二者中操作。本文描述的技术可以允许以各种格式创建存储器、处理器和输入/输出数据的流,并且可以使用存储器数据、处理器状态数据和I/O数据的流来从先前的时间点重放系统的执行。本文描述的重放技术可以消除与调试非确定性计算环境相关联的困难。此外,本文描述的技术可以帮助性能分析。
图1是示例性网络环境100的框图。虽然示例性网络环境100针对虚拟网络环境,但是应当理解,网络环境可以是使用分组进行通信的任何类型的网络。网络环境100可以包括一个或多个客户端设备102A-F、公共网络104、专用网络110、总公司114、分公司116和数据中心120。
一个或多个客户端设备102A-F(统称为102)是可以通过各种手段从数据中心120获取远程服务的设备。客户端设备102A-F可以直接(例如,客户端设备102E)或间接地通过公共网络104(例如,客户端设备102A-D)或专用网络110(例如,客户端设备102F)与数据中心120进行通信。在一些实施例中,总公司114和分公司116还可以包括与客户端设备102A-F类似的一个或多个客户端设备。总公司114可以位于例如公司的主要营业地点中。分公司116可以位于例如远离总公司114。在一些实施例中,总公司114和分公司116的客户端设备还可以通过例如专用网络110从数据中心120获取远程服务。
当客户端设备102通过公共网络104或专用网络110进行通信时,可以建立通信链路。例如,可以由公共网络104建立通信链路,由此提供客户端设备(例如,客户端设备102A-D)对数据中心120的访问。通信链路也可以由专用网络110建立,由此提供客户端设备102F、总公司114和/或分公司116对数据中心120的访问。虽然客户端设备102A-D被描绘为计算机(例如,客户机设备102A)、膝上型电脑(例如,客户端设备102B)、平板电脑(例如,客户端设备102C)和移动智能电话(例如,客户端设备102D),但是应当理解,客户端设备102可以是向和从数据中心120传送分组的任何类型的设备(例如,诸如智能手表)。
公共网络104和专用网络110可以是诸如广域网(WAN)、局域网(LAN)或城域网(MAN)之类的任何类型的网络。作为示例,WAN可以是互联网或万维网,并且LAN可以是企业内联网。公共网络104和专用网络110可以是有线网络、无线网络或两者的组合。
数据中心120可以是物理或虚拟的用于存储、管理和传播与特定公共或专用实体有关的数据和信息的中央存储库。数据中心120可以用于容纳计算机系统和相关联的组件,诸如一个或多个物理服务器、虚拟服务器和存储系统。除其他事物之外,数据中心120可以包括一个或多个服务器(例如,服务器122)、桌面交付控制器124、虚拟桌面126、应用128和后端系统130。
服务器122可以是由IP地址表示的实体,并且可以作为单个实体或服务器场的成员而存在。服务器122可以是物理服务器或虚拟服务器。在一些实施例中,服务器122可以包括硬件层、操作系统、通信子系统以及创建或管理一个或多个虚拟机的管理程序。服务器122可以向端点提供一个或多个服务。这些服务可以包括向一个或多个端点(例如,客户端设备102A-F)提供一个或多个应用128。例如,一个或多个应用128可以包括基于WindowsTM或SAPTM的应用和计算资源。经由通信子系统,服务器122可以通过各种类型的网络(例如,专用网络110和公共网络104)与其他设备(例如,客户端设备102)进行通信。
桌面交付控制器124可以是使得能够将诸如虚拟桌面126的服务交付到客户端设备(例如,客户端设备102A-F)的设备。桌面交付控制器124可以提供管理、维护和优化所有虚拟桌面通信所需的功能。在一些实施例中,桌面交付控制器124可以控制、管理、维护或优化应用128的供应。
在一些实施例中,一个或多个虚拟桌面126可以提供一个或多个应用128。虚拟桌面126可以包括允许多个用户访问单个共享式远程桌面服务的桌面的主控共享桌面、允许每个用户具有其自身的虚拟机、流磁盘映像、本地虚拟机、各个应用(例如,一个或多个应用128)的虚拟桌面基础结构桌面、或其组合。
后端系统130可以是计算机联网硬件、装置或服务器场或服务器库中的服务器的单个或多个实例。后端系统130可以直接或间接地与服务器122对接。例如,后端系统130可以包括MicrosoftTM活动目录,MicrosoftTM活动目录可以提供多个网络服务,包括轻量级目录访问协议(LDAP)目录服务、基于Kerberos的认证、基于域名系统(DNS)的命名和其他网络信息、以及多个服务器之间的目录更新的同步。除其他事物之外,后端系统130还可以包括Oracle(甲骨文)后端服务器、SQL服务器后端和/或动态主机配置协议(DHCP)服务器。后端系统130可以向数据中心120提供数据、服务或两者的组合,数据中心120然后可以经由变化的形式将该信息提供给客户端设备102或分公司140。
图2A-2B是与本公开的实施例一致的示例性客户端设备102的框图。如图2A所示,每个客户端设备102可以包括一个或多个中央处理单元(CPU)221、一个或多个图形处理单元(GPU 225)、系统存储器222和图形存储器226。CPU 221可以是响应于和处理从系统存储器222取出的指令的任何逻辑电路。CPU 221可以是能够执行存储在存储器(系统存储器222)或高速缓存(例如,高速缓存240)中的特定指令集的单个或多个微处理器、现场可编程门阵列(FPGA)或数字信号处理器(DSP)。CPU 221还可以包含用于存储可变类型的数据的多个处理器寄存器。例如,这些寄存器可以存储数据、指令、浮点值、条件值和/或用于系统存储器322中的位置的地址。CPU寄存器可以包括用于存储与运行过程相关联的数据(诸如指令指针、指令计数器和/或存储器堆栈指针)的专用寄存器。
系统存储器222可以包括有形非暂时性计算机可读介质,诸如软盘、硬盘、CD-ROM(压缩盘只读存储器)、MO(磁光)驱动器、DVD-ROM(数字通用盘只读存储器)、DVD-RAM(数字通用盘随机存取存储器)、处理器高速缓存、存储器寄存器或半导体存储器。系统存储器222可以是能够存储数据并允许由CPU 221直接访问任何存储位置的一个或多个存储器芯片。系统存储器222可以是能够如本文所述那样操作的任何类型的随机存取存储器(RAM)或任何其他可用存储器芯片。在图2A所示的示例性实施例中,CPU 221可以经由系统接口250与系统存储器222通信。
GPU 225可以是任何类型的专用电路,所述任何类型的专用电路可以操纵和改变存储器(例如,图形存储器226)来提供和/或加速存储在帧缓冲器(例如,图2B所示的帧缓冲器316)中的图像的创建以用于输出到显示设备(例如,显示设备224)。GPU 225可以具有高度并行的结构,从而使得它们比通用CPU 221更有效用于其中可以并行执行大块图形数据的处理的算法。此外,GPU 225的功能也可以被包括在某种其他类型的专用处理单元或协处理器中的芯片组中。
CPU 221可以连接到系统存储器222和系统接口250。CPU 221可以执行存储在系统存储器222中的编程指令,对存储在系统存储器222中的数据进行操作,并通过桥接CPU 221和GPU 225之间的通信的系统接口250与GPU 225通信。在一些实施例中,CPU 221、GPU 225、系统接口250或其任何组合可以集成到单个处理单元中。GPU 225可能能够执行存储在系统存储器222中的特定指令集,以操纵存储在系统存储器225或图形存储器226中的图形数据。例如,GPU 225可以接收由CPU 221发送的指令并处理指令,以便渲染存储在图形存储器226中的图形数据。图形存储器226可以是由GPU 225可访问的任何存储器空间,包括本地存储器、系统存储器、片上存储器和硬盘。GPU 225可以使得能够显示存储在显示设备224上的图形存储器226中的图形数据。
客户端设备102还可以包括显示设备224和通过I/O控制器223连接的输入/输出(I/O)设备230(例如,键盘、鼠标或定点设备),这两者经由系统接口250通信。应当理解,CPU221还可以以通过系统接口250以外的方式(诸如通过串行通信方式或点对点通信方式)与系统存储器222和其他设备进行通信。类似地,GPU 225还可以以系统接口250以外的方式与图形存储器226和其他设备通信。此外,I/O设备230还可以提供用于客户端设备102的存储和/或安装介质。
图2B描绘了示例性客户端设备102的实施例,其中CPU 221经由存储器端口203直接与系统存储器222通信,并且类似地,GPU 225直接与图形存储器226通信。CPU 221可以经由次级总线(有时称为后端总线)与高速缓存240通信。在一些实施例中,CPU 221可以经由系统接口250与高速缓存240通信。高速缓存240通常具有比系统存储器222更快的响应时间。在诸如图2B所示的实施例的一些实施例中,CPU 221可以经由I/O端口直接与I/O设备230通信。在另外的实施例中,I/O设备230可以是系统接口250和外部通信总线之间的桥接器270,所述外部通信总线诸如USB总线、Apple(苹果)桌面总线、RS-232串行连接、SCSI总线、FireWire(火线)总线、FireWire(火线) 800总线、以太网总线、AppleTalk(苹果讲话)总线、千兆位以太网总线、异步传输模式总线、HIPPI总线、超级HIPPI总线、SerialPlus(串行+)总线、SCI/LAMP总线、FibreChannel(光纤信道)总线、Thunderbolt(雷电)™总线或串行附接小型计算机系统接口总线。
如图2B所示,GPU 225还可以直接与图形存储器226和显示设备224通信。GPU 225可以通过系统接口250与CPU 221和其他设备进行通信。图形存储器226还可以包括帧缓冲器316。帧缓冲器316可以是图形输出设备,所述图形输出设备从包含完整的图形数据帧的图形存储器226的存储器缓冲器驱动显示设备(例如,显示设备224)。帧缓冲器316可以存储要显示在显示设备224上的最终图形帧。
如图2A所示,客户端设备102可以支持任何合适的安装设备216,诸如用于接收诸如3.5英寸、5.25英寸磁盘或ZIP磁盘的软盘的软盘驱动器;CD-ROM驱动器;CD-R/RW驱动器;DVD-ROM驱动器;各种格式的磁带驱动器;USB设备;硬盘驱动器;或适于安装软件和程序-诸如任何客户端代理220或其部分-的任何其他设备。客户端设备102还可以包括存储设备228,诸如一个或多个硬盘驱动器或独立盘的冗余阵列,其用于存储操作系统和其他相关软件,并且用于存储应用软件程序,诸如与客户端代理220相关的任何程序。可选地,任何安装设备216也可以用作存储设备228。
此外,客户端设备102可以包括网络接口218,以通过各种连接来对接到LAN、WAN、MAN或因特网,所述各种连接包括但不限于标准电话线、LAN或WAN链路(例如,802.11、T1、T3、56kb、X.25)、宽带连接(例如,ISDN、帧中继、ATM)、无线连接或上述中的任何或全部的某种组合。网络接口218可以包括内置网络适配器、网络接口卡、PCMCIA网卡、卡总线网络适配器、无线网络适配器、USB网络适配器、调制解调器、或适于将客户端设备102对接到能够通信并执行本文描述的操作的任何类型的网络的任何其他设备。
图3是示例性虚拟化环境300的框图。在一些实施例中,虚拟化环境300可以包括计算设备(例如,客户端设备102或服务器122)。在一些实施例中,由虚拟化环境300存储和执行的模块、程序、虚拟机和命令可以由多于一个计算设备执行。例如,虚拟化环境300可以包括服务器场。
虚拟化环境300可以包括硬件层310,硬件层310可以包括一个或多个物理盘304(例如,存储228)、一个或多个物理设备306(例如,I/O设备230)、一个或多个物理处理器308(例如CPU 221)、系统存储器312(例如,系统存储器222)和图形存储器314(例如,图形存储器226)。在一些实施例中,帧缓冲器316可以存储在图形存储器314中的存储器元件内,并且可以由物理处理器308中的一个或多个执行。
物理盘304可以是内部硬盘或外部硬盘。在一些实施例中,虚拟化环境300可以与包括在硬件层310中作为物理盘304的外部硬盘进行通信。在一些实施例中,物理设备306可以是虚拟化环境300中包括的设备和与虚拟化环境300通信的外部设备的任何组合。物理设备306可以是任何设备,诸如网络接口卡218、视频卡、I/O设备230(诸如键盘、鼠标)、输入设备、扬声器、光驱、打印机、扫描仪、显示设备(例如,监视器224))、存储设备(例如,存储228)、通用串行总线连接、连接到虚拟化环境300的任何设备、与虚拟化环境300通信的任何设备、或期望的任何其他设备。在一些实施例中,物理处理器308可以是任何处理器,并且可以包括例如CPU 221和GPU 225。
系统存储器312可以包括可以存储数据、程序、固件或可执行指令集的任何类型的存储器。存储在系统存储器312中的程序、固件或可执行指令可以由虚拟化环境300的一个或多个物理处理器308执行。图形存储器314可以是可由物理处理器308访问的任何存储器空间,包括本地存储器、系统存储器、片上存储器和硬盘。物理处理器308可以在物理设备306的显示设备上显示与在图形存储器316中存储的图形数据对应的某些图形。
虚拟化环境300还可以包括可以存储在系统存储器312中的存储器元件中并由物理处理器308中的一个或多个执行的操作系统318。操作系统318也可以被称为内核。此外,虚拟化环境300可以包括管理程序302。管理程序302可以是由虚拟化环境300中的物理处理器308执行以管理任何数量的虚拟机的程序。管理程序302可以被称为虚拟机监视器或平台虚拟化软件。在一些实施例中,管理程序302可以是监视在计算设备上执行的虚拟机的可执行指令和硬件的任何组合。管理程序302可以存储在系统存储器312中的存储器元件中。
在一些实施例中,管理程序302可以向一个或多个虚拟机(例如虚拟机332A-C)提供虚拟资源。虚拟机可以是完全虚拟化的虚拟机。完全虚拟化的虚拟机可以具有用于允许执行其软件的访客操作系统。当在主机计算机上运行时,完全虚拟化的虚拟机不知道它是虚拟机。完全虚拟化的虚拟机有时也被称为域U或domU虚拟机(例如,虚拟机332A)。domU虚拟机可以由另一个虚拟机的控制程序来控制。控制程序也可以被称为控制操作系统、控制域、域0或dom0。因此,运行控制操作系统的虚拟机可以被称为dom0虚拟机(例如,虚拟机332B-C)。在一些实施例中,dom0虚拟机可以直接访问主机计算机的硬件资源,并且因此控制程序可以由主机计算机的操作系统执行。dom0虚拟机可以通过管理程序可访问主机计算机的硬件资源,所述管理程序直接运行在主机计算机的硬件上(即,裸机管理程序),或者在主机计算机的操作系统内运行(即,被主控的管理程序)。在一些实施例中,虚拟机还可以是服务域虚拟机,也称为域S或domS虚拟机(未示出)。
在一些实施例中,管理程序302可以以任何方式向访客操作系统(domU)330A-B和/或控制操作系统(dom0)320提供虚拟资源,使得管理程序302模拟任何期望的操作系统(例如,Windows、Linux、Unix)以在虚拟机332A-C上执行。系统资源可以包括例如硬件层310和包括在虚拟化环境300中的任何其他组件。在这些实施例中,管理程序302可以用于模仿虚拟硬件、对物理硬件进行分区、虚拟化物理硬件、或执行提供对计算环境的访问的虚拟机。在一些实施例中,管理程序302可以控制用于在虚拟化环境300中执行的虚拟机332A-C的处理器调度和存储器分区。
在一些实施例中,管理程序302可以创建其中访客操作系统330A-B或控制操作系统320分别执行的虚拟机332A-C。作为示例,管理程序302可以加载虚拟机映像以创建虚拟机332。作为另一示例,管理程序302可以分别在虚拟机332B和332C内执行访客操作系统330A和330B。访客操作系统330A-B在下面进一步详细描述。
如图3所示,在一些实施例中,虚拟化环境300的管理程序302可以是主机管理程序或在虚拟化环境300上执行的操作系统(内核)318内执行的管理程序。作为主机管理程序,管理程序302可以在操作系统318内执行。并且虚拟机332A-C在管理程序302以上的级别处执行。如果管理程序302是主机管理程序,则操作系统318可以被称为主机操作系统,而其他操作系统(例如,操作系统330A-B)可以被称为访客操作系统。访客操作系统330A-B可以在虚拟机332B-C(或domU虚拟机)上执行。
在一些实施例中,虚拟化环境300的管理程序302可以是裸机管理程序,或者可直接访问在主机计算设备(例如,客户端设备102)、主机计算设备上的所有资源、以及主机计算设备上的所有硬件(例如,图3所示的硬件层)中执行或与主机计算设备通信的所有应用和过程的管理程序。尽管主机管理程序通过主机操作系统(例如,操作系统318)访问系统资源,但是裸机管理程序可以直接访问所有系统资源。例如,如果管理程序302是裸机管理程序,则它可以直接在一个或多个物理处理器308上执行,并且可以包括存储在系统存储器312和图形存储器314中的程序数据。
在采用裸机管理程序配置的虚拟化环境中,主机操作系统可以由一个或多个虚拟机332执行。因此,计算设备的用户可以将一个或多个虚拟机332指定为dom0虚拟机(例如,虚拟机332A)。该dom0虚拟机可以通过允许用户以与用户将经由主机操作系统318与计算设备交互的基本相同的方式与计算设备进行交互来效仿主机操作系统。
在一些实施例中,虚拟化环境300可以主控或执行一个或多个虚拟机332A-C。如上所述,执行控制操作系统的虚拟机可以被称为dom0虚拟机,并且访客虚拟机可以被称为domU虚拟机。虚拟机332可以是一组可执行指令,所述指令当由物理处理器308执行时效仿物理计算设备的操作,使得程序和过程可以以类似于在物理计算设备上的方式在虚拟机332上执行。应当理解,虚拟化环境300可以主控任何数量的虚拟机332。在一些实施例中,可以诸如由管理程序302向每个虚拟机332提供可用于该虚拟机332的物理硬件、存储器、处理器和其他系统资源的唯一虚拟视图。唯一虚拟视图可以基于例如虚拟机许可、策略引擎对一个或多个虚拟机标识符的应用、访问虚拟机的用户、在虚拟机上执行的应用、由虚拟机访问的网络、或任何其他期望的标准。在一些实施例中,可以向每个虚拟机332提供可用于虚拟机332的物理硬件、存储器、处理器和其他系统资源的基本类似的虚拟视图。
如图3所示,虚拟机332A-C可以包括一个或多个虚拟盘326A-C(统称为326)。虚拟盘326可以对应于例如一个或多个物理盘或物理盘的部分(例如,物理盘304)。作为示例,可以向虚拟盘326A分配物理盘304的第一部分;可以向虚拟盘326B分配物理盘304的第二部分;并且可以向虚拟盘326C分配物理盘304的第三部分。在一些实施例中,虚拟盘326A-C中的一个或多个可以包括与物理盘的盘分区和文件系统类似的盘分区和文件系统。例如,虚拟盘326A可以包括系统盘,所述系统盘包括与虚拟机332A相关联的盘分区和系统文件。在一些实施例中,可以在虚拟机之间共享系统盘。例如,虚拟机332B和332C可以具有相同或类似的系统盘。
虚拟盘326A-C的文件系统还可以包括文件和文件夹。例如,虚拟盘326A还可以包括用户盘,所述用户盘可以存储诸如用户文件和文件夹之类的用户数据。存储在用户盘上的用户数据也被称为持久用户数据。在一些实施例中,客户端设备(例如,客户端设备102)的虚拟机的系统盘和/或用户盘可以与存储在服务器(例如,服务器122)中的对应的盘同步。服务器和客户端设备之间的系统盘和/或用户盘的同步可以包括例如将系统盘更新为由服务器发布的较新版本并提供用户盘的备份。以下进一步详细描述同步。在一些实施例中,虚拟盘还可以包括本地盘。本地盘可以存储与虚拟机(例如,虚拟机332B)相关联的本地数据。本地盘还可以包括持久用户数据。在一些实施例中,存储在本地盘上的持久用户数据不能与服务器同步。
可以由客户端设备或服务器访问、修改、更新或供应虚拟盘(例如,虚拟盘326)。作为示例,如上所述,当服务器发布新版本的系统盘时,服务器可以通过将新版本和当前版本之间的差异发送到客户端设备来更新系统盘。此外,通过使用系统盘,服务器可以使得能够实现客户端设备的桌面管理和修补。此外,客户端设备可以通过向用户盘写入新数据或修改存储在用户盘上的已有数据来修改其用户盘。在一些实施例中,可以将虚拟盘存储为具有诸如VHD格式、VHDX格式、VMDK格式、qcow格式、qcow2格式、虚拟盒虚拟磁盘映像(VDI)格式、以及并行虚拟硬盘驱动器(HDD)格式或二进制格式之类的格式的虚拟盘文件。在一些实施例中,虚拟盘可以包括一个或多个扇区。扇区可以包括多个字节。例如,扇区可以具有512字节的大小。此外,在一些实施例中,一个扇区或一组扇区可以形成虚拟盘的块。
在一些实施例中,虚拟化环境300还可以包括虚拟存储器空间中的虚拟孔径(未示出),所述虚拟孔径可以是可用于虚拟机332的虚拟存储器的虚拟视图。虚拟孔径可以对应于例如高速缓存、缓冲器、诸如系统存储器312和图形存储器314的物理存储器、诸如硬盘304的内部或外部物理盘。作为示例,在虚拟机332A上运行的应用不需要比在系统存储器312中可用的更多的存储器的情况下;虚拟机332A的虚拟孔径可以对应于系统存储器312的一部分。作为另一示例,在由虚拟机332B执行的应用需要比在系统存储器312中可用的更多的存储器的情况下,虚拟机332B的虚拟孔径可以对应于系统存储器312、图形存储器314的一个或多个部分、或甚至物理盘304的一个或多个部分。可以由管理程序302生成、提供和管理虚拟孔径。
虚拟处理器328A-C(统称为328)可以是虚拟化环境300的一个或多个物理处理器308的虚拟化视图。在一些实施例中,可以由管理程序302生成、提供和管理物理处理器308的虚拟化视图。在一些实施例中,虚拟处理器328可以具有与物理处理器308的特性基本相同的特性。在一些实施例中,虚拟处理器328可以提供物理处理器308的修改视图,使得虚拟处理器328的至少一些特性与对应的物理处理器308的特性不同。在一些实施例中,虚拟处理器328可以提供在对应的物理处理器308中不可用的附加功能或特性。例如,虚拟处理器328可以提供附加的寄存器以供管理程序302或虚拟机332使用。
在图3中,控制操作系统320可以执行至少一个应用以用于管理和配置在虚拟机332上执行的访客操作系统(domU 330,例如,domU-1 330A和domU-2 330B)。在一些实施例中,控制操作系统320可以被称为控制域320、域0 320或dom0 320。虽然图3示出了控制操作系统320被包括在虚拟机332A中,但是控制操作系统320可以在任何控制虚拟机或任何dom0虚拟机内执行,可以由管理程序302执行,或者可以由执行管理程序302的操作系统318执行。控制操作系统320可以执行管理应用或程序,管理应用或程序可以进一步显示用户界面,管理员可以使用该界面来访问每个虚拟机332的功能和/或管理每个虚拟机332。在一些实施例中,由管理程序生成的用户界面可以用于终止虚拟机332的执行,向虚拟机332分配资源,向虚拟机332分配权限、或者管理与虚拟机332相关联的安全凭证。
此外,在一些实施例中,控制操作系统320可以启动新的虚拟机332或终止虚拟机332的执行。控制操作系统320还可以直接访问硬件层310内的硬件和/或资源。在一些实施例中,控制操作系统320可以与在虚拟机332的上下文内执行的程序和应用对接。控制操作系统320还可以与虚拟化环境300中的计算设备上执行的程序和应用对接,所述程序和应用处于虚拟机332的上下文之外。
此外,在一些实施例中,控制操作系统320还可以与一个或多个访客操作系统330交互。控制操作系统320可以通过管理程序302与访客操作系统330通信。作为示例,访客操作系统330可以经由由管理程序302建立的通信通道(诸如经由由管理程序302做成可用的多个共享存储器页面)与控制操作系统320通信。在一些实施例中,控制操作系统320还可以包括用于与由虚拟化环境300提供的联网硬件直接通信的网络后端驱动程序(未示出)。网络后端驱动程序可以处理来自至少一个访客操作系统330的至少一个虚拟机请求。控制操作系统320还可以包括用于与虚拟化环境300中包括的存储元件(诸如系统存储器312和图形存储器块314)进行通信的块后端驱动程序。在一些实施例中,块后端驱动程序可以基于从访客操作系统330接收到的至少一个请求来从存储元件读取和写入数据。
控制操作系统320还可以包括工具栈324,工具栈324可以提供用于与管理程序302交互的功能。工具栈324可以包括用于向虚拟机场的管理员提供改进的管理功能的定制应用。在一些实施例中,工具栈324和控制操作系统320中的至少一个可以包括管理应用编程接口(API),所述管理应用编程接口(API)提供用于远程配置和控制在虚拟化环境300中运行的虚拟机332的接口。
如图3所示,在一些实施例中,访客操作系统330可以向虚拟化环境300的用户提供对计算环境内的资源的访问。这样的资源可以包括被做成可用于虚拟化环境300的用户的程序、应用、文件、可执行指令代码、桌面环境、计算环境或其他资源。在一些实施例中,资源可以经由包括在虚拟化环境300中的常规直接安装或经由用于应用流传送的方法交付的多种访问方法被交付到虚拟化环境300。资源还可以经由诸如通过在另一计算设备上的资源的执行而生成并经由表示层协议传送到虚拟化环境300的输出数据的交付、通过从连接到虚拟化环境300的可移动存储设备的执行而生成的输出数据的交付、以及通过经由在虚拟化环境300中执行的虚拟机的执行而生成的输出数据的交付之类的访问方法而被交付到虚拟化环境300。
图4A-4C是与本公开的实施例一致的示例性流400和示例性回滚过程的框图。计算环境可以使用流(例如,流400)来还原到更早的处理器状态(例如,执行状态401)和存储器状态(例如,存储器状态450)。在该回滚之后,处理器执行可以从所恢复状态的时间开始,并且流可以提供附加信息(例如,I/O数据420和IRQ数据421)来重放处理器执行。在一些实施例中,管理程序(例如,管理程序302)可以控制回滚过程。应当理解,可以读取流(例如,流400)并且控制存储器状态(例如,存储器状态450)和处理器执行状态(例如,执行状态401)的任何过程或机制可以实现回滚过程。例如,回滚能力可以由内核(例如,内核318)、裸机或主控管理程序(例如,管理程序302)或虚拟机(例如,虚拟机332)提供。
图4A是示例性流400和执行状态401。流400可以包含多个条目以供所公开的实施例使用。流中的每个条目可以包含与流中的特定类型的条目相关联的信息(例如,数据)。如示例性实施例中所图示的,流400中的条目可以包含快照数据430A-C、诸如存储器页面410A-D的存储器数据、以及包括I/O请求420A-C和中断请求(“IRQ”)421的I/O数据。流中的每个条目都可以包括时间戳。时间戳可以是指示在执行历史中何时创建了相关联的条目或事件的度量。例如,时间戳可以是处理器的退出(retired)指令计数器的值。在一些实施例中,时间戳值可以由虚拟机或管理程序(例如,退出访客指令计数器)提供。
在一些实施例中,计算环境可以使用流中的其他条目来确定用于条目的省略的时间戳。在这些实施例中,不需要确切的执行时间而是仅需要条目维持关于流中的其他条目的相对次序的流400中的条目可以在没有时间戳的情况下被插入到流中。在这些实施例中,当计算环境从流中读取没有时间戳的条目时,计算环境可以取决于所记录条目的性质使用先前或后续条目的时间戳来确定时间戳。例如,只要I/O写入发生在用于同一设备的下一I/O读取之前,则I/O写入的确切时间可以被忽略。在该示例中,可以省略用于记录I/O写入的条目的时间戳。当计算环境获取或读取流时,计算环境可以将用于I/O写入的时间戳确定为在与后续I/O读取相关联的时间戳之前时间戳发生的点。在该示例中,每个条目具有构成的(constructive)时间戳,即使底层流可以省略某些时间戳也是如此。
流400可以存储在存储器(例如,系统存储器322)中。存储器可以包括有形非暂时性计算机可读介质,诸如软盘、硬盘、CD-ROM(压缩盘只读存储器)、CD-RW(压缩盘可重写存储器)、MO(磁光)驱动器、DVD-ROM(数字通用盘只读存储器)、DVD-RAM(数字通用盘随机存取存储器)、DVD-RW(数字通用盘可重写存储器)、处理器高速缓存、存储器寄存器或半导体存储器。此外,存储器可以被直接附接或可以被通过网络(例如,NAS(网络附接存储)、SAN(存储区域网络)、云或基于互联网的存储或附接到远程计算设备的存储器)访问。应当理解,流的产生可以要求将流存储在至少可写入的介质上,而已有流的使用要求流存储在至少可读的介质上。
在一些实施例中,流400可以被分割成存储在相同或不同介质上的多个流。在这些实施例中,流可以基于任意确定的标准(例如数据的类型、时间戳范围、流的大小)进行分割。当使用多个流时,计算环境可以在回滚和重放过程期间从所有流中读取。下面将相对于图5进一步描述多个流实施例的示例。
参考图4A,流400可以包含存储器数据(例如,存储器页面410A-D)。存储器数据可以是在更新存储器的特定区域的处理器执行之前的存储器的该区域的已有内容。在一些实施例中,流包括用于保存存储器数据的存储器页面410。在一些实施例中,流包括快照之后的对存储器位置的第一更新。在这些实施例中,对相同存储器位置的后续更新不包括在流中,直到在附加快照之后。
流400可以包含I/O数据。I/O数据可以包括与处理处置的任何I/O事务(例如,I/O读取420、IRQ 421或DMA操作)相关的数据。I/O数据可以包含重新创建所记录的I/O事务所必需的任何信息。例如,I/O读取420条目可以包含所涉及的设备和从设备返回的值,而DMA操作可以包括与传输的发起和IRQ结果相关的信息。
流400可以包含快照数据430。快照数据可以记录处理器状态(例如,执行状态401)。处理器状态可以包括处理器寄存器的值、处理器计数器的值、执行位置、存储器表和/或定义处理器的当时已有状态的任何其他数据。快照可以包含在过程的在前执行期间将执行状态401返回到特定点所必需的所有信息。
流400的元素可以以多种方式组织。在一些实施例中,流中的条目可以按时间顺序存储,并且回滚过程可以扫描流400的每个条目以确定条目的类型。在一些实施例中,快照(例如,快照430C)可以包括对先前快照(例如,快照430B)和/或先前存储器条目(例如,存储器页面410C)的引用。存储器条目(例如,存储器页面410C)可以包括对先前存储器条目(例如,存储器页面410B)和/或先前快照(例如,快照430B)的引用。例如,快照430C可以包括对快照430B的流中的位置的引用。此外,例如,快照430C可以引用存储器页面410C,存储器页面410C可以引用存储器页面410B,并且存储器页面410B可以引用快照430B,以创建快照430C和快照430B之间的所有存储器页面的链接列表,从而提供用于遍历流中的快照430和存储器页面410的机制。在一些实施例中,每个条目可以包含对先前条目或相同类型的先前条目的引用。通过使用这些引用,这些实施例可以创建链接列表,从而允许在回滚过程期间的相关流条目的高效遍历。
执行状态401表示计算环境的当前执行状态。执行状态401可以包含对最近流条目(例如,快照430C)的最后条目引用402以及对当前存储器状态450的存储器状态引用403。执行状态401可以包括执行用于运行过程的指令所必需的处理器状态的各方面。例如,执行状态401可以包括各种CPU寄存器的当前值。当处理器开始执行时,执行指令的结果可以更新执行状态。执行状态可以表示物理CPU和虚拟CPU两者的处理器状态。在一些实施例中,执行状态401可以包含关于处理器状态的子集的信息,但信息的该子集可能足以执行运行过程。
图4B是示例性流400和存储器状态450的示例性回滚的图。在开始回滚之前,计算环境必须选择快照430以用作回滚点。快照选择可以任意或系统地作出。在一些实施例中,计算环境的操作者可以手动确定用于回滚的快照430。在一些实施例中,系统或用户可以选择用于回滚的最近快照(例如,流400中的快照430C)。在一些实施例中,计算环境可以基于可外部定义的标准或算法来系统地决定系统应当使用哪个快照。例如,计算环境可以默认为最近快照,基于预定时间段的快照或基于配置设置的快照。一旦被选择,计算环境可以在存储器和执行状态回滚期间使用该快照。
如图4A所示,执行状态401可以包含对流中的最近快照或存储器条目(例如,快照430C)的最后条目引用402和对所选快照(例如,快照430B)的回滚快照引用404。以快照430C开始,回滚过程可以遵循包含在流400条目中的向后引用(406)。快照430C可以引用存储器页面410C。当通过回滚过程到达存储器页面410C时,可以将存储器页面加载到当前存储器状态450中。回滚过程可以然后遵循存储器页面410C向存储器页面410B的反向引用。回滚过程可以将存储器页面410B加载到当前存储器状态中,并且继续遵循对430B的向后引用。因为快照430B是期望的快照,所以回滚过程可以停止遵循进一步的引用。在一些实施例中,在到达期望的快照之前,回滚过程将跨存储器页面和快照的多个实例而继续。通过在初始存储器状态450和快照430B之间加载每个记录的存储器页面,回滚过程可以用存储在流中的值替换存储器状态450的值。该过程导致存储器复原405。存储器复原405表示存储器状态450复原到先前的存储器状态460。存储器状态460然后可以表示当其在快照430B的时间处存在时的存储器状态。应当理解,普通技术人员将认识到用于定位流中的存储器条目的附加实施例。这些附加实施例与基于存储在流(例如,流400)中的存储器数据将当前存储器状态(例如,存储器状态450)还原到先前存储器状态(例如,先前存储器状态460)的本公开一致。
图4C是示例性流400以及I/O操作的执行状态和重放的示例性加载的图。回滚过程可以将执行状态401重置为在快照430B的时间处存在的相同状态。计算环境可以读取快照数据(例如,存储在快照430B中的寄存器值、指令和/或存储器引用),并将该数据加载(404)到执行状态401中。通过将快照430B的值加载到执行状态401中,计算环境可以在执行状态401中重新创建在快照430B的时间处存在的状态。
在一些实施例中,执行状态401可以在存储器被还原到先前存储器状态460之前被还原到快照430B中的值。在一些实施例中,向先前存储器状态460的存储器复原可以在执行状态401向快照430B中的值的复原之前。在存储器和执行状态复原后,可以重新启动执行周期。当运行过程执行时,计算环境可以拦截由执行过程所作出的所有I/O请求,并且可以用记录在流400中的I/O数据替换结果得到的事件。计算环境可以监视与运行过程相关联的时间戳和流400中的I/O事件的时间戳。当由执行过程达到流400中的I/O事件(例如,事件420B、421和420C)的时间戳时,计算环境可以提供来自流的相关联的I/O事件。
随着运行过程执行,执行状态401的时间戳可以从快照430B的原始时间戳向前前进(420),从而到达存储在流400中的I/O事件。例如,当执行状态401的时间戳到达I/O事件420B的时间戳时,计算环境可以从流中读取I/O事件420B并将其提供给执行处理器(例如,执行状态401)。处理器可以继续执行指令,并且当执行状态401的时间戳达到IRQ 421的时间戳时,计算环境可以将IRQ 421从流400提供给执行过程。该循环可以继续在事件最初发生的确切点处将存储在流400中的所有I/O事件(例如,事件420B、421和420C)提供给执行过程。该过程可以继续运行直到(例如,由用户或程序错误)中断或者直到流400中的所有I/O事件已经被提供给执行过程。通过提供整个执行历史的确定性重放,计算环境可以允许过去处理器执行的确定性重放。该能力可以具有各种应用。例如,用户可以重放过去过程执行来调查过程中的漏洞,或者用户可以监视过去过程执行来监视各种指令或操作的性能。
图5是由管理程序302创建的示例性流结构。管理程序302可以主控虚拟机322。虚拟机322可以包含在虚拟处理器(例如,虚拟处理器328)上执行的访客操作系统(例如,访客操作系统330)。管理程序302可以在虚拟机322与诸如物理处理器(例如,处理器308)或物理I/O设备(例如,物理盘304、物理设备308、系统存储器312、和/或图形存储器314)之类的硬件组件和设备之间提供通道。管理程序可以监视虚拟机322的活动,并且可以基于虚拟机322的活动来创建流510。流510A可以包含与时间戳505A相关联的快照数据430。流510B可以包含与时间戳505B相关联的存储器数据410。流510C可以包含与时间戳505C相关联的I/O数据420和IRQ数据421。在一些实施例中,记录在流中的所有数据可以存在于一个流或多个流中。当在虚拟机322上发生事件时,管理程序302可以向流510写入事件。当管理程序在流510中记录事件时,管理程序还可以记录时间戳505。在一些实施例中,时间戳将对应于表示由虚拟机322运行的指令的数量的处理器指令计数器。应当理解,本领域普通技术人员可以认识到,管理程序302可以用可以监视与计算环境相关联的存储器、处理器执行和I/O设备的任何硬件或软件机制来替换,并且不限于诸如管理程序302的管理程序或诸如虚拟机322的虚拟机。
管理程序302可以包括重复定时器。当定时器完成时,管理程序302可以在流510A中创建快照430和时间戳505A,从而产生以规则间隔创建的快照430。当创建快照时,管理程序可以进一步将所有存储器标记为写时复制或只读。在创建快照后,当虚拟机322尝试向存储器写入时,可能发生写时复制或只读异常。管理程序302可以捕获该异常,将受影响的存储器数据410和当前时间戳505B复制到流510B中,并将存储器位置标记为读/写以防止进一步的中断。该过程可以允许计算环境高效地创建不包含快照之间的重复存储器页面或存储器条目的流。在一些实施例中,管理程序可以将所有存储器写入记录到流,而不将存储器标记为只读或写时复制。
在虚拟机322作出I/O请求的任何时间,管理程序302可以监视该请求,在流510Cd中创建I/O数据420和时间戳505C条目。当I/O设备触发IRQ时,管理程序302可以拦截IRQ,在流510C中创建IRQ 421和时间戳505C条目,并将IRQ转发到虚拟机322。通过该过程,管理程序302可以创建按类型分类但仍根据时间戳505按时间组织的流510。在一些实施例中,快照数据430、存储器数据410、I/O数据420和IRQ数据421也可以包含对流中的先前条目的引用以帮助对流的稍后遍历。
在示例性实施例中,因为在每个快照之后记录所有存储器改变,所以流510B可以包含在创建每个快照之后更新的用于相同存储器位置的存储器数据。但是在回滚期间,管理程序仅需要加载在期望快照之后最近存储的特定存储器位置的数据。用于该存储器位置的后续条目可能变得多余,因为它们可以被恢复,然后在向期望的快照回滚期间被重写。在一些实施例中,可以以变化的时间周期创建快照430条目。例如,在这些实施例中,可以每秒取得一些快照,而每100毫秒取得其他快照。在这些实施例中,每组快照可以在该特定时间周期期间将与第一改变相关联的存储器页面引用到特定存储器位置。因此,在这些实施例中,较不频繁的快照可以在与更频繁的快照相同的时间量上包含用于相同位置的更少存储器数据条目。使用用于快照的这些单独的时间周期,管理程序302可以创建允许更高效地遍历快照430和存储器数据410的层次结构。当在这些实施例中回滚存储器状态时,管理程序302可以使用较不频繁的快照引用以遍历更长的时间段,从而导致加载更少的存储器数据410条目,并且然后可以在接近期望的快照时切换到更频繁的快照。在这些实施例中,快照周期的混合使用可以平衡回滚操作的效率和更频繁地存储快照的有用性。
图6是与本公开的实施例一致的用于生成流内容的示例性方法的流程图。将容易理解,所图示的过程可以被改变为删除步骤或进一步包括附加步骤。在初始步骤601之后,计算环境(例如,管理程序302)可以等待(步骤602)定时器期满、存储器异常或I/O操作。在发生这些之一后,计算环境可以生成(步骤603)时间戳(例如,时间戳505)。
如果计算环境检测到定时器期满(步骤605),则计算环境收集(步骤610)快照数据。快照数据(例如,快照数据430)可以是允许计算环境、处理器、虚拟处理器或其他系统组件执行运行过程所必需的任何数据。例如,快照数据可以包括所有当前寄存器值、存储器指针和/或引用计数器。在收集快照数据之后,计算环境可以将所有存储器标记(步骤611)为写时复制或只读。将所有存储器标记为写时复制或只读将允许计算环境捕获方法的其他分支中的存储器改变。在标记所有存储器之后,计算环境可以将快照数据和生成的时间戳写入(612)到流(例如,流400和/或流510A)。在将数据写入到流之后,计算环境可以继续等待(步骤602)附加事件。
如果计算机环境检测(步骤606)到存储器异常(例如,只读存储器异常或写时复制存储器异常)而不是定时器期满,则计算环境可以将已有的存储器数据和先前生成的时间戳写入(步骤620)到流(例如,流400和/或流510B)。在添加到流之后,计算环境可以从异常中检索(步骤621)新的存储器数据。计算环境可以将受影响的存储器位置标记(步骤622)为读/写,并且可以用来自异常的存储器值更新(步骤623)受影响的存储器区域。该过程允许计算环境捕获更新存储器的所有尝试,记录这些尝试,并确保更新该存储器区域的未来尝试不会生成附加的存储器异常。在更新受影响的存储器区域之后,计算环境可以继续等待(步骤602)附加事件。
在一些实施例中,代替将所有存储器标记为只读(步骤611),计算环境可以将存储器的子集标记为在多个快照的过程上只读。在这些实施例中,计算环境可以选择在其之上所有存储器可以被标记为只读的时间段。在这些实施例中,在该时间内的每个快照期间,存储器的非重叠子集可以被标记为只读,使得在时间段结束之后,所有存储器位置可以在该时间段期间被标记为只读至少一次。因此,在这些实施例中,用于处理存储器改变的资源可以通过一组快照而不是每个快照来分摊。
如果计算环境既未检测到定时器期满(步骤605)也未检测到存储器异常(步骤606),则发生了I/O操作。计算环境可以将I/O操作数据和先前生成的时间戳写入(步骤630)到流(例如,流400和/或510C)。在记录I/O事件信息之后,计算环境可以继续等待(步骤602)附加的事件数据。
计算环境可以遵循该过程直到被中断。由计算环境处置的每个事件都可以添加到流中,并可以在稍后的回滚过程期间使用。应当理解,该方法中的每个分支路径可以取决于实施例而写入到相同的流或不同的流。还应当理解,以不同次序执行的一些步骤将仍然导致相同的结果。
图7是与本公开的实施例一致的用于计算环境的回滚的示例性方法的流程图。将容易理解,所图示的过程可以被改变为删除步骤或进一步包括附加步骤。在初始步骤700之后,计算环境(例如,管理程序302)可以获取(步骤710)一个或多个数据流(例如,流400或流510A、510B和510C)。作为整体取得的流可以包括快照数据(例如,快照数据430)、存储器数据(例如,存储器页面410)和I/O数据(例如,I/O数据420和/或IRQ数据421)。此外,一个或多个流中的每个条目可以包括一个或多个快照。在一些实施例中,时间戳是计算环境的访客处理器的退出指令计数。
在获取一个或多个流之后,选择期望的快照(步骤720)。可以任意或系统地确定快照的选择。在一些实施例中,用户将选择要使用的快照。在一些实施例中,算法可以分析环境并选择快照。例如,如果计算环境经历灾难性错误,则用户或系统可能选择最近的快照。
在选择快照之后,计算环境可以将计算环境的当前存储器状态还原(步骤730)到在快照的时间处存在的状态。系统可以收集具有期望快照之后的时间戳的流中的所有存储器数据,并将存储器的那些区域还原为存储在流中的值。在一些实施例中,可以通过向后遵循每个存储器页面之间的流中的引用来实现复原。在用创建快照后更新的那些值替换当前存储器值之后,存储器状态可以反映所选快照的时间处的确切存储器状态。
在存储器状态还原之后,计算环境可以重新启动(740)快照的时间处的处理器执行。计算环境可以从流中加载快照数据,并用快照值替换当前处理器状态中的值。在一些实施例中,所替换的值可以是快照数据中存在的所有处理器寄存器的值。通过加载存储在快照中的处理器状态,计算环境可以高效地将处理器置于在快照的时间处存在的确切状态中。与存储器复原组合,处理器然后可以开始执行指令。因为存储器和处理器状态二者都可以被还原,所以处理器可以从快照点以与处理器最初从该同一时刻执行的方式确切相同的方式开始执行。在一些实施例中,处理器寄存器之一将是用于访客操作系统的退出指令计数器。测量已经由访客操作系统运行的指令的数量的该寄存器可以存储在快照中。在这些实施例中,当从流中加载快照时,退出指令计数寄存器的值被快照中的值替换。在这些实施例中,当访客处理器完成执行指令时,该值以与在运行过程的原始执行中确切相同的方式递增。
当处理器执行指令并与存储器交互时,计算环境可以监视处理器时间戳并在处理器时间戳与流中记录的时间戳匹配时执行(步骤750)记录在流中的任何I/O事件。当处理器时间戳值与流中的I/O事件的时间戳匹配时,该I/O事件在处理器上执行。I/O事件(通常为执行流水线的非确定性方面)可以以可预测和确定性的方式执行。
在所有I/O数据被执行之后,计算环境可以停止(步骤760)执行。在一些实施例中,如果重新运行过程的执行导致系统错误,则该过程可以在流中的所有条目被使用之前退出。还应当理解,所述方法可以由用户或某个其他事件在任何步骤处中断,并且使用不同的快照和相同或不同的流重新起动。此外,应当理解,该过程可以使用不同或相同的流以及使用相同或不同的快照来完全重复多次。
在前面的说明书中,已经参考可以因实现而异的许多具体细节来描述实施例。可以做出对所描述的实施例的某些适应和修改。根据对本文公开的本发明的说明书和实践的考虑,其他实施例对于本领域技术人员来说可以是显然的。旨在将说明书和示例视为仅示例性的。还旨在图中所示的步骤顺序仅用于说明性目的,并不旨在限于任何特定的步骤序列。因此,本领域技术人员可以理解,这些步骤可以以不同的次序执行而同时实现相同的方法。

Claims (17)

1.一种用于回滚计算环境的第一计算设备,所述第一计算设备包括:
一个或多个处理器,配置为:
获取包含条目的流,所述条目包括快照条目、多个存储器条目和至少一个输入/输出条目,其中所述条目中的每个条目包括信息并与时间戳相关联;
所述多个存储器条目中的第一存储器条目包括对多个存储器条目中的第二存储器条目的引用;
接收所述快照条目中的快照条目,其中所接收的快照条目与第一时间戳相关联;
使用在所述多个存储器条目中提供的信息和遵循在第一存储器条目中所包括的对第二存储器条目的引用来还原到存储器状态;以及
重新执行先前执行的过程,其中所述过程的重新执行使用来自所接收的快照条目的信息和所述第一时间戳而开始,并且包括用于与关联于所述第一时间戳之后的时间戳的至少一个输入/输出条目对应的输入/输出操作的信息。
2.根据权利要求1所述的第一计算设备,其中所述流包括快照条目的第一流、存储器条目的第二流、和输入/输出条目的第三流。
3.根据权利要求1和2中任一项所述的第一计算设备,其中所述流的每个条目包括时间戳。
4.根据权利要求1或2所述的第一计算设备,其中所述流的条目的时间戳相对于所述流的其他条目的时间戳。
5.根据权利要求1或2所述的第一计算设备,其中复原到所述存储器状态还包括所述一个或多个处理器被配置为:
读取所述多个存储器条目中提供的信息;以及
使用所述信息来更新所述存储器状态的一部分。
6.根据权利要求1或2所述的第一计算设备,其中所述过程的重新执行使用所接收的快照条目中的信息和所述第一时间戳来开始包括所述一个或多个处理器被配置为:
使用所接收的快照条目中的信息来还原到处理器状态;
将处理器时间戳还原到所述第一时间戳;以及
开始处理器重新执行。
7.根据权利要求1或2所述的第一计算设备,其中所述一个或多个处理器还被配置为在所述重新执行期间拦截输入/输出事务。
8.一种用于计算环境的回滚的方法,所述方法由包括一个或多个处理器的计算设备执行,所述方法包括:
获取包含条目的流,所述条目包括快照条目、多个存储器条目和至少一个输入/输出条目,其中:
所述条目中的每个条目包括信息并与时间戳相关联;
所述多个存储器条目中的第一存储器条目包括对多个存储器条目中的第二存储器条目的引用;
接收所述快照条目中的快照条目,其中所接收的快照条目与第一时间戳相关联;
使用在所述多个存储器条目中提供的信息和遵循在第一存储器条目中所包括的对第二存储器条目的引用来还原到存储器状态;以及
重新执行先前执行的过程,其中所述过程的重新执行使用来自所接收的快照条目的信息和所述第一时间戳而开始,并且包括用于与关联于所述第一时间戳之后的时间戳的至少一个输入/输出条目对应的输入/输出操作的信息。
9.根据权利要求8所述的方法,其中所述流包括快照条目的第一流、存储器条目的第二流、和输入/输出条目的第三流。
10.根据权利要求8和9中任一项所述的方法,其中还原到所述存储器状态还包括:
读取所述多个存储器条目中提供的信息;以及
使用所述信息来更新所述存储器状态的一部分。
11.根据权利要求8或9所述的方法,其中重新执行所述过程使用所接收的快照条目中的信息和所述第一时间戳,并且还包括:
使用所接收的快照条目中的信息来还原到处理器状态;
将处理器时间戳还原到所述第一时间戳;以及
开始处理器重新执行。
12.根据权利要求8或9所述的方法,还包括:
在所述重新执行期间拦截输入/输出事务。
13.一种存储指令的非暂时性计算机可读存储介质,所述指令可由包括一个或多个处理器的第一计算设备执行以使得所述第一计算设备执行用于计算环境的回滚的方法,所述方法包括:
获取包含条目的流,所述条目包括快照条目、多个存储器条目和至少一个输入/输出条目,其中:
所述条目中的每个条目包括信息并与时间戳相关联;
所述多个存储器条目中的第一存储器条目包括对多个存储器条目中的第二存储器条目的引用;
接收所述快照条目中的快照条目,其中所接收的快照条目与第一时间戳相关联;
使用在所述多个存储器条目中提供的信息和遵循在第一存储器条目中所包括的对第二存储器条目的引用来还原存储器状态;以及
重新执行先前执行的过程,其中所述过程的重新执行使用来自所接收的快照条目的信息和所述第一时间戳而开始,并且包括用于与关联于所述第一时间戳之后的时间戳的至少一个输入/输出条目对应的输入/输出操作的信息。
14.根据权利要求13所述的非暂时性计算机可读存储介质,其中所述流包括快照条目的第一流、存储器条目的第二流、和输入/输出条目的第三流。
15.根据权利要求13和14中任一项所述的非暂时性计算机可读存储介质,其中还原到所述存储器状态还包括:
读取与所述多个存储器条目对应的信息;以及
使用所述信息来更新所述存储器状态的一部分。
16.根据权利要求13或14所述的非暂时性计算机可读存储介质,其中重新执行所述过程使用所接收的快照条目中的信息和所述第一时间戳,并且还包括:
使用所接收的快照条目中的信息来还原处理器状态;
将处理器时间戳还原到所述第一时间戳;以及
开始处理器重新执行。
17.根据权利要求13或14所述的非暂时性计算机可读存储介质,其中指令的集合可由所述第一计算设备的至少一个处理器执行以使得所述第一计算设备进一步执行:
在所述重新执行期间拦截输入/输出事务。
CN201580075057.0A 2014-12-01 2015-02-10 用于计算环境的活动回滚 Expired - Fee Related CN107209705B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/557,317 US9639432B2 (en) 2014-12-01 2014-12-01 Live rollback for a computing environment
US14/557,317 2014-12-01
PCT/US2015/015275 WO2016089434A1 (en) 2014-12-01 2015-02-10 Live rollback for a computing environment

Publications (2)

Publication Number Publication Date
CN107209705A CN107209705A (zh) 2017-09-26
CN107209705B true CN107209705B (zh) 2021-02-09

Family

ID=52484614

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580075057.0A Expired - Fee Related CN107209705B (zh) 2014-12-01 2015-02-10 用于计算环境的活动回滚

Country Status (4)

Country Link
US (2) US9639432B2 (zh)
EP (1) EP3227783B1 (zh)
CN (1) CN107209705B (zh)
WO (1) WO2016089434A1 (zh)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9766917B2 (en) * 2014-10-29 2017-09-19 Red Hat Israel, Ltd. Limited virtual device polling based on virtual CPU pre-emption
US10057082B2 (en) * 2014-12-22 2018-08-21 Ebay Inc. Systems and methods for implementing event-flow programs
US9588870B2 (en) * 2015-04-06 2017-03-07 Microsoft Technology Licensing, Llc Time travel debugging for browser components
KR101920474B1 (ko) * 2015-06-15 2018-11-20 한국전자통신연구원 인메모리 가상 데스크탑 시스템
US10055311B1 (en) * 2015-09-09 2018-08-21 Amazon Technologies, Inc. Reversion operations for virtual computing environments
WO2017210197A1 (en) * 2016-06-01 2017-12-07 Archive360, Inc. Methods and systems for archiving and retrieving data
US11477264B2 (en) * 2016-06-29 2022-10-18 Nicira, Inc. Network workflow replay tool
US10042737B2 (en) 2016-08-31 2018-08-07 Microsoft Technology Licensing, Llc Program tracing for time travel debugging and analysis
US10031834B2 (en) 2016-08-31 2018-07-24 Microsoft Technology Licensing, Llc Cache-based tracing for time travel debugging and analysis
US10324851B2 (en) 2016-10-20 2019-06-18 Microsoft Technology Licensing, Llc Facilitating recording a trace file of code execution using way-locking in a set-associative processor cache
US10310977B2 (en) 2016-10-20 2019-06-04 Microsoft Technology Licensing, Llc Facilitating recording a trace file of code execution using a processor cache
CN106814972B (zh) * 2016-12-22 2018-04-17 北京华云网际科技有限公司 分布式块存储的快照节点的回滚方法和装置
CN106970860B (zh) * 2017-05-17 2021-01-08 苏州浪潮智能科技有限公司 一种复现centos7操作系统故障的系统及方法
CN110018996B (zh) * 2018-07-23 2021-11-09 郑州云海信息技术有限公司 一种分布式存储系统的快照回滚方法及相关装置
TWI673607B (zh) * 2018-08-10 2019-10-01 宇瞻科技股份有限公司 依時間戳記管理作業程序之儲存系統及其管理方法
CN110825313A (zh) * 2018-08-10 2020-02-21 宇瞻科技股份有限公司 依时间戳管理作业程序的储存系统及其管理方法
CN109284331B (zh) * 2018-08-16 2024-04-02 中国平安人寿保险股份有限公司 基于业务数据资源的制证信息获取方法、终端设备及介质
US10866869B2 (en) * 2019-01-16 2020-12-15 Vmware, Inc. Method to perform crash and failure recovery for a virtualized checkpoint protected storage system
US11405141B2 (en) 2019-03-13 2022-08-02 Juniper Networks, Inc. Telemetry data error detection
DE102019107576A1 (de) * 2019-03-25 2020-10-01 Phoenix Contact Gmbh & Co. Kg Kombinatorik von digitalen Ausgangsdaten zur autonomen Ermittlung von Prozesszyklen und von einzelnen Prozessschritten
US11487598B2 (en) * 2019-09-18 2022-11-01 General Electric Company Adaptive, self-tuning virtual sensing system for cyber-attack neutralization
GB202019527D0 (en) * 2020-12-10 2021-01-27 Imagination Tech Ltd Processing tasks in a processing system

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101419564A (zh) * 2008-12-11 2009-04-29 杭州华三通信技术有限公司 一种采用快照恢复数据的方法和装置
CN103678040A (zh) * 2013-12-06 2014-03-26 北京明朝万达科技有限公司 一种基于计算机系统的快照和回退方法及系统

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2841013B1 (fr) * 2002-06-12 2004-09-03 Mbda France Procede et systeme de gestion des evenements
US7260698B2 (en) * 2003-10-30 2007-08-21 International Business Machines Corporation Method and system for page initialization using off-level worker thread
US7500152B2 (en) * 2003-12-05 2009-03-03 Freescale Semiconductor, Inc. Apparatus and method for time ordering events in a system having multiple time domains
US7886293B2 (en) * 2004-07-07 2011-02-08 Intel Corporation Optimizing system behavior in a virtual machine environment
US20090089623A1 (en) * 2007-09-28 2009-04-02 Agilent Technologies, Inc Event timing analyzer for a system of instruments and method of analyzing event timing in a system of intruments
US7921317B2 (en) * 2008-09-02 2011-04-05 Unisys Corporation Method and apparatus for synchronizing central processing units in a multiprocessor apparatus
US9081501B2 (en) * 2010-01-08 2015-07-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
US8533390B2 (en) * 2010-08-31 2013-09-10 Intel Corporation Circular buffer in a redundant virtualization environment
US9154539B2 (en) * 2011-03-21 2015-10-06 Microsoft Technology Licensing, Llc Consolidating event data from different sources
US8689214B2 (en) 2011-03-24 2014-04-01 Amazon Technologies, Inc. Replication of machine instances in a computing environment
US8789208B1 (en) * 2011-10-04 2014-07-22 Amazon Technologies, Inc. Methods and apparatus for controlling snapshot exports
US8990177B2 (en) * 2011-10-27 2015-03-24 Yahoo! Inc. Lock-free transactional support for large-scale storage systems
US9678863B2 (en) * 2012-06-12 2017-06-13 Sandisk Technologies, Llc Hybrid checkpointed memory
US10318495B2 (en) * 2012-09-24 2019-06-11 Sandisk Technologies Llc Snapshots for a non-volatile device
US9098652B2 (en) * 2012-10-12 2015-08-04 Carbon Design Systems, Inc. Partitioning and parallel processing of a virtual prototype simulation of a hardware design
US9477558B2 (en) * 2013-03-08 2016-10-25 Intel Corporation Hardware supported memory logging
JP6160171B2 (ja) * 2013-03-28 2017-07-12 富士通株式会社 情報処理装置、制御方法、プログラム、及び情報処理システム
MX2016006668A (es) * 2013-11-27 2016-12-02 Tsn Llc Rastreo de material en sitio de trabajo y reconciliacion de discrepancias.
US10116675B2 (en) * 2015-12-08 2018-10-30 Vmware, Inc. Methods and systems to detect anomalies in computer system behavior based on log-file sampling
US10078559B2 (en) * 2016-05-27 2018-09-18 Raytheon Company System and method for input data fault recovery in a massively parallel real time computing system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101419564A (zh) * 2008-12-11 2009-04-29 杭州华三通信技术有限公司 一种采用快照恢复数据的方法和装置
CN103678040A (zh) * 2013-12-06 2014-03-26 北京明朝万达科技有限公司 一种基于计算机系统的快照和回退方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《CADRE: Cycle-Accurate Deterministic Replay for Hardware Debugging》;Smruti R. Sarangi;《International Conference on Dependable Systems and Networks》;20060625;第1-10页 *

Also Published As

Publication number Publication date
US20170255527A1 (en) 2017-09-07
US10379967B2 (en) 2019-08-13
EP3227783A1 (en) 2017-10-11
US20160154710A1 (en) 2016-06-02
US9639432B2 (en) 2017-05-02
EP3227783B1 (en) 2021-03-31
WO2016089434A1 (en) 2016-06-09
CN107209705A (zh) 2017-09-26

Similar Documents

Publication Publication Date Title
CN107209705B (zh) 用于计算环境的活动回滚
US11579991B2 (en) Dynamic allocation of compute resources at a recovery site
US9575991B2 (en) Enabling coarse-grained volume snapshots for virtual machine backup and restore
US9740472B1 (en) Mechanism for performing rolling upgrades in a networked virtualization environment
US9760447B2 (en) One-click backup in a cloud-based disaster recovery system
US9304804B2 (en) Replicating virtual machines across different virtualization platforms
US8769226B2 (en) Discovering cluster resources to efficiently perform cluster backups and restores
US20190235904A1 (en) Cloning services in virtualized computing systems
US9268610B2 (en) Rapid virtual machine cloning
US20110252208A1 (en) Express-full backup of a cluster shared virtual machine
US9558023B2 (en) Live application mobility from one operating system level to an updated operating system level and applying overlay files to the updated operating system
US9594583B2 (en) Lightweight snapshots for virtual disks
US9990161B2 (en) Consistent replication of virtual computing instance data
US11231953B2 (en) Minimizing downtime when importing virtual machines from other platforms
US11675611B2 (en) Software service intervention in a computing system
US11307934B1 (en) Virtual backup and restore of virtual machines
US20160210198A1 (en) One-click backup in a cloud-based disaster recovery system
US20230342268A1 (en) Uncorrectable Memory Error Recovery For Virtual Machine Hosts
Mohan et al. M2: Malleable metal as a service
JP2016162428A (ja) 情報処理システム、管理装置、および情報処理システムの管理方法
US20130246725A1 (en) Recording medium, backup control method, and information processing device
Walters et al. A fault-tolerant strategy for virtualized HPC clusters
Knauth et al. Fast Virtual Machine Resume for Agile Cloud Services.
US10089136B1 (en) Monitoring performance of transient virtual volumes created for a virtual machine
JP2016076152A (ja) エラー検出システム、エラー検出方法およびエラー検出プログラム

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
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20210209