经由高速缓存的有效断点检测制造技术

技术编号:21958955 阅读:26 留言:0更新日期:2019-08-24 22:15
经由高速缓存的有效断点检测包括通过检测高速缓存上的高速缓存未命中来监测存储器位置。将要被监测的储存器地址存储在监测列表中,并且如果高速缓存中存在与储存器地址重叠的任何高速缓存行,则将其逐出。当检测到基于存储器访问操作发生高速缓存未命中时,确定基于高速缓存未命中导入到高速缓存中的高速缓存行的一部分是否与存储在监测列表中的存储器地址重叠。当存在重叠时,对存储器地址处理一个或多个监测操作,并且从高速缓存中逐出导入的高速缓存行。

Effective Breakpoint Detection via Cache

【技术实现步骤摘要】
【国外来华专利技术】经由高速缓存的有效断点检测
技术介绍
当在软件应用的开发期间编写代码时,开发人员通常花费大量时间“调试”代码以找到代码中的运行时错误。在这样做时,开发人员可以采取若干方法来对源代码错误进行再现和本地化,诸如基于不同输入来观察程序的行为,插入调试代码(例如,打印变量值、追踪执行分支等),暂时删除代码部分等。追踪运行时错误以查明代码错误可能会占用应用开发时间的很大一部分。已经开发了许多类型的调试应用(“调试器”)以便协助开发人员进行代码调试过程。这些工具使开发人员能够跟踪、可视化和改变计算机代码的执行。例如,调试器可以将代码指令的执行可视化,可以在代码执行期间的不同时间呈现变量值,可以使开发人员能够改变代码执行路径,和/或可以使开发人员能够在感兴趣的代码元素上设置“断点”和/或“观察点”(在执行期间到达时,其导致代码的执行被暂停)等等。一种新兴形式的调试应用启用了“时间旅行”、“反向”或“历史”调试,其中程序的执行由跟踪应用记录/跟踪到一个或多个跟踪文件中,然后所述一个或多个跟踪文件可以被用来稍后重放程序的执行,以用于进行前向和后向分析。例如,“时间旅行”调试器可以使开发人员设置前向断点/观察点(像传统调试器那样)以及反向断点/观察点。在实现“时间旅行”调试器中的一个挑战涉及如何在以灵活且高效的方式重放跟踪文件期间检测何时遇到感兴趣点(例如,断点/观察点)。已经探索的一种在重放期间用于追踪兴趣点的机制是使用处理器实现的硬件断点。虽然高性能,但是硬件断点的使用具有严重限制可以同时监视的断点数量(例如,INTEL处理器中的四个)的缺点,并且固有地将调试器实现绑定到特定支持的硬件。已经探索的另一种机制是使用软件断点,在其中,访问存储器的每个跟踪操作(例如,对存储数据的存储器的读取或写入,或者从存储程序代码的存储器执行的读取/提取)都附带有附加代码指令,其检查访问是否会导致遇到断点。然而,附带具有严重的缺点,即无论该存储器访问是否实际遇到断点,在每次存储器访问时都会检查是否出现断点。在许多环境中,附带的代码指令的执行导致针对每次存储器访问都使用数十到数百个附加的处理器周期,这对人类用户可感知的重放性能具有显著的不利影响。
技术实现思路
本文描述的至少一些实施例涉及使用高速缓存(例如,硬件或仿真处理器的高速缓存或者一些其他高速缓存存储器结构)来检测何时发生对正被监视或监测的存储器地址的访问(例如,用于读取、写入或取出/执行)。换句话说,本文的实施例通过高速缓存的使用提供有效的断点检测,极大地限制了需要执行断点检查的存储器访问操作的数量。如本文所述,实施例使得能够在发生高速缓存未命中时执行断点检查。因此,本文的实施例不是对每个存储器访问都执行断点检查,而是将断点检查限制为仅导致发生高速缓存未命中的存储器访问。与现有解决方案相比,本文的实施例可以在跟踪重放期间检测断点时极大地减少由调试器引起的开销(例如,检查断点发生的额外处理器周期)。在一些实施例中,通过使用高速缓存来监测存储器位置包括标识要被监测的存储器地址,并且至少基于标识所述存储器地址,将所述存储器地址存储在监测列表中并确定与所述存储器地址重叠的(多个)任何高速缓存行是否已经存在于高速缓存中。如果高速缓存中确实存在(多个)任何这样的高速缓存行,则将它们从所述高速缓存中逐出。当检测到基于存储器访问操作发生高速缓存未命中时,该实施例包括确定基于所述高速缓存未命中导入到所述高速缓存中的另一高速缓存行的一部分是否与存储在所述监测列表中的所述存储器地址重叠。当导入的高速缓存行的所述部分确实与所述存储器地址重叠时,将处理对所述存储器地址的一个或多个监测操作,并从所述高速缓存中逐出所述导入的高速缓存行。提供本
技术实现思路
是为了以简化的形式介绍一些概念,这些概念将在下面的具体实施方式中进一步描述。本
技术实现思路
不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。附图说明为了描述可以获得本专利技术的上述和其他优点和特征的方式,将通过参考附图中所图示的具体实施例来呈现上面简要描述的本专利技术的更具体的描述。应理解,这些附图仅描绘了本专利技术的典型实施例,因此不应被认为是对其范围的限制,本专利技术将通过使用附图利用附加特征和细节进行描述和解释,其中:图1图示出了助于高速缓存促进有效断点检测的示例计算环境;图2图示出了使用与执行存储器操作有关的高速缓存的重放组件的示例实施例;图3图示出了重放组件的示例实施例;图4图示出了在发生高速缓存未命中时执行断点检查的示例流程图;以及图5图示出了通过高速缓存的使用来监测存储器位置的方法的示例流程图。具体实施方式本文描述的至少一些实施例涉及高速缓存的使用(例如,硬件或仿真处理器的高速缓存或者一些其他高速缓存存储器结构)来检测何时发生对正被监视或监测的存储器地址的访问(例如,用于读取、写入或提取/执行)。换句话说,本文的实施例通过使用高速缓存提供有效的断点检测,极大地限制了需要执行断点检查的存储器访问操作的数目。如本文所述,实施例确保仅在发生高速缓存未命中时才需要执行断点检查。因此,本文的实施例不是对每个存储器访问都执行断点检查,而是将断点检查限制为仅导致发生高速缓存未命中的存储器访问。因此,与现有解决方案相比,本文的实施例可以在跟踪重放期间检测断点时极大地减少由调试器引起的开销(例如,检查断点发生的额外处理器周期)。具体地,本文的实施例操作来确保从高速缓存中逐出与被监测的(多个)存储器地址相对应的(多个)任何高速缓存行。例如,根据本文的实施例,当定义新断点时,将基于断点要被监测的存储器地址添加到监测列表。另外,如果在定义断点的时刻高速缓存中存在与存储器地址重叠的(多个)任何高速缓存行,则将它们从高速缓存中逐出。当基于对存储器地址的访问而发生高速缓存未命中时,执行断点检查。具体地,将基于高速缓存未命中而导入到高速缓存中的高速缓存行与监测列表中的存储器地址列表进行比较,以确定是否存在重叠。如果没有重叠,那么正常遵循高速缓存未命中,并且允许高速缓存行保留在高速缓存中。然而,如果存在重叠,那么执行一个或多个监测操作(例如,确定是否实际遇到断点,并在遇到断点时处理断点的发生)。此外,如果存在重叠,则从高速缓存中逐出高速缓存行,以便将发生另一个高速缓存未命中——并且将执行另一个断点检查——如果稍后再次访问存储器地址的话。通过这种方式,仅需要对导致发生高速缓存未命中的存储器访问操作执行断点检查,而不是对每个存储器访问操作都执行断点检查。如在本说明书和权利要求中所使用的,术语“断点”和“观察点”可互换使用,以指代在被遇到时导致重放以中断/暂停可执行代码的重放的感兴趣点。特别地,断点/观察点可以指代与可执行代码的特定部分相对应的存储器位置(例如,代码行、变量定义、函数定义等)和/或与由可执行代码存储的数据相对应的存储器位置(例如,存储该值变量、常量、数据结构等的存储器位置)。因此,断点/观察点可以指代存储的可执行代码的存储器地址和/或由执行代码使用的运行时存储器的存储器地址。此外,当指代针对断点/观察点而被监测的“存储器地址”时,本文的实施例不限于监测该单个地址处的字节。相反,实施例监测对从该地址开始的任何给定数量的连续字节的访问。因此,本文对监测本文档来自技高网
...

【技术保护点】
1.一种在包括一个或多个处理器的计算机系统处实现的用于通过高速缓存的使用来监测存储器位置的方法,所述方法包括:标识要被监测的存储器地址;至少基于标识所述存储器地址,至少执行以下操作:将所述存储器地址存储在监测列表中;以及确定与所述存储器地址重叠的一个或多个高速缓存行是否已经存在于高速缓存中,并且当所述一个或多个高速缓存行已经存在于所述高速缓存中时,从所述高速缓存中逐出所述一个或多个高速缓存行;基于存储器访问操作,检测高速缓存未命中的发生;以及至少基于所述高速缓存未命中的发生,确定基于所述高速缓存未命中导入到所述高速缓存中的高速缓存行的一部分是否与存储在所述监测列表中的所述存储器地址重叠,并且当导入的高速缓存行的所述部分确实与所述存储器地址重叠时,至少执行以下操作:处理对所述存储器地址的一个或多个监测操作;以及从所述高速缓存中逐出所述导入的高速缓存行。

【技术特征摘要】
【国外来华专利技术】2017.01.13 US 15/405,8491.一种在包括一个或多个处理器的计算机系统处实现的用于通过高速缓存的使用来监测存储器位置的方法,所述方法包括:标识要被监测的存储器地址;至少基于标识所述存储器地址,至少执行以下操作:将所述存储器地址存储在监测列表中;以及确定与所述存储器地址重叠的一个或多个高速缓存行是否已经存在于高速缓存中,并且当所述一个或多个高速缓存行已经存在于所述高速缓存中时,从所述高速缓存中逐出所述一个或多个高速缓存行;基于存储器访问操作,检测高速缓存未命中的发生;以及至少基于所述高速缓存未命中的发生,确定基于所述高速缓存未命中导入到所述高速缓存中的高速缓存行的一部分是否与存储在所述监测列表中的所述存储器地址重叠,并且当导入的高速缓存行的所述部分确实与所述存储器地址重叠时,至少执行以下操作:处理对所述存储器地址的一个或多个监测操作;以及从所述高速缓存中逐出所述导入的高速缓存行。2.如权利要求1所述的方法,其中所述一个或多个监测操作包括将所述一个或多个处理器中的至少一个置于详细模式中并且使所述至少一个处理器单步操作。3.如权利要求1所述的方法,其中确定基于所述高速缓存未命中导入到所述高速缓存中的高速缓存行的一部分是否与存储在所述监测列表中的所述存储器地址重叠包括确定所述导入的高速缓存行是否包括与存储在所述监测列表中的所述存储器地址匹配的存储器地址。4.如权利要求1所述的方法,其中处理对所述存储器地址的一个或多个监测操作包括确定当所述存储器访问操作写入或读取所述存储器地址时遇到断点。5.如权利要求1所述的方法,其中所述存储器访问操作包括数据读取、数据写入或代码执行访问操作中的至少一个。6.如权利要求1所述的方法,还包括通过对由所述多个存储器操作访问的高速缓存行执行监测操作来合并针对多个存储器操作的高速缓存未命中,同时避免在所述多个存储器操作期间逐出所述高速缓存行。7.一种计算机系统,包括:一个或多个处理器;以及一个或多个计算机可读介质,所述计算机可读介质上存储有指令,所述指令由所述一个或多个处理器可执行,以使所述计算机系统通过高速缓存的使用来监测存储器位置,所述指令包括可执行以使所述计算机系统执行至少以下操作的指令:标识要被监测的存储器地址;至少基于标识所述存储器地址,至少执行以下操作:将所述存储器地址存储在监测列表中;以及确定与所述存储器地址重叠的一个或多个高速缓存行是否已经存在于高速缓存中,并且当所述一个或多个高速缓存行已经存在于所述高速缓存中时,从所述高速缓存中逐出所述一个或多个高速缓存行;基于存储器访问操作,检测高速缓存未命中的发生;以及至少基于所述高速缓存未命中的发生,确定基于所述高速缓存未命中导入...

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

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

1