用于时间旅行调试和分析的计算机系统、计算机系统处实施的方法和硬件存储设备技术方案

技术编号:35787795 阅读:9 留言:0更新日期:2022-12-01 14:35
本公开的各实施例涉及用于时间旅行调试和分析的计算机系统、计算机系统处实施的方法和硬件存储设备。使用高速缓存数据来记录对可执行实体的执行的可重放跟踪包括:跨一个或多个处理器的一个或多个处理单元并发执行可执行实体的一个或多个线程。在一个或多个线程的执行期间,独立地为每个线程记录分离的可重放跟踪。针对每个线程,记录包括记录针对该线程的初始处理器寄存器状态。针对每个线程,记录还包括在检测到处理器数据高速缓存未命中时,记录被导入到处理器数据高速缓存中的至少一行高速缓存数据。记录还包括通过记录其副作用来记录至少一个事件的发生。来记录至少一个事件的发生。来记录至少一个事件的发生。

【技术实现步骤摘要】
用于时间旅行调试和分析的计算机系统、计算机系统处实施的方法和硬件存储设备
[0001]本申请是申请日为2017年11月6日、中国国家申请号为201780069596.2、专利技术名称为“用于时间旅行调试和分析的计算机系统、计算机系统处实施的方法和硬件存储设备”的中国专利技术专利申请的分案申请。

技术介绍

[0002]当在软件应用的开发期间编写源代码时,开发人员通常花费大量时间“调试”源代码以在代码中找到运行时错误。例如,开发人员可以采用几种方法来再现和本地化源代码故障(bug),诸如基于不同输入来观察程序的行为、插入调试代码(例如,打印变量值、追踪执行的分支等)、临时去除代码部分等。追踪运行时错误用以查明代码故障并占用应用开发时间的很大一部分。
[0003]已经开发了调试应用(“调试器”)以便协助代码调试进程。许多这种工具提供跟踪、可视化和更改计算机代码的执行的能力。例如,调试器可以可视化代码指令(例如,源代码、汇编代码等)和变量值的执行,并使得用户能够更改代码执行的各方面。通常,调试器使用户能够在源代码中设置“断点”(例如,源代码中的特定指令或语句),当在执行期间到达该断点时,使程序的执行被暂停。当源代码执行被暂停时,可以向用户呈现变量值并给予选项以选择如何继续(例如,通过终止执行、通过像正常那样继续执行、通过进入、跳过或退出语句/函数调用等)。然而,经典的调试器使得只能在单个方向(向前)中观察/更改代码执行。例如,经典的调试器不支持用户选择返回到之前的断点。
[0004]新出现的调试形式是“时间行程”调试,其中程序的执行被记录到跟踪中,然后可以对其进行向前和向后重放和分析。

技术实现思路

[0005]本文的实施例涉及用于时间行程调试的记录和重放跟踪的新实施方式,相对于之前尝试,其可以产生几个数量级上的性能改进,使得能够记录其线程跨多个处理单元并发自由运行的多线程程序,并且可以产生相对于之前尝试的跟踪文件,具有大小减小几个数量级的跟踪文件。
[0006]在一些实施例中,一种用于使用高速缓存数据来记录对可执行实体的执行的可重放跟踪的方法包括跨一个或多个处理器的一个或多个处理单元执行可执行实体的一个或多个线程。方法还包括,在一个或多个线程的执行期间,独立地为每个线程记录分离的可重放跟踪。记录分离的可重放跟踪包括,对于每个线程,记录针对线程的初始处理器寄存器状态。记录分离的可重放跟踪还包括,对于每个线程,并且在基于线程的执行检测到处理器数据高速缓存未命中时,响应于处理器数据高速缓存未命中而记录被导入到处理器数据高速缓存中的至少一行高速缓存数据。
[0007]提供本
技术实现思路
是为了以简化的形式介绍一些概念,这些概念将在下面的具体描述中进一步描述。本
技术实现思路
不旨在标识所要求保护的主题内容的关键特征或必要特征,
也不旨在用于帮助确定所要求保护的主题内容的范围。
附图说明
[0008]为了描述可以获得本专利技术的上述和其他优点和特征的方式,将通过参考在附图中图示的具体实施例来呈现上面简要描述的本专利技术的更具体的描述。应当理解,这些附图仅描绘了本专利技术的典型实施例,并且因此不应当认为是对其范围的限制,本专利技术将通过附图的使用,利用附加特征和细节进行描述和解释,其中:
[0009]图1图示了示例计算机架构,其中时间行程调试的实施例可以操作;
[0010]图2图示了用于记录对多线程进程的执行的可重放跟踪的示例方法的流程图;
[0011]图3图示了对跨并发执线程的事件进行排序的示例;
[0012]图4图示了使用卷影副本的示例;
[0013]图5图示了环形缓冲器的示例;
[0014]图6图示了用于基于处理器高速缓存的跟踪的示例计算机架构;以及
[0015]图7图示了用于使用高速缓存数据来记录对可执行实体的执行的可重放跟踪的示例方法的流程图。
具体实施方式
[0016]本文的实施例涉及用于时间行程调试的记录和重放跟踪的新实施方式,其可以产生相对于之前尝试的数量级上的性能改进,使得能够记录其线程跨多个处理单元并发自由运行的多线程程序,并且可以产生相对于之前尝试的跟踪文件,具有大小减小几个数量级的跟踪文件。
[0017]通常,时间行程调试的目标是在跟踪中捕获可执行实体(例如,用户模式线程、内核线程、管理程序等)执行哪个处理器指令,使得可以在稍后的时间以所需的任何粒度来绝对精确地从该跟踪重放这些指令。能够重放作为应用代码的一部分被执行的每个指令,使得稍后能够再现应用的向后重放。例如,为了在向后方向上命中断点,将从该断点之前的时间重放跟踪,并且重放停止在断点命中的最后一次时,即在调试器当前正在分析代码流之前。
[0018]提供时间行程调试的之前尝试已经遭受了导致受限地采用的若干折衷。例如,之前尝试对代码执行施加了显著的限制,诸如要求跟踪包括所执行的所有指令的严格排序(即,完全顺序一致的记录模型)。例如,这可以通过要求在单个核上非并发地执行多线程程序,或者通过要求在多个核上以锁步方式非并发地执行程序指令来实现(例如,在一个处理器核上执行N个指令,然后在另一处理器核上执行N个指令,等等)。鉴于当今的高度多线程代码和高度并行的多核和超线程处理器,这是很大的限制。另外,之前尝试会导致程序性能显著下降,并且通常会产生异常大的跟踪文件(特别是在模拟多个核时),至少部分是因为它们确定性地记录每一条指令的执行,并在程序执行期间创建完整存储器状态的综合记录。前面的每一个都使时间行程调试处的之前尝试对于在生产环境中使用和用于程序执行的长期跟踪既异常地缓慢又不现实,特别是对于具有许多并发运行的线程的应用。
[0019]操作环境
[0020]初始地,图1图示了示例计算环境100,其中时间行程调试的实施例可以根据本发
明进行操作。本专利技术的实施例可以包括或利用专用或通用计算机系统101,其包括计算机硬件,诸如例如,一个或多个处理器102、系统存储器103、一个或多个数据存储库104,和/或输入/输出硬件105。
[0021]本专利技术范围内的实施例包括用于携带或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这种计算机可读介质可以是可以由计算机系统101访问的任何可用介质。存储计算机可执行指令和/或数据结构的计算机可读介质是计算机存储设备。携带计算机可执行指令和/或数据结构的计算机可读介质是传输介质。因此,通过示例而非限制,本专利技术的实施例可以包括至少两种截然不同的计算机可读介质:计算机存储设备和传输介质。
[0022]计算机存储设备是存储计算机可执行指令和/或数据结构的物理硬件设备。计算机存储设备包括各种计算机硬件,诸如RAM、ROM、EEPROM、固态驱动器(“SSD”)、闪存、相变存储器(“PCM”)、光盘存储装置、磁盘存储装置或其他磁存储设备,或可以被用来以计算机可执行指令或数据结构的形式存储程序代码并且可以由计算机系统101访问和执行以实施本专利技术所公开的功能的任何其他(多个)硬件设备。因此,例如,计算机存储设备可以包括所描绘的系统本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种计算机系统,包括:一个或多个处理器,每个处理器包括对应的处理器数据高速缓存;以及一个或多个计算机可读介质,具有存储于其上的计算机可执行指令,所述计算机可执行指令是所述一个或多个处理器可执行的,以使所述计算机系统基于处理器数据高速缓存中的未命中来记录可执行实体的执行的可重放跟踪,所述计算机可执行指令包括可执行以使所述计算机系统至少以下执行的指令:跨所述一个或多个处理器的一个或多个处理单元,执行所述可执行实体的一个或多个线程;以及在所述一个或多个线程的执行期间,独立地记录针对每个线程的单独的可重放跟踪,包括,对于每个线程:记录针对所述一个或多个处理单元中正在执行所述线程的特定处理单元的初始处理器寄存器状态;一旦基于所述线程的执行检测到所述特定处理单元的对应处理器数据高速缓存内的高速缓存未命中,记录响应于所述处理器数据高速缓存未命中而被导入所述对应处理器数据高速缓存中的至少一行高速缓存数据;检测所述线程的执行中的不连续性的发生,其中一个或多个条目在所述线程的执行中的所述不连续性期间被导入所述对应处理器数据高速缓存中;以及至少基于所述线程的执行中的所述不连续性的所述发生,刷新所述相应处理器数据高速缓存中被导入的所述一个或多个条目,其中被刷新的所述条目不被记录在所述单独的可重放跟踪中。2.根据权利要求1所述的计算机系统,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,记录由所述线程执行的至少一个非确定性处理器指令的一个或多个副作用。3.根据权利要求1所述的计算机系统,其中所述一个或多个线程包括多个线程,所述计算机可执行指令包括可执行以使所述计算机系统以下执行的指令:识别跟踪存储器模型,所述跟踪存储器模型定义要跨所述多个线程排序的一个或多个可排序事件,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,利用单调递增的数目来记录由线程执行的至少一个可排序事件,所述单调递增的数目在跨所述多个线程的其他可排序事件中排序所述事件。4.根据权利要求1所述的计算机系统,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于至少一个线程,记录以下至少一项:访问冲突、陷阱、中断,或内核调用。5.根据权利要求1所述的计算机系统,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于至少一个线程,基于所述线程的执行来记录至少一个未被高速缓存的读取。6.根据权利要求1所述的计算机系统,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,基于所述线程的执行来检测处理器代码高速缓存未命中,以及记录响应于所述处理器代码高速缓存没命中而被导入所述处理器代码高速缓存的至少一行高速缓存数据。7.根据权利要求1所述的计算机系统,其中记录被导入所述对应处理器数据高速缓存
中的至少一行高速缓存数据包括:将所述至少一行高速缓存数据记录到可重用环形缓冲器中。8.根据权利要求1所述的计算机系统,其中所述一个或多个处理器至少基于已经针对所述线程而记录了所述至少一行高速缓存数据,来设置高速缓存行上的硬件位。9.根据权利要求8所述的计算机系统,其中所述一个或多个处理器基于内核或另一线程对所述线程的执行的中断来切换所述硬件位。10.根据权利要求9所述的计算机系统,其中所述一个或多个处理器基于所述内核或者另一线程已经修改了所述高速缓存行来切换所述硬件位。11.根据权利要求8所述的计算机系统,其中设置所述硬件位在从记录线程转移时防止至少一次高速缓存刷新。12.根据权利要求8所述的计算机系统,其中设置所述硬件位防止至少一个推测性存储器访问被记录到跟踪。13.根据权利要求1所述的计算机系统,其中记录针对所述线程的所述可重放跟踪包括:以不同于多个条目的执行顺序的乱序,将所述多个条目记录在所述可重放跟踪中。14.根据权利要求1所述的计算机系统,其中所述处理器数据高速缓存中的每个高速缓存行包括至少一个硬件位,所述至少一个硬位至少基于所述高速缓存行已由线程修改而被切换。15.根据权利要求1所述的计算机系统,其中检测所述线程的所述执行中的所述不连续性的所述发生包括检测以下至少一项:操作系统内核的执行、中断的发生或异常的发生。16.一种在计算机系统处执行以用于记录使用高速缓存数据的可执行实体的执行的可重放跟踪的方法,所述计算机系统包括一个或多个处理器,每个处理器包括对应的处理器数据高速缓存,所述方法包括:跨所述一个或多个处理器的一个或多个处理单元,执行所述可执行实体的一个或多个线程;以及在所述一个或多个线程的执行期间,独立地记录针对每个线程的单独的可重放跟踪,包括,对于每个线程:记录针对所述一个或多个处理单元中正在执行所述线程的特定处理单元的初始处理器寄存器状态;一旦基于所述线程的执行检测到所述特定处理单元的对应处理器数据高速缓存内的高速缓存未命中,记录响应于所述处理器数据高速缓存未命中而被导入所述对应处理器数据高速缓存中的至少一行高速缓存数据;检测所述线程的执行中的不连续性的发生,其中一个或多个条目在所述线程的执行中的所述不连续性期间被导入所述对应处理器数据高速缓存中;以及至少基于所述线程的执行中的所述不连续性的所述发生,刷新所述相应处理器数据高速缓存中被导入的所述一个或多个条目,其中被刷新的所述条目不被记录在所述单独的可重放跟踪中。17.根据权利要求16所述的方法,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,记录由所述线程执行的至少一个非确定性处理器指令的一个或多个副作用。
18.根据权利要求16所述的方法,其中所述一个或多个线程包括多个线程,所述方法还包括:识别跟踪存储器模型,所述跟踪存储器模型定义要跨所述多个线程排序的一个或多个可排序事件,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,利用单调递增的数目来记录由所述线程执行的至少一个可排序事件,所述单调递增的数目跨所述多个线程在其他可排序事件中排序所述事件。19.根据权利要求16所述的方法,其中独立地记录针对每个线程的单独的可重放跟踪包括:针对至少一个线程来记录流控制中的变化,包括以下至少一项:访问冲突,陷阱,中断,或内核调用。20.根据权利要求16所述的方法,其中记录针对所述线程的所述可重放跟踪包括:以不同于多个条目的执行顺序的乱序,将所述多个条目记录在所述可重放跟踪中。21.根据权利要求16所述的方法,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,基于所述线程的执行来检测处理器代码高速缓存未命中,以及记录响应于所述处理器代码高速缓存没命中而被导入所述处理器代码高速缓存的至少一行高速缓存数据。22.根据权利要求16所述的方法,其中所述一个或多个处理器至少基于已经针对所述线程而记录了所述至少一行高速缓存数据,来设置高速缓存行上的硬件位。23.根据权利要求22所述的方法,其中所述一个或多个处理器基于内核或另一线程对所述线程的执行的中断来切换所述硬件位。24.根据权利要求16所述的方法,其中独立地记录针对每个线程的单独的可重放跟踪包括针对至少一个线程而记录以下至少一项:基于所述线程的执行的未被高速缓存的读取;或将虚拟存储器地址映射到物理存储器地址的转换旁视缓冲器(“TLB”)条目。25.一种计算机程序产品,包括一个或多个硬件存储设备,所述一个或多个硬件存储设备具有存储于其上的计算机可执行指令,所述计算机可执行指令是一个或多个处理器可执行的,以使计算机系统记录使用数据高速缓存数据的可执行实体的执行的可重放跟踪,所述计算机可执行指令包括可执行以使所述计算机系统至少以下执行的指令:跨所述一个或多个处理器的一个或多个处理单元,执行所述可执行实体的一个或多个线程;以及在所述一个或多个线程的执行期间,独立地记录针对每个线程的单独的可重放跟踪,包括,对于每个线程:记录针对所述一个或多个处理单元中正在执行所述线程的特定处理单元的初始处理器寄存器状态;一旦基于所述线程的执行检测到针对所述特定处理的处理器数据高速缓存内的高速缓存未命中,记录响应于所述处理器数据高速缓存未命中而被导入所述处理器数据高速缓存中的至少一行高速缓存数据;检测所述线程的执行中的不连续性的发生,其中一个或多个条目在所述线程的执行中的所述不连续性期间被导入所述处理器数据高速缓存;以及
至少基于所述线程的执行中的所述不连续性的所述发生,刷新所述处理器数据高速缓存中被导入的所述一个或多个条目,其中被刷新的所述条目不被记录在所述单独的可重放跟踪中。26.一种计算机系统,包括:包括高速缓存存储器的一个或多个处理器;以及一个或多个计算机可读介质,具有存储于其上的计算机可执行指令,所述计算机可执行指令是所述一个或多个处理器可执行的,以使所述计算机系统记录使用所述高速缓存存储器中的高速缓存数据的可执行实体的执行的可重放跟踪,所述计算机可执行指令包括可执行以使所述计算机系统至少以下执行的指令:跨所述一个或多个处理器的一个或多个处理单元,执行所述可执行实体的一个或多个线程;以及在所述一个或多个线程的执行期间,独立地记录针对每个线程的单独的可重放跟踪,包括,对于至少一个线程:将针对所述至少一个线程的初始处理器寄存器状态记录到所述跟踪中;一旦基于所述线程的执行检测到所述高速缓存存储器中的高速缓存未命中,将响应于所述高速缓存未命中而被导入所述高速缓存存储器的高速缓存数据行记录到所述跟踪中;基于将所述至少一行高速缓存数据记录到所述跟踪中,在所述高速缓存存储器中设置用于所述高速缓存数据行的位;当在所述高速缓存存储器中设置用于所述高速缓存数据行的位之后,检测到另一实体随后已向所述高速缓存存储器中的所述高速缓存数据行进行写入;至少基于所述另一实体随后向所述高速缓存存储器中的所述高速缓存数据行进行写入,清除用于所述高速缓存数据行的所述位;以及至少基于清除用于所述高速缓存数据行的所述位,在所述线程的进一步执行线程之前刷新所述高速缓存数据行。27.一种处理器,包括多个寄存器和处理器高速缓存,所述多个寄存器包括至少一个通用寄存器和至少一个模型专用寄存器,所述处理器被配置为:启动记录执行实体的执行的跟踪,包括将针对所述执行实体的初始处理器寄存器状态记录到所述跟踪中,所记录的所述初始处理器寄存器状态包括所述多个寄存器中的至少一个寄存器的值;基于在将针对所述执行实体的所述初始处理器寄存器状态记录到所述跟踪中之后、在所述执行实体的执行期间检测到高速缓存未命中:记录响应于所述高速缓存未命中而被导入所述处理器高速缓存中的数据流入;以及在存储所述数据流入的所述处理器高速缓存的高速缓存行上设置硬件位,所述硬件位指示所述高速缓存行已被记录到所述跟踪中;以及基于在将针对所述执行实体的所述初始处理器寄存器状态记录到所述跟踪中之后、所述执行实体的非确定性...

【专利技术属性】
技术研发人员:J
申请(专利权)人:微软技术许可有限责任公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1