CN104461876B - 一种基于运行快照序列的并行程序重现调试方法 - Google Patents
一种基于运行快照序列的并行程序重现调试方法 Download PDFInfo
- Publication number
- CN104461876B CN104461876B CN201410697303.3A CN201410697303A CN104461876B CN 104461876 B CN104461876 B CN 104461876B CN 201410697303 A CN201410697303 A CN 201410697303A CN 104461876 B CN104461876 B CN 104461876B
- Authority
- CN
- China
- Prior art keywords
- snapshot
- program
- user
- module
- concurrent program
- 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
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于运行快照序列的并行程序重现调试方法,在并行程序运行前,由用户执行在程序运行中对调试会产生帮助的关键点;在并行程序执行的过程中,针对用户指定的每一个关键点都保存一个快照,多个快照形成快照序列。在并行程序执行结束后,进入重放阶段,向用户展示快照信息以恢复出程序在设定关键点的运行场景。本发明提出的运行快照序列方法实际上将并行程序的调试执行从一个物理上的实际执行转化为了一个逻辑上的概念执行,这也是本发明提出的方法与传统技术方案的一个最大不同。本发明提出的运行快照序列方法具有实现简单、使用灵活和额外代价小这三个主要优势。
Description
技术领域
本发明涉及在多核架构中进行软件调试的方法。更具体的说,本发明设计在多核架构中实现共享内存多线程程序的可重现调试的技术方法。可重现调试为一种可以让并行程序在运行过程和调试过程中都能产生相同结果的技术。
背景技术
近年来,为了使硅效率(即,“应用可实现的”MIP/mm2或MIP/mW)最大化,出现了一种制造包含多个核的处理器的趋势。这种多核架构理想地适于运行基于线程的应用,因为线程定义了包含执行状态、指令流和数据组的自主工作包,该线程通过定义可以与其他线程并行执行。然而,这种并行执行对在这些多核架构上使用的软件调试进程引入了另外的问题。软件调试是对计算机应用的执行中的错误进行定位和改正的总称。
针对于并行程序而进行的软件调试,一般会由于并行程序运行的不确定性而产生困难。并行程序的不确定性是指,在相同不行程序的多次运行中,产生的结果可能是不同的。这一现象可能导致在软件的先前运行中,软件错误出现,但是在软件的调试运行中,软件错误消失。这种结果的不确定性就会为软件的调试带来困难。近年来在学术界和工业界提出了可重现调试的方法,以应对并行程序调试中出现的不确定性问题。所谓可重现调试,就是让并行程序在运行过程和调试过程中都能产生相同结果的技术。
造成并行程序执行不确定性的有多个方面,包括:不确定的指令、不确定的函数、IO操作(输入/输出操作)、陷阱指令、线程调度以及对共享内存不确定的访问等。为了实现程序执行的确定性,可重现调试需要消除上述多个方面可能造成的不确定性。其中,在多核处理器环境下执行多线程程序时,对共享内存不确定的访问顺序,是当前可重现调试领域面对的关键问题。
目前针对可重现调试,学术界和工业界都已经给予了充分的关注,并提出了多种解决方法。现有的解决方法主要可以分为三类:完全记录方式、部分记录方式和确定性重现方式。完全记录方式的思路为:记录所有共享内存上数据访问的冲突以及冲突之间的序列信息;部分记录方式的思路为:在完全记录方式记得基础上进行优化,只记录影响最终结果的部分关键访问序;确定性并行方法的核心思路为:在不记录任何共享内存访问序的情况下,使并行程序确定性的执行。
以上三种针对可重现调试问题的解决思路,都存在共同的不足,主要体现在一下的三个方面:第一,都需要较大的可重现代价。对于完全记录方式和部分记录方式,现有的技术方案都需要记录大量的日志。对于确定性并行方式,则会使并行程序的执行产生较大的性能损失,降低程序的并行性;第二,方案的泛用性差。已有的解决方法有些属于硬件方法,需要针对于特定的硬件结构。软件方面的方法也需要基于特定的操作系统、虚拟机以及运行时环境等;第三,可扩展性差。这里的可扩展性主要体现在对于线程数目的可扩展性。现有方案的实验数据大多基于2-4线程的测试,只有极少数的方案进行了线程数为8的测试。并且从实现结果中可以发现,现有方案的性能损失和日志大小会随着线程数超线性增长。
综上,并行程序的可重现调试为一个具有广泛应用前景的研究方向。但是现阶段针对可重现调试的已有研究成果都存在有比较严重的缺陷。一个可以指出的事实是:目前商业化的可以支持可重现调试的软件或硬件系统仍未出现。因此在现阶段,对可重现调试的实现思路进行更多的思考和尝试是十分有意义的。
发明内容
本发明提出的基于运行快照序列的并行程序重现调试方法适用于多核处理器平台中。所指的多核心处理器也可以成为多微处理器核心,是在一个单一的计算组件中,加入两个或两个以上的独立实体中央处理单元。这些核心可以分别独立运行程序指令。
本发明提出的是一种额外代价较小且具有实用性的实现并行程序可重现调试的方法。在可重现调试领域,传统的实现方式都采用了让需要被调试的程序进行实际重现的方式。即在并行程序执行的过程中记录一些必要的序列信息(或者在执行的过程中保证没有不确定执行情况的出现),从而保证在并行程序的原始执行和调试执行都将产生相同的结果。在保证了结果的相同后,用户就可以使用传统的断点、单步执行等调试方法进行进一步的调试。
本发明的提出的技术方案则是将并行程序的调试执行从一个物理上的实际执行转化为了一个逻辑上的概念执行。技术方案为:在并行程序运行前,由用户执行在程序运行中对调试会产生帮助的关键点;在并行程序执行的过程中,针对用户指定的每一个关键点都保存一个快照,多个快照形成快照序列。在并行程序执行结束后,进入重放阶段,向用户展示快照信息以恢复出程序在设定关键点的运行场景。
所指的快照为目标并行程序在指定时刻的整体运行状态,包括处理器中的寄存器使用情况(即处理器上下文)、内存中的堆及运行栈数据、以及程序对于系统中各类资源的使用情况。在具体的使用过程中,用户也可以根据自身需要对快照所涵盖的数据内容进行一定的缩减。
本领域的技术人员可以了解到,传统的程序调试流程一般包括:用户在程序中设定断点;程序开始运行,在用户设定的断点处停止;用户可以查看被调试程序在当前时刻的整体运行状态,包括处理器中的寄存器使用情况(即处理器上下文)、内存中的堆及栈数据、以及程序对于系统中各类资源的使用情况;用户在查看各个断点的状态数据后,可以对程序的运行状态产生更深的了解,并使用观察到的信息指导程序错误的修改。
与传统的调试流程对比可以发现,本发明所提出的基于运行快照序列的并行程序重现调试方法,在并行程序运行结束后,提供给用户连续的快照序列进行查看时,可以实现与传统调试类似的功能。但需要注意的是本发明提出的方法中,所有的程序执行关键点(类似于传统调试中的断点),必须在程序运行之前设置,在程序运行过程中和结束后均不能更改。并且由于所有的快照信息是在并行程序运行的过程中实时记录的,可以完全真实的反应并行程序的运行状况,从这一点上保证了调试错误的可重现。综上,本发明所提出的方法是实现了并行程序的可重现调试功能的。
本发明所提出的方法适用于解决多线程程序的可重现调试问题。为了解决这一问题,本发明提出的整体技术方案流程如下:
步骤一:提供给用户快照保存触发程序库,用户在程序编写的过程中,根据程序的具体业务逻辑,自行选择合适的位置在代码中调用快照保存触发程序库所提供的接口。
在完成编译后,与快照保存触发的相关的机器指令将会迁入到目标用户程序中的特定位置。
这里及下文中的目标用户程序指调试方法用户编写源代码并完成编译后产生的在操作系统中可调度的进程(如目标进程、任意一进程P)。
步骤二:在目标用户程序运行的过程中,若快照保存触发相关的机器指令被执行。则通过硬件提供的控制功能,使得所有执行目标用户程序的处理器核都被暂停,并且转入执行快照保存执行模块的程序。
步骤三:预先对目标用户程序执行时所处的操作系统程序进行改动。添加快照保存执行模块、快照信息维护模块以及额外的快照相关进程调度策略。快照保存执行模块负责保存目标用户程序在当前时刻的快照信息。快照信息维护模块负责提供快照保存状态的查询,以便所有的处理器核可以了解到目标用户程序的快照保存过程是否结束。额外的快照相关进程调度策略需要保证在目标用户程序的快照保存过程结束前,目标用户程序不能在多核处理器的任意一个微处理器核心上执行。
步骤四:在转入快照保存执行模块的程序执行后,首先要判断当前执行的处理器核所属的类型。如果当前程序执行所在的处理器核为快照保存的触发核,则将其称为触发核,否则将当前程序执行所在的处理器核称为响应核。对于在触发核中执行的快照保存执行模块,需要实际负责目标用户程序快照信息的保存,并在保存完成后向操作系统中的快照信息维护模块声明快照保存过程的结束。对于在响应核中执行的快照保存执行模块,则要主动结束目标用户程序时间片的执行。
步骤五:在触发核声明快照保存结束后,所有的处理器核都可以继续正常调度执行目标用户程序的任意一个线程。
步骤六:在目标用户程序整体执行结束后,将运行过程中产生的所有快照信息写入到外部存储中。
步骤七:在需要对程序的运行过程进行调试时,使用快照数据重现模块(6),读取外部存储中已经保存的快照信息,并将一个或多个快照顺序的展示给用户,实现一种近似的可重现调试效果。
在上述的技术方案下,本发明的有益效果主要在于,整体上提出了一种具有实用性的并行程序可重现调试方法,方法的具体优势体现在实现简单、使用灵活和额外代价小这三点上。实现简单方面,现有的并行程序可重现调试技术一般都对硬件以及操作系统具有较大的依赖。而本发明提出的方法只需要在操作系统中添加三个较小的功能模块,相比之下对系统和硬件具有更小的依赖,实现简单,具有更大的泛用性;使用灵活方面,在本发明提供的技术方案框架中,用户可以根据需要设定快照捕捉的关键点和快照的具体内容;额外代价小方法,已有的实现可重现调试的方法,为了实现程序的实际复现,在多核多线程程序的应用场景下都需要记录大量的内存访问顺序,而本发明提出的方法并不要求程序的实际复现,只需关注用户指定的一些关键点,为实现可重现调试而引入的代价较小。且具体的额外代价与线程数无关。
附图说明
图1是本发明基于运行快照序列的并行程序重现调试方法的流程图与捕捉部分结构框图。
图2是本发明基于运行快照序列的并行程序重现调试方法的重现部分结构框图。
图3是本发明快照捕捉触发核处理流程图。
图4是本发明快照捕捉响应核处理流程图。
图5是本发明辅助转存线程处理流程图。
图6是本发明额外进程调度策略处理流程图。
具体实施方式
下面结合附图,对本发明的具体实施方式进行进一步的说明。
图1和图2给出了本发明所提出的捕捉、重现的技术方案。在具体的实施方式中,本发明的技术方案可以划分为快照保存触发模块4、快照捕捉执行模块1、快照信息维护模块2、额外进程调度策略模块3、辅助转存线程模块5和快照数据重现模块6。
下面将对上述各个模块的具体实现方式进行进一步详细的说明。
快照保存触发模块4
快照保存触发模块4所对应的机器指令会混合编译到用户编写的程序中。提供多种逻辑供用户触发快照的保存。该快照保存触发模块4中同样需要实现一种和处理器硬件进行交互的机制,用来控制快照保存时多个处理器核的行为。
在快照保存触发模块4中,所提供给用户的是一个可以采用多种方式调用的程序库。在一个典型的程序库中,用户可以采用如下的几种方式完成快照的触发。
(A)直接触发方式:如程序库提供给用户一个可调用的函数DoSnap(),用户在调用该函数后就可以触发快照的采集。
(B)条件触发方式:可以成为条件触发的触发方式有很多种,例如:使用assert的语义,当某个变量不满足/满足某个条件时就触发快照的捕捉;使用try/catch语义,结合异常触发的机制,当出现某种类型的异常时就出发快照的捕捉。
(C)信号触发方式:当用户定义的并行程序在执行的过程中产生某些特定的信号,如段错误信号(信号类型并不限定于必须停止程序执行的致命信号)时,就触发快照的捕捉。上述的信号是针对Linux系统环境进行说明的。本领域的技术人员可以了解到,Linux系统是一种目前使用非常广泛的操作系统,在其他的常用商业操作系统中,如Window/Unix中,也会支持类似的信号发送和捕获功能。
快照保存触发模块4在具体的实施过程中需要关注的另一点就是对多个处理器核(如处理器核A、处理器核B、处理器核C、处理器核D等)的控制。对于共享内存执行环境下的多线程程序,属于同一进程的多个线程可能同时在多个处理器的物理核上执行。在这种情况下,如果处理器核A触发快照捕捉后不对处理器核B和处理器核C进行控制而直接进行快照保存。则最后保存的快照结果,有极大的可能出现各个线程的快照信息不在同一时间点上的情况,在这种情况下,最终保存得到的快照信息是和实际执行过程不符,甚至可能对用户的调试过程产生误导的。因此,快照保存触发模块4需要对处理器的多个物理核进行控制,在保存快照的过程中使多个处理器核同时暂停。
暂停一个处理器核上程序的运行。常用的方法分为软件和硬件两种。软件的方法即利用操作系统对进程的调度来完成指定线程的停止执行。但软件方法必须在用户程序需要执行特权执行并进入系统态时才会生效,在这样的情况下,发出停止信号到目标线程实际停止,这期间可能产生的延迟是不确定的。而硬件的方法则是使用处理器硬件提供的控制功能,一般会在一个处理器执行时间周期内完成控制的生效。
目前在主流的商用处理器中都可以实现上述的硬件控制多个处理器核暂停的功能。本发明的具体保护点并不涵盖于硬件暂停方法的具体实现过程。但是在具体实施方式的说明中,可以给出特定硬件平台上的一种具体实现方法:该方法适用于Intel IA-32/64处理器架构。本领域的技术人员可以了解到,Intel IA-32/64处理器架构是目前应用最为广泛的一款商用处理器架构。Intel IA-32/64处理器架构中,提供了IPIs技术,即跨处理器中断。通过使用IPIs技术,用户可以实现软件上的中断自我触发。在Intel IA-32/64架构多核处理器的每个处理器核中,都具有local-APIC部件。用户在使用汇编指令向local-APIC中的RAC寄存器写入数值后,即可以向其他所有的处理器核广播特定类型的中断。
则在Intel IA-32/64处理器架构中,快照保存触发模块4控制功能的一个可能的具体实现流程为:
1.用户程序触发快照保存。
2.设触发快照保存的线程所运行于的处理器核为coreA。向coreA中local-APIC部件中的RAC寄存器写入实现定义的中断类型。
3.事先将快照保存执行模块的程序作为特定中断的处理函数进行注册。则所有的处理器核可以在一个指令周期内暂停并转入快照保存执行程序。
快照捕捉执行模块1
快照捕捉执行模块1需要事先作为附加模块添加至操作系统中,负责实际执行快照的保存过程。在保存过程中需要对处理器核的类型加以区分,划分为触发核和响应核,并进行不同的处理。
在快照捕捉模块1的具体实施方案中,首先要对处理器核的类型进行定义。设触发快照保存的线程所运行于的处理器核为触发核,其他的所有处理器物理核为响应核。在实际的快照保存执行流程中,触发核为实际执行保存的处理器核,响应核需要完成的则为部分同步操作。
快照捕捉触发核的具体处理流程如图3所示。以下将对图3中展示的具体流程进行进一步的说明:
(A)在快照触发前,于触发核上执行的为需要保存进程的一个线程(在本部分的说明中称之为目标进程和目标线程)。在目标线程执行的过程中,用户的逻辑触发了快照的保存,使用上文已经提到的处理器控制方法,让触发核的执行转入快照保存执行部分。
(B)在转入快照保存执行部分后,首先与快照信息维护模块进行交互,声明目标进程的快照保存过程开始。
(C)执行实际的快照保存过程。从操作系统中读取必要信息,获取与目标进程相关的内存资源和系统资源,转化成为完整的快照信息,并将快照信息复制到内存中特定的目标区域。
(D)与快照信息维护模块进行教书,声明目标进程的快照保存过程结束。
(E)触发核的快照保存执行过程结束。
快照捕捉响应核的具体处理流程如图4所示。以下将对图4中展示的具体流程进行进一步的说明:
(A)快照捕捉响应核接收到硬件发出的暂停信号,转入快照保存执行模块。
(B)检查当前正在执行的进程是否为发出快照捕捉请求的进程。如果是,则主动结束当前进程时间片的处理,并向操作系统通知,随后操作系统在调度的过程中会调度其他的进程至当前的响应核。如果否,则返回至程序正常执行的状态。本领域的技术人员可以了解到,主动结束时间片的处理有多种方式,包括执行任意特权指令时响应核进入系统态等。操作系统进程调度中的额外策略体现在额外快照线程调度策略模块中。如果不是,则响应核将恢复程序的正常执行,不受快照保存行为的影响。
在触发核执行快照实际保存的过程中,还可以根据用户的需要对快照的内容进行个性化的定制。在最完整的情况下,快照信息将包括目标进程所使用的全部内存资源(运行栈、堆的数据)、处理器上下文以及其他各类对调试有帮助的系统资源。在实际实现的过程中,考虑到进行调试的目标程序占用的内存空间可能较大,且大部分的内存中存储的数据对用户设计的调试过程并没有实际的帮助,这时候用户就可以自行定义实际的快照内容,对完成的快照数据进行裁剪。例如,只保存运行栈中的数据,或者只保存关键的变量数据等。
在本发明中提出的捕捉过程中,快照保存触发模块4会多次满足触发条件,即第一次快照保存触发、第二次快照保存触发、……、第N次快照保存触发;使得快照捕捉执行模块1被多次执行,即第一次转入快照保存执行过程、第二次转入快照保存执行过程、……、第N次转入快照保存执行过程;最终生成多个用户程序快照,即第一次用户程序快照、第二次用户程序快照、……、第N次用户程序快照。
快照信息维护模块2
快照信息维护模块2需要事先作为附加模块添加至操作系统中,负责维护一个或多个正在执行快照保存的进程的信息。快照捕捉执行模块1、额外进程调度策略模块3都需要与快照信息维护模块2进行交互。
快照信息维护模块2为需要向操作系统中添加的一个独立模块。该模块在内部为每个需要保存快照的用户进程维护一个结构体,每个结构体包含两种状态:快照保存状态和空闲状态。每个结构体还要对应一个唯一的进程标示符,快照信息维护模块2可以通过进程标示符检索到任意一个处于运行中的需要保存快照的进程对应的结构体。在后续的说明中将上面定义的结构体成为信息管理结构体。
快照信息维护模块2向外提供四个调用接口:进程运行开始、进程运行结束、快照保存开始以及快照保存结束。
进程运行开始接口由操作系统在创建一个需要保存快照的用户进程时调用。调用后快照信息维护模块2会针对新新创建的用户进程创建信息管理结构体。并且结构体处于空闲状态。于此对应的,进程运行结束接口有操作系统的一个需要保存快照的用户进程结束时调用。调用后将会删除与该进程对应的信息管理结构体。
快照保存开始以及快照保存结束则由快照捕捉执行模块1中定义的触发核调用。当触发核转入快照捕捉执行模块1的执行时,会首先调用快照保存开始接口,随后快照信息维护模块2便会将对应信息管理结构体的状态改变为快照保存状态。当触发核完成了快照的保存后,会调用快照保存结束接口,随后快照信息维护模块2变回将对应信息管理结构体的状态改变为快照保存状态。
额外进程调度策略模块3
额外进程调度策略模块3需要实现作为附加模块添加至操作系统中。在操作系统实际运行的过程中,与已有的线程调度策略相结合,实现与已有机制存在一定不同的新型线程调度策略。
本发明中的额外进程调度策略模块3,需要作为一个附加部分添加到操作系统的整体线程调度策略中。本领域的技术人员可以了解到,目前主流使用的操作系统,如Windows/Linux/Unix,其内部具有较为独立的线程调度策略模块。在操作系统已有的调度策略的基础上,如图6所示额外进程调度策略模块3的运行流程如下:
(A)运行操作系统中原始的线程调度策略,得到调度结果。针对处理器核D的一次调度可以被表示为:将进程P调度到处理器核D执行。
(B)从快照信息维护模块2中获取任意进程P对应的快照保存状态。如果进程P是处于快照保存状态,则需要拒绝此次进程调度;如果否,则接受此次调度。
(C)拒绝进程调度后会再次调用操作系统中原始的线程调度策略,直至线程调度策略产生的结果为可接受为止。
辅助转存线程模块5
辅助转存线程模块5需要实现作为附加模块添加至操作系统中,负责将一个或多个正在执行快照保存的进程所保存的快照,在适当的时机转存如外部存储中。
本发明所提出的运行快照记录方法,在程序占用内存空间较大,或者程序运行时间较长时,可能产生的快照数据量是比较大的。如果将所有的快照数据都保存在内存会导致存储资源的耗尽。因此,需要在程序运行的过程中,定时将部分的快照数据转存如外部存储中。
一个可以考虑的方案为让触发核在执行实际的快照保存时,每添加一个快照后,就检查当前存储的快照容量是否超出限制,如果超出限制则将部分快照信息转存到外部存储中。但是采用此种方案时,快照保存操作的运行时间可能较长,这会对需要保存快照的进程的运行产生较大的影响。
为了解决这一问题,在实际的实现方案中引入了辅助转存线程模块5。所述的辅助转存线程模块5与快照捕捉执行模块1和快照信息维护模块2相互配合运行。当有一个新的需要保存快照的进程开始运行时,快照信息维护模块2便会为其在内存中分配一定的快照保存空间,快照捕捉执行模块1会将该进程产生的用户程序快照写入到该内存区域中。而辅助转存线程模块5则会同时关注所有正在运行的需要保存快照的进程对应的内存区域。其具体的运行流程如图5所示:
(A)在操作系统开始运行后,辅助转存线程模块5就作为一个独立的模块伴随操作系统开始运行。在实际运行的过程中,辅助转存线程模块5始终执行以下的循环。
(B)辅助转存线程模块5遍历所有已经启动的进程列表。
(C)针对每一个进程,首先检查该进程是否执行结束。如果是已经执行结束,则需要将该进程在内存中存储的所有快照信息都写入到外部存储中。如果否,则继续执行下一步的检查。
(D)检查当前进程在内存中存储的快照信息是否超过了容量限制,如果是超过则将部分快照信息写入到外部存储中,如果否,则不进行任何的快照转存操作。这里的容量限制可以根据系统各种性能指标灵活的制定。
(E)针对当前进程的检查和转存操作结束。跳至(B),继续循环。
快照数据重现模块6
快照数据重现模块6在并行程序执行完成后运行,从外部存储中读取已经保存的快照信息,并结合具有一般功能的调试工具将快照信息连续的展示给用户,从而提供完整的调试功能。
快照数据重现模块6的实现方案可以整体分为两个部分,第一是单一快照中的信息完整的展示给用户,第二是实现多个快照(即重现第一次用户程序快照、重现第二次用户程序快照、……、重现第N次用户程序快照)之间的连续播放、跳转等功能。
针对第一部分,如果保存的快照为完整版本,即包含了程序占有的全部内存资源(堆、运行栈),则可以结合已有的调试工具进行展示。GDB为一个目前应用最为广泛的调试工具,在GDB结合Linux系统可以实现core dump的功能,即当用户程序崩溃时会自动捕捉用户程序锁占有的全部内存资源,形成一个core dump文件。GDB可以加载core dump文件,加载后用户可以自由的查看程序中运行栈和堆中任意地址上的数据。
快照信息的展示便可以和GDB已有的core dump功能相结合。具体实施方法为:采用伪装的方法,将一个保存得到的快照信息伪装成一个完整的core dump文件,从而可以加载到GDB中进行查看。使用这种方法,一方面可以充分的利用已有调试工具的功能,另一方面也可以使新型的调试方法作为已有通用调试工具的一个新功能进行发布,从而增加发明的易用性和可扩展性。
针对上述的第二部分,本领域的技术人员可以了解到,其整体实现方法较为清晰和简单。
本发明是一种基于运行快照序列的并行程序调试方法,所要解决的是并行程序,尤其共享内存的多线程程序的可重现调试的技术问题。该方法在并行程序运行过程中,于用户指定的关键点完成快照的保存;在并行程序运行结束后,向用户展示快照信息以恢复出程序在设定关键点的运行场景。该方法利用快照保存和重现的技术手段,将并行程序的调试执行由物理执行转化为了逻辑执行,从而克服了并行程序可重现所面临的效率问题,具有实现简单、使用灵活和额外代价小这三个主要优势和技术效果。
Claims (3)
1.一种基于运行快照序列的并行程序重现调试方法,在多核多线程的并行程序运行环境中,在用户并行程序运行的过程中通过快照保存触发模块(4)触发快照捕捉执行模块(1),捕捉多个运行快照;所捕捉到的快照信息由快照信息维护模块(2)进行维护,并经由辅助转存线程模块(5)写入外部存储器中;在快照捕捉的过程中,让额外进程调度策略模块(3)与系统中已有的调度策略结合,以实现性能的优化;在并行程序运行结束后,将多个快照的详细信息经由快照数据重现模块(6)展示给用户,并提供快照间的前后跳转操作;其特征在于具有以下步骤:
所述快照捕捉执行模块(1)对硬件环境中的多个处理器核进行控制,当多个处理器核其中的一个触发后,使用硬件提供的控制功能,控制其他所有的处理器核中断当前程序的指令并转入特定的中断处理器程序;
在所述的快照信息维护模块(2)中,提供快照进程创建、进程执行结束、快照捕捉开始、快照捕捉结束、进程信息获取以及进程信息删除这5个对外调用的接口;当快照进程创建接口被调用时,为该进程创建状态变量,并分配一块内存中的存储空间;状态变量的状态包括:正常执行、快照保存中以及执行结束;当进程执行结束接口被调用时,将对应进程的状态置为执行结束;当快照捕捉开始接口被调用时,将对应进程的状态置为快照保存中;当快照捕捉结束接口被调用时,将对应进程的状态置为正常执行;当进程信息获取接口被调用时,将全部的进程信息返回给调用者;当进程信息删除接口被调用时,删除对应进程的状态变量,并释放为其分配的内存空间;
在所述的额外进程调度策略模块(3)中,作为一个额外的调度策略添加到操作系统已有的线程调度模块中;首先调用操作系统已有的线程调度模块,得到一个新的调度操作<T,P>,即将线程T调度至处理器P上执行;与快照信息管理模块进行交互,判断线程T对应的进程是否正在执行快照保存,如果正在执行,则拒绝此次调度,并申请一个新的线程调度结果,如果未执行快照保存,则通过此次调度,并实际执行线程调度;
所述快照保存触发模块(4)在快照的触发方式中,以程序库的方式提供用户的条件下,程序库中包含多种的快照触发方式的:
直接触发,即用户调动快照捕捉函数直接触发快照的捕捉;
条件触发,即用户使用assert以及try/catch予以,在程序执行满足某种条件时触发快照的捕捉;提供程序库的意义在于允许用户通过代码逻辑自行灵活定义快照的触发时机;
在所述的辅助转存线程模块(6)中,伴随操作系统而启动,之后始终使用一个独立的线程执行如下的循环:A访问快照信息管理模块,获得当前所有需要保存快照的进程列表;B对列表中的每个进程进行检查,如果进程已经执行结束,则将该进程在内存中保存的全部快照信息写入外部存储中,并通知快照信息管理模块删除该进程的信息;如果进程未执行结束,则检查进程写入内存中的快照信息是否超过预先定义的容量限制,如果超过,则将该进程当前写入内存中的快步快照信息都写入内部存储中;C跳至A,继续循环;
所述的运行快照,包含用户并行程序所使用的如运行栈,堆的全部内存资源,以及保存时刻所有处理器核的上下文;
在并行程序运行结束后,通过快照数据重现模块(6)将多个快照的详细信息展示给用户,并提供快照间的前后跳转操作,其特征在于,具有一下步骤:从外部存储中读取进程保存的全部快照信息;使用已有的调试工具,或使用定制的调试工具,向用户展示任意一个快照的详细信息;如果使用的是已有的调试工具,则需要根据工具的要求,对快照数据的格式进行一定的转变;用户在浏览其中一个快照的过程中,可以选择跳转至其他快照,包括前一个快照,后一个快照,或者运行过程中的任意一个快照。
2.根据权利要求1所述的基于运行快照序列的并行程序重现调试方法,其特征在于:在用户并行程序运行的过程中捕捉多个运行快照的具有以下步骤:提供快照触发程序库,将快照的触发方式以程序库的方式提供给用户,由用户根据程序具体逻辑决定快照的捕捉点;在用户触发快照的捕捉后,对硬件环境中的多个处理器核进行控制,以保证快照捕捉的有效性;转入操作系统中预先添加的快照捕捉执行模块,完成快照内容的捕捉和存储;一次快照捕捉执行结束后,用户的并行程序继续正常的执行。
3.根据权利要求1所述的基于运行快照序列的并行程序重现调试方法,其特征在于:在所述的快照捕捉执行模块(1)中,对当前所执行的处理器核进行判断,如果当前处理器核触发了快照的保存,则称之为触发核,否则,称之为响应核;对于触发核,首先要向快照信息管理模块声明快照保存的开始,根据用户定制策略筛选出需要保存的快照信息,并将快照信息写入与进程对应的内存区域;随后,向快照信息管理模块声明快照保存结束,结束快照的保存过程;对于响应核,需要判断当前执行的代码是否为需要保存快照的目标进程的代码,如果是,则主动结束当前时间片的指令,否则,恢复程序的正常指令,不受快照保存过程的影响。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410697303.3A CN104461876B (zh) | 2014-11-26 | 2014-11-26 | 一种基于运行快照序列的并行程序重现调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410697303.3A CN104461876B (zh) | 2014-11-26 | 2014-11-26 | 一种基于运行快照序列的并行程序重现调试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104461876A CN104461876A (zh) | 2015-03-25 |
CN104461876B true CN104461876B (zh) | 2017-09-22 |
Family
ID=52907965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410697303.3A Expired - Fee Related CN104461876B (zh) | 2014-11-26 | 2014-11-26 | 一种基于运行快照序列的并行程序重现调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104461876B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407103A (zh) * | 2016-07-20 | 2017-02-15 | 平安科技(深圳)有限公司 | 异常信号处理方法及装置 |
US10031834B2 (en) | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
US10042737B2 (en) * | 2016-08-31 | 2018-08-07 | Microsoft Technology Licensing, Llc | Program tracing for time travel debugging and analysis |
US10489273B2 (en) | 2016-10-20 | 2019-11-26 | Microsoft Technology Licensing, Llc | Reuse of a related thread's cache while recording a trace file of code execution |
US10310963B2 (en) | 2016-10-20 | 2019-06-04 | Microsoft Technology Licensing, Llc | Facilitating recording a trace file of code execution using index bits in a processor cache |
CN106708737B (zh) * | 2016-12-21 | 2020-06-26 | 腾讯科技(深圳)有限公司 | 一种测试方法及装置 |
US10318332B2 (en) | 2017-04-01 | 2019-06-11 | Microsoft Technology Licensing, Llc | Virtual machine execution tracing |
CN110362617B (zh) * | 2019-06-24 | 2023-06-13 | 北京人大金仓信息技术股份有限公司 | 基于多并发技术从数据库快速导出批量数据方法和系统 |
CN110442380B (zh) * | 2019-07-03 | 2021-11-09 | 武汉深之度科技有限公司 | 一种数据预热方法及计算设备 |
CN110597705B (zh) * | 2019-07-30 | 2023-01-20 | 广东工业大学 | 一种可重复获取测试数据的程序调试方法及装置 |
CN112181853A (zh) * | 2020-10-28 | 2021-01-05 | 上海豹云网络信息服务有限公司 | 程序调试方法、装置及系统 |
CN112416790B (zh) * | 2020-11-30 | 2023-04-14 | 中国航空工业集团公司西安航空计算技术研究所 | 一种嵌入式软件离线重放调试方法和装置 |
CN113220335B (zh) * | 2021-05-26 | 2023-03-14 | 西安热工研究院有限公司 | 一种避免多线程并发写快照数据乱序的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1588323A (zh) * | 2004-09-23 | 2005-03-02 | 上海交通大学 | 并行程序可视化调试方法 |
CN101295279A (zh) * | 2007-04-29 | 2008-10-29 | 国际商业机器公司 | 多线程环境下的调试程序的方法和系统 |
CN102567196A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 一种处理器仿真调试方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003050716A (ja) * | 2001-08-06 | 2003-02-21 | Matsushita Electric Ind Co Ltd | ソフトウエアデバッガとソフトウエア開発支援システム |
-
2014
- 2014-11-26 CN CN201410697303.3A patent/CN104461876B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1588323A (zh) * | 2004-09-23 | 2005-03-02 | 上海交通大学 | 并行程序可视化调试方法 |
CN101295279A (zh) * | 2007-04-29 | 2008-10-29 | 国际商业机器公司 | 多线程环境下的调试程序的方法和系统 |
CN102567196A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 一种处理器仿真调试方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104461876A (zh) | 2015-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104461876B (zh) | 一种基于运行快照序列的并行程序重现调试方法 | |
US5632032A (en) | Cross address space thread control in a multithreaded environment | |
US8327336B2 (en) | Enhanced thread stepping | |
CN102147749B (zh) | 仿真os隔离定序器上的用户级多线程处理的机制 | |
EP2989541B1 (en) | Controlling tasks performed by a computing system | |
US6708326B1 (en) | Method, system and program product comprising breakpoint handling mechanism for debugging and/or monitoring a computer instruction sequence | |
KR950006616B1 (ko) | 변환된 프로그램 코드에서 소스 명령 분자를 보전하기 위한 시스템 및 방법 | |
US8849753B2 (en) | Automating asynchronous programming in single threaded systems | |
CN101446918B (zh) | 一种实现用户态调试器调试单个函数的方法及系统 | |
JPH0535453B2 (zh) | ||
JPH0535454B2 (zh) | ||
EP1685486A2 (en) | Interrupt and trap handling in an embedded multi-threaded processor to avoid priority inversion and maintain real-time operation | |
JP2004288162A (ja) | 同期タスクを利用したオペレーティングシステムアーキテクチャ | |
US20020116436A1 (en) | Context preservation | |
EP1760580B1 (en) | Processing operation information transfer control system and method | |
CN109885489B (zh) | 驱动程序中数据竞争检测方法及装置 | |
WO2016097681A1 (en) | Monitoring utilization of transactional processing resource | |
CN112559047B (zh) | 一种基于risc-v的中断控制系统及方法 | |
EP2630577B1 (en) | Exception control in a multiprocessor system | |
CN115237728B (zh) | 一种实时操作系统运行状态的可视化监视方法 | |
CN111506395B (zh) | 一种混合仿真的全数字虚拟运行环境的实现方法及装置 | |
Huang et al. | Investigating time properties of interrupt-driven programs | |
GB2372348A (en) | A multi-mode, multi-tasking processor with reduction in context preservation and restoration to save processing time | |
US7996848B1 (en) | Systems and methods for suspending and resuming threads | |
CN102339223A (zh) | 数字数据处理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210426 Address after: 100160, No. 4, building 12, No. 128, South Fourth Ring Road, Fengtai District, Beijing, China (1515-1516) Patentee after: Kaixi (Beijing) Information Technology Co.,Ltd. Address before: 100191 Haidian District, Xueyuan Road, No. 37, Patentee before: BEIHANG University |
|
TR01 | Transfer of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170922 Termination date: 20211126 |
|
CF01 | Termination of patent right due to non-payment of annual fee |