掌桥专利:专业的专利平台
掌桥专利
首页

本申请是于2018年3月26日向国际局提出、优先权日为2017年4月1日和2017年4月14日、于2019年9月25日进入中国国家阶段、国家申请号为201880021127.8、发明名称为“虚拟机运行跟踪”的中国发明专利申请的分案申请。

背景技术

机器虚拟化是用于将计算机的硬件呈现为多个虚拟机(VM)的技术,其中每个虚拟机能够同时在相同计算机上运行。每个此类虚拟机(VM)能够托管客户操作系统,并且计算机的硬件到客户操作系统的虚拟化呈现对客户操作系统是基本上透明的。机器虚拟化已经变得有效、可靠并且便于管理。因此,机器虚拟化被更加频繁地使用,并且用于扩展应用和工作负载的类型。

机器虚拟化越来越多的使用导致对于如下的需求增加:理解VM的运行、分析性能、维护VM的计算活动的记录以及调试VM的运行和/或其客户软件。VM运行跟踪是为了这些目的而提出的一种技术。运行跟踪包括跟踪VM的运行活动,并且存储运行跟踪以用于后续分析。运行跟踪可以用于详细的运行后分析以及调试VM运行。理想地,运行跟踪是确定性的并且“可重放”,也即,其具有足够的信息以支持软件调试工具中常见的回放特征,诸如语句的逐步运行、反向回放、详细堆栈以及每个语句之前和之后的符号分析等。

虽然已经认识到VM运行跟踪是可期望的,但是先前的尝试在实现和性能上存在缺点。一种方法是强制VM在单个运行线程中运行,这促进确定性,但是难以实现并且限制了性能。对于并行性非常关键的许多类型的客户软件而言,该限制禁止了产品使用。另一种方法捕获所有VM存储器,但是这带来了启动和存储成本。又一种方法使用存储器状态的复杂运行时监测来维护跟踪确定性,但是这难以准确实现,具有高开销,并且可能显著影响一些工作负载的性能。具有跟踪启动指令的仪器客户软件是另一种可能性,但是其具有需要重新编译以及部署新的可运行代码的实际缺点。其他的方法尝试了在VM和管理程序之间插入跟踪逻辑,但是成败参半并且具有许多平台特异性。

所需要的是便于在虚拟化层实现的用于可重放VM运行跟踪的技术,对VM性能具有较低的影响,维持并发多处理VM的因果关系,并且可以在有或没有VM可见性或动作的情况下使用。

发明内容

包括以下发明内容仅为了介绍在下文具体实施方式中讨论的一些概念。该发明内容不是全面的,并且不旨在描述所要求保护的主题的范围,所要求保护的主题的范围由结尾处提供的权利要求来阐述。

实施方式涉及捕获由虚拟化层所管理的VM的可重放运行跟踪的虚拟化层。可以对由虚拟化层管理的运行的任何单元执行运行跟踪,例如,线程、进程、虚拟处理器、个体VM、多个VM等。被跟踪的运行单元可以并行运行。运行跟踪涉及将以下捕获到缓冲区(可选地环形):运行的指令、输入到指令的存储器、由指令输出的存储器、由指令接触的寄存器以及排序标记。运行跟踪数据可以以块来捕获,其中保留了因果关系并且保留了在块之间但不必在块内的排序。可以通过在上下文切换之间插入单调增加的标记来描述块,由此对块进行相对地排序。可以通过标识非确定性事件而部分地提供确定性。VM跟踪可以对客户软件是透明的,其不需要感知化。备选地,客户可以与跟踪实现虚拟化层对接以控制跟踪功能性。

下面将参考结合附图考虑的以下详细描述来解释许多伴随特征。

附图说明

根据结合附图阅读,以下具体实施方式将更好地理解本说明书,其中相似的附图标记用于指定所附描述中相似的部分。

图1示出了包括已知类型的管理程序的示例虚拟化环境。

图2示出了配置用于VM运行跟踪的虚拟化层。

图3示出了用于在虚拟化层处对线程跟踪进行排序的过程。

图4示出了插入到相应线程的跟踪中的排序标记。

图5示出了在其上可以实现上文描述的实施方式的计算设备的细节。

具体实施方式

以下讨论的实施方式涉及以有效的、准确反映因果关系的方式跟踪虚拟机(VM)的运行。运行跟踪由虚拟化层内的跟踪组件来提供。跟踪组件能够以产生可重放运行跟踪的方式来跟踪并行VM运行。可以在涉及或不涉及VM内的运行内的客户软件的情况下跟踪VM。根据跟踪何时发生以及哪些VM或客户软件被有效跟踪,可以灵活地界定跟踪的范围。

图1示出了包括已知类型的管理程序100的示例虚拟化环境。计算机102具有硬件104,其包括中央处理单元(CPU)106、存储器108、网络接口110、非易失性存储112以及未示出的其他组件,诸如总线、显示器和/或显示适配器等。管理程序100管理和促进虚拟机(VM)114、116的运行。每个虚拟机114、116通常具有包括虚拟盘的虚拟化设备,在虚拟盘内存储客户(guest)/主机操作系统116、118。机器或系统虚拟化由管理程序100提供,管理程序100与在特权VM116中运行的主机操作系统118协作。

虚拟化的任务可以以多种方式分布在管理程序100和主机操作系统118之间。在一些情况下,主机操作系统118可以仅包括诸如工具的最少的虚拟元件以及用于对管理程序100进行管理的用户接口。在其他情况下,主机操作系统118可以包括以下中的一个或多个:设备虚拟化管理、VM间通信设施、运行设备驱动器、启动或停止其他VM、用于与VM管理进行交互的工具,以及其他。简言之,客户操作系统118有可能可以处理管理程序的核心功能之外的任何虚拟化任务,诸如CPU和存储器共享。如本文使用的,“虚拟化层”将是指共同提供机器虚拟化的管理程序和客户VM的任何组合。该术语也指不使用特权VM来提供虚拟化功能性的虚拟化系统。

图2示出了配置用于VM运行跟踪的虚拟化层130。虚拟化层130包括跟踪组件132和环形缓冲区134。一般而言,跟踪组件132操作如下。当由CPU106的后备物理处理器针对处理时间而调度虚拟机114的虚拟处理器136时,由后备物理处理器(如本文使用的术语“物理处理器”是指在超线程CPU的情况下的物理核心和逻辑核心二者)处理针对相对应的客户运行单元(例如,线程)和该运行的处理器指令(运行流138)发生的上下文切换。由虚拟机中的软件发出的运行流138的指令当被接收或运行并且存储在环形缓冲区134中时,被跟踪组件132捕获。在一个实施方式中,使用CPU的基于硬件的跟踪特征来捕获指令。在另一实施方式中,虚拟化层实现处理器仿真,并且指令捕获被内置到处理器仿真器中。在多数情况下,当运行跟踪有效时,捕获所有的指令。环形缓冲区134中的运行跟踪数据可以选择性地或者连续地存储为一些本地(例如,特权VM的文件系统)或网络存储中的持续运行跟踪140。

虽然环形缓冲区是方便的并且提供某些优点,但是也可以使用其他类型的缓冲区。完全跟踪可能不需要循环缓冲区。如下文讨论的,缓冲对于选择性跟踪是有用的,其中将跟踪特定范围的运行(例如,某些模块、进程、线程、VM等)。

除了捕获指令之外,运行跟踪将包括被线程或其他运行单元的运行接触的存储器中的数据。代替复制VM114的全部存储器,这涉及在每个存储器块被正被跟踪的运行访问时,复制存储器块;从概念上讲,指令的输入和输出在被消费时被捕获。(可能是压缩的)。也捕获被访问的寄存器内容。每个线程一般以其自己的方式消费其自己的存储器,并且其他线程做什么的是不相关的。如果内核调用或者另一线程修改了被跟踪的线程的存储器,则可以由跟踪组件132捕获那些外部存储器修改。附加细节参见名称为“PROGRAM TRACINGFOR TIME TRAVEL DEBUGGING AND ANALYSIS(针对时间行进调试和分析的程序跟踪)”的美国专利申请号15/252,998(2016年8月31日提交)以及名称为“CACHE-BASED TRACING FORTIME TRAVEL DEBUGGING AND ANALYSIS(针对时间新近调试和分析的基于高速缓存的跟踪)”的美国专利申请号15/253,027(2016年8月31日提交)。

在一个实施方式中,跟踪目标VM的所有运行。因为虚拟化层130知道CPU何时运行来自目标VM的指令,所以虚拟化层130知道何时执行跟踪(当目标VM正在运行时)以及何时不执行。由此,所生成的跟踪仅包括目标VM的活动。即使目标VM具有多个虚拟处理器(VP),处理CPU调度的虚拟化层132也知道VP何时运行针对目标VM的代码,并且因此进行跟踪。将目标虚拟机的每个线程或运行单元记录为单独的相应跟踪集合,并且包含由其消费的指令、存储器/寄存器,等等。通过记录将每个跟踪的指令与指示提供指令的可运行文件或对象模型等的标识符相关联的信息,可以启用后跟踪符号分析(例如,在后续调试期间)。这允许以与调试器提供符号信息相同的方式,从跟踪进行符号的后续符号重构。

大多数被跟踪的运行将具有一些将不得不进行处理的非确定性事件。非确定性指令是其输出取决于被追踪用于跟踪的信息之外的信息。对非确定性指令的第一步处理是将指令如此标识。一旦检测到非确定性指令,就将其边际效应记录在跟踪中,并且在重放期间再现该边际效应。例如,如果发现指令生成随机数,则其难以以原始指令结果的精度进行重放,所以一种解决方法是记录边际效应(在该示例中,随机数所位于的寄存器的值),并且在重放时代替运行原始指令(或者在运行原始指令之后)将该数放置在合适的寄存器中。另一示例是读取处理器定时器的指令的跟踪。如果这不是被完全追踪的,则可以将边际效应放置在跟踪中,并且在重放时使用边际效应代替读取处理器器定时器。

跟踪多个并发线程/VP会出现排序和因果关系的问题。如果被跟踪的VM的运行的两个线程并发运行,则它们可能重叠。为了支持通过相应线程的跟踪中的因果关系来进行推理,运行的顺序对于考虑来说是重要的。虽然有可能包括跟踪信息的丰富集合以便以确定性的方式在线程之间进行线程的严格排序,但是一种较不繁重的方法是:以支持对于因果关系的充分相对排序而不需要相对于所有指令的严格排序的方式,对跟踪对存储器的访问进行建模。这可以通过以下实现:针对跟踪实现建模存储器,以使得来自存储器读取具有获得语义,并且向存储器写入具有释放语义,并且排序和记录那些相对应的事件。附加细节参见前面提及的专利申请。因为跟踪在虚拟化层处进行,所以从虚拟化层处的因果关系的共同角度来跟踪线程/VP。这一相同的方法不仅用于对给定VM的线程的运行进行排序,也用于对相对于彼此并发的VM的线程的运行进行排序。

因为跟踪发生在虚拟化层或管理程序处,所以线程是线程,并且可以在不考虑VM运行的情况下进行跟踪,因为可以跨任何两个线程对存储器进行排序。由此,跨机器的保存因果关系的跟踪是可能的。这可以支持先前不可能的新类型的调试。两个不同机器上的软件之间的交互(尽管是虚拟的)可以紧密相关。

图3示出了用于在虚拟化层处对线程跟踪进行排序的过程。在步骤150处,针对任何开始运行的VM线程开始跟踪。在步骤152处,如上文所述执行运行跟踪;将线程指令、存储器访问、寄存器等记录为在针对每个相应线程的集合中运行。在步骤154处,检测上下文切换。每次检测到上下文切换时,就将排序标记插入到相对应的线程中,并且存储所插入的排序标记的增量的值,并且继而在下一次需要排序标记时类似地使用。并不是可以将排序标记插入到换入线程(swapped-inthread)、换出线程(swapped-outthread)或二者中。这针对每个线程继续,直到其在步骤156处结束。

图4示出了被插入到相应线程的跟踪162中的排序标记160。每个跟踪分段164(阴影部分)表示被跟踪的指令以及在相同处理器上下文中发生的相对应的输入/输出数据的分段。虽然在跟踪分段164中的指令之间可能不能保证严格的排序,但是通过排序标记160保证了跟踪分段164之间(相对于彼此)的排序。通过排序标记160表示的上下文切换可以是由于客户切换线程、由虚拟化层进行的CPU调度(时间片切割)等的切换。排序标记可以是任何单调递增序列中的数字。标记可以是全局值,其针对每次上下文切换增加一次。对于某些CPU,标记可以是由CPU提供的时间戳计数器(跨越所有CPU核心是一致的)。虽然可能没有对VM或线程的跟踪的所有指令进行全部排序,但是保证了部分排序和因果关系,包括在多个VM之间(如果多个VM被跟踪)。需要注意,保证因果关系的程度取决于所选择的存储器模型以及用户希望对跟踪进行的分析的数量。

使用上述跟踪技术,可以通过虚拟化层和/或提供上文讨论的虚拟化功能性的特权VM实现多种跟踪控制功能(下文描述)。跟踪控制功能控制何时和/或如何执行或存储跟踪。可以通过管理程序超级调用、由特权VM暴露的虚拟化接口等的组合来实现跟踪控制功能。虽然客户可以被改装(instrumented)以利用任何跟踪控制功能,但是可以代替地由特权VM来调取跟踪控制功能以控制对于未改装(un-instrumented)的客户的跟踪。接下来描述的跟踪功能可以由改装的客户调取,或者对于未改装的客户由特权VM来调取。如果虚拟化层和/或特权VM提供用于调取跟踪功能的接口,则此类接口可能以由特权VM通过以下各项提供的用户接口的形式:RESTAPI(表现状态应用程序编程接口)、虚拟设备驱动器、网络端口或者与虚拟化层通信以控制跟踪的任何其他机制。

在描述跟踪功能之前,将解释环形缓冲区134的使用。环形缓冲区是用于存储运行跟踪的向前移动窗口的缓冲区。在一些实施方式中,环形缓冲区可以连续使用,但是不将缓冲区中存储的跟踪数据持久化。在目标VM的运行期间调取跟踪的情况下,缓冲区存储跟踪数据。环形缓冲区也用于缓存用于捕获跟踪数据可能需要的数据。例如,跟踪非确定性事件可能需要访问否则在事件发生时是不可用的被缓存的数据。环形缓冲区可以使用关键帧来处理包绕(wrapping)。例如,可以在每10%缓冲区块处添加关键帧,以使得在添加每个新的数据片时,仅损失缓冲区的10%。环形缓冲区对于执行压缩(参见上文引用的专利申请)和/或对于执行加密(下文讨论)也是有用的地方。

跟踪功能中的一个是简单的开/关功能,用于开启或关闭跟踪。开/关功能可以具有多个参数。一个参数可以是要被跟踪的目标。目标可以是一个或多个所标识的个体VM或者调用VM(隐含)。目标可以是个体进程或者进程的集合。另一参数可以是跟踪的时间跨度。时间可以被定义为时间范围,例如,持续时间(包括在时间中环形缓存的内容可以被允许返回多远的可能的后退)。

另一跟踪功能是周期跟踪功能。跟踪可以在时间段内激活以采样跟踪数据。例如,跟踪可以每分钟捕获1秒,每小时捕获10分钟,等等。环形缓冲区可以在足够的包含时间段内有效,以支持采样。

又一跟踪功能是基于事件的跟踪。跟踪可以链接至所标识的事件,诸如超级调用、中断、系统事件(例如,进程崩溃)等,以便在链接至所标识的事件时自动跟踪数据。需要注意,以上的任何跟踪功能都可能以与开/关功能相同的方式界定范围。也即,任何类型的跟踪控制的范围可以被界定为特定进程、VM、任何VM上的特定进程、定义的VM集合等。基于事件的跟踪和针对自组织跟踪的其他功能可能需要跟踪在环形缓冲区中执行,并且来自环形缓冲区的跟踪数据仅在需要时保持。

又一跟踪功能是跟踪加密。因为VM可能在不同的安全域中,并且跨VM数据泄漏将被认为是安全漏洞,所以在来自存储器的跟踪数据(即,指令输入和输出,以及寄存器)被存储以用于处理后分析之前,虚拟化层有可能对来自存储器的跟踪数据进行加密。如果虚拟化层具有对于VM私有的密钥,则该密钥可以用于至少加密该VM的跟踪的数据。配置有解密模块的调试器可以有可能使用密钥来对经加密的跟踪数据执行调试。在一个实施方式中,在另一VM的请求下跟踪未感知VM时,使用加密。也即,基于被跟踪的VM和跟踪请求VM的相对安全水平来触发安全措施。

应当注意,本文描述的跟踪技术不需要虚拟化层直接在硬件上运行。嵌套的VM可以在不修改的情况下使用相同的技术。换言之,在VM内运行的虚拟化层本身可以执行其VM的跟踪。如果要使用CPU硬件跟踪,则无论何时嵌套的虚拟化层具有CPU时间片时,都可以使用CPU跟踪特征。

图5示出了在其上可以实现上文描述的实施方式的计算设备102的细节。本文的技术公开将足以使程序员编写软件,和/或配置可重新配置处理硬件(例如,现场可编程门阵列(FPGA)),和/或设计专用集成电路(ASIC)等,以在计算设备220上运行,以便实现本文描述的任何特征或实施方式。

计算设备102可以具有一个或多个显示器222、网络接口224(或若干)以及存储硬件226和处理硬件228,其可以是以下任何一个或多个的组合:中央处理单元、图形处理单元、模数转换器、总线芯片、FPGA、ASIC、特定应用标准产品(ASSP)或者复杂可编程逻辑器件(CPLD)等。存储硬件226可以是磁性存储、静态存储器、易失性存储器、非易失性存储器、光学或磁性可读物质等的任何组合。如本文使用的术语“存储”的含义不是指信号或能量本身,而是指物理装置和物质状态。计算设备102的硬件元件能够以机器计算领域内很好理解的方式进行协作。另外,输入设备可以与计算设备102集成或者与计算设备102通信。计算设备102可以具有任何形状因子,或者可以在任何类型的包围设备中使用。计算设备102可以是手持设备的形式,诸如智能电话、平板计算机、游戏设备、服务器、安装于机架上的或者背板式板上计算机、片上系统等。

上文讨论的实施方式和特征可以实现为存储在易失性或非易失性计算机或者设备可读存储硬件中的信息的形式。这可以被认为是至少包括硬件,诸如光学存储(例如,紧致盘只读存储器(CD-ROM))、磁性介质、闪速只读存储器(ROM),或者存储数字信息以便容易地可用于处理硬件228的任何手段。所存储的信息可以是机器可运行指令(例如,编译可运行二进制代码)、源代码、字节码或者可以用于支持或配置计算设备执行上文讨论的各种实施方式的任何其他信息的形式。其也可以被认为是至少包括易失性存储器和非易失性介质,易失性存储器诸如随机存取存储器(RAM)和/或虚拟存储器,其存储诸如在实现实施方式的程序的运行期间的中央处理单元(CPU)指令,非易失性介质存储允许程序或可运行程序被加载和运行的信息。可以在任何类型的计算设备上执行实施方式和特征,包括便携式设备、工作站、服务器、移动无线设备等。

相关技术
  • 在云平台下虚拟机运行中对勒索软件的处理方法
  • 防止在不期望的主机服务器上运行脏虚拟机的方法和系统
  • 动态跟踪Java虚拟机运行的方法和装置
  • 动态跟踪Java虚拟机运行的方法和装置
技术分类

06120116481124