CN113785277A - 用于时间行程调试的基于协处理器的日志记录 - Google Patents

用于时间行程调试的基于协处理器的日志记录 Download PDF

Info

Publication number
CN113785277A
CN113785277A CN202080032925.8A CN202080032925A CN113785277A CN 113785277 A CN113785277 A CN 113785277A CN 202080032925 A CN202080032925 A CN 202080032925A CN 113785277 A CN113785277 A CN 113785277A
Authority
CN
China
Prior art keywords
coprocessor
cache
trace
data
memory
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.)
Pending
Application number
CN202080032925.8A
Other languages
English (en)
Inventor
J·莫拉
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN113785277A publication Critical patent/CN113785277A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • G06F11/364Software debugging by tracing the execution of the program tracing values on a bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0835Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • 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
    • G06F11/3034Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a storage system, e.g. DASD based or network based
    • 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
    • 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/3471Address tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/885Monitoring specific for caches

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

协处理器基于主处理器处的代码执行来存储执行追踪的至少一部分。协处理器包括控制逻辑,该控制逻辑将协处理器配置为监听将主处理器与协处理器互连的总线并且从该总线接收(多个)高速缓存一致性协议(CCP)消息(即,基于主处理器已消耗存储器单元的数据来通过主处理器在总线上发送的(多个)CCP消息)。基于接收(多个)CCP消息,协处理器启动将所消耗的存储器单元的数据存储到执行追踪中。

Description

用于时间行程调试的基于协处理器的日志记录
背景技术
跟踪并纠正软件代码中非期望软件行为是软件开发时的核心活动,这通常被称为“调试”代码。非期望软件行为可以包括很多事情,诸如执行崩溃、运行时异常、执行性能放缓、数据结果错误、数据讹误等。非期望软件行为可能由诸如数据输入、用户输入、竞争条件(例如,当访问共享资源时)等之类的广泛多种因素而被触发。鉴于触发器的多样性,非期望软件行为可能很少见且看似随机,并且极难再现。如此,开发人员标识给定非期望软件行为可能既非常耗时又困难重重。一旦标识了非期望软件行为,再次确定其(多个)根本原因就有可能费时费力。
开发人员用来调试代码的一种途径是使用“实时”调试器。一般而言,实时调试器附加到实时进程的执行,并且使得开发人员能够监测并指导该进程的前向执行。例如,实时调试器可以使得开发人员能够设置当程序到达特定指令时暂停该程序的执行的断点,设置当程序访问特定存储器地址时暂停该程序的执行的观察点,在代码执行时通过代码行单步执行指令等。
一种新兴形式的诊断工具启用“历史”调试(也被称为“时间行程”或“反向”调试),其中程序的(多个)线程的至少一部分的执行记录/追踪到一个或多个追踪文件(即,追踪)。使用一些追踪技术,追踪可以包含保真度非常高的“比特准确”的历史追踪数据,这使得能够以极高的保真度(甚至低至个别指令(例如,机器代码指令、中间语言代码指令等)的粒度)虚拟“重放”(多个)所追踪的线程的(多个)所记录的部分。因此,使用比特准确追踪数据,“时间行程”调试器使得开发人员不仅能够(例如,经由断点、观察点、单步执行指令等)监测并引导所追踪的代码的前向仿真,而且还能够(例如,经由反向断点、反向观察点、反向单步执行指令等)检测并指导所追踪的代码的反向仿真。因此,开发人员可以在追踪之前监测并指导程序的任何部分的执行。
如所提及的,历史调试技术以极高的保真度(可能比特准确)记录了程序的执行。由于现代处理器每秒可以执行的指令的数目极高,一次你这会产生大量追踪数据。记录这些数据会对被追踪的程序产生显著的性能影响。
发明内容
本文中所描述的至少一些实施例通过使用协处理器基于主处理器处的代码执行来存储执行追踪的至少一部分,来减轻对所追踪的程序的性能影响中的一些性能影响。具体地,在代码执行期间,主处理器将诸如高速缓存一致性协议(CCP)消息的消息发送到总线上。这些消息与主处理器对数据的消耗有关,并且可以包括高速缓存流入。协处理器从总线接收这些消息,并且基于这些消息来代表主处理器记录执行追踪的至少一部分。
在一些实施例中,一种计算机系统,包括:主处理器,与存储器高速缓存相关联;协处理器;以及总线,将主处理器与协处理器互连。该计算机系统被配置为使用协处理器存储执行追踪的至少一部分。存储执行追踪的至少一部分可以包括:主处理器执行可执行实体的一个或多个可执行指令。基于主处理器执行一个或多个可执行指令,主处理器在总线上发送一个或多个CCP消息。一个或多个CCP消息与存储器单元相对应。而且,基于主处理器执行一个或多个可执行指令,主处理器消耗存储器单元的数据。协处理器从总线接收一个或多个CCP消息,并且基于协处理器接收一个或多个CCP消息,协处理器启动将所消耗的存储器单元的数据存储到执行追踪中。
在其他实施例中,一种方法,在计算机系统中实现,该计算机系统包括与存储器高速缓存相关联的主处理器、协处理器、以及将主处理器与协处理器互连的总线。该方法使用协处理器存储执行追踪的至少一部分。该方法包括:在主处理器处执行可执行实体的一个或多个可执行指令。该方法还包括:基于主处理器执行一个或多个可执行指令,通过主处理器在总线上发送一个或多个CCP消息,该一个或多个CCP消息与存储器单元相对应;以及通过主处理器消耗存储器单元的数据。该方法还包括:通过协处理器从总线接收一个或多个CCP消息;以及基于协处理器接收一个或多个CCP消息,通过协处理器启动将所消耗的存储器单元的数据存储到执行追踪中。
在其他实施例中,协处理器基于主处理器处的代码执行来存储执行追踪的至少一部分。协处理器包括控制逻辑,该控制逻辑将协处理器配置为监听将主处理器与协处理器互连的总线并且从该总线接收一个或多个CCP消息。基于主处理器已消耗存储器单元的数据,通过主处理器在总线上发送一个或多个CCP消息。基于接收一个或多个CCP消息,协处理器启动将所消耗的存储器单元的数据存储到执行追踪中。
提供该发明内容是为了以简化形式介绍一系列概念,在下文的具体实施方式中进一步描述这些概念。本发明内容不旨在确定所要求保护的主题的关键特征或基本特征,也不旨在用作确定所要求保护的主题的范围的帮助。
附图说明
为了描述可以获得本发明的上述和其他优点和特征的方式,通过参考本发明的具体实施例来提供对上文所简要描述的本发明的更具体的描述,这些具体实施例在附图中进行了说明。理解这些附图仅描绘了本发明的典型实施例并且因此不被认为是对其范围的限制,通过使用附图以附加特性和细节对本发明进行描述和解释,在附图中:
图1图示了促进使用协处理器来存储执行追踪中的至少一部分的示例计算环境;
图2图示了包括多层高速缓存的示例计算环境;
图3图示了时间行程调试追踪的一个示例;以及
图4图示了使用协处理器来存储执行追踪的至少一部分的示例方法的流程图。
具体实施方式
本文中所描述的至少一些实施例通过使用协处理器基于主处理器处的代码执行来存储执行追踪的至少一部分,来减轻对所追踪的程序的性能影响中的一些性能影响。具体地,在代码执行期间,主处理器将诸如高速缓存一致性协议(CCP)消息的消息发送到总线上。这些消息与主处理器对数据的消耗有关,并且可以包括高速缓存流入。协处理器从总线接收这些消息,并且基于这些消息来代表主处理器记录执行追踪的至少一部分。
为了实现前述内容,图1图示了促进使用协处理器来存储执行追踪的至少一部分的示例计算环境100。如所描绘的,计算环境100可以包括或利用专用计算机系统或通用计算机系统101,该专用计算机系统或通用计算机系统101可以包括计算机硬件,诸如,例如通常负责(例如,应用112的)执行应用代码的一个或多个主处理器102、通常负责临时数据存储的系统存储器103、用于存储应用代码和/或数据的一个或多个计算机可读存储介质104、通常负责在一个或多个主处理器102处记录执行应用代码(例如,应用112的)的至少一部分的至少一个协处理器、以及一个或多个外部通信信道114(例如,网络接口卡或甚至只是一个或多个电线/引脚)。主处理器102、系统存储器103和协处理器105中的每一个使用一个或多个通信总线106通信耦合。
如图1所示,每个主处理器102(下文中也更简洁地称为处理器102)可以包括(除其他之外)一个或多个处理单元107(例如,处理器核)和一个或多个高速缓存108。每个处理单元107经由高速缓存108加载并执行(例如,应用112的)机器代码指令。在一个或多个执行单元107b处执行这些机器代码指令期间,这些指令可以使用内部处理器寄存器107a作为临时存储位置并且可以经由高速缓存108读取和写入系统存储器103中的各个位置。
在实施例中,处理器102的操作至少部分由控制逻辑109编排。如控制逻辑109内的省略号所指示的,控制逻辑109可以做很多事情。然而,为了说明的简单起见,控制逻辑109仅示出了在本文中用于描述处理器102可以如何帮助促进使用协处理器105存储执行追踪的至少一部分的逻辑组件(即,CCP逻辑109a和日志记录逻辑109b)。如本领域普通技术人员将领会的,控制逻辑109可以包括数字逻辑(例如,晶体管的固定布置、一个或多个经编程现场可编程门阵列等)和/或可由处理器102的一个或多个组件执行的所存储的可执行指令(例如,处理器微代码)。
返回到高速缓存108,高速缓存108临时缓存存储在系统存储器103中的数据的部分;例如,高速缓存108可以包括缓存存储(例如,应用112的)应用代码的系统存储器103的部分的“代码”部分以及缓存存储应用运行时数据的系统存储器103的部分的“数据”部分。如果处理单元107需要尚未存储在高速缓存108中的数据(例如,代码或应用运行时数据),则处理单元107可以启动“高速缓存未命中”,导致从后备存储装置(例如、系统存储器103、另一高速缓存等)中获取所需数据。例如,在图1中,高速缓存108的后备存储装置可能是系统存储器103,因此高速缓存未命中可能由系统存储器103提供服务。有时,数据可能会从高速缓存108“逐出”回其后备存储装置(例如,系统存储器103),诸如当高速缓存108中不再需要数据时或当高速缓存中需要更紧急的数据时。
为了进一步解释这些概念,图2图示了展示多层高速缓存的示例环境200。在图2中,存在两个处理器201a和201b(例如,每个处理器与图1的不同处理器102相对应)和系统存储器202(例如,与图1的系统存储器103相对应)。在示例环境200中,每个处理器201包括四个物理处理单元(即,处理器201a的单元A1至A4和处理器210b的单元B1至B4,它们可以对应于图1的处理单元107)。示例环境200还包括每个处理器201内的三层高速缓存层次结构。环境200只是一个示例高速缓存布局,并且不限于本文中的实施例可以在其中操作的高速缓存层次结构。在环境200中,每个处理单元与其自身的专用L1高速缓存相关联(例如,单元A1的处理器201a中的L1高速缓存“L1-A1”、单元A2的处理器201a中的L1高速缓存“L1-A2”等)。每个处理器201还包括两个L2高速缓存(例如,用作L1高速缓存L1-A1和L1-A2的后备存储装置的处理器201a中的L2高速缓存“L2-A1”、用作作为L1缓存L1-A3和L1-A4的后备存储装置的处理器201a中的L2高速缓存“L1-A2”等)。最后,每个处理器201还包括单个L3高速缓存(例如,用作L2高速缓存L2-A1和L2-A2的后备存储装置的处理器201a中的L3高速缓存“L3-A”以及用作L2高速缓存L2-B1和L2-B2的后备存储装置中的处理器201b的L3高速缓存“L3-B”)。如所示出的,系统存储器202用作L3高速缓存L3-A和L3-B的后备存储装置。在这种布置中并且取决于高速缓存实现,L1高速缓存中的高速缓存未命中可能由其对应L2高速缓存、其对应L3高速缓存和/或系统存储器202提供服务;L2高速缓存中的高速缓存未命中可能由其对应L3高速缓存和/或系统存储器202提供服务;L3高速缓存中的高速缓存未命中可能由系统存储器202提供服务。
如图2所展示的,当使用多个高速缓存层时,(多个)处理单元可能直接与最近层(例如,L1)交互,尽管情况并非总是如此。在大多数情形下,数据在各层之间流动(例如,L3高速缓存与系统存储器103交互并且将数据提供给L2高速缓存,而L2高速缓存又向L1高速缓存提供数据)。当处理单元执行写入时,高速缓存协调以确保影响在(多个)处理单元102a之间共享的数据的高速缓存不再拥有它。这种协调使用高速缓存一致性协议(CCP)执行。
因此,环境200中的高速缓存可以被视为“共享”高速缓存。例如,每个L2和L3高速缓存服务于给定处理器201内的多个处理单元,因此由处理单元共享。因为单独L1高速缓存可以(即,经由CCP)相互协调以确保一致性(即,以使跨越所有L1高速缓存一致地查看每个所缓存的存储器位置),所以即使每个L1高速缓存对应于单个处理单元,给定处理器201内的L1高速缓存总体上也可以被认为是共享的。每个处理器201内的L2高速缓存类似可以经由CCP进行协调。附加地,如果处理器201支持超线程,则每个单独L1高速缓存可以被视为由两个或更多个逻辑处理单元共享,因此即使在单独水平下也“共享”。
如所提及的,当存在多个高速缓存108时(如图2所示),处理器102根据一个或多个CCP对高速缓存108进行操作。一般而言,CCP定义了在一个或多个处理器102的各个处理单元107读取和写入各个高速缓存中的数据时各个高速缓存之间如何维持一致性以及如何确保各个处理单元始终从高速缓存中的给定位置读取有效数据。CCP通常与处理器的指令集架构(ISA)所定义的存储器模型有关并启用该存储器模型。流行ISA示例包括来自INTEL的x86和x86_64系列的架构以及来自ARM HOLDINGS的ARM架构。
常见CCP的示例包括MSI协议(即,修改、共享和无效)、MESI协议(即,修改、独有、共享和无效)和MOESI协议(即,修改、自备、独有、共享和无效)。这些协议中的每个协议定义共享高速缓存108中的单独位置(例如,行)的状态。“修改”高速缓存位置包含已在高速缓存108中进行了修改,因此与后备存储装置中的对应数据不一致的数据(例如,系统存储器103或另一高速缓存)。当从高速缓存108中逐出具有“修改”状态的位置时,公共CCP需要高速缓存来保证其数据写回到后备存储装置或另一高速缓存接管这个责任。“共享”高速缓存位置包含未从后备存储装置中的数据修改、以只读状态存在并且由(多个)处理单元107共享的数据。高速缓存108可以逐出该数据而不将其写入后备存储装置。“无效”高速缓存位置不包含有效数据,可以认为是空置的,并且可用于存储来自高速缓存未命的数据。“独有”高速缓存位置包含与后备存储装置相匹配并且仅由单个处理单元107使用的数据。该“独有”高速缓存位置可以随时改变为“共享”状态(即,响应于读取请求)或当写入该“独有”高速缓存位置时,可以改变为“修改”状态。“自备”高速缓存位置由两个或更多个处理单元107共享,但是处理单元中的一个处理单元具有对其进行改变的独有权利。当该处理进行改变时,因为所通知的处理单元可能需要基于CCP实现来进行无效或更新,所以该处理单元会通知其他处理单元。
再次参考图1,存储介质104可以存储表示可执行软件组件的计算机可执行指令和/或数据结构,诸如应用112;相应地,在(多个)处理器102处执行该软件期间,这些计算机可执行指令和/或数据结构的一个或多个部分可以加载到系统存储器103中(即,被示为应用112')。另外,存储介质104可以存储一个或多个执行追踪113,诸如表示应用112在处理器102处执行的追踪。存储介质104以断线示出,指示它可以是可选的。例如,应用112可以备选地通过外部通信信道114接收,和/或追踪113可以备选地通过外部通信信道114传送。
在应用112的执行期间,处理器102和协处理器105协作以记录表示执行应用的执行的一个或多个部分的执行追踪。该执行追踪可以至少暂时临时存储在系统存储器103(即,追踪113')中。它可以从中留存到存储介质104(即,(多个)追踪113)和/或经由通信信道114发送到另一计算机系统。备选地,执行追踪可以完全直接绕过系统存储器103的通信信道114发送到另一计算机系统。
在实施例中,协处理器105基于通过总线106由处理器102发送的CCP消息来记录执行追踪的至少一部分。因此,图1中的总线106表示能够在处理器102与协处理器105之间传达至少一个CCP消息子集的任何数目(即,一个或多个)总线。比如,图1中的总线106可以实现高级微控制器总线架构(AMBA)总线架构标准的至少一个子集,该AMBA总线架构标准可以支持多种总线技术/类型,诸如相干集线器接口(CHI)、高级可扩展接口(AXI)、AXI一致性扩展(ACE)、高级高性能总线(AHB)、高级外围总线(APB)、和/或高级追踪总线(ATB)。然而,如本领域普通技术人员将领会的,本文中的实施例也可以在其他总线架构(既有现有总线架构也有待开发总线架构)内操作。
在实施例中,处理器102和协处理器105协作以将执行追踪记录到追踪113/113'中,该追踪113/113'表示之前在处理器102处执行应用112的一个或多个线程的高保真记录,并且其中追踪数据使得能够稍后仿真(即,“重放”)(即,甚至低至处理器102的ISA中的单独机器代码指令的粒度)(多个)线程的所追踪的(多个)任何部分。如本文中所使用的,追踪113是包括足够数据以使得能够经由仿真重放先前在处理器102处执行的应用112的代码使得仿真器可以以与它之前执行的基本相同的方式来仿真该代码的执行的追踪。多种途径可以用于记录并存储这样的追踪113。
在实施例中,协处理器105和处理器102所使用的追踪途径建立在处理器指令通常落入以下三个类别中的一个类别的认识上:(1)被标识为“非确定性”的指令,由于因为它们的输出并不完全由通用寄存器(例如,寄存器107a)或高速缓存(例如,高速缓存108)中的数据确定,所以不产生可预测输出;(2)确定性指令,其输入不依赖于存储器值(例如,它们仅依赖于处理器寄存器值或在代码本身中定义的值);以及(3)确定性指令,其输入取决于从存储器中读取值。因此,在一些实施例中,存储足够的状态数据以再现指令的执行可以通过解决以下问题来实现:(1)如何记录产生不完全由其输入确定的输出的非确定性指令;(2)如何取决于寄存器再现指令的输入寄存器的值;以及(3)如何取决于存储器读取再现指令的输入存储器的值。
为了解决再现产生不完全由其输入确定的输出的非确定性指令的执行的挑战,实施例可以将这样的指令的执行的附带后果(例如,指令的输出)记录到追踪113中。如本文中所使用的,“非确定性”指令可以包括一些不太常见的指令,这些不太常见的指令(i)每次执行它们时都会产生非确定性输出(例如,INTEL处理器上的RDTSC,该RDTSC自上次处理器复位以来的处理器周期数写入寄存器中);(ii)可能产生确定性输出,但是取决于在追踪记录期间未被跟踪的输入(例如,调试寄存器、定时器等);和/或(iii)产生处理器特定信息(例如,INTEL处理器上的CPUID,该CPUID将处理器特定数据写入寄存器中)。存储这样的指令的执行的附带后果可以包括例如存储因指令的执行而改变的寄存器值和/或存储器值。在诸如来自INTEL的架构之类的一些架构中,诸如在虚拟机扩展(VMX)中发现的特征之类的处理器特征可以用于捕集指令以将其附带后果记录到追踪113中。
解决如何为确定性指令(例如,其输入仅取决于处理器寄存器值)再现输入寄存器的值的挑战简单明了,因为它们是执行(多个)之前指令的输出。因此,追踪113可以通过存储可以用于再现系列开始时的寄存器值的数据来表示整个系列的处理器指令的执行。
为了解决如何为输入取决于存储器值的确定性指令再现输入存储器的值,实施例可以将这些指令消耗的存储器值(即,读取)记录到追踪113中,而不管指令读取的值如何写入存储器。换言之,追踪113可能表示存储器读取的值,但是不一定表示存储器写入的值。例如,尽管值可能由当前线程、另一线程(包括内核,例如,作为处理中断的一部分)或硬件设备写入存储器,但是它只是线程的指令读取的值,需要这些值来完整重放执行读取的线程的指令。这是因为它是线程所读取的值(并不一定是写入存储器的所有值),这些值决定了线程的执行方式。
一种记录这些读数的基于硬件的途径建立在对处理器(例如,处理器102)形成半封闭系统或准封闭系统的认识上。例如,一旦线程的数据的部分(即,代码数据和运行时应用数据)加载到高速缓存108中,处理器102就可以作为用于时间突发的半封闭系统或准封闭系统自行运行,而无需任何输入。具体地,一旦高速缓存108加载有数据,处理单元107中的一个或多个处理单元107就使用存储在高速缓存108的数据部分中的运行时数据并且使用寄存器107a执行来自高速缓存108的代码部分的指令。当处理单元107需要一些信息流入时(例如,因为它正在执行、将执行或可能执行的指令访问不在高速缓存108中的代码或运行时数据),“高速缓存未命中”发生并且该信息从系统存储器103带入高速缓存108中。然后,处理单元107可以使用高速缓存108中的新信息继续执行,直至新信息再次带入高速缓存108(例如,由于另一高速缓存未命中或未被缓存的读取)。因此,实施例可以将足够数据记录到追踪113中,以便能够在所追踪的代码执行时将信息流入再现到高速缓存108中。另外,实施例还可以将足够数据记录到追踪113中,以便能够再现任何未被缓存的读取或不可缓存的读取。在实施例中,当使用多层高速缓存时,基于硬件的追踪方法可能会在特定“经日志记录的”高速缓存层记录流入。因此,例如,在图2的示例环境200中,如果正在L2层上执行日志记录,则经日志记录的流入可能由L3层和/或系统存储器202提供服务。
另外,还可以对基于高速缓存的追踪进行附加优化。例如,一种优化是仅跟踪并记录每个处理单元107所消耗的高速缓存行,而非简单记录高速缓存流入。如本领域普通技术人员将领会的,与简单记录高速缓存流入相比,这可以导致显著更小的追踪文件。如本文中所使用的,当处理单元107获知其当前值时,处理单元107已经“消耗”了高速缓存行。这可能是因为处理单元107是写入高速缓存行的当前值的处理单元或因为处理单元对高速缓存行执行了读取(如果当前尚没有系统存储器103,则这可能会导致流入高速缓存行)。在各实施方式中,这些优化可能涉及对高速缓存108的扩展,这些扩展使得处理器102能够标识每个高速缓存行的消耗高速缓存行的当前值的一个或多个处理单元107。例如,每个高速缓存行可以使用一个或多个跟踪比特进行扩展。取决于跟踪比特的数目以及使用这些跟踪比特的逻辑实现,这些跟踪比特可以用于例如指示任何处理单元107是否已经消耗了高速缓存行(例如,单个标志比特),哪个特定的(多个)一个或多个处理单元107消耗了高速缓存行(例如,每个处理单元107的跟踪比特),已经消耗了高速缓存行的单个处理单元的索引(例如,通过使用多个跟踪比特以存储整数索引)等。
图3图示了可以对应于图1的追踪并且可以根据前述追踪技术中的一种或多种追踪技术来创建追踪300的一个示例。在图3的示例中,追踪300包括一个或多个追踪数据流301。在图3中,示出了三个追踪数据流301(即,追踪数据流301a至301c)。在实施例中,每个追踪数据流301表示从应用112的代码执行的不同线程的执行。例如,追踪数据流301a可能表示应用112的第一线程的执行,追踪数据流301b可能表示应用112的第二线程,追踪数据流301c可能表示应用112的第三线程的执行。如所示出的,每个追踪数据流301包括多个数据分组302(即,用于追踪数据流301a的数据分组302a、用于追踪数据流301b的数据分组302b、以及用于追踪数据流301c的数据分组302c)。在其他实施例中,每个追踪数据流301可能仅表示线程执行的子集,使得需要多个追踪数据流301来完整表示线程的执行。在其他实施例中,追踪数据流301可以表示多个线程(例如,在单个处理单元107处执行的多个线程)的执行。由于记录在每个数据分组302中的特定数据可能不同,所以它们被示为具有不同的大小。鉴于追踪技术的前述讨论,应当领会,数据分组302可以至少表示作为应用112的第一线程的一部分执行的一个或多个可执行指令的输入(例如,寄存器值、存储器值、高速缓存行数据等)。
如所示出的,追踪数据流301还可以包括一个或多个关键帧303(例如,关键帧303a至303e),每个关键帧表示足够信息,诸如寄存器和/或存储器值的快照,该足够信息使得能够之前执行包含从关键帧303的点开始向前要重放的关键帧的线程。另外,追踪数据流301可以包括一个或多个排序事件,该一个或多个排序事件在图3中被示为圆圈编号1至9。虽然在实施例中,每个追踪数据流301通常表示对应单个线程的执行,但是排序事件表示跨越线程(并且因此跨追踪数据流301)可排序的事件的发生。例如,这些排序事件可以对应于线程诸如通过共享存储器、经由函数调用等交互的事件。虽然为了简单起见,追踪数据流301中的事件以轮循方式旋转通过线程的次序,但是应当领会,它们通常会以不太可预测的方式出现。
在实施例中,追踪113还可以包括被执行的实际代码。因此,在图3中,每个数据分组302被示为包括非阴影数据输入部分304(即,用于数据分组302a的数据输入部分304a、用于数据分组302b的数据输入部分304b、以及用于数据分组302c的数据输入部分304c)和阴影代码部分305(即,用于数据分组302a的代码部分305a、用于数据分组302b的代码部分305b、以及用于数据分组302c的代码部分305c)。在实施例中,分组302中的代码部分305可以包括基于对应数据输入而执行的可执行指令。然而,在其他实施例中,追踪113可能会省略被执行的实际代码,而是依赖于对应用112的代码的单独访问。在这些其他实施例中,每个数据分组可以例如指定到(多个)适当可执行指令的地址或偏移。如所示出的,追踪113可以包括任何数目的附加数据流306(即,数据流306a至306n),这些附加数据流306可以存储任何类型的附加追踪数据。该附加追踪数据可以包括例如索引数据,诸如偶尔存储器快照、用于快速定位追踪数据流301中的存储器地址/值的反向查找数据结构等。
如所提及的,基于硬件的追踪途径可能至少部分基于记录非确定性指令的附带后果、数据到高速缓存108的流入和任何未高速缓存/不可高速缓存的读取来记录追踪113。虽然处理器102能够完全完成这个任务是可能的,但是本文中的实施例利用协处理器105来执行该追踪工作的至少一部分,该至少一部分包括将数据的流入记录到高速缓存108。
如本领域普通技术人员将领会的,以这种方式使用协处理器105可以提供若干优点。比如,从处理器设计和制造的角度来看,应当领会,将完全追踪电路系统/逻辑添加到处理器102可能是困难且昂贵的。比如,鉴于现代处理器已经非常复杂的设计,添加这种电路系统/逻辑可能比较困难。附加地,添加这种线路系统/逻辑可能会导致处理器管芯尺寸更大,这会损害制造期间的良率。从性能的观点来看,处理器102用来执行日志记录任务的任何资源都可能是可以用来执行应用代码的资源。并且,日志记录可能经常与系统存储器103交互(例如,写入追踪113'),并且存储器交互是处理器可以执行的最昂贵的操作中的一个操作(例如,就处理器时钟周期而言)。因此,处理器102的日志记录可以导致对应用性能的真实重大影响。另外,由于通过处理器102进行的日志记录可以导致当日志记录时增加处理器资源的利用,所以通过处理器102进行的任何日志记录活动都会生成附加热量并且增加处理器102的功耗。通过将日志记录逻辑移动到单独管芯以及通过提供专用电路系统/逻辑来执行日志记录,使用协处理器105可以避免或至少减轻了通过处理器102进行完全日志记录的这些缺点中的每个缺点。
虽然本文中的公开主要集中在使用协处理器105来记录高速缓存108中的数据消耗(例如,写入高速缓存行、从高速缓存行读取、流入高速缓存行),但是应当领会,协处理器105可以用于代表处理器102记录几乎任何类型的追踪数据。这可以包括例如初始状态(即,当日志记录首先开始时)、存储器快照、关键帧、检查点、未被缓存/不可缓存的读取等。
再次参考图1,协处理器105可以包括控制逻辑110。与处理器102中的控制逻辑109相似,协处理器105中的控制逻辑110可以包括CCP逻辑110a和记录逻辑110b(不过,应当解释,CCP逻辑和日志逻辑的功能在处理器与协处理器之间不同)。如所示出的,协处理器还可以包括高速缓存111,该高速缓存111可以例如用作临时缓冲器以在将数据写入追踪113或通过通信信道114发送该数据之前存储该数据。
一般而言,处理器102处的CCP逻辑109a在总线106上发送CCP消息,而协处理器105处的CCP逻辑109a监听总线106上的那些CCP消息。如此,协处理器105可以是至少至一个被动直接存储器访问(DMA)参与者。在实施例中,处理器102向总线106发送与数据消耗有关的至少CCP消息(例如,数据从系统存储器103流入高速缓存108中的至少一层,或者通过处理单元107从高速缓存行读取/写入该高速缓存行)。这些CCP消息取决于CCP协议而有所不同,但它们通常是处理器用于请求特定地址处的高速缓存行的消息、通过处理器用于将高速缓存行从共享提升为独有的消息等(以及对这些消息的响应)。当协处理器105接收指示存在数据消耗的(多个)CCP消息时,协处理器105处的日志记录逻辑11b可以启动对该消耗的日志记录(例如,到追踪113或到通信信道114)。这可以包括例如对作为高速缓存流入的一部分的一个或多个存储器单元的(多个)值进行日志记录、对作为处理单元107从高速缓存行读取或写入该高速缓存行的一部分的一个或多个存储器单元的(多个)值进行日志记录。协处理器105可以从总线106(例如,当它们作为高速缓存未命中的一部分传达到高速缓存108时)、从系统存储器103、或者甚至从高速缓存108获得(多个)存储器单元值106。
一般而言,处理器102处的日志记录逻辑109b还执行尚未移载到协处理器105的一个或多个日志记录任务。这可以包括例如记录非确定性指令的附带后果、记录关键帧、记录存储器快照、记录检查点(例如,一个或多个寄存器的值的校验和/散列)等。在实施例中,日志记录逻辑109b可以直接记录该信息(即,通过处理器102),尽管它可以备选地请求协处理器105(例如,经由总线106上的请求)记录该信息的任一项。
在实施例中,处理器102处的日志记录逻辑109b可以将其给定线程的追踪数据记录到一个或多个追踪数据流中,而协处理器105处的日志记录逻辑110b可以将其对于同一线程的追踪数据记录到一个或多个其他追踪数据流中。如果是这种情况,则日志记录逻辑109b和/或日志记录逻辑109c中的一个或两个可以记录可以用于将这些数据流拼接在一起以创建线程的单个数据流的数据定时信息(例如,指令计数或其他定时器信息)数据流。当然,日志记录逻辑109b和日志记录逻辑110b可以备选地将追踪数据记录到给定线程的相同数据流中。
应当领会,系统存储器103可以被处理器102以外的东西(即,一些其他DMA设备)修改。在实施例中,协处理器105处的CCP逻辑110a可以检测这样的存储器修改,并且使用日志记录逻辑110b来对它们进行日志记录。例如,日志记录逻辑110b可以记录受DMA操作影响的地址或地址范围以及它发生的时间和/或新存储器单元值。在实施例中,可能期望记录地址(和/或地址范围),但是禁止记录所改变的值。这是因为如果这些值实际上被在处理器102处执行的代码消耗并且可以在那时通过协处理器105进行日志记录,则这些值将表现为流入。尽管如此,通过记录DMA操作何时发生以及哪个或哪些存储器地址受到影响,消耗追踪113的调试器至少可以显现该信息。在其他实施例中,可能期望对所改变的值进行日志记录,但禁止记录地址信息。如果日志记录逻辑110b对DMA在发生时改变(可能带有压缩)的值进行日志记录,然后当消耗这些值时,对CCP业务进行日志记录(没有值),则可能实现降低追踪大小(即,与记录地址而非值相比较)。
在实施例中,CCP逻辑110a可以积极参与处理器的CCP。因此,它可能不是被动DMA参与者(即,只读),而是主动DMA参与者(即,读取/写入)。如果是这种情况,则启用附加场景,诸如协处理器105参与初始存储器快照,或者协处理器105实际满足高速缓存流入请求。下文对这些概念进行更详细的描述。
图4图示了使用协处理器存储执行追踪的至少一部分的示例方法400的流程图。方法400的讨论涉及方法动作(即,动作401至409)。尽管这些方法动作可能会按特定次序进行讨论或在流程图中说明为按特定次序发生,但是除非特别说明,否则无需特定排序,或者因为动作取决于在正在执行该动作之前完成的另一动作,所以无需特定排序。
在图1至图3的上下文中并且参考图4的流程图对方法400进行描述。例如,参考图1,方法400可以在计算机系统(例如,计算机系统101)中实现,该计算机系统包括一个或多个主处理器(例如,一个或多个处理器102),与存储器高速缓存(例如,高速缓存108)相关联;一个或多个协处理器(例如,协处理器105);以及一个或多个总线(例如,总线106),将主处理器与协处理器互连。
如图4所示,方法400可以包括由主处理器102执行的动作和由协处理器105执行的动作。在实施例中,由(多个)主处理器102执行的动作可以至少部分由控制逻辑109编排,并且由(多个)协处理器105执行的动作可以至少部分由控制逻辑110编排。然而,应当领会,方法400可以备选地被视为两个相关但不同的方法,即,一个方法(即,方法400a,包括动作401至405)在(多个)主处理器102处完全执行,而另一方法(即,方法400b,包括动作406至409)在(多个)协处理器105处完全执行。在实施例中,方法400至少部分基于主处理器102执行可执行实体(例如,应用112)的一个或多个可执行指令来操作。
如所示出的,方法400包括在主处理器处开始对线程在主处理器处的执行进行日志记录的动作401。例如,结合主处理器执行应用112的一个或多个线程的一个或多个可执行指令,日志记录逻辑109b可以启动线程中的至少一个线程的日志记录。值得注意的是,该日志记录可以在启动线程的执行时启动,或者在线程执行后的某个时间启动。如动作401和406之间的箭头所示,方法400可以包括在协处理器处开始对在主处理器处执行线程进行日志记录的对应动作406。例如,处理器102处的日志记录逻辑109b可以用信号通知协处理器105处的日志记录逻辑110b已经启用/启动了线程和/或处理单元107的日志记录。因此,协处理器105处的日志记录逻辑110b可以启动其自身的线程/处理单元的日志记录。
如所示出的,基于在动作406中已开始在主处理器处对线程的执行进行了日志记录,协处理器105可以在动作407中监听总线上的CCP消息。例如,协处理器105可以监听总线106。在实施例中,动作407可以包括:协处理器105在单个总线上或在多个总线上侦听。在实施例中,动作406可以包括:协处理器105“侦听”现有总线信号,该现总线信号否则与总线106上的另一DMA参与者点对点。在该实施例的一些实施方式中,协处理器105可以被实现为“仅接收抽头”(即,无需指示其在总线106上的存在)。在其他实施例中,动作406可以包括:协处理器105作为拦截CCP消息并且将它们转发给其他DMA参与者的“中间人”操作。
图4还示出了在动作401中在主处理器102处开始对线程的执行进行日志记录之后,主处理器102可以在动作402(即,使用日志记录逻辑109b)启动对初始状态的日志记录。值得注意的是,日志记录逻辑109b可以自己记录任何这种初始状态信息(或者任何其他与此相关的追踪数据),或者反而可以请求协处理器105记录该初始状态信息。该初始状态可以包括可以用于稍后从在动作401中开始日志记录的点开始启动线程仿真的任何信息。如果在与开始执行线程基本同时(即,在动作401中)开始日志记录,则这可能意味着日志记录逻辑109b启动记录关键帧,该关键帧包括正在执行线程的处理单元107的一个或多个寄存器107a的状态。因此,在动作402中,处理器102可以在追踪开始时启动一个或多个寄存器的初始状态的存储。
如果在线程已经执行之后(即,在动作401中)开始日志记录,则除了记录寄存器状态之外,这可能意味着日志记录逻辑109b记录(诸如存储在高速缓存108中的值的)存储器快照。作为记录存储器快照的备选方案,主处理器102可以刷新高速缓存108,以使在启用日志记录之后发生的任何读取将表现为流入高速缓存108(因此,可以通过协处理器105进行日志记录)。因此,结合动作402,除了记录寄存器状态之外,主处理器102可以在追踪开始时刷新存储器高速缓存108。
如所提及的,CCP逻辑110a可以积极参与处理器的CCP。如果是这种情况,则可能存在用于对高速缓存108的初始状态进行快照的附加选项。例如,主处理器102可以向协处理器105给予高速缓存108的值以供协处理器105进行日志记录。值得注意的是,记录(通过主处理器102或协处理器105)对高速缓存108的快照可能需要大量处理器时钟周期,这意味着主处理器102可能需要停止应用代码的执行(对于潜在大量),直至快照完成。因此,在动作402中,协处理器105可以在追踪开始时参与CCP以接收存储器高速缓存108的初始状态,并且主处理器102可以等待协处理器105在追踪开始时将存储器高速缓存108存储到执行追踪中113中。
备选地,如果CCP逻辑110a主动参与CCP,则主处理器102处的CCP逻辑109a可以通过在共享(或等同)CCP状态下将高速缓存108的线的至少一个子集给予协处理器105来启动初始高速缓存状态的转移。如本文中所使用的,当高速缓存行处于“共享”CCP状态时,任何实体(包括主处理器102)在没有首先通知同样具有处于共享状态的高速缓存行的其他实体(例如,协处理器105)的情况下修改高速缓存行通常是非法的。因此,在实施例中,在将高速缓存行给予处于共享CCP状态的协处理器105之后,主处理器102可以在无需等待协处理器105存储完整快照的情况下恢复应用代码执行。然后,协处理器105可以通过从系统存储器103获取高速缓存行的值来对该高速缓存行进行日志记录,因为它有资源这样做,然后在任何经日志记录的缓存行上释放其共享状态。如果主处理器102需要在协处理器105对其进行了日志记录之前修改这些高速缓存行中的一个高速缓存行,则协处理器105在修改之前凭借共享的高速缓存行而获知,以使协处理器105可以确保在该修改生效之前对高速缓存行进行日志记录。如果由于某种原因高速缓存行不可共享,则主处理器102可能逐出高速缓存行,将高速缓存行的值直接给予协处理器105,或者进行任何适当的操作以使高速缓存行可共享。因而,在动作402中,协处理器105可以参与CCP以在追踪开始时接收存储器高速缓存108的初始状态,并且主处理器102可以在追踪开始时将存储器高速缓存108中的至少一个高速缓存行给予处于共享CCP状态的协处理器105,而协处理器105从支持存储器高速缓存108的存储器获得至少一个高速缓存行的值。
图4还示出了在动作402中启动对初始状态的日志记录之后,主处理器102可以(串行或并行)执行几个动作中的一个或多个动作。例如,主处理器102可以启动对高速缓存消耗进行的日志记录(即,动作403),可以启动对一个或多个非确定性指令进行日志记录(即,动作404),和/或可以启动对其他追踪数据进行日志记录(即,动作405)。
参考动作403,启动高速缓存消耗的存储可以包括:在总线上发送CCP消息(在403a)并且消耗存储器单元的数据(动作403b)。应当指出,在图4中,动作403a和403b经由双端箭头连接。这表示除非另有说明,否则本描述(和权利要求)不强制执行动作403a和403b之间的排序。因此,取决于实现,可以并行或串行(按任一次序)执行动作403a和403b。
在一些实施方式中,动作403a可以包括:基于主处理器执行一个或多个可执行指令,主处理器在总线上发送一个或多个CCP消息,该一个或多个CCP消息对应于存储器单元。在一些实施方式中,动作403b可以包括:基于主处理器执行一个或多个可执行指令,主处理器消耗存储器单元的数据。例如,作为执行应用112的所追踪的线程的一部分,处理器102可以执行应用112的机器代码指令,该机器代码指令使用(即,来自系统存储器103的)存储器单元值作为输入。
如果该存储器单元值已经处于高速缓存108(即,与系统存储器103并存)中,则指令的执行可以使得主处理器102消耗该值并且在适当的高速缓存行上设置跟踪比特以指示它被消耗了。因此,在动作403b中,消耗存储器单元的数据的主处理器可以包括向处理单元107提供存储器单元的现有数据的存储器高速缓存。数据的这种提供可以通过一个或多个CCP消息编排,并且主处理器102在动作403a中可以(例如,使用CCP逻辑109a)在总线106上发送这些CCP消息的至少一部分。在实施例中,这些CCP消息可以包括专门旨在用于协处理器105的CCP消息,由于在这种情况下向总线发送CCP消息可能并非是典型的。
如果该存储器单元值尚未处于高速缓存108中,则该指令的执行可以引起该存储器单元上的高速缓存未命中,该高速缓存未命中启动该存储器单元的值从系统存储器103流入高速缓存108。因此。在动作403b中,消耗存储器单元的数据的主处理器102可以包括流入存储器单元的数据的存储器高速缓存108。该高速缓存未命中可以通过一个或多个CCP消息编排,并且主处理器102可以在动作403a中(例如,使用CCP逻辑109a)在总线106上发送这些CCP消息的至少一部分。在实施例中,这些CCP消息可以是用于进行高速缓存未命中的传统CCP消息,诸如传达到系统存储器103的存储器控制器的CCP消息。然而,在其他实施例中,这些CCP消息可以包括专门旨在用于协处理器的CCP消息105。
如已经描述的,协处理器105在总线106上监听CCP消息(即,动作407)。因此,如动作403a和408之间的箭头所示,方法400可以包括在协处理器处接收由于消耗而发送的CCP消息的对应动作408。在一些实施方式中,动作408可以包括:协处理器从总线接收一个或多个CCP消息。例如,如所提及的,CCP逻辑110a可以“侦听”在动作403a中在总线106上发送的CCP消息,可以拦截在动作403a中在总线106上发送的CCP消息,或者以其他方式从总线106接收在动作403a中发送的CCP消息。
图4还示出了在动作408中从总线接收一个或多个CCP消息之后,协处理器105可以执行启动将消耗日志记录到执行追踪的动作409。在一些实施方式中,动作409包括:基于协处理器接收到一个或多个CCP消息,协处理器启动将所消耗的存储器单元的数据存储到执行追踪中。例如,协处理器105处的日志记录逻辑110b可以将一个或多个数据分组302插入到表示消耗的一个或多个追踪数据流301中。比如,如果在动作403b中,存储器高速缓存为存储器单元提供现有数据,则动作409可以包括:生成表示所提供的数据的数据分组302或它的某个代理。由于在这种实例中,该数据可能已经被日志记录到追踪113(例如,作为先前流入的一部分),所以所提供数据的代理可能是对该数据的引用,诸如对已经存储在一个或多个追踪数据流301中的该数据的引用。如果另一方面,在动作403b中,存储器缓存了用于存储器单元的流入数据,则动作409可以包括:生成表示该流入数据的数据分组302。
如所提及的,协处理器105可以将追踪数据发送到系统存储器103中的追踪113',或者它可以通过通信信道114发送该追踪数据。如此,在动作409中,协处理器启动将所消耗的存储器单元的数据存储到执行追踪中可以包括以下项中的至少一项:(i)协处理器将追踪数据的一部分写入存储器,或者(ii)协处理器通过通信信道发送追踪数据的一部分。
如图1所示,协处理器105可以包括压缩逻辑110c。一般而言,该压缩逻辑110c可以在存储(例如,到系统存储器103)或(例如,通过通信信道114)发送任何追踪数据之前压缩该追踪数据。在实施例中,压缩逻辑110c不仅压缩协处理器105所生成的追踪数据,而且压缩处理器102所生成的追踪数据(即,日志记录逻辑109b所生成的任何数据)。在实施例中,压缩逻辑110c执行无损压缩,诸如使用通用无损压缩算法(例如,gzip、bzip2、LZMA等)。附加地或备选地,压缩逻辑110c可以执行域特定压缩(即,基于存储器地址和数据值是这样的知识来压缩这些存储器地址和数据值)。鉴于压缩逻辑110c的这一描述,应当领会,动作409可以包括:协处理器105压缩执行追踪的一个或多个部分。
返回到动作402,在启动对初始状态的日志记录之后,主处理器102可以附加地或备选地在动作404中启动对(多个)非确定性指令的日志记录。例如,日志记录逻辑109b可以确定其输出不仅仅依赖于其输入的一个或多个所执行的指令的附带后果(即,输出),并且生成表示这些指令的执行(例如,表示它们的输出)的一个或多个数据分组。因此,方法400可以包括:主处理器启动对执行非确定性指令的结果的存储。动作404以断线示出,指示它可以是可选的。如果不执行动作404,则可以(例如,根据在动作409中记录的消耗数据)重构应用112的所追踪的执行中的某个执行,然而,所得追踪113不会完全“比特准确”(即,可能存在无法完全根据追踪113重构的某个现有执行状态)。
返回到动作402,在启动对初始状态的日志记录之后,主处理器102可以附加地或备选地在动作405中启动对其他追踪数据的日志记录。例如,除了对非确定性指令进行日志记录(即,动作404),处理器102处的日志记录逻辑109b还可以启动各种其他类型的追踪数据的存储,诸如偶尔关键帧、检查点数据、存储器写入、或对重构执行有用的任何其他类型的数据。与动作404相似,动作405也以断线示出,指示它可能是可选的。
应当领会,鉴于本文中的公开内容,主处理器102在动作404和/或405中启动将追踪数据的一个或多个其他部分(例如,非确定性指令、关键帧、检查点、写入等的表示)存储到执行追踪中可以包括以下项中的一项或两项:(i)主处理器102将追踪数据的一个或多个其他部分直接存储到执行追踪113中;或(ii)主处理器102指令协处理器105将追踪数据的一个或多个其他部分存储到执行追踪113中。附加地,如果主处理器将追踪数据的一个或多个其他部分直接存储到执行追踪中,则在动作409中,主处理器可以将数据存储到与协处理器将所消耗的存储器单元的数据存储到的追踪数据流不同的追踪数据流301中。
如结合图2所描述的,高速缓存108可以包括多个高速缓存级别(例如,L1、L2、L3等)。在实施例中,方法400通常可以基于单个高速缓存级别的活动来执行。例如,如果高速缓存108包括L1和L2高速缓存级别,则可以执行方法400以使用协处理器105来对L2高速缓存级别的消耗进行日志记录(例如,通常将流入日志记录到高速缓存108)。因此,在方法400中,存储器高速缓存可以包括多个高速缓存级别(例如,L1和L2高速缓存级别),其中存储器高速缓存在第一高速缓存级别(例如,L2高速缓存级别)处存储所消耗的存储器单元的数据,并且一个或多个CCP消息是与第一高速缓存级别(例如,L2高速缓存级别)的活动有关的一个或多个第一CCP消息。然而,通过这样做,所得追踪113可能缺少关于不影响该高速缓存级别的处理器活动的信息。比如,参考图2,处理单元A1和A2可能在其相应L1高速缓存(即,L1-A1和L1-A2)上操作,并且该活动可能无法通过在L2高速缓存级别(例如,L2-A1)处进行日志记录来捕获。在实施例中,主处理器102和/或协处理器105被配置为捕获附加追踪数据以促进该活动的重构。存在可以单独使用或组合使用的各种途径。
在一些实施例中,一种途径将主处理器102处的CCP逻辑109a配置为还将与一个或多个其他高速缓存级别处的活动有关的CCP消息发送到总线106上。因此,协处理器105处的CCP逻辑110a可以接收这些CCP消息,并且视情况而定,日志记录逻辑110b可以基于这些CCP消息来对追踪数据进行日志记录。因此,在方法400中,主处理器还可以在总线上发送与第二高速缓存级别的活动有关的一个或多个第二CCP消息;协处理器可能会从总线接收一个或多个第二CCP消息;并且基于协处理器接收一个或多个第二CCP消息,协处理器可以启动将与第二高速缓存级别的活动有关的追踪数据存储到执行追踪中。应当领会,在总线106上发送这些第二CCP消息将产生总线106上的附加业务,该总线106通常具有有限数量的可用带宽。如此,在总线106上发送这些第二CCP消息可能会损害整体系统性能。因此,在实施例中,主处理器仅当(例如,在动作401中)启用执行追踪日志记录时,在总线上发送与第二高速缓存级别的活动有关的CCP消息,和/或针对这些消息使用单独总线。
在其他实施例中,一种途径在主处理器102和/或协处理器105处配置日志记录逻辑109b/110b以对代码流追踪进行日志记录,该代码流追踪可以用于在一个或多个未经日志记录的高速缓存级别处重构活动。本领域普通技术人员应当领会,代码流追踪通常捕获分支/代码流指令(例如,用于实现循环、“if”语句、开关等的机器代码指令)的结果。在实施例中,主处理器102和/或协处理器105处的日志记录逻辑109b/110b可以仅对这些代码流指令的子集进行日志记录,诸如在存储器屏障之后具有不可预测返回和条件分支的间接跳转。当记录代码流信息的子集而非所有代码流信息时,由于条件跳转不在存储器屏障和可预测返回附近,所以主处理器102和/或协处理器105处的日志记录逻辑109b/110b可能会忽略这样的代码流信息。鉴于前述内容,应当领会,在方法400中,主处理器或协处理器中的至少一个可以启动将代码流追踪的至少一部分存储到执行追踪中。这可以包括例如主处理器直接存储代码流追踪的至少一个子集(这可以包括省略存储至少一种代码流追踪事件类型)。备选地,这可以包括主处理器在总线上发送与代码流有关的一个或多个消息(这可以包括省略发送与至少一种代码流追踪事件类型有关的消息);协处理器从总线接收这些消息;并且,基于协处理器接收消息,协处理器启动对代码流追踪的至少一个子集的存储。在任一情况下,启动将代码流追踪的至少一部分存储到执行追踪中可以启动存储以下项中的一项或多项:(i)具有不可预测返回的间接跳转;或(ii)存储器屏障之后的条件分支。
在其他实施例中,一种途径将主处理器102和/或协处理器105处的记录逻辑109b/110b配置为对一个或多个存储器写入进行日志记录。本领域普通技术人员应当领会,如果您拥有程序的写入,则您就拥有它的所有输出,并且该信息可以用于在一个或多个非日志缓存级别重构活动。例如,主处理器102处的日志记录逻辑109b可以直接对写入进行日志记录,或者主处理器102可以在总线106上发送与存储这些写入有关的消息(即使它们实际上没有被提交到系统存储器103)。因此,协处理器105可以接收这些消息,并且协处理器105处的日志记录逻辑110b可以对它们进行日志记录。在实施例中,协处理器105可以“折叠”写入(例如,通过仅当存在高速缓存逐出时对它们进行日志记录)。例如,协处理器105可以将存储器单元的写入存储在其高速缓存111中,从而当它观察到对该存储器单元的写入时,保持高速缓存111更新。然后,当存在从高速缓存108实际逐出时,日志逻辑110b可以对存储在其自身的高速缓存111中的值进行日志记录。备选地,主处理器102可以通知协处理器105它正在逐出脏的高速缓存行(或将其移动到共享状态)。然后,协处理器105可以对当前数据值进行日志记录。这减少了总线业务,因为该总线业务可以是通常存在多次写入的一个消息。鉴于上述内容,应当领会,在方法400中,主处理器或协处理器中的至少一个可以启动将由可执行实体的执行引起的至少一个写入存储到执行追踪中。比如,这可以包括主处理器直接存储写入。备选地,这可以包括主处理器在总线上发送与写入有关的一个或多个消息;协处理器从总线接收(多个)这些消息;并且,基于协处理器接收(多个)消息,协处理器启动写入或写入集合的合并表示(即,系列中的最后一个值)的存储。
在其他实施例中,一种途径在主处理器102和/或协处理器105处配置日志记录逻辑109b/110b以对一个或多个检查点进行日志记录,该日志逻辑109b/110b可以用于在一个或多个未经日志记录的高速缓存级别重构活动。例如,主处理器102处的日志记录逻辑109b可能偶尔生成一个或多个寄存器107a的(多个)值的校验和/散列和/或其他处理器状态。然后,日志记录逻辑109b可以将该检查点直接存储到追踪113,或者请求协处理器105处的日志记录逻辑110b这样做。稍后,在追踪重放期间,如果关于采用有限执行分支集合中的哪个执行分支存在歧义,则检查点可以用于确定在追踪记录期间实际采用的是哪个执行分支(例如,通过根据所仿真的处理器状态生成这些分支中的每个分支的类似检查点,并且将这些检查点与经过日志记录的检查点进行比较)。鉴于上述内容,应当领会,在方法400中,主处理器或协处理器中的至少一个可以启动对至少一个检查点的存储,该至少一个检查点在可执行实体执行期间基于主处理器处的(例如,校验和/散列)一个或多个寄存器值。比如,这可以包括直接存储检查点的主处理器。备选地,这可以包括主处理器在总线上发送与检查点有关的(多个)消息;协处理器从总线接收(多个)这些消息;以及基于协处理器接收一个或多个消息,协处理器启动对检查点的存储。
无论使用何种途径(例如,暴露附加CCP数据、对代码流追踪进行日志记录、对写入进行日志记录、对检查点进行日志记录等),主处理器102和/或协处理器105处的日志记录逻辑109b/110b都可以被配置为对其他定时信息进行日志记录,这些定时信息还可以用于帮助解决追踪数据中的歧义。示例定时信息包括例如指令计数或其他定时信息。鉴于上述内容,应当领会,在方法400中,主处理器或协处理器中的至少一个可以启动对定时信息的存储。比如,这可以包括直接存储定时信息的主处理器。备选地,这可以包括主处理器在总线上发送与定时信息有关的一个或多个消息;协处理器从总线接收(多个)这些消息;并且基于协处理器接收(多个)消息,协处理器启动对定时信息的存储。
如之前所提及的,CCP逻辑110a可能积极参与处理器的CCP(即,读取/写入)。如果是,这可以通过协处理器105实现其他功能。例如,协处理器105本身可以充当处理器102的“侧”高速缓存。比如,如上文所解释的,协处理器105可以使用其高速缓存111通过更新写入给定存储器单元的值来在写入被逐出时对它们进行日志记录。基于主处理器102处的活动,高速缓存108(例如,经由总线106上的CPP消息)请求存储器单元的值,而协处理器105在其高速缓存111中仍具有该值。如果是,则协处理器105可以将该值提供给高速缓存108,而非要求系统存储器103满足该请求。附加地,如果是这种情况,则协处理器105可以避免将该流入日志记录到高速缓存108中,因为它向高速缓存108给予值(因此已经得知该值)。因而,在方法400中,协处理器可以参与CCP以代表主处理器完成高速缓存读取请求。
如还提及的,协处理器105可以检测其他实体的DMA修改,并且对它们进行日志记录。例如,日志记录逻辑110b可以记录受DMA操作和/或新存储器单元值影响的地址或地址范围。因而,在方法400中,协处理器可以启动将受DMA事件影响的存储器单元的值或受DMA事件影响的存储器单元的身份中的至少一个存储到执行追踪中。
虽然已经以特定于结构特征和/或方法动作的语言描述了该主题,但是应当理解,所附权利要求中定义的主题不一定限于所描述的特征或上文所描述的动作或上文所描述的动作的次序。相反,所描述的特征和动作被公开为实现权利要求的示例形式。
本发明范围内的实施例可以包括用于携载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这种计算机可读介质可以是可以由通用计算机系统或专用计算机系统访问的任何可用介质。存储计算机可执行指令和/或数据结构的计算机可读介质是计算机存储介质。携载计算机可执行指令和/或数据结构的计算机可读介质是传输介质。因此,通过示例而非限制,本发明的实施例可以包括至少两种截然不同的计算机可读介质:计算机存储介质和传输介质。
计算机存储介质是存储计算机可执行指令和/或数据结构的物理存储介质。物理存储介质可以包括例如系统存储器103、存储介质104和处理器上存储装置(例如,存储控制逻辑109和/或控制逻辑110的至少一部分)。物理存储介质包括计算机硬件,诸如RAM、ROM、EEPROM、固态驱动器(“SSD”)、闪存、相变存储器(“PCM”)、光盘存储装置、磁盘存储装置或其他磁性存储设备、或(多个)任何其他硬件存储设备,该(多个)其他硬件存储设备可以用于存储形式为计算机可执行指令或数据结构的程序代码,该程序代码可以由通用计算机系统或专用计算机系统访问和执行以实现所公开的本发明的功能。
传输介质可以包括网络和/或数据链路(例如,通信信道114),这些数据链路可以用于携载形式为计算机可执行指令或数据结构的程序代码,并且可以由通用计算机系统或专用计算机系统访问。“网络”被定义为一个或多个数据链路,该一个或多个数据链路使得能够在计算机系统和/或模块和/或其他电子设备之间传输电子数据。当通过网络或其他通信连接(硬连线、无线、或硬连线或无线的组合)向计算机系统传送或提供信息时,计算机系统可以将该连接视为传输介质。上述的组合也应包括在计算机可读介质的范围内。
进一步地,在到达各种计算机系统组件时,形式为计算机可执行指令或数据结构的程序代码可以从传输介质自动传送到计算机存储介质(或反之亦然)。例如,通过网络或数据链路接收的计算机可执行指令或数据结构可以缓存在网络接口模块(例如,“NIC”)内的RAM中,最终传送到计算机系统RAM和/或计算机系统处的低易失性计算机存储介质。因此,应当理解,计算机存储介质可以包括在也(或甚至主要)利用传输介质的计算机系统组件中。
计算机可执行指令包括例如当在一个或多个处理器上执行时使得通用计算机系统、专用计算机系统或专用处理设备执行特定功能或功能组的指令和数据。计算机可执行指令可以是例如二进制文件、中间格式指令,诸如汇编语言、处理器微代码、甚至源代码。
在没有背离其精神或基本特点的情况下,本发明可以以其他特定形式具体实施。所描述的实施例在所有方面都应被视为说明性的而非限制性的。因此,本发明的范围由所附权利要求而非由前述描述指示。落入权利要求的等效含义和范围内的所有改变都应包含在其范围内。当在所附权利要求中引入要素时,冠词“一”、“一个”、“该”和“所述”旨在意指存在要素中的一个或多个要素。术语“包括”、“包含”和“具有”旨在是包含性的,并且意味着除了所列元素之外可能还有附加元素。

Claims (15)

1.一种计算机系统,包括:
主处理器,与存储器高速缓存相关联;
协处理器;以及
总线,将所述主处理器与所述协处理器互连,
所述计算机系统被配置为基于至少以下项来使用所述协处理器存储执行追踪的至少一部分:
所述主处理器执行可执行实体的一个或多个可执行指令;
基于所述主处理器执行所述一个或多个可执行指令,
所述主处理器在所述总线上发送一个或多个缓存一致性协议(CCP)消息,所述一个或多个CCP消息与存储器单元相对应;以及
所述主处理器消耗针对所述存储器单元的数据;
所述协处理器从所述总线接收所述一个或多个CCP消息;以及
基于所述协处理器接收所述一个或多个CCP消息,所述协处理器启动将所消耗的针对所述存储器单元的所述数据存储到所述执行追踪中。
2.根据权利要求1所述的计算机系统,其中,所述主处理器消耗针对所述存储器单元的数据包括以下项中的至少一项:
所述存储器高速缓存流入针对所述存储器单元的数据,或者
所述存储器高速缓存提供针对所述存储器单元的现有数据。
3.根据权利要求1所述的计算机系统,其中,所述主处理器启动将追踪数据的一个或多个其他部分存储到所述执行追踪中,所述追踪数据的所述一个或多个其他部分包括以下项中的一项或多项:
执行非确定性指令的结果;或者
一个或多个寄存器在追踪开始时的初始状态。
4.根据权利要求3所述的计算机系统,其中,所述主处理器启动将所述追踪数据的所述一个或多个其他部分存储到所述执行追踪中包括以下项中的一项:
所述主处理器将所述追踪数据的所述一个或多个其他部分直接存储到所述执行追踪中;或者
所述主处理器指示所述协处理器将所述追踪数据的所述一个或多个其他部分存储到所述执行追踪中。
5.根据权利要求4所述的计算机系统,其中,所述主处理器将所述追踪数据的所述一个或多个其他部分直接存储到所述执行追踪中,并且其中所述主处理器将所述追踪数据的所述一个或多个其他部分存储到与所述协处理器将所消耗的针对所述存储器单元的数据所存储到的追踪数据流不同的追踪数据流中。
6.根据权利要求1所述的计算机系统,其中,所述协处理器启动将所消耗的针对所述存储器单元的数据存储到所述执行追踪中包括以下项中的至少一项:
所述协处理器将追踪数据的一部分写入到存储器;或者
所述协处理器通过通信信道发送所述追踪数据的所述部分。
7.根据权利要求1所述的计算机系统,其中,所述协处理器压缩所述执行追踪的一个或多个部分。
8.根据权利要求1所述的计算机系统,其中,所述存储器高速缓存包括多个高速缓存级别,并且其中,
所述存储器缓存将所消耗的针对所述存储器单元的数据存储在第一高速缓存级别;以及
所述一个或多个CCP消息是与所述第一高速缓存级别的活动有关的一个或多个第一CCP消息。
9.根据权利要求8所述的计算机系统,其中,
所述主处理器还在所述总线上发送与第二高速缓存级别的活动有关的一个或多个第二CCP消息;
所述协处理器从所述总线接收所述一个或多个第二CCP消息;以及
基于所述协处理器接收所述一个或多个第二CCP消息,所述协处理器启动将与所述第二高速缓存级别的所述活动有关的追踪数据存储到所述执行追踪中。
10.根据权利要求1所述的计算机系统,其中,所述主处理器或所述协处理器中的至少一个处理器启动将代码流追踪的至少一部分存储到所述执行追踪中。
11.根据权利要求1所述的计算机系统,其中,所述主处理器或所述协处理器中的至少一个处理器启动将以下项中的一项或多项存储到所述执行追踪中:
由所述可执行实体的执行引起的一个或多个写入;
检查点,所述检查点基于在所述可执行实体的执行期间所述主处理器处的一个或多个寄存器值;或者
所述可执行实体的执行期间的定时信息。
12.根据权利要求1所述的计算机系统,其中,所述协处理器参与所述CCP,以在追踪开始时接收所述存储器高速缓存的初始状态。
13.根据权利要求12所述的计算机系统,其中,所述主处理器在追踪开始时将所述存储器高速缓存中的至少一个高速缓存线给予处于共享CCP状态的所述协处理器,并且所述协处理器从支持所述存储器高速缓存的存储器获得针对所述至少一个高速缓存线的值。
14.根据权利要求1所述的计算机系统,其中,所述协处理器参与所述CCP,以代表所述主处理器完成高速缓存读取请求。
15.根据权利要求1所述的计算机系统,其中所述协处理器启动将以下项中的至少一项存储到所述执行追踪中:
由直接存储器访问(DMA)事件影响的存储器单元的值;或者
由所述DMA事件影响的所述存储器单元的身份。
CN202080032925.8A 2019-05-02 2020-04-07 用于时间行程调试的基于协处理器的日志记录 Pending CN113785277A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/401,932 US11126537B2 (en) 2019-05-02 2019-05-02 Coprocessor-based logging for time travel debugging
US16/401,932 2019-05-02
PCT/US2020/026974 WO2020222981A1 (en) 2019-05-02 2020-04-07 Coprocessor-based logging for time travel debugging

Publications (1)

Publication Number Publication Date
CN113785277A true CN113785277A (zh) 2021-12-10

Family

ID=70476441

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080032925.8A Pending CN113785277A (zh) 2019-05-02 2020-04-07 用于时间行程调试的基于协处理器的日志记录

Country Status (4)

Country Link
US (2) US11126537B2 (zh)
EP (1) EP3963459A1 (zh)
CN (1) CN113785277A (zh)
WO (1) WO2020222981A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113741410A (zh) * 2021-11-08 2021-12-03 西安热工研究院有限公司 一种分散控制系统调试数据刷新方法和系统
CN115048145A (zh) * 2022-06-14 2022-09-13 海光信息技术股份有限公司 一种信息采集方法、装置及相关设备

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11907091B2 (en) 2018-02-16 2024-02-20 Microsoft Technology Licensing, Llc Trace recording by logging influxes to an upper-layer shared cache, plus cache coherence protocol transitions among lower-layer caches
LU102709B1 (en) * 2021-03-26 2022-09-26 Microsoft Technology Licensing Llc Memory address compression within an execution trace
LU102708B1 (en) * 2021-03-26 2022-09-26 Microsoft Technology Licensing Llc Physical memory address omission or obfuscation within an execution trace

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010042193A1 (en) * 1998-11-09 2001-11-15 Rod G. Fleck Data processing unit with interface for sharing registers by a processor and a coprocessor
CN101158925A (zh) * 2006-10-04 2008-04-09 国际商业机器公司 用于支持跟踪和标准高速缓存行的同时存储的装置和方法
US20180004581A1 (en) * 2016-06-29 2018-01-04 Oracle International Corporation Multi-Purpose Events for Notification and Sequence Control in Multi-core Processor Systems
CN107688545A (zh) * 2016-12-23 2018-02-13 北京国睿中数科技股份有限公司 高速缓存的一致性状态预置方法及系统

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040139305A1 (en) * 2003-01-09 2004-07-15 International Business Machines Corporation Hardware-enabled instruction tracing
GB2403560A (en) * 2003-07-02 2005-01-05 Advanced Risc Mach Ltd Memory bus within a coherent multi-processing system
TWI270769B (en) * 2004-11-15 2007-01-11 Sunplus Technology Co Ltd Trace, debug method and system for a processor
US7281118B2 (en) * 2005-08-05 2007-10-09 International Business Machines Corporation Sending thread message generated using DCR command pointed message control block storing message and response memory address in multiprocessor
US8019944B1 (en) * 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US7444499B2 (en) * 2006-03-28 2008-10-28 Sun Microsystems, Inc. Method and system for trace generation using memory index hashing
US8122437B2 (en) * 2008-03-31 2012-02-21 Freescale Semiconductor, Inc. Method and apparatus to trace and correlate data trace and instruction trace for out-of-order processors
US9223677B2 (en) * 2008-06-11 2015-12-29 Arm Limited Generation of trace data in a multi-processor system
GB2477936B (en) * 2010-02-17 2016-02-10 Advanced Risc Mach Ltd Trace data priority selection
US8359453B2 (en) * 2010-09-13 2013-01-22 International Business Machines Corporation Real address accessing in a coprocessor executing on behalf of an unprivileged process
DE112010006087T5 (de) * 2010-12-23 2014-06-26 Intel Corporation Architektur zum Testen, zur Validierung und zur Fehlerbereinigung
EP2639702B1 (en) * 2012-03-16 2016-02-03 Intel Deutschland GmbH Circuit and method for software tracing
US9009541B2 (en) * 2012-08-20 2015-04-14 Apple Inc. Efficient trace capture buffer management
US9329890B2 (en) * 2013-09-26 2016-05-03 Globalfoundries Inc. Managing high-coherence-miss cache lines in multi-processor computing environments
US20160306742A1 (en) * 2013-12-23 2016-10-20 Intel Corporation Instruction and logic for memory access in a clustered wide-execution machine
US10649899B2 (en) * 2014-09-25 2020-05-12 Intel Corporation Multicore memory data recorder for kernel module
US9921866B2 (en) * 2014-12-22 2018-03-20 Intel Corporation CPU overprovisioning and cloud compute workload scheduling mechanism
US9910475B2 (en) * 2014-12-23 2018-03-06 Intel Corporation Processor core power event tracing
US9864538B1 (en) * 2015-06-25 2018-01-09 Amazon Technologies, Inc. Data size reduction
US11755484B2 (en) * 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US20160378636A1 (en) * 2015-06-26 2016-12-29 Intel Corporation Software-Initiated Trace Integrated with Hardware Trace
EP3338192A1 (en) * 2015-08-18 2018-06-27 Telefonaktiebolaget LM Ericsson (PUBL) Method for observing software execution, debug host and debug target
US10768936B2 (en) * 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US10152421B2 (en) 2015-11-23 2018-12-11 Intel Corporation Instruction and logic for cache control operations
US10114729B2 (en) * 2016-03-31 2018-10-30 Qualcomm Incorporated Performance analysis using performance counters and trace logic
US20170286111A1 (en) * 2016-04-01 2017-10-05 Intel Corporation Instruction, Circuits, and Logic for Data Capture for Software Monitoring and Debugging
US10503641B2 (en) 2016-05-31 2019-12-10 Advanced Micro Devices, Inc. Cache coherence for processing in memory
US20180004521A1 (en) * 2016-07-01 2018-01-04 Intel Corporation Processors, methods, and systems to identify stores that cause remote transactional execution aborts
US10216616B2 (en) * 2016-07-02 2019-02-26 Intel Corporation Cooperative triggering
US9864700B1 (en) * 2016-08-17 2018-01-09 Advanced Micro Devices, Inc. Method and apparatus for power reduction in a multi-threaded mode
US10031833B2 (en) * 2016-08-31 2018-07-24 Microsoft Technology Licensing, Llc Cache-based tracing for time travel debugging and analysis
EP4280068A3 (en) * 2016-10-11 2024-03-06 Green Hills Software, Inc. Systems and methods for summarization and visualization of trace data
EP3333716A1 (en) * 2016-12-12 2018-06-13 Intel Corporation Method and apparatus for memory consistency using cache coherency protocols
US20180349280A1 (en) * 2017-06-02 2018-12-06 Oracle International Corporation Snoop filtering for multi-processor-core systems
US10445108B2 (en) * 2017-06-29 2019-10-15 Intel IP Corporation Technologies for optimizing resume time for media agnostic USB
US11016894B2 (en) * 2017-08-07 2021-05-25 Intel Corporation Techniques to provide cache coherency based on cache type
US10459824B2 (en) 2017-09-18 2019-10-29 Microsoft Technology Licensing, Llc Cache-based trace recording using cache coherence protocol data
US10310978B2 (en) 2017-09-29 2019-06-04 Intel Corporation Apparatus and method for multi-level cache request tracking
US10963567B2 (en) * 2017-10-12 2021-03-30 Microsoft Technology Licensing, Llc Speculative side-channel attack mitigations
US10503626B2 (en) * 2018-01-29 2019-12-10 Oracle International Corporation Hybrid instrumentation framework for multicore low power processors
US10776125B2 (en) * 2018-12-05 2020-09-15 Apple Inc. Coprocessor memory ordering table
US11068400B2 (en) * 2019-01-24 2021-07-20 Vmware, Inc. Failure-atomic logging for persistent memory systems with cache-coherent FPGAs

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010042193A1 (en) * 1998-11-09 2001-11-15 Rod G. Fleck Data processing unit with interface for sharing registers by a processor and a coprocessor
CN101158925A (zh) * 2006-10-04 2008-04-09 国际商业机器公司 用于支持跟踪和标准高速缓存行的同时存储的装置和方法
US20180004581A1 (en) * 2016-06-29 2018-01-04 Oracle International Corporation Multi-Purpose Events for Notification and Sequence Control in Multi-core Processor Systems
CN107688545A (zh) * 2016-12-23 2018-02-13 北京国睿中数科技股份有限公司 高速缓存的一致性状态预置方法及系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113741410A (zh) * 2021-11-08 2021-12-03 西安热工研究院有限公司 一种分散控制系统调试数据刷新方法和系统
CN115048145A (zh) * 2022-06-14 2022-09-13 海光信息技术股份有限公司 一种信息采集方法、装置及相关设备

Also Published As

Publication number Publication date
WO2020222981A1 (en) 2020-11-05
US11899562B2 (en) 2024-02-13
US20210349805A1 (en) 2021-11-11
US20200349051A1 (en) 2020-11-05
US11126537B2 (en) 2021-09-21
EP3963459A1 (en) 2022-03-09

Similar Documents

Publication Publication Date Title
US11899562B2 (en) Coprocessor-based logging for time travel debugging
JP7152474B2 (ja) キャッシュコヒーレンスプロトコルデータを用いたキャッシュベーストレース記録
JP7221979B2 (ja) 上位層キャッシュ内のエントリに基づいて下位層キャッシュへの流入をログすることによるトレース記録
CN111742301A (zh) 通过请求来日志记录对更高级别的缓存的缓存流入量
US10599541B2 (en) Efficient breakpoint detection via caches
US20220269615A1 (en) Cache-based trace logging using tags in system memory
US11907091B2 (en) Trace recording by logging influxes to an upper-layer shared cache, plus cache coherence protocol transitions among lower-layer caches
Honarmand et al. RelaxReplay: Record and replay for relaxed-consistency multiprocessors
US11604720B2 (en) Identifying data inconsistencies and data contention based on historic debugging traces
US11442842B2 (en) Exposing memory-backed objects as queryable memory resources
US11687453B2 (en) Cache-based trace logging using tags in an upper-level cache
US11561896B2 (en) Cache-based trace logging using tags in an upper-level cache
CN117063161A (zh) 执行跟踪内的物理存储器地址省略或混淆
CN117157632A (zh) 在记录位精确踪迹时日志记录高速缓存行寿命提示
CN116868172A (zh) 将主存储器视为跟踪日志记录的标记高速缓存行的集合
CN115552381A (zh) 记录存储器值跟踪以与独立高速缓存一致性协议跟踪一起使用
Honarmand Record and deterministic replay of parallel programs on multiprocessors

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