CN111615687B - 使用高速缓存一致性协议数据来解耦跟踪数据流 - Google Patents
使用高速缓存一致性协议数据来解耦跟踪数据流 Download PDFInfo
- Publication number
- CN111615687B CN111615687B CN201980008659.2A CN201980008659A CN111615687B CN 111615687 B CN111615687 B CN 111615687B CN 201980008659 A CN201980008659 A CN 201980008659A CN 111615687 B CN111615687 B CN 111615687B
- Authority
- CN
- China
- Prior art keywords
- thread
- data
- cache
- ccp
- trace data
- 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.)
- Active
Links
- 230000000694 effects Effects 0.000 claims abstract description 112
- 230000001419 dependent effect Effects 0.000 claims abstract description 25
- 238000012545 processing Methods 0.000 claims description 167
- 238000000034 method Methods 0.000 claims description 57
- 238000013507 mapping Methods 0.000 description 11
- 229920002451 polyvinyl alcohol Polymers 0.000 description 11
- 230000008569 process Effects 0.000 description 11
- 239000007787 solid Substances 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 8
- 238000013459 approach Methods 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 6
- 230000003993 interaction Effects 0.000 description 6
- 230000007704 transition Effects 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 239000000872 buffer Substances 0.000 description 4
- 230000002441 reversible effect Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 3
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 3
- 239000000700 radioactive tracer Substances 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000001228 spectrum Methods 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 230000004941 influx Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000013403 standard screening design Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/656—Address space sharing
Abstract
使用高速缓存一致性协议(CCP)数据来解耦跟踪数据流。一个或多个跟踪数据流包括与执行多个线程有关的高速缓存活动跟踪数据和CCP跟踪数据。高速缓存活动跟踪数据包括线程间数据相依性,线程间数据相依性包括相依高速缓存活动跟踪条目,每个相依高速缓存活动跟踪条目依赖于被跟踪的线程之间的CCP相依性来记录对应线程进行的对应存储器访问。移除线程间数据相依性,以针对多个线程中的每个线程创建使得每个线程能够被独立地重放的独立高速缓存活动跟踪数据。针对每个相依高速缓存活动跟踪条目,该移除包括:(i)基于被跟踪的线程之间的CCP相依性,标识对应线程进行的对应存储器访问的对应值,以及(ii)代表对应线程记录对应存储器访问的对应值。
Description
背景技术
当在软件应用的开发期间编写代码时,开发人员常常花费大量时间“调试”代码以找出运行时和其他源代码错误。在这样做时,开发人员可以采取若干方法来重现和定位源代码错误,诸如基于不同输入来观察程序的行为、插入调试代码(例如,以打印变量值、以追踪执行分支等)、临时移除代码部分等。追踪(track)运行时错误以查明代码错误可能会占用很大一部分应用开发时间。
为了协助开发人员进行代码调试过程,已经开发了许多类型的调试应用(“调试器”)。这些工具给开发人员提供了跟踪(trace)、可视化和更改计算机代码的执行的能力。例如,调试器可以对代码指令的执行进行可视化,可以在代码执行期间的不同时间呈现代码变量值,可以使开发人员能够更改代码执行路径,和/或可以使开发人员能够对关注的代码元素设置“断点”和/或“监视点”等等(当在执行过程中到达“断点”和/或“监视点”时会使代码的执行被挂起)。
新兴的调试应用的形式实现了“时间旅行”、“反向”或“历史”调试。通过“时间旅行”调试,程序(例如,诸如线程之类的可执行实体)的执行的位精确跟踪被跟踪应用记录/跟踪到一个或多个跟踪文件中。然后,这些位精确跟踪之后可以被用来对程序的执行进行重放,以用于前向和后向分析两者。例如,“时间旅行”调试器可以使开发人员能够设置前向断点/监视点(像常规调试器一样)以及反向断点/监视点。
一些“时间旅行”调试工具通过利用处理器的共享高速缓存及其高速缓存一致性协议(CCP)减少了记录跟踪的开销(例如,处理器和存储器开销、以及输出的跟踪文件大小),以确定应该将哪些数据记载(log)到跟踪文件。与现有方法相比,这样做可以将跟踪文件的大小减少若干数量级,从而显著减少跟踪记录的开销。
发明内容
本文的实施例通过利用处理器的高速缓存一致性协议(CCP)对基于CCP的跟踪内的跟踪数据相依性(dependency)进行解耦而增强所记录的跟踪的重放性能,以使这些跟踪可以以与线程无关的方式被重放。特别地,当使用CCP记录跟踪时,一个线程读取的值实际上可能已经与另一线程有关地被记载,或者可能以其他方式基于该另一线程的执行可用。例如,跟踪记录器可以与第一线程有关地记载被存储在特定存储器位置的特定值,该第一线程最初从该特定存储器位置读取该值。备选地,如果通过第一线程将该值写入特定存储器位置,则跟踪记录器可以选择避免记载该值——因为其可以通过第一线程的重放而被获得。当第二线程经由共享高速缓存从特定存储器位置读取相同值时,记载器可能使用CCP数据来选择避免重新记载与第二线程有关的值。因此,第二线程在跟踪重放期间变得依赖于第一线程。
尽管以这种方式记录跟踪可以显著提高记录性能并减小跟踪文件的大小,但这限制了调试器在(多个)跟踪文件的消耗期间对被跟踪的程序的重放进行并行化的能力,这可能会显著降低用于多线程的应用的重放性能。因此,实施例采用了在已经记录了这些基于CCP的跟踪之后对其进行处理以消除这些线程间相依性的技术。这包括标识相依性,确定任何合适的值,以及记录新的跟踪数据流,和/或扩大(多个)现有的跟踪数据流,以使其可以以与线程无关的方式被重放。
实施例包括一种使用CCP数据来解耦跟踪数据流的方法、系统和计算机程序产品。这些实施例包括:在应用的先前执行的跟踪内标识一个或多个跟踪数据流,一个或多个跟踪数据流在应用的先前执行期间记载多个线程的执行。一个或多个跟踪数据流包括高速缓存活动跟踪数据和CCP跟踪数据。高速缓存活动跟踪数据包括一个或多个线程间数据相依性,一个或多个线程间数据相依性包括一个或多个相依高速缓存活动跟踪条目,每个相依高速缓存活动跟踪条目依赖于被跟踪的线程之间的CCP相依性来记录对应线程进行的对应存储器访问。一个或多个线程间数据相依性被移除,以针对多个线程中的每个线程创建使得每个线程能够被独立地重放的独立高速缓存活动跟踪数据。针对每个相依高速缓存活动跟踪条目,该移除包括:(i)基于被跟踪的线程之间的CCP相依性,标识由对应线程进行的对应存储器访问的对应值,以及(ii)代表对应线程记录对应存储器访问的对应值。
提供本发明内容是以简化形式介绍一系列的概念,这些概念将在下面的具体实施方式中进一步描述。本发明内容既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在被用于帮助确定所要求保护的主题的范围。
附图说明
为了描述可以获得本发明的上述及其他优点和特征的方式,将通过参考在附图中图示的本发明具体实施例对以上简要描述的本发明进行更特别的描述。应该理解,这些附图仅描绘了本发明的典型实施例,因此不应被视为是对本发明范围的限制,将通过使用附图用附加的具体性和细节来描述和解释本发明,其中:
图1图示了示例计算环境,该示例计算环境使用高速缓存一致性协议(CCP)数据经由共享高速缓存促进了代码执行的“位精确”跟踪的记录和重放;
图2图示了共享高速缓存的示例;
图3图示了用于使用CCP数据来执行基于高速缓存的跟踪记录的示例方法的流程图;
图4A图示了用一个或多个附加的记账位来扩展其每个高速缓存行的示例共享高速缓存;
图4B图示了包括用于存储适于常规高速缓存行的记账(accounting)位的一个或多个保留的高速缓存行的共享高速缓存的示例;
图5图示了组关联映射的示例;
图6A图示了图3的方法的应用示例;
图6B图示了与图6A的示例相对应的示例已解耦跟踪数据流;
图7图示了基于CCP的记载的示例,其中CCP仅允许记载读取器中的一个以及读取器的总计数;
图8图示了针对图7的基于CCP的记载开发系统不等式的示例;
图9图示了可以从图7的基于CCP的记载中开发的图形的示例;
图10图示了与图7的基于CCP的记载相对应的示例已解耦跟踪数据流;
图11A和图11B图示了当循环被移除时对图7的图的更新;以及
图12图示了用于使用CCP数据来解耦跟踪数据流的示例方法的流程图。
具体实施方式
本文的实施例通过利用处理器的高速缓存一致性协议(CCP)解耦基于CCP的跟踪内的跟踪数据相依性来增强所记录的跟踪的重放性能,使得可以以与线程无关的方式重放这些跟踪。特别地,当使用CCP来记录跟踪时,被一个线程读取的值实际上可能已经与另一线程有关地被记载,或者可能以其他方式基于该另一线程的执行可用。例如,跟踪记录器可以与最初从特定存储器位置读取该值的第一线程有关地记载被存储在特定存储器位置的特定值。备选地,如果通过第一线程将该值写入特定存储器位置,则跟踪记录器可以选择避免记载该值——因为其可以通过重放第一线程而被获得。当第二线程经由共享高速缓存从特定存储器位置读取相同值时,记载器可以使用CCP数据来选择避免重新记载与第二线程有关的该值。因此,第二线程在跟踪重放期间变得依赖于第一线程。
尽管以这种方式记录跟踪可以显著提高记录性能并减小跟踪文件大小,但其限制了调试器在(多个)跟踪文件的消耗期间对被跟踪程序的重放进行并行化的能力,这可能会显著降低针对多线程的应用的重放性能。因此,实施例采用了在已经记录了这些基于CCP的跟踪之后对其进行处理以消除这些线程间相依性的技术。这包括标识相依性,确定任何合适的值,以及记录新的跟踪数据流,和/或扩大(多个)现有的跟踪数据流,以使其可以以与线程无关的方式被重放。
为了促进对前述内容的理解,图1图示了示例计算环境100,示例计算环境100促进了使用CCP数据经由共享高速缓存来记录和重放代码执行的“位精确”跟踪。如所描绘的,实施例可以包括或利用专用或通用的计算机系统101,计算机系统101包括计算机硬件,诸如例如一个或多个处理器102、系统存储器103、一个或多个数据存储库104和/或输入/输出硬件105。
本发明范围内的实施例包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是计算机系统101可以访问的任何可用介质。存储计算机可执行指令和/或数据结构的计算机可读介质是计算机存储设备。承载计算机可执行指令和/或数据结构的计算机可读介质是传输介质。因此,作为示例而非限制,本发明的实施例可以包括至少两种明显不同种类的计算机可读介质:计算机存储设备和传输介质。
计算机存储设备是存储计算机可执行指令和/或数据结构的物理硬件设备。计算机存储设备包括各种计算机硬件,诸如RAM、ROM、EEPROM、固态驱动器(“SSD”)、闪存、相变存储器(“PCM”)、光盘存储装置、磁盘存储装置或其他磁性存储设备、或可以被用来以计算机可执行指令或数据结构的形式存储程序代码并且可以由计算机系统101访问和执行以实现本发明所公开的功能性的(多个)任何其他硬件设备。因此,例如,计算机存储设备可以包括所描绘的系统存储器103、所描绘的可以存储计算机可执行指令和/或数据结构的数据存储库104、或者如稍后所述的诸如处理器上存储装置之类的其他存储装置。
传输介质可以包括网络和/或数据链路,该网络和/或数据链路可以被用来承载以计算机可执行指令或数据结构的形式的程序代码并且可以由计算机系统101访问。“网络”被定义为使得能够在计算机系统和/或模块和/或其他电子设备之间传送电子数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线或硬连线或无线的组合)被传递或提供给计算机系统时,该计算机系统可以将连接视为传输介质。上述组合也应该被包括在计算机可读介质的范围内。例如,输入/输出硬件105可以包括连接网络和/或数据链路的硬件(例如,网络接口模块(例如,“NIC”)),网络和/或数据链路可以被用来承载以计算机可执行指令或数据结构的形式的程序代码。
此外,在到达各种计算机系统组件时,计算机可执行指令或数据结构形式的程序代码可以从传输介质被自动传递到计算机存储设备(反之亦然)。例如,通过网络或数据链路接收的计算机可执行指令或数据结构可以被缓冲在NIC(例如,输入/输出硬件105)内的RAM中,并且然后被最终传递到系统存储器103和/或传递到计算机系统101处的易失性较小的计算机存储设备(例如,数据存储库104)。因此,应当理解,计算机存储设备可以被包括在也(或者甚至主要地)利用传输介质的计算机系统组件中。
计算机可执行指令包括例如指令和数据,当在(多个)处理器102处被执行时,这些指令和数据使计算机系统101执行某个功能或功能组。例如,计算机可执行指令可以是二进制、诸如汇编语言之类的中间格式指令、或甚至是源代码。
本领域技术人员将理解,可以在具有许多类型的计算机系统配置的网络计算环境中实践本发明,该计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器或可编程的消费电子产品、网络PC、小型计算机、大型计算机、移动电话、PDA、平板电脑、寻呼机、路由器、交换机等。还可以在分布式系统环境中实践本发明,其中通过网络被链接(通过硬连线数据链路、无线数据链路或通过硬连线和无线数据链路的组合)的本地和远程计算机系统均执行任务。如此,在分布式系统环境中,计算机系统可以包括多个组成的计算机系统。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。
本领域技术人员还将意识到可以在云计算环境中实践本发明。云计算环境可以是分布式的,但是这不是必需的。当被分布时,云计算环境可以在组织内国际性地分布和/或具有跨多个组织拥有的组件。在本说明书和随后的权利要求书中,“云计算”被定义为用于使得能够对可配置计算资源(例如,网络、服务器、存储装置、应用和服务)的共享池进行按需网络访问的模型。“云计算”的定义不限于在被适当部署时可以从这样的模型中获得的其他众多优势中的任何一种。
云计算模型可以由各种特性组成,诸如按需自助服务、广泛网络访问、资源池化、快速弹性、测得服务等等。云计算模型也可以采用各种服务模型的形式,诸如,例如软件即服务(“SaaS”)、平台即服务(“PaaS”)和基础设施即服务(“IaaS”)。还可以使用诸如私有云、社区云、公共云、混合云等不同的部署模型来部署云计算模型。
诸如云计算环境之类的一些实施例可以包括一种系统,该系统包括各自能够运行一个或多个虚拟机的一个或多个主机。在操作期间,虚拟机模拟操作计算系统,从而支持操作系统并且或许支持一个或多个其他应用。在一些实施例中,每个主机包括管理程序,管理程序使用从虚拟机的角度抽象出的物理资源来模拟用于虚拟机的虚拟资源。管理程序还在虚拟机之间提供适当的隔离。因此,从任何给定的虚拟机的角度,管理程序提供了虚拟机正在与物理资源接口的错觉,即使虚拟机仅与物理资源的外观(例如,虚拟资源)进行接口。物理资源的示例包括处理能力、存储器、磁盘空间、网络带宽、介质驱动等。
如图所示,数据存储库104可以存储表示应用程序的计算机可执行指令和/或数据结构,应用程序诸如例如跟踪器104a、操作系统内核104b、应用104c(例如,作为跟踪器104a所跟踪的主体的应用)、索引器104e、调试器104f等。当这些程序正在执行时(例如,使用(多个)处理器102),系统存储器103可以存储诸如运行时数据结构、计算机可执行指令等的对应的运行时数据。因此,图1将系统存储器103图示为包括时间应用代码103a和应用运行时数据103b(例如,各自对应于应用104c)。
跟踪器104a可用于记录诸如应用104c或内核104b之类的应用的执行的位精确跟踪,并且可用以将跟踪数据存储在(多个)跟踪文件104d中。在一些实施例中,跟踪器104a是独立应用,而在其他实施例中,跟踪器104a被集成到另一软件组件中,诸如内核104b、管理程序、云构造、调试器104f等。尽管(多个)跟踪文件104d被描绘为存储在数据存储库104中,但(多个)跟踪文件104d也可以被独有地或临时地记录在系统存储器103中,或记录在一些其他存储设备处。如上所述,跟踪器104a可以以减少跟踪器104a的执行开销和/或着重于减小或最小化(多个)跟踪文件104d的大小的方式将数据存储在(多个)跟踪文件104d中。
索引器104e将由跟踪器104a生成的(多个)跟踪文件104d作为输入,并且对(多个)跟踪文件104d中的数据执行(多个)变换,以提高调试器104f(或其派生物)对(多个)跟踪文件104d的消耗的性能。虽然索引器104e可以对(多个)跟踪文件104d进行各种改变(例如,添加关键帧、添加存储器快照、添加反向查找数据结构等),但本文的实施例至少利用了被用来执行跟踪器104a的处理器(例如,(多个)处理器102,尽管在不同的计算机系统上执行跟踪器104a时,(多个)处理器102可以是不同的处理器)的CCP,以在(多个)跟踪文件104d中解耦跟踪数据相依性。这些技术在下文中讨论。
调试器104f可用于消耗(多个)跟踪文件104d,包括由(在该计算机系统或另一计算机系统处执行的)索引器104e生成的(多个)跟踪文件104d的任何派生物,以辅助用户对(多个)跟踪文件104d或其派生物执行调试动作。例如,调试器104f可以呈现一个或多个调试接口(例如,用户接口和/或应用编程接口),对应用104c的一个或多个部分的先前执行进行重放,设置包括反向断点/监视点的断点/监视点,在(多个)跟踪文件104d上启用查询/搜索等。在一些实施例中,跟踪器104a和/或索引器104e是调试器104f的子组件。
图1包括处理器102的内部硬件组件的简化表示。如图所示,每个处理器102包括多个处理单元102a。每个处理单元可以是物理的(即,物理处理器核)和/或逻辑的(即,由支持超线程的物理核提供的逻辑核,其中多于一个应用线程在物理核处执行)。因此,例如,即使处理器102在一些实施例中可以仅包括单个物理处理单元(核),其也可以包括由该单个物理处理单元呈现的两个或更多逻辑处理单元102a。
每个处理单元102a执行由应用(例如,跟踪器104a、内核104b、应用104c等)定义的处理器指令,并且这些指令从预定义的处理器指令集架构(ISA)中被选择。每个处理器102的特定ISA基于处理器制造方和处理器模型而变化。常见的ISA包括来自英特尔公司(INTEL,INC.)的IA-64和IA-32架构、来自高级微设备公司(ADVANCED MICRO DEVICES,INC.)的AMD64架构、以及来自安谋国际科技股份有限公司(ARM HOLDINGS,PLC)的各种先进RISC机器(“ARM”)架构,但是大量的其他ISA存在并可以被本发明使用。通常,“指令”是由处理器可执行的最小外部可见(即,在处理器外部)的代码单元。值得注意的是,不同的ISA定义了不同的存储器模型,这些存储器模型可以强制执行对处理器指令可以如何访问存储器的限制。一些存储器模型被弱排序,从而提供了处理器指令可以如何访问存储器的灵活性,包括使处理器能够在执行期间对指令(和存储器访问)进行重新排序。
每个处理单元102a从共享处理器高速缓存102b获得处理器指令,并且基于共享高速缓存102b中的数据、基于寄存器102c中的数据、和/或在没有输入数据的情况下执行处理器指令。通常,共享高速缓存102b是少量(即,相对于系统存储器103的典型数量而言)的随机存取存储器,其存储后备存储库的各部分的处理器上副本,后备存储库诸如是系统存储器103和/或另一高速缓存。例如,当执行应用代码103a时,共享高速缓存102b包含应用运行时数据103b的各部分。如果(多个)处理单元102a需要尚未被存储在共享高速缓存102b中的数据,则发生“高速缓存未命中”,并且该数据从系统存储器103被提取(可能从共享高速缓存102b“逐出”一些其他数据)。
通常,共享高速缓存102b包括多个“高速缓存行”,每个“高速缓存行”存储来自后备存储库的存储器的对应部分。例如,图2图示了共享高速缓存200的至少一部分的示例,其包括多个高速缓存行203,每个高速缓存行包括地址部分201和值部分202。每个高速缓存行203的地址部分201可以在该行所对应的后备存储库(例如,系统存储器103)中存储地址,并且值部分202可以最初存储从后备存储库接收的值。值部分202可以被处理单元102a修改,并且最终被逐出回到后备存储库。如椭圆所指示的,共享高速缓存200可以包括大量的高速缓存行。例如,当代的INTEL处理器可以包含层1高速缓存,层1高速缓存包括512或更多的高速缓存行。在该高速缓存中,每个高速缓存行可用于存储引用8字节(64位)存储器地址的64字节(512位)值。
被存储在每个高速缓存行203的地址部分201中的地址可以是物理地址,诸如系统存储器103中的实际存储器地址。备选地,被存储在每个高速缓存行203的地址部分201中的地址可以是虚拟地址,虚拟地址被指派给物理地址以提供抽象。例如,可以使用这种抽象来促进在处理器102处执行的不同进程之间的存储器隔离。当使用虚拟地址时,处理器102可以包括转换旁视缓冲器(TLB)102f(通常是存储器管理单元(MMU)的一部分),其维护物理和虚拟存储器地址之间的映射。
共享高速缓存102b可以包括代码高速缓存部分和数据高速缓存部分。例如,当执行应用代码103a时,共享高速缓存102b的代码部分存储被存储在应用代码103a中的处理器指令的至少一部分,并且共享高速缓存102b的数据部分存储应用运行时数据103b的数据结构的至少一部分。通常,处理器高速缓存被划分为分开的层级/层(例如,层1(L1)、层2(L2)和层3(L3)),其中一些层(例如,L3)可能与处理器102分开存在。因此,共享高速缓存102b可以包括这些层(L1)之一,或者可以包括多个这些层。
当使用多个高速缓存层时,处理单元102a与最低层(L1)直接交互。在大多数情况下,数据在层之间流动(例如,在读取时,L3高速缓存与系统存储器103交互并将数据提供给L2高速缓存,并且L2高速缓存又将数据提供给L1高速缓存)。当处理单元102a需要执行写入时,高速缓存进行协调以确保那些影响了在处理单元102a之间共享的数据的高速缓存不再具有该高速缓存。该协调通过使用高速缓存一致性协议而被执行(稍后讨论)。
高速缓存可以是包括性的、独有性的,或者包括包括性和独有性的行为。例如,在包括性高速缓存中,L3层将在其下方的L2层中存储数据的超集,并且L2层在其下方的L1层中存储数据的超集。在独有性高速缓存中,各层可以是不相交的——例如,如果L3高速缓存中存在L1高速缓存所需的数据,则可以交换内容。
每个处理单元102还包括微代码102c,其包括控制处理器102的操作的控制逻辑(即,可执行指令),并且控制逻辑通常用作处理器硬件与处理器102公开以执行应用的处理器指令集架构之间的解释器。微代码102可以被体现在诸如ROM、EEPROM等的处理器上存储装置。
寄存器102d是基于硬件的存储位置,其基于(多个)处理器102的ISA来定义并且可以通过处理器指令从存储位置被读取和/或被写入存储位置。例如,寄存器102d通常被用来存储从共享高速缓存102b被提取的值以供指令使用,以存储执行指令的结果,和/或以存储状态或状况,诸如执行指令的一些副作用(例如,值的符号改变、值达到零、发生进位等)、处理器循环计数等。因此,一些寄存器102d可以包括“标志”,该标志被用来发信号通知由执行处理器指令而引起的某些状态改变。在一些实施例中,处理器102还可以包括控制寄存器,其被用来控制处理器操作的不同方面。
在一些实施例中,(多个)处理器102可以包括一个或多个缓冲器102e。(多个)缓冲器102e可以被用作跟踪数据的临时存储位置。因此,例如,(多个)处理器102可以将跟踪数据的一部分存储在(多个)缓冲器102e中,并且在合适的时间,诸如当存在可用的存储器总线带宽时,将该数据冲刷到(多个)跟踪文件104d。
如上所述,拥有共享高速缓存102b的处理器根据CCP或高速缓存一致性协议来操作高速缓存。特别地,CCP定义了:当各种处理单元102a从共享高速缓存102b中读取数据和写入数据时,如何在共享高速缓存102b和后备数据存储库(例如,系统存储器103或另一高速缓存)中的数据之间保持一致性,以及如何确保各种处理单元102a总是从共享高速缓存102b中的给定位置读取有效数据。
常见CCP的示例包括MSI协议(即,修改的、共享的和失效的)、MESI协议(即,修改的、独有的、共享的和失效的)和MOESI协议(即,修改的、拥有的、独有的、共享的和失效的)。这些协议中的每个协议为共享高速缓存102b中的各个位置(例如,行)定义状态。“修改的”高速缓存位置包含已在共享高速缓存102b中被修改的数据,并且因此与后备存储库(例如,系统存储器103或另一高速缓存)中的对应数据不一致。当从共享高速缓存102b逐出具有“修改的”状态的位置时,高速缓存必须将其数据写回到后备存储库。“共享的”高速缓存位置包含未从后备存储库中的数据被修改的数据,其以只读状态存在,且被(多个)处理单元102a共享。共享高速缓存102b可以逐出该数据,而无需将其写入后备存储库。“失效的”高速缓存位置不包含有效数据,并且可以被认为是空的并且可用于存储来自高速缓存未命中的数据。“独有的”高速缓存位置包含与后备存储库匹配且仅由单个处理单元102a使用的数据。其可以随时被改变为“共享的”状态(即,响应于读取请求),或者可以在写入时被改变为“修改的”状态。“拥有的”高速缓存位置由两个或更多处理单元102a共享,但是其中一个处理单元具有对其进行改变的独有权。当该处理进行改变时,其必须通知其他处理单元——因为被通知的处理单元可能需要基于CCP实施进行失效或更新。
不同的CCP跟踪高速缓存一致性的粒度可以变化。例如,在频谱的一端,一些CCP追踪每个高速缓存行以及每个处理单元的高速缓存一致性,如下文中图6的示例所示(即,列605)。因此,这些CCP可以追踪每个高速缓存行在与每个处理单元有关时的状态。这意味着单个高速缓存行可以具有关于当其与每个处理单元102a有关时其状态的信息。在频谱的另一端,CCP可以仅在高速缓存行级别追踪高速缓存一致性(即,其缺少每个处理单元的信息)。处理器制造方可以仅为了效率而选择追踪高速缓存行级别的高速缓存一致性,因为一次仅一个处理器可以独有性地拥有(独有的、修改的等)一行。在中等级别的粒度下,CCP可以追踪每个高速缓存行的高速缓存一致性,以及对具有当前高速缓存行状态的处理单元的索引(例如,四处理单元处理器的索引为0、1、2、3)。
跟踪器104a利用处理器的共享高速缓存102b来高效地记录应用104c和/或内核104b的执行的位精确跟踪。这些技术被构建在处理器102(包括共享高速缓存102b)形成半封闭或准封闭的系统的观察上。例如,一旦用于过程的数据的各部分(即,代码数据和运行时应用数据)被加载到共享高速缓存102b中,处理器102就可以作为半封闭或准封闭系统自己运行一阵时间,而无需任何输入。特别地,一个或多个处理单元102a使用被存储在共享高速缓存102b的数据部分中的运行时数据并使用寄存器102d来执行来自共享高速缓存102b的代码部分的指令。
当处理单元102a需要一些信息涌入时(例如,因为其需要共享高速缓存102b中尚未存在的代码或运行时数据),就会发生“高速缓存未命中”,并且该信息从系统存储器103被带入共享高速缓存102b。例如,如果当执行的指令在应用运行时数据103b内的存储器地址处执行存储器操作时发生数据高速缓存未命中,则来自该存储器地址的数据被带入共享高速缓存102b的数据部分的高速缓存行之一中。类似地,如果当指令在系统存储器103中存储的存储器地址应用代码103a处执行存储器操作时发生代码高速缓存未命中,则来自该存储器地址的代码被带入共享高速缓存102b的代码部分的高速缓存行之一中。然后,处理单元102a使用共享高速缓存102b中的新信息继续执行,直到发生另一高速缓存未命中,并且新信息被再次带入共享高速缓存102b中。
为了记录应用的执行的位精确表示,跟踪器104a可以记录足够的数据,以能够在该应用的(多个)线程的执行期间再现信息向共享高速缓存102b中的涌入。如此做的第一种方法是通过记载所有高速缓存未命中和未高速缓存的读取(即,从硬件组件和不可高速缓存的存储器进行的读取)来记录被带入共享高速缓存102b中的所有数据,以及执行期间每段数据被带入共享高速缓存102b中(例如,使用被执行的指令的计数或某个其他计数器)的时间。
第二种方法是跟踪和记录被每个处理单元102a“消耗”的高速缓存行,与第一种方法相比,其得到显著小的跟踪文件。如本文所使用的,当处理单元知道其当前值时,其已经“消耗”了高速缓存行。这可能是因为处理单元是写入高速缓存行的当前值的单元,或者是因为处理单元对高速缓存行执行了读取。该第二种方法涉及对共享高速缓存102b的扩展(例如,每个高速缓存行或用于记账的(多个)保留高速缓存行上的一个或多个附加位),这使得处理器102能够针对每个高速缓存行标识消耗了高速缓存行的一个或多个处理单元102a。
第三种方法是利用处理器的CCP来确定“消耗的”高速缓存行的子集以记录在(多个)文件104d中,这仍将使共享高速缓存102b的活动被再现。与第一种方法和第二种方法两者相比,第三种方法得到显著更小的跟踪文件,并且因此显著降低了跟踪开销。
使用第一和第二种记录方法,跟踪各自对应于不同处理单元/线程的独立跟踪数据流是简单的。在这些实施例中,每个跟踪数据流中的数据分组可能缺少对该数据分组适用的处理单元的标识,因为该信息是基于跟踪数据流本身固有的。另外,如果计算机系统101包括多个处理器102(即,在不同的处理器槽(socket)内),则对于不同的处理器102中的每个处理单元102a,(多个)跟踪文件可以具有不同的跟踪数据流。在这些实施例中,用于每个处理单元102a的数据分组通常独立于其他处理单元被记录,从而使得在不同的处理单元102a处被执行的不同线程能够被独立地重放。然而,这些跟踪文件可以包括一些信息——无论其是明确的还是固有的——这些信息提供了不同线程之间的部分排序(例如,其对诸如对共享存储器的访问之类的事件进行排序)。
然而,当使用第三种方法(其依赖于CCP)时,记录独立可重放的跟踪数据流可能不那么简单。如所提及的,在使用CCP数据时,针对给定处理单元的记载可能依赖于从另一处理单元读取或写入该另一处理单元的数据。由于跟踪器104a利用CCP数据,所以(多个)跟踪文件104可能包括多个跟踪数据流(即,对于每个处理单元),但是这些跟踪数据流之间可能存在数据相依性。备选地,(多个)跟踪文件104可以包括用于处理器102中的所有处理单元102a的单个跟踪数据流。在这些跟踪中,数据分组可以标识数据分组适用于哪个特定处理单元;但是这些分组可以依赖于不同处理单元所知道的数据,从而创建数据相依性。如果存在多个处理器102(即,多个处理器槽),则(多个)跟踪文件104可以包括用于每个槽的单独的跟踪数据流。
如所提及的,跟踪文件可以包括提供了不同线程之间的部分排序的一些信息。特别地,跟踪器104a可以在(多个)跟踪文件104d中记录附加的数据分组,以增强对跨处理单元的操作排序的记载。例如,跟踪器104a可以记录一些事件以及诸如单调递增数字(MIN)(或一些其他的计数器/计时器)之类的排序信息,以提供对具有跨线程的MIN(或其他的计数器/计时器)的事件的完整排序。这些MIN可以被用来标识与被定义为跨线程“可排序”的事件相对应的数据分组。可以基于“跟踪存储器模型”来定义这些事件,该跟踪存储器模型定义了线程如何通过共享存储器以及其在存储器中对数据的共享使用进行交互。作为另一示例,跟踪器104a可以(周期性地或随机地)基于定义的确定性算法和定义的寄存器集(例如,程序计数器、堆栈、通用寄存器等)来记录处理器状态的哈希。作为又一示例,跟踪器104a可以(周期性地或随机地)强行记载高速缓存行数据。作为又一示例,跟踪器104a可以在记载哈希的跟踪“转变”分组中包括其隐式承载的全部或部分数据(例如,几位)。因此,当在重放时重建此隐式数据时,可以对隐式数据的(多个)合适部分进行哈希并将其与这些转变分组进行匹配,以帮助标识其排序。例如,如果高速缓存行处于共享状态,如果CCP无法跟踪与高速缓存行相关联的处理器索引,则这可能是有用的。
在讨论如何解耦基于CCP的跟踪内的跟踪数据相依性之前,更详细地理解如何执行记录基于CCP的跟踪是指导性的。因此,图3图示了方法300的流程图,方法300用于使用CCP数据来执行基于高速缓存的跟踪记录。方法300可以包括在跟踪器104a跟踪应用104c和/或内核104b时由处理器102执行的动作。处理器102做出的动作可以基于处理器102中的硬编码逻辑、软编码逻辑(即,微代码102c)和/或诸如跟踪器104a、内核104b或管理程序之类的另一软件应用。
如所描绘的,方法300包括检测高速缓存与后备存储库之间的交互的动作301。在一些实施例中,动作301包括检测引起多个高速缓存行中的特定高速缓存行与一个或多个后备存储库之间的交互的操作。例如,在处理单元102a之一处执行应用104c或内核104b的线程时,处理单元可以引起共享高速缓存102b中的行与后备存储库(例如,系统存储器103、或另一高速缓存)之间的交互。该检测可以例如由处理器102基于执行其微代码102c来执行。
方法300还包括标识引起了交互的处理单元的动作302。在一些实施例中,动作302包括标识引起该操作的多个处理单元中的特定处理单元。例如,基于执行微代码102c,处理器102可以标识哪个处理单元102a引起了在动作301中检测到的操作。
方法300还包括确定是否针对处理单元启用了记载的动作303。在一些实施例中,动作303包括使用与特定处理单元相关联的特定记载控制位来确定针对特定处理单元启用了记载。例如,处理器102可以基于记载控制位来确定在动作302中标识的处理单元是否启用了记载。在一些实施例中,记载控制位是诸如控制寄存器之类的寄存器102d之一的一部分。
方法300还包括确定高速缓存行是否参与记载的动作304。在一些实施例中,动作304包括:至少基于针对特定处理单元启用了记载,确定特定高速缓存行是否是记载的参与者。例如,处理器102可以确定在动作301中检测到的操作中涉及的高速缓存行是否参与记载。如稍后将更详细地讨论的,存在可用于检测的若干机制,诸如使用共享高速缓存102b内的位、或使用高速缓存路锁定。
方法300还包括使用CCP将合适的数据记载到跟踪中的动作305。在一些实施例中,动作305包括:至少基于针对特定处理单元启用了记载并且基于特定高速缓存行是记载的参与者,使用CCP来标识数据是否被记载到跟踪中、可用于重放操作的数据、以及该数据何时将被记载到跟踪中,从而使数据被记载到跟踪中。例如,处理器102可以查看其内部CCP状态,以了解由于该操作而在高速缓存状态中发生了什么转变,以及那些转变是否保证记载数据。当数据要被记载到(多个)跟踪文件时,一个或多个数据分组可以被添加到合适的跟踪数据流中——诸如对应于特定处理单元的跟踪数据流、或总体上对应于处理器102的跟踪数据流。如果合适的跟踪数据流总体上对应于处理器102,则一个或多个数据分组可以标识特定的处理单元。注意,如果跟踪数据流总体上对应于处理器102,则数据流中的数据分组的固有排序本身提供一些附加的排序信息,如果多个数据流被使用,则这些附加的排序信息可能不可用。
注意,当共享高速缓存102b包括多个高速缓存级别时,在一些实施例中,方法300在与系统存储器103交互的高速缓存级别进行操作,因为正是该高速缓存级对高速缓存未命中进行处理。在该级别进行操作使得能够表示每个处理单元102a的高速缓存活动,而不会造成冗余(即,不止一次表示单元的活动)。因此,例如,如果计算机系统101包括两个处理器102(即,两个处理器槽)并且每个槽包括一个“包括性的”L3高速缓存,以及在L3高速缓存之下的“包括性的”L2高速缓存,则在一些实施例中,方法300在L3高速缓存上操作。方法300也可以在多个高速缓存级别处进行操作。例如,如果计算机系统101包括一个处理器102(即,一个处理器槽)并且包括用于该槽的一个“独有性的”L3高速缓存,以及在L3高速缓存之下的“包括性的”L2高速缓存,则方法300可以在L3和L2高速缓存这两者上操作。下面讨论展现出混合的包括性/独有性行为的高速缓存内的记载的更多示例。
如上面结合动作304所提及,处理器102可以使用若干机制来确定高速缓存行是否是“记载的参与者”。一种机制是用一个或多个附加的“记账位”来扩展共享高速缓存102b的每一行,一个或多个附加的“记账位”可以被用作标志、用作处理单元标识符、或用作处理器索引。用于控制这些“记账位”的逻辑可以是处理器的微代码102c的一部分。
为了说明此实施例,图4A图示了与图2的共享高速缓存200相似的示例共享高速缓存400a,示例的共享高速缓存400a用一个或多个附加“记账”位401来扩展其每个高速缓存行404。因此,每个高速缓存行404包括(多个)记账位401、常规地址位402和值位403。
在一些实现中,每个高速缓存行的(多个)记账位401包括单个位,该单个位用作处理器102的标志(即,开启或关闭)以指示该高速缓存行是否正在参与跟踪记载。如果处理器的CCP具有足够的粒度(例如,如果当每个高速缓存行与每个处理单元有关或者引用拥有高速缓存行的一致性状态的处理单元的索引时,CCP追踪每个高速缓存行的一致性状态),则此单个位足以促进记录稳健的完全确定性跟踪(即,保证被跟踪的执行的完全可重建性的跟踪)。
在其他实现中,每行的(多个)记账位401包括多个位。可以以多种方式使用多个位。使用一种在本文中被称为“单元位”的方法,每个高速缓存行的(多个)记账位401可以包括其数目等于处理器102的处理单元102a的数目的单元位(例如,如果处理器102支持超线程,则该数目是逻辑处理单元的数目)。处理器102可以使用这些单元位来追踪哪一个或多个特定处理单元已经消耗了高速缓存行(或者,如果高速缓存行尚未被消耗,则要记下没有处理单元已经消耗了该高速缓存行)。因此,例如,由两个处理单元102a共享的共享高速缓存102b可以包括用于每个高速缓存行的两个单元位。结合被添加到每个高速缓存行的这些单元位,实施例扩展了处理器的微代码102c以利用这些单元位,以代表每个处理单元来追踪高速缓存行中的当前值(即,在跟踪文件104d中)是否已经被记载或者被处理单元已知。如果处理器的CCP具有较粗的粒度(例如,如果CCP仅在高速缓存行的级别上追踪一致性状态),则这些单元位可以提供附加信息以促进稳健的跟踪。例如,如果高速缓存行被CCP标记为共享或独有,则单元位可以被用来标识哪个或哪些处理单元共享该高速缓存行,或者哪个处理单元具有独有性。
使用在本文中被称为“索引位”的另一种方法,每个高速缓存行的(多个)记账位401可以包括一定数目的索引位,这些索引位足以表示对计算机系统101的(多个)处理器102的参与记载的每个处理单元102a的索引、以及“保留”值(例如,-1)。例如,如果计算机系统101的(多个)处理器102包括了128个处理单元102a,则每个高速缓存行可以仅使用七个索引位通过索引值(例如,0-127)来标识这些处理单元。在一些实施例中,一个索引值被保留(例如,“失效”)以指示没有处理器记载了高速缓存行。因此,这意味着七个索引位实际上能够表示127个处理单元102a,再加上保留值。例如,二进制值0000000-1111110可能对应于索引位置0-126(十进制)、二进制值1111111(例如,十进制的-1或127,这取决于解释)可能对应于“失效”以指示没有处理器已经记载了对应的高速缓存行,然而此表示法可能取决于实现而不同。因此,处理器102可以使用单元位来追踪高速缓存行是否正在参与跟踪记载(例如,-1以外的值)、以及对消耗了该高速缓存行的特定处理单元(例如,最近消耗该高速缓存行的处理单元)的索引。此第二种方法的优点是在共享高速缓存102b中以很少的开销支持大量的处理单元,缺点是粒度小于第一种方法(即,一次仅标识一个处理单元)。同样,如果处理器的CCP具有较粗的粒度(例如,如果CCP仅追踪高速缓存行的级别处的一致性状态),则这些索引位可以提供附加信息以促进稳健的跟踪。例如,如果高速缓存行被CCP标记为共享或独有,则索引位可以被用来标识共享该高速缓存行的至少一个处理单元,或者哪个处理单元具有独有性。
处理器102可以用来确定高速缓存行是否是记载的参与者的另一种机制可以采用结合图4A讨论的概念,但是无需用附加的(多个)记账位401对每个高速缓存行进行扩展。相反,此机制保留一个或多个高速缓存行404以用于存储记账位。图4B图示了共享高速缓存400b的示例,共享高速缓存400b包括存储存储器地址402和值403的常规高速缓存行405,以及用于存储适于常规高速缓存行405的记账位的一个或多个保留的高速缓存行406。(多个)保留的高速缓存行406的位被分配到不同的记账位组中,每个记账位组对应于不同的一个常规高速缓存行405。取决于实现,这些记账位组可以用作标志位、单元位、或索引位。
处理器102可以用来确定高速缓存行是否是记载的参与者的另一种机制是利用组关联高速缓存和路锁定。由于处理器的共享高速缓存102b通常比系统存储器103小得多(通常小几个数量级),因此系统存储器103中的存储器位置通常比共享高速缓存102b中的行多得多。如此,每个处理器定义了一种用于将系统存储器的多个存储器位置映射到高速缓存中的(多个)行的机制。处理器通常采用两种通用技术之一:直接映射和关联(或组关联)映射。使用直接映射,系统存储器103中的不同存储器位置正好被映射到高速缓存中的一行,以使每个存储器位置只能被高速缓存到高速缓存的特定行中。
另一方面,使用组关联映射,可以将系统存储器103中的不同位置高速缓存到共享高速缓存102b中的多行之一。图5图示了组关联映射的示例。在此,高速缓存502的高速缓存行504被逻辑上分割为两个高速缓存行的不同集合,包括两个高速缓存行504a和504b的第一集合(被标识为索引0)以及两个高速缓存行504c和504d(被标识为索引1)的第二集合。集合中的每个高速缓存行都被标识为不同的“路”,以使高速缓存行504a由索引0、路0标识,高速缓存行504b由索引0、路1标识,依此类推。如进一步所描绘的,存储器位置503a、503c、503e和503g(存储器索引0、2、4和6)被映射到索引0。如此,系统存储器中的这些位置中的每个位置都可以被高速缓存到索引0处的集合内的任何高速缓存行(即,高速缓存行504a和504b)。所描绘的映射的特定模式仅出于说明性和概念性的目的,并且不应被解释为存储器索引可以被映射到高速缓存行的唯一方式。
组关联高速缓存通常被称为N路组关联的高速缓存,其中N是每个集合中的“路”的数目。因此,图5的高速缓存502将被称为2路组关联高速缓存。处理器通常实现N路高速缓存,其中N是2的幂(例如,2、4、8等),其中通常选择N值为4和8(但是本文的实施例不限于任何特定的N值或N值的子集)。值得注意的是,1路组关联高速缓存通常等效于直接映射的高速缓存,因为每个集合仅包含一个高速缓存行。另外,如果N等于高速缓存中的行数,则其被称为完全关联的高速缓存,因为其包括单个集合,该单个集合包含高速缓存中的所有行。在完全关联的高速缓存中,任何存储器位置都可以被高速缓存到高速缓存中的任何行。
注意,图5表示系统存储器和高速缓存的简化视图,以图示出一般原理。例如,尽管图5将各个存储器位置映射到高速缓存行,但是应当理解,高速缓存中的每一行通常将与多个可寻址位置有关的数据存储在系统存储器中。因此,在图5中,系统存储器(501)中的每个位置(503a-503h)实际上可以表示多个可寻址的存储器位置。另外,映射可以是在系统存储器501中的实际物理地址与高速缓存502中的行之间,或者可以使用虚拟地址的中间层。
组关联高速缓存可以被用于确定高速缓存行是否是通过使用路锁定的记载的参与者。出于某种目的,路锁定会在高速缓存中锁定或保留某些路。特别地,本文的实施例利用路锁定为被跟踪的线程保留一路或多路,以使被锁定/保留的路被专门用于存储与该线程的执行有关的高速缓存未命中。因此,参考回图5,如果为被跟踪的线程锁定了“路0”,则高速缓存行504a和504c(即,索引0、路0和索引1、路0)将被专门用于与该线程的执行有关的高速缓存未命中,并且其余的高速缓存行将被用于所有其他的高速缓存未命中。因此,为了确定特定高速缓存行是否是记载的参与者,处理器102仅需要确定高速缓存行是否是为正被跟踪的线程保留的路的一部分。
图6A图示了在图1、图2、图4A,图4B和图5的上下文中应用图3的方法300的具体示例。图6A图示了包括多个列分组601-606的表600a。列601描绘了被用来指定列602中所示的处理器活动中的全局排序的标识符(ID)。列602描绘了四个处理单元102a(即,P0-P3)对共享高速缓存102b中的存储器地址(@1)的读取和写入活动。列603描绘了示例CCP跟踪数据,CCP跟踪数据可以基于列602中的处理器活动而被添加到(多个)跟踪文件104d,以记载CCP相依性。列604示出了示例高速缓存活动跟踪数据,高速缓存活动跟踪数据可以基于列602中的活动而被添加到(多个)跟踪文件104d中,以记载处理器与共享高速缓存102b中的存储器地址的交互。列605描绘了基于列602中的处理器活动的处理器的内部高速缓存一致性状态(例如,使用处理器的CCP进行跟踪)的一个实施例。列606描绘了可能被存储在共享高速缓存102b的记账位中的内容(如关于图4A和图4B所述),如果完全使用记账位的话。尽管通常仅使用一种类型的记账位(即,每行的单元位、每行的索引位、或每行的标志位),但为了描述的完整性,列606示出了单元位(即,列P0-P3)、索引位(即,列“I”)和标志位(即,列“F”)中的每项。
为了描述的简化,表600a一次仅描绘了单个处理单元102a的操作,但是应当理解,本文所述的原理适用于存在并发活动(例如,相同高速缓存行的两个或更多处理单元进行并发读取)的情形。另外,结合表600a描述的示例假定对处理单元P0-P2启用追踪,而对处理单元P3禁用追踪。例如,如上所讨论的,这可以被控制为对应于每个处理单元的位,诸如控制寄存器的多个位。
注意,此示例使用简化的高速缓存行状态,简化的高速缓存行状态是从在以上讨论的CCP(即,MSI、MESI和MOESI)中使用的高速缓存行状态(即,修改的、拥有的、独有的、共享的和失效的)得出的。在此简化中,这些状态映射为“读取”状态(即,已从其中读取的高速缓存行)或“写入”状态(即,已向其中写入的高速缓存行)。以下的表1示出了这些映射的一个示例。注意,这些映射仅被用作示例,并且是非限制性的。例如,可能存在除本文讨论之外的CCP和状态,并且鉴于本文的公开内容,本领域的普通技术人员将认识到可以用许多不同的CCP做出类似的映射。
协议状态 | 被映射的状态 |
修改的 | 写入 |
拥有的 | 读取 |
独有的 | 写入 |
共享的 | 读取 |
失效的 | 无映射——高速缓存行被视为空 |
表1
尽管此示例使用全局ID(即,列601),但应理解,在实践中,每个处理单元通常将使用其自己独立标识符集合对操作进行排序。这些ID可以包括指令计数(IC)、或用于指定操作间的排序的任何其他合适的机制,诸如“跳计数”加上程序计数器。因此,尽管在此示例中使用全局ID容易地重建事件的总排序,但实际上,通常不会记录跨处理单元的这种全局排序,这需要使用CCP跟踪数据来标识可能的排序。注意,该示例以与MSI、MESI和MOESI CCP一致的方式使用存储器,但是为了简单起见,仅使用“修改的”、“共享的”和“失效的”状态。然而,应注意,一些CCP可以提供其自己唯一和/或单调递增的ID,这些ID也可以被记录在跟踪中(例如,在每个分组中,或者在偶然的分组中),以对跟踪条目进行有力地排序。即使CCP没有提供这种ID,也有可能使用槽计时器的值(例如,TSC)或另一可预测和可排序的ID。
如表600a中所示,在标识符ID1处,处理单元P0执行从地址@1的读取,这导致高速缓存未命中,从而将数据值(例如,A)带入对应的高速缓存行。列605示出了处理器的内部CCP状态具有由P0“共享”的高速缓存行,并且列606的记账示出了如果使用了单元位,则单元位指示处理单元P0已消耗(即,读取)了高速缓存行(并且处理单元P1-P3尚未消耗),如果使用了索引位,则指示P0已经消耗了高速缓存行,并且如果使用了标志位,则指示一些处理单元已经消耗了高速缓存行。
基于此记账,在动作303中,处理器102将确定为P0启用了记载。另外,在动作304中,将确定高速缓存行参与了记载(即,使用单元位、索引位、标志位或路锁定)。因此,在动作305中,如有必要,则处理器102会利用CCP将合适的数据记载到(多个)跟踪文件。在此,由于高速缓存行从失效(空)状态变为读取/共享状态,因此应该记载高速缓存活动跟踪数据。列604示出了简化的高速缓存活动跟踪数据,其指示处理单元(P0),如果需要的话(即,取决于是否将数据分组记载到每个处理单元的单独数据流或记载到单个数据流中)也指示被带入高速缓存行的数据值(A)。尽管为了简单起见没有被示出,但是其他记载数据可以包括高速缓存行地址(例如,“@1”)和指令计数或一些其他计数。由于P0已经记载了被读取的值并且不存在先前的CCP状态(即,P0并未“取得”来自任何其他处理单元的高速缓存行的高速缓存一致性),因此不需要记载CCP跟踪数据(列603)。
在ID2处,列602示出了处理单元P1执行了从地址@1的读取。列605示出了处理器的内部CCP状态具有由P0和P1“共享”的对应高速缓存行。列606示出了处理单元P0和P1二者已经消耗了高速缓存行(单元位),P1已经消耗了高速缓存行(索引位),或者某个处理单元已经消耗了高速缓存行(标志位)。注意,索引位仍然引用P0而不是P1也是正确的。列604示出了在动作305中,处理器102已经确定可以记载操作的记录。如图所示,处理器102可以记下P1执行了读取。在此,被读取的值取决于由P1在ID0处记载的值。因此,列603包括CCP跟踪数据,其指示P0从P0“占用”对应于@1的高速缓存行以用于该读取。
在ID3处,处理单元P0执行对地址@1的写入(例如,写入数据值B)。列605示出了处理器的内部CCP状态具有由P0“修改”并对P1“失效”的对应高速缓存行。列606示出了仅处理单元P0已经消耗高速缓存行(单元位)(例如,更新了其值),P0已经消耗了高速缓存行(索引位),或者某个处理单元已经消耗了高速缓存行(标志位)。列604示出了,在动作305中,处理器102使用CCP确定需要记载该操作的记录,因为高速缓存行被写入/修改。如图所示,处理器102可以记下P0执行了写入,尽管不需要记载所写入的值。列603包括CCP跟踪数据,其指示P0从P0和P1占用高速缓存行以用于该写入。
在ID4处,处理单元P1再次执行从地址@1的读取。列605示出了处理器的内部CCP状态具有由P0“共享”的对应高速缓存行,并且列606示出了处理单元P0已消耗了高速缓存行(单元位),P0已消耗了高速缓存行(索引位),或者某个处理单元已经消耗了高速缓存行(标志位)。列603和列604示出了,在动作305中,处理器102使用CCP确定不需要记载操作的记录,因为P0正在读取其先前写入的值。
在ID5处,处理单元P1执行从地址@1的另一读取。此处,内部CCP状态605和高速缓存记账606与其在ID2处的相同,并且CCP记载603和高速缓存活动记载604与其在ID2处的相同。
在ID6处,处理单元P2执行从地址@1的读取。列605示出了对应的高速缓存行现在由P0、P1和P2“共享”,并且列606示出了处理单元P0、P1和P2已消耗了高速缓存行(单元位),P2已消耗了高速缓存行(索引位),或者某个处理单元已消耗了高速缓存行(标志位)。列604示出了P2已读取了高速缓存行,并且列603示出了P2从P0和P1占用高速缓存行以用于该读取。
在ID7处,处理单元P0再次执行对地址@1的写入(例如,写入数据值C)。列605示出了处理器的内部CCP状态具有由P0“修改”且对P1和P2“失效”的对应高速缓存行。列606示出了仅处理单元P0已消耗了高速缓存行(单元位),P0已消耗了高速缓存行(索引位),或者某个处理单元已消耗了高速缓存行(标志位)。列604示出了高速缓存活动记载指示P0执行了写入,但是不需要记载所写入的值。列603包括CCP跟踪数据,其指示P0从P0、P1和P2占用高速缓存行以用于该写入。
最后,在ID8处,处理单元P3执行从地址@1的读取。处理器在内部更新其内部CCP状态(列605)以指示高速缓存行由P0和P3“共享”。其还更新了其高速缓存记账(列606),以示出没有处理已经消耗了高速缓存行,因为对P3禁用了跟踪。另外,由于对P3禁用了跟踪,因此没有CCP跟踪数据(列603)或高速缓存跟踪数据(列604)。
注意,为了生成完全确定性的跟踪文件,CCP通常会指示引起跨处理单元(例如,从P0到P1)的CCP转变(即,写入->读取、写入->写入、读取->写入、和读取->读取)的所有处理器活动被记载。然而,无需记载引起相同处理单元内的CCP转变(例如,从P0到P0)的活动。这些不需要被记载,因为其将通过在该处理单元处执行的线程的正常执行来重现。这在上面的ID4处被证明,其中未记载任何CCP跟踪数据(列603)或高速缓存活动跟踪数据(列604)。
使用诸如在以上示例中记载的数据,并且进一步了解进行记录的处理器102使用的CCP,可以对在每个线程/处理单元处发生的操作的完全排序进行重建,并且可以重建不同的处理单元之间的操作的至少部分排序。因此,无论是索引过程(例如,索引器104e)和/或通过跟踪文件的重放(例如,调试器104f),都可以重建以上每个操作——即使这些操作并未被全部明确记录在(多个)跟踪文件104d中。
如上面的CCP跟踪数据(列603)所证明,存在对地址@1上的值的线程间相依性。如此,以其当前形式,高速缓存活动跟踪数据(列604)不能被用来独立地重放每个被记载的处理单元(即,P0、P1和P2)的活动。相反,它们需要以单线程方式一起被重放。为了克服此缺陷,本文的实施例可以使用CCP数据来解耦此跟踪数据。
图6B图示了分别与被记载的处理单元P0、P1和P2对应的示例已解耦跟踪数据流607、608和609。从概念级别,这些已解耦跟踪数据流607、608和609可以通过个体地遍历每个处理单元的活动而被获得。注意,尽管图6B示出了完全独立的跟踪数据流,但是此数据也可以被记录在单个数据流中,诸如注释或修改列604中的高速缓存活动跟踪。
首先考虑处理单元P0。表600a中用于P0的第一高速缓存活动跟踪数据位于ID1,其中处理单元执行从地址@1的读取(获得存储器值A)。由于不存在先前的CCP相依性,因此该读取(包括其值)被记载,如跟踪数据流607中所示。P0的下一高速缓存活动跟踪数据位于ID3,其中处理单元执行对地址@1的写入(写入存储器值B)。此处,存在对处理单元本身(P0)和相邻的处理单元(P1)(即,其从P0和P1占用高速缓存行以用于写入)的CCP相依性。由于这些CCP相依性包括P0,因此从P0的角度,在P0在ID1的读取和其在ID3的写入之间,不存在高速缓存内容的中断(即,高速缓存内容在P0在ID3处写入值B之前仍具有值A)。由于P0已经知道在ID3处正在写入的值(即,由于P0正在执行写入),因此无需记载该写入——但是可以可选地在具有或不具有该写入值的情况下记载该写入,以提供更丰富的记载数据(如在跟踪数据流607中所示)。P0的最终高速缓存活动跟踪数据位于ID7,其中处理单元执行对地址@1的另一写入(写入存储器值C)。再次地,CCP相依性包括P0,因此从P0的角度,在P0在ID3的写入和其在ID7的写入之间,不存在高速缓存内容的中断(即,高速缓存内容在P0在ID7处写入值C之前仍具有值B)。再次地,由于P0已经知道在ID7处正被写入的值,因此无需记载该写入——但是可以可选地在具有或不具有该写入值的情况下记载该写入,以提供更丰富的记载数据(如在跟踪数据流607中所示)。
接下来,考虑处理单元P1。表600a中用于P1的第一高速缓存活动跟踪数据位于ID2,其中处理单元执行从地址@1的读取——但是高速缓存活动跟踪数据不包括已被读取的值。CCP跟踪数据示出了对P0的相依性(即,P1从P0占用高速缓存行以用于读取)。由于存在来自P0的P1的两个实例以用于读取(即,在ID2和ID5处),因此尚不知道P1是读取第一值(即,A)还是第二值(即,B)。然而,在ID3处,P0的跟踪数据示出了其是从P1占用以进行写入。这意味着P1的读取之一必定在P0在ID3的此写入之前。由于这是在P1的跟踪中的第一次读取,因此其必定是在P0在ID3处的写入之前的读取,并且因此P1必定在ID2处读取了值A。如在跟踪数据流608中所示,此值被直接记载在P1的已解耦跟踪中。表600a中用于P1的唯一其他高速缓存活动跟踪数据位于ID5,其中处理单元执行从地址@1的另一读取,并且再次地,高速缓存活动跟踪数据不包括已被读取的值。虽然此读取是在ID2的先前读取之后,但尚不知道其是否在P0在ID3的写入之前。然而,在ID7处,P0的跟踪数据示出了其是从P0、P1和P2中占用以用于另一写入。这意味着P1的此第二读取必定在P0在ID7的此写入之前,并且因此P1必定在ID5处读取了值B。如在跟踪数据流608中所示,此值也被直接记载在P1的已解耦跟踪中。
最后,考虑处理单元P2。表600a中用于P2的唯一高速缓存活动跟踪数据位于ID6,其中处理单元执行了从地址@1的读取,但是高速缓存活动跟踪数据不包括已被读取的值。CCP跟踪数据示出了其从P0和P1二者占用高速缓存行以进行读取,但是我们不知道其是读取了值A(即,来自P0在ID0处的读取)还是值B(即,来自P0在ID3的写入)。然而,在ID7,P0从P2占用高速缓存行以进行写入。因此,P2的读取必须在此写入之前进行,因此P2读取值B。
在此简单示例中,CCP跟踪包括了相当稳健的数据量,包括从中占用了高速缓存行进行读取或写入的每个处理单元的身份。一些处理器可以不提供这样丰富的信息,或者一些跟踪器104a可以选择不记录这样丰富的信息(例如,以减小跟踪文件大小),从而导致难以解耦跟踪。例如,作为标记高速缓存行以进行写入的一部分,一些处理单元可能无法知道其是否从自身占用了高速缓存行。处理单元也有可能仅知道在请求相同行时具有共享高速缓存行的若干其他处理单元之一(即,因为其仅需要该数据一次)。
此外,在占用高速缓存行以对一些处理单元进行写入时,可能仅知道当时处于活动状态的读取器的计数和其中一个读取(如果其是读取器则是其本身,如不是则是另一单元)。注意,读取器的计数不一定与已将数据记载到跟踪中的读取器的计数相同。在此意义上,该计数是活动读取器的最大数目,但是由于可能已逐出并重新导入了高速缓存行,因此可能会有更多的记载单元已经读取了该地址。
另外,如果多个处理器槽正在参与跟踪,并且第一处理单元从不同的槽处的第二处理单元占用高速缓存行,则跟踪数据可以仅标识该槽,而不是第二处理单元本身。
在一些实施例中,记载高速缓存逐出和失效是可选的。不记载逐出/失效会使数据流解耦复杂化,因为其为相同地址上的相同高速缓存事件序列打开了多个记载情景。例如,如果在表600a中P2具有如ID6处的现有条目之类的两个条目,则从数据中确定第二条目所属何处可能不太简单。通过在相同记载中使处理单元访问其他高速缓存行,和/或通过记载CCP ID等,在具有来自共享记载的任何处理单元的额外排序信息的情况下,答案变得更加容易确定。在没有该额外数据的情况下,一个选项是:如果P2在P0开始写入值2之前就逐出了高速缓存行,则在ID3从P0进行第一次写入之前就发生了该额外条目。这是以下情况:在P0进行写入之前就从P2的高速缓存逐出了该值,因此P0的记载从未见到P2的条目。另一选项是该额外条目紧接着现有条目发生(即,就在P0在ID7处进行第二次写入之前)。这是以下情况:P0逐出了该数据,并且然后将其带回到高速缓存中以在ID7进行写入之前(但在已存在的现有读取之后)再次对其进行读取。
值得注意的是,CCP事件在逻辑上是原子的,并且在地址范围内被完全排序(但是,如果不同的地址范围具有专用的总线或目录,则不同的地址范围可能彼此独立)。因此,每个CCP条目提供了相对于一些其他CCP条目的事件的排序。这与处理器指令本身不同,处理器指令可以在执行时由处理器重新排序(例如,因为处理器可能具有弱的存储器模型)。注意,在解耦数据流时,仅在生成不同结果的CCP排序之间进行区分就足够了,因此可能不需要在等效排序之间进行区分。在高级别处,这意味着跨地址对单个写入器的时间段和多个读取器的时间段进行排序。
图7图示了更广泛的示例,其包括四个处理单元(P0、P1、P2和P3)在三个存储器地址(@1、@2和@3)上的活动,并且其中CCP跟踪数据记载读取器之一和读取器的总计数(例如,因为这是处理器102提供的唯一信息,或者跟踪器104a选择仅记录此信息)。
特别地,图7描绘了表700,表700包括示出全局标识符的列701(类似于列601),示出跨三个存储器地址的处理器活动的列702(类似于列602),示出CCP跟踪数据的列703(类似于列603)、以及示出高速缓存活动跟踪数据的列704(类似于列604)。与图6相似,处理单元P0-P2参与了记载,并且P3没有参与。稍后将变得明显的是,图7被特别设计为缺少足够的CCP跟踪数据来完全解耦跟踪;然而,其图示了如何使用非常有限的CCP跟踪数据来恢复部分数据并至少部分解耦跟踪。
在ID1处,P0执行了从地址@1的读取,读取数据值A。此操作与该值一起被记载在高速缓存活动跟踪中。由于不存在针对地址@1的先前CCP状态,因此没有记载CCP跟踪数据。
在ID2处,P3执行了从地址@2的读取。由于P3没有参与记载,因此没有记载跟踪数据。
在ID3处,P0执行了从地址@2的读取,读取数据值B。此读取与值一起被记载在高速缓存活动跟踪中。由于不存在针对地址@2的先前CCP状态,因此没有记载CCP跟踪数据。
在ID4处,P3执行了从地址@3的读取。由于P3没有参与记载,因此没有记录跟踪数据。
在ID5处,P1执行了从地址@1的读取。此读取被记载在高速缓存活动跟踪中,但该值没有被记载,因为其可以从P0获得。由于P1占用了地址@1的高速缓存行以用于从P0的读取,因此已将其记载在CCP跟踪中。
在ID6处,P1执行了对地址@2的写入,写入数据值C。此写入被记载在高速缓存活动跟踪中,但是不需要记载该值。由于P1占用了地址@2的高速缓存行以进行写入,并且P0记载了该值,因此这在CCP跟踪中被记下,以及总的先前读取器计数为2(即,P0和P3)。
在ID7处,P3执行了从地址@1的读取。由于P3没有参与记载,因此没有记录跟踪数据。
在ID8处,P2执行了从地址@3的读取,读取数据值D。此读取与值一起被记载在高速缓存活动跟踪中。由于不存在针对地址@3的先前CCP状态,因此没有记载CCP跟踪数据。
在ID9处,P1执行了从地址@2的读取。此读取被记载在高速缓存活动跟踪中,但该值没有被记载,因为其可以从P0获得。由于P1占用了地址@2的高速缓存行以用于从P0的读取,因此已将其记载在CCP跟踪中。
在ID10处,P0执行了对地址@1的写入,写入数据值E。此写如被记载在高速缓存活动跟踪中,但是不需要记载该值。由于P0占用了地址@1的高速缓存行以进行写入,并且P0记载了值,因此这在CCP跟踪中被记下,以及总的先前读取器计数为3(即,P0、P1和P3)。
在ID11处,P3执行了从地址@1的读取。由于P3没有参与记载,因此没有记录跟踪数据。
在ID12处,P1执行了从地址@3的读取。此读取被记载在高速缓存活动跟踪中,但是该值没有被记载,因为其可以从P2获得。由于P1占用了地址@3的高速缓存行以用于从P2的读取,因此已将其记载在CCP跟踪中。
在ID13处,P2执行了对地址@2的写入,写入数据值F。此写入被记载在高速缓存活动跟踪中,但是不需要记载该值。由于P2占用了地址@2的高速缓存行以进行写入,并且该值从P0可获得,因此这在CCP跟踪中被记下,以及总的先前读取器计数为2(即,P0和P1)。
在ID14处,P1执行了从地址@1的读取。此读取被记载在高速缓存活动跟踪中,但是该值没有被记载,因为其可以从P0获得。由于P1占用了了地址@1的高速缓存行以用于从P0的读取,因此已将其记载在CCP跟踪中。
在ID15处,P1执行了从地址@2的读取。此读取被记载在高速缓存活动跟踪中,但是该值没有被记载,因为其可以从P2获得。由于P1占用了地址@2的高速缓存行以用于从P2的读取,因此已将其记载在CCP跟踪中。
在ID16,P2执行了从地址@1的读取。此读取被记载在高速缓存活动跟踪中,但是该值没有被记载,因为其可以从P0获得。由于P2占用了地址@1的高速缓存行以用于从P0的读取,因此已将其记载在CCP跟踪中。
在ID17处,P2再次执行了从地址@1的读取。此读取被记载在高速缓存活动跟踪中,但是该值没有被记载,因为其可以从P0获得。由于P2占用了地址@1的高速缓存行以用于从P0的读取,因此已将其记载在CCP跟踪中。
在ID18处,P1执行了对地址@3的写入,写入数据值G。此写入被记载在高速缓存活动跟踪中,但是不需要记载该值。由于P1占用了地址@3的高速缓存行以进行写入,并且P1记载了该值,因此这在CCP跟踪中被记下,以及总的先前读取器计数为3(即,P1、P2和P3)。
在ID19处,P0执行了对地址@1的写入,写入数据值H。此写入被记载在高速缓存活动跟踪中,但是不需要记载该值。由于P0占用了地址@1的高速缓存行以进行写入,并且该值从P0可获得,因此这在CCP跟踪中被记下,以及总的先前读取器计数为3(即,P1、P2和P3)。
在ID20处,P0执行了从地址@3的读取。此读取被记载在高速缓存活动跟踪中,但是该值没有被记载,因为其可以从P1获得。由于P1占用了地址@3的高速缓存行以用于从P1的读取,因此已将其记载在CCP跟踪中。
表700的示例包括CCP数据的粒度不足以遍历每个处理单元并获得完全解耦的跟踪,如先前结合表600a所完成的那样。相反,如果需要的话,可以在数学上求解相依性,诸如通过开发求解系统不等式和/或通过开发有向图和求解循环。
图8图示了开发系统不等式的示例800。最初,框801包括从每个核活动得出的不等式组802,以及从CCP交互得出的不等式组802。最初,关于组802,不等式1-5是从P0得出的。特别地,不等式1示出了P0在ID1处的读取先于P0在ID3处的读取;不等式2示出了P0在ID3处的读取先于P0在ID6处的写入。不等式3示出了P0在ID6处的写入先于P0在ID10处的写入,依此类推。以类似的方式,从P1得出不等式6-9,并且从P2得出不等式10-13。
关于组803,每个不等式对应于列703中的CCP跟踪数据条目。例如,ID5处的CCP跟踪条目对应于不等式14,并且要求P0在地址@1的ID1处的读取处于P1在相同地址的ID5处的读取之前。ID6处的CCP跟踪条目对应于不等式15,并且要求P0在地址@2的ID3处的读取处于P0在相同地址的ID6处的写入之前。如括号中所指示的,该不等式与不等式2相同。继续,ID9处的CCP跟踪条目对应于不等式16,并且要求P0在地址@2的ID6处的写入处于P1在相同地址的ID处的读取之前。组803中的其余不等式(即,17-26)分别从ID10和ID12-20的CCP条目中得出。
如图所示,组802和803中的若干不等式重叠,因此可以移除冗余以减少不等式的数目。框804示出了这种减少,其从组803中移除了与组802中那些不等式重叠的不等式。
最后,框805示出了新的不等式集合,其进一步减少了框804中的不等式。如图所示,新的不等式1-3对应于从处理单元活动得出的不等式1-13(即,新的不等式1相当于框804的不等式1-5,新的不等式2相当于框804的不等式6-10,以此类推)。新的不等式4-11对应于从CCP活动得出的不等式14、16、18、19、20-23和26,不等式19和21减少成新的不等式7。
框805是不等式组,可以将诸如单形算法的线性编程算法应用到该不等式组以标识事件的排序,并且因此推断出要将哪些数据放置在跟踪中。为了找到解决方案,这可能意味着将一个或多个不等式变换为两侧相等的情况(例如,将“[0]ID1<[1]ID5”变换成“[0]ID1+1<=[1]ID5”)。
如上所提及,在必要的情况下,相依性也可以通过开发有向图和求解循环来求解,以生成用于每个处理单元的已解耦跟踪。图9图示了图900的示例,图900可以通过个体地遍历每个处理单元从表700发展而来。图900包括多个节点901-916,每个节点对应于列702中的处理器活动,并且按每个处理单元一列来布置(即,用于P0的节点901-906、用于P1的节点907-912、以及用于P2的节点913-916。每个节点指示所涉及的存储器地址和来自列701的事件的标识符。如果相依性已知,则节点用黑色实线箭头连接,并且如果相依性存在多个可能性,则节点用虚线箭头连接。
最初,查看P0的活动性,节点901-906表示P0的每个动作,这些动作基于其在P0中的相应排序而按排序布置(非常类似于框805的不等式1)。这些节点通过实线箭头连接,以指示这些固有的处理器间相依性。图10描绘了已解耦的数据流的示例1000,包括可以基于图对P0开发的已解耦数据流1001。首先,在ID1(节点901)处,P0执行从地址@1的读取,并且记载了所读取的数据,因此该值已知。数据流1001反映了此记载条目。接下来,在ID3(节点902)处,P0执行了从地址@2的读取。再次,记载了所读取的数据,因此该值是已知的,并且数据流1001反映了此记载条目。接下来,在ID6(节点903)处,P0执行了对地址@2的写入。根据CCP跟踪,这是相同处理单元中的相依性(即,如从节点903到902的实线箭头所示)并且是写入,因此在已解耦数据流1001中没有要记载的内容。然而,可以记住该值(数据C)以用于其他处理单元的已解耦数据流。ID10(节点904)和ID19(节点905)类似于ID6,并且不需要在已解耦数据流1001中记载任何内容。最后,在ID20(节点906),P0执行了从地址@3的读取。根据CCP跟踪,此读取依赖于P1,这将是在ID18(节点912)处写入相同的地址。从节点906到节点912的实线箭头示出了此相依性。P1在ID18处产生的数据(即,数据G)被记载在已解耦数据流1001中。在已解耦数据流1001的该条目中,星号指示这是新记载的数据以及已求解的相依性。此数据值可以在第二遍时或者通过并行地对所有处理单元执行前述分析而被填充到已解耦数据流1001中。
现在转向P1,在ID5(节点907)处,P1执行了从地址@1的读取,并且没有记载该值。根据CCP跟踪,此读取依赖于来自P0的地址@1——但可能位于ID1(节点901)、ID10(节点904)、或ID19(节点905)。如此,图900示出了从节点907到节点901、904和905中的每一个的虚线箭头。基于此部分信息,图10示出了用于P2的已解耦数据流1002,包括该读取,但不包括该值。接下来,在ID9(节点908),P0执行从地址@2的读取,并且没有记载该值。根据CCP跟踪,这依赖于来自P0的地址@2,来自P0在ID6(节点903)处的写入,因此这是该值的唯一候选。如此,图900示出了从节点908到节点903的实线箭头。尽管这没有消除ID5(节点907)的模糊性,但确实指示了ID6(节点903)先于ID9(节点908)出现。如已解耦数据流1002中所示,现在可以记载数据值C,并且如星号所指示,其是新记载的数据以及已求解的相依性。接下来,在ID12(节点909)处,读取对P2具有相依性,这是ID8(节点913)。这是用从节点909到节点913的实线箭头捕获的,并且可以将值(数据D)添加到已解耦数据流1002中。再次地,这是新记载的数据以及已求解的相依性。在ID14(节点910)处,在地址@1处对P0的相依性很像ID5,其可能再次是ID1(节点901)、ID10(节点904)或ID19(节点905)。如此,图900示出了从节点910到节点901、904和905中的每一个的虚线箭头。在ID15(节点911)处,读取具有对P2的相依性,这是在ID13(节点914)处的写入。这是用从节点911到节点914的实线箭头捕获的,并且值(数据F)可以被添加到已解耦数据流1002中。再次,这是新记载的数据,以及已求解的相依性。在ID18(节点912)处,写入是向相同处理单元(P1),因此没有可记载的内容(尽管写入的值数据G可以保留供以后使用)。
转向P2,在ID8(节点913),P2执行了从地址@3的读取。此数据的值已经被记载,并且通过图10反映在用于P2的已解耦数据流1003中。接下来,在ID13(节点914),P2执行了对地址@2的写入。根据CCP跟踪,这对P0具有相依性,其可能在ID3(节点902)或ID6(节点902)处,如从节点914到节点902和903的虚线箭头所反映的。由于此写入不依赖于其自己,所以其被添加到已解耦数据流1003。在ID16(节点915)处,P2执行从地址@1的读取,并且根据CCP跟踪,对该地址上的P0有相依性。如节点915和那些节点之间的虚线箭头所反映的,这可以是在ID1(节点901)、ID10(节点904)或ID19(节点905)上。已解耦数据流1003示出了该读取被记载,但是值未知。ID17(节点916)也是P2从地址@1的读取,因此图900示出了对节点901、904和905的相依性,并且已解耦数据流1003示出了该读取被记载,但是值未知。
尽管表700a的CCP跟踪数据缺少足够的信息来完全解耦这些跟踪,但是如果出现这些不太可能的情形,仍然可以使用一些技术来推断实际的相依性。例如,试探法可以考虑跨记载中的条目的指令距离。例如,ID19(节点905)与ID10(节点904)之间、ID1(节点901)与ID10(节点904)之间、以及ID13(节点914)与ID16(节点915)之间的距离可以被用来猜测(并且之后验证)哪个节点更有可能向ID16、ID19或ID1提供值。
如上所提及,可以通过消除图中的循环来求解一些相依性。为了说明这一点,假设在ID10(节点904)处,P0已经替代地执行了从地址@2的读取,从ID15(节点911)处的P1取得了CCP相依性。这将移除从节点907、910、915和916到节点904的虚线箭头,并且引入从节点904到节点911的新的实线箭头。图11A示出了反映这些改变的更新的图1100a。现在,该新图1100具有循环。例如,如果节点907(ID5)从节点905(ID19)取得数据,则存在循环(即,节点907、905、904、911,并且回到907)。创建此循环的线是从节点907到节点905的虚线,以及从节点910到905的虚线。图11B示出了另一更新的图1100b,其中移除了这些虚线。尽管我们仍无法确定节点905与节点915和916之间的哪个箭头是正确的,但消除循环在移除相依性方面取得了进展。
鉴于前述内容,图12图示了用于使用CCP数据来解耦跟踪数据流的示例方法1200的流程图。在计算环境和图1-图11的示例的上下文中描述了方法1200。
如图所示,方法1200包括标识跟踪数据流的动作1201,该跟踪数据流包括依赖于CCP相依性的线程间相依性。在一些实施例中,动作1201包括在应用的先前执行的跟踪内标识一个或多个跟踪数据流,该一个或多个跟踪数据流在应用的先前执行期间记载多个线程的执行,一个或多个跟踪数据流包括高速缓存活动跟踪数据和CCP跟踪数据,高速缓存活动跟踪数据包括一个或多个线程间数据相依性,线程间数据相依性包括一个或多个相依高速缓存活动跟踪条目,每个高速缓存活动跟踪条目依赖于被跟踪的线程之间的CCP相依性来记录由对应线程进行的对应存储器访问。例如,索引器104e可以标识CCP跟踪数据(列603)和高速缓存活动跟踪数据(列604),其记录在P0、P1和P2处执行的三个线程的执行并访问单个存储器地址,并且被记载在(多个)跟踪文件104d中。如所讨论的,CCP跟踪数据指示部分高速缓存一致性相依性信息,其记载了线程间数据相依性。在此示例中,CCP跟踪数据非常稳健,列出了其上存在相依性的处理单元。在另一示例中,索引器104e可以标识CCP跟踪数据(列703)和高速缓存活动跟踪数据(列704),其记录在P0、P1和P2处执行的三个线程的执行。在此示例中,CCP跟踪数据不那么稳健,仅列出了其上存在相依性的单个处理单元以及总的读取器计数。
在一些实施例中,如跟踪器104a所记录的,高速缓存活动跟踪数据至少基于在(多个)处理器102处的应用103c的先前执行期间由多个线程引起的处理器数据高速缓存未命中的子集。另外,如跟踪器104a所记录的,CCP跟踪数据至少基于高速缓存一致性状态变化的子集,该高速缓存一致性状态变化由于在应用的先前执行期间由多个线程引起的共享高速缓存102b中的处理器数据高速缓存未命中而发生。
方法1200还包括通过移除线程间相依性来解耦跟踪数据流的动作1202。在一些实施例中,动作1201包括移除一个或多个线程间数据相依性,以针对多个线程中的每个线程创建使得每个线程能够被独立地重放的独立高速缓存活动跟踪数据。例如,索引器104e可以处理CCP跟踪数据(列603)和高速缓存活动跟踪数据(列604)以解耦针对P0、P1和P2的跟踪数据。这可以包括为每个处理器记录完全独立的新数据流,或者注释和/或修改现有的高速缓存活动跟踪数据(列604)。在另一示例中,索引器104e可以处理CCP跟踪数据(列703)和高速缓存活动跟踪数据(列704),以解耦针对P0、P1和P2的跟踪数据,从而为每个处理器记录完全独立的新数据流,或注释和/或修改现有的高速缓存活动跟踪数据(列604)。
用于移除一个或多个线程间数据相依性的特定过程可以变化。例如,索引器104e可以个体地遍历每个线程,诸如结合图6B所示,以沿路来标识合适的值和相依性。索引器104e还可以并行地遍历线程。这可能涉及在需要数据时暂停遍历第一线程,遍历第二线程直到找到该数据,并且使用找到的数据来继续第一线程。这还可能涉及在数据不可用时跳过第一线程内的数据相依性,并且在另一线程中找到该数据时在第二遍时将数据填充进去。移除一个或多个线程间数据相依性还可以涉及从数学上求解相依性,诸如通过开发和求解不等式组和/或开发和求解图。
在一些实施例中,移除一个或多个线程间数据相依性涉及遍历线程(个体地或并行地)以填充可以发现的尽可能多的数据,这可能是以迭代的方式。此过程完成后,可能仍存在未被求解的相依性。然后,这些可以通过为其余的相依性形成不等式组并求解这些相依性、和/或创建和求解图来解决。
鉴于前述内容,移除一个或多个线程间数据相依性可以包括以下中的一项或多项:(i)迭代地重放多个线程的一个或多个部分,其中每个迭代包括用直接存储存储器值的独立高速缓存活动跟踪条目来替换至少一个相依高速缓存活动跟踪条目;(ii)基于被跟踪的线程之间的CCP相依性,标识表达一个或多个线程间数据相依性的不等式组,并且基于求解该不等式组来标识存储器访问事件的排序;或(iii)基于被跟踪的线程之间的CCP相依性,标识表达一个或多个线程间数据相依性的有向图,并且基于有向图中的一个或多个线程间相依性来标识存储器访问事件的排序。
如图所示,动作1202可以包括动作1203,动作1203基于至少两个线程之间的CCP相依性来标识存储器访问的值。在一些实施例中,对于每个相依高速缓存活动跟踪条目并且基于被跟踪的线程之间的CCP相依性,动作1203包括标识由对应线程进行的对应存储器访问的对应值。例如,使用上述技术(即,单个地或并行地并且潜在地迭代地重放每个线程;开发方程式组;或开发图),索引器104e可以标识用于先前通过引用已被记录的每个存储器访问的值。
因此,动作1202可以包括以下中的一项或多项:(i)将对应线程重放到对应存储器访问的点,并且基于被跟踪的线程之间的CCP相依性,重放对应存储器访问所依赖的至少一个其他线程以标识对应值;(ii)在重放对应线程时,跳过对应存储器访问的重放,并且基于被跟踪的线程之间的CCP相依性,重放对应存储器访问所依赖的至少一个其他线程以标识对应值;或(iii)基于被跟踪的线程之间的CCP相依性,标识由对应线程进行的对应存储器访问依赖于另一线程的存储器操作,并且基于针对该另一线程的高速缓存活动跟踪数据来标识对应值。
动作1202还可以包括直接记录存储器访问的值的动作1204。在一些实施例中,动作1204包括:针对每个相依高速缓存活动跟踪条目,代表对应线程记录对应存储器访问的对应值。例如,跟踪器可以记录用于每个线程的独立数据流(例如,图6B和图10),或者可以注释或修改现有数据流以包括新数据。
如果将用于多个线程的分组记录到单个数据流中,则代表对应线程来记录对应存储器访问的对应值可以包括将该对应值记录到标识以下中的至少一项的数据分组中:执行了对应线程的处理单元,或者包含执行了对应线程的处理单元的槽。备选地,如果线程被记录到其自己的数据流中,则代表对应线程来记录对应存储器访问的对应值可以包括将该对应值记录到数据分组中,该数据分组是数据流的一部分,该数据流是执行了对应线程的处理单元独有的。
值得注意的是,在存在模糊性的情况下(例如,在完成上述一种或多种技术之后),一些实现可以求解或限制模糊性选项。例如,如果存在多个选项,则分析可以从模糊性角度执行单独的重放,并且在每个单独的重放中尝试不同选项(和执行路径)。在这些单独的重放汇聚的不常见情况下,选择不引起任何差别并且可以选择任一选项。然而,如果一个或多个单独的重放使得执行“脱轨”,则可以确定那些选项/路径不正确。因此,方法1200可以包括:通过基于使用不同的起始条件来重放两个或更多执行路径来解决模糊性,来移除一个或多个线程间的数据相依性。例如,这可以包括使用第一起始条件来重放第一执行路径,以及使用第二起始条件来重放第二执行路径,其中第一起始条件和第二起始条件是选自模糊性的多个选项的不同选项。这些路径可能会汇聚(在这种情况下模糊性不引起任何差别),或者一条路径可能会脱轨,这表明其起始条件不正确。
作为此分析的一部分,存在若干考虑因素可以帮助加快分析(例如,减少要探索的选项/路径的数目,或者甚至直接消除模糊性)。例如,如果跟踪不包含任何推测性的读取(例如,这可以由(多个)处理器102和/或跟踪器104a在(多个)跟踪文件104d中声明),则分组的存在指示实际上采用了已经消耗了该分组的路径;知道这可以显著地减少搜索空间。另外,知道高速缓存的几何形状,可以猜测出哪些高速缓存行被逐出的可能性最高。然后,可以使用这种逐出可能性来优先排序依赖于不太可能首先被逐出的数据的搜索路径。最后,如果跟踪中存在提供跨线程部分排序的排序信息(例如MIN),则该信息也可以被用来减少搜索空间。例如,如果跟踪使用全局MIN,则有理由认为,在MIN值3之前的P0高速缓存未命中不能取决于在MIN 7之后记载的来自P1的高速缓存值。
因此,本文的实施例通过利用处理器的CCP解耦基于CCP的跟踪内的跟踪数据相依性来增强被记录的跟踪的重放性能,以使这些跟踪可以以与线程无关的方式被重放。这将被高效记录的跟踪(例如,在记录开销和跟踪文件大小的方面)转换成被高效重放的跟踪(例如,在能够并行化线程的重放同时增加跟踪文件为代价的方面)。
在不脱离本发明的精神或基本特性的前提下,本发明可以以其他具体形式来实施。所描述的实施例在所有方面仅应被视为说明性的而非限制性的。因此,本发明的范围由所附权利要求书而不是前文的描述来指示。落入权利要求的等同含义和范围内的所有改变均应被包含在其范围之内。
Claims (20)
1.一种计算机系统,包括:
一个或多个处理器;以及
一种或多种计算机可读介质,所述一种或多种计算机可读介质具有存储在其上的计算机可执行指令,所述计算机可执行指令由所述一个或多个处理器可执行,以使所述计算机系统使用高速缓存一致性协议(CCP)数据来解耦跟踪数据流,所述计算机可执行指令包括指令,所述指令可执行以使所述计算机系统至少执行以下:
在应用的先前执行的跟踪内标识一个或多个跟踪数据流,所述一个或多个跟踪数据流在所述应用的所述先前执行期间记载多个线程的执行,所述一个或多个跟踪数据流包括高速缓存活动跟踪数据和CCP跟踪数据,所述高速缓存活动跟踪数据包括一个或多个线程间数据相依性,所述一个或多个线程间数据相依性包括至少一个相依高速缓存活动跟踪条目,所述至少一个相依高速缓存活动跟踪条目依赖于CCP跟踪数据来记录由第一线程进行的对特定存储器地址的存储器访问,所述CCP跟踪数据标识所述第一线程与第二线程之间的数据相依性,所述数据相依性指示所述第一线程和所述第二线程都访问了所述特定存储器地址;以及
移除所述一个或多个线程间数据相依性,以针对所述多个线程中的每个线程创建使得每个线程能够独立于所述多个线程中的其他线程而被重放的独立高速缓存活动跟踪数据,包括针对所述至少一个相依高速缓存活动跟踪条目至少执行以下:
基于所述CCP跟踪数据,标识由所述第一线程进行的对所述特定存储器地址的所述存储器访问的值,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性,所述标识基于从针对所述第二线程被记录的高速缓存活动跟踪数据来标识所述存储器访问的所述值;以及
将所述存储器访问的所述值记录到与所述第一线程对应的跟踪数据流中,所述记录使得所述存储器访问能够独立于针对所述第二线程被记录的所述高速缓存活动跟踪数据而从与所述第一线程对应的所述跟踪数据流被重放。
2.根据权利要求1所述的计算机系统,其中标识由所述第一线程进行的所述存储器访问的所述值包括:
将所述第一线程重放到所述存储器访问的点;以及
基于所述CCP跟踪数据,重放所述第二线程以标识所述值,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性。
3.根据权利要求1所述的计算机系统,其中标识由所述第一线程进行的所述存储器访问的所述值包括:
在重放所述第一线程时,跳过所述存储器访问的重放;以及
基于所述CCP跟踪数据,重放所述第二线程以标识所述值,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性。
4.根据权利要求1所述的计算机系统,其中标识由所述第一线程进行的所述存储器访问的所述值包括:
基于所述CCP跟踪数据,标识由所述第一线程进行的所述存储器访问依赖于由所述第二线程进行的存储器操作,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性;以及
基于针对所述第二线程的高速缓存活动跟踪数据,标识所述值。
5.根据权利要求1所述的计算机系统,其中移除所述一个或多个线程间数据相依性包括:
基于所述CCP跟踪数据,标识表达所述一个或多个线程间数据相依性的不等式组,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性;以及
基于求解所述不等式组,标识存储器访问事件的排序。
6.根据权利要求1所述的计算机系统,其中移除所述一个或多个线程间数据相依性包括:
基于所述CCP跟踪数据,标识表达所述一个或多个线程间数据相依性的有向图,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性;以及
基于所述有向图中的所述一个或多个线程间相依性,标识存储器访问事件的排序。
7.根据权利要求1所述的计算机系统,其中移除所述一个或多个线程间数据相依性包括:迭代地重放所述多个线程的一个或多个部分,其中每个迭代包括用直接存储存储器值的独立高速缓存活动跟踪条目来替换至少一个相依高速缓存活动跟踪条目。
8.根据权利要求1所述的计算机系统,其中将所述存储器访问的所述值记录到与所述第一线程对应的所述跟踪数据流中包括:将所述值记录到标识以下至少一项的数据分组中:
执行了所述第一线程的处理单元;或者
包含执行了所述第一线程的所述处理单元的槽。
9.根据权利要求1所述的计算机系统,其中将所述存储器访问的所述值记录到与所述第一线程对应的所述跟踪数据流中包括:将所述值记录到作为数据流的一部分的数据分组中,所述数据流是执行了所述第一线程的处理单元独有的。
10.根据权利要求1所述的计算机系统,其中所述高速缓存活动跟踪数据至少基于在所述应用的所述先前执行期间由所述多个线程引起的处理器数据高速缓存未命中的子集,并且其中所述CCP跟踪数据至少基于高速缓存一致性状态变化的子集,所述高速缓存一致性状态变化由于在所述应用的所述先前执行期间由所述多个线程引起的所述处理器数据高速缓存未命中而发生。
11.根据权利要求1所述的计算机系统,其中移除所述一个或多个线程间数据相依性包括至少部分地基于以下来解决模糊性:
使用第一起始条件来重放第一执行路径;以及
使用第二起始条件来重放第二执行路径,
所述第一起始条件和所述第二起始条件是选自所述模糊性的多个选项的不同选项。
12.根据权利要求11所述的计算机系统,所述第一执行路径与所述第二执行路径汇聚。
13.一种用于使用高速缓存一致性协议(CCP)数据来解耦跟踪数据流的方法,所述方法在包括一个或多个处理器的计算机系统处实现,所述方法包括:
在应用的先前执行的跟踪内标识一个或多个跟踪数据流,所述一个或多个跟踪数据流在所述应用的所述先前执行期间记载多个线程的执行,所述一个或多个跟踪数据流包括高速缓存活动跟踪数据和CCP跟踪数据,所述高速缓存活动跟踪数据包括一个或多个线程间数据相依性,所述一个或多个线程间数据相依性包括至少一个相依高速缓存活动跟踪条目,所述至少一个相依高速缓存活动跟踪条目依赖于CCP跟踪数据来记录由第一线程进行的对特定存储器地址的存储器访问,所述CCP跟踪数据标识所述第一线程与第二线程之间的数据相依性,所述数据相依性指示所述第一线程和所述第二线程都访问了所述特定存储器地址;以及
移除所述一个或多个线程间数据相依性,以针对所述多个线程中的每个线程创建使得每个线程能够独立于所述多个线程中的其他线程而被重放的独立高速缓存活动跟踪数据,包括针对所述至少一个相依高速缓存活动跟踪条目至少执行以下:
基于所述CCP跟踪数据,标识由所述第一线程进行的对所述特定存储器地址的所述存储器访问的值,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性,所述标识基于从针对所述第二线程被记录的高速缓存活动跟踪数据来标识所述存储器访问的所述值;以及
将所述存储器访问的所述值记录到与所述第一线程对应的跟踪数据流中,所述记录使得所述存储器访问能够独立于针对所述第二线程被记录的所述高速缓存活动跟踪数据而从与所述第一线程对应的所述跟踪数据流被重放。
14.根据权利要求13所述的方法,其中标识由所述第一线程进行的所述存储器访问的所述值包括:
将所述第一线程重放到所述存储器访问的点;以及
基于所述CCP跟踪数据,重放所述第二线程以标识所述值,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性。
15.根据权利要求13所述的方法,其中标识由所述第一线程进行的所述存储器访问的所述值包括:
在重放所述第一线程时,跳过所述存储器访问的重放;以及
基于所述CCP跟踪数据,重放所述第二线程以标识所述值,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性。
16.根据权利要求13所述的方法,其中标识由所述第一线程进行的所述存储器访问的所述值包括:
基于所述CCP跟踪数据,标识由所述第一线程进行的所述存储器访问依赖于由所述第二线程进行的存储器操作,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性;以及
基于针对所述第二线程的高速缓存活动跟踪数据,标识所述值。
17.根据权利要求13所述的方法,其中移除所述一个或多个线程间数据相依性包括:
基于所述CCP跟踪数据,标识表达所述一个或多个线程间数据相依性的不等式组,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性;以及
基于求解所述不等式组,标识存储器访问事件的排序。
18.根据权利要求13所述的方法,其中移除所述一个或多个线程间数据相依性包括:
基于所述CCP跟踪数据,标识表达所述一个或多个线程间数据相依性的有向图,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性;以及
基于所述有向图中的所述一个或多个线程间相依性,标识存储器访问事件的排序。
19.根据权利要求13所述的方法,其中移除所述一个或多个线程间数据相依性包括:迭代地重放所述多个线程的一个或多个部分,其中每个迭代包括用直接存储存储器值的独立高速缓存活动跟踪条目来替换至少一个相依高速缓存活动跟踪条目。
20.一种计算机可读存储介质,其上存储有计算机可执行指令,所述计算机可执行指令由一个或多个处理器可执行,以使计算机系统使用高速缓存一致性协议(CCP)数据来解耦跟踪数据流,所述计算机可执行指令包括指令,所述指令可执行以使所述计算机系统至少执行以下:
在应用的先前执行的跟踪内标识一个或多个跟踪数据流,所述一个或多个跟踪数据流在所述应用的所述先前执行期间记载多个线程的执行,所述一个或多个跟踪数据流包括高速缓存活动跟踪数据和CCP跟踪数据,所述高速缓存活动跟踪数据包括一个或多个线程间数据相依性,所述一个或多个线程间数据相依性包括至少一个相依高速缓存活动跟踪条目,所述至少一个相依高速缓存活动跟踪条目依赖于CCP跟踪数据来记录由第一线程对特定存储器地址进行的存储器访问,所述CCP跟踪数据标识所述第一线程与第二线程之间的数据相依性,所述数据相依性指示所述第一线程和所述第二线程都访问了所述特定存储器地址;以及
移除所述一个或多个线程间数据相依性,以针对所述多个线程中的每个线程创建使得每个线程能够独立于所述多个线程中的其他线程而被重放的独立高速缓存活动跟踪数据,包括针对所述至少一个相依高速缓存活动跟踪条目至少执行以下:
基于所述CCP跟踪数据,标识由所述第一线程进行的对所述特定存储器地址的所述存储器访问的值,所述CCP跟踪数据标识所述第一线程与所述第二线程之间的所述数据相依性,所述标识基于从针对所述第二线程被记录的高速缓存活动跟踪数据来标识所述存储器访问的所述值;以及
将所述存储器访问的所述值记录到与所述第一线程对应的跟踪数据流中,所述记录使得所述存储器访问能够独立于针对所述第二线程被记录的所述高速缓存活动跟踪数据而从与所述第一线程对应的所述跟踪数据流被重放。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/872,453 US10558572B2 (en) | 2018-01-16 | 2018-01-16 | Decoupling trace data streams using cache coherence protocol data |
US15/872,453 | 2018-01-16 | ||
PCT/US2019/012801 WO2019143500A1 (en) | 2018-01-16 | 2019-01-09 | Decoupling trace data streams using cache coherence protocol data |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111615687A CN111615687A (zh) | 2020-09-01 |
CN111615687B true CN111615687B (zh) | 2023-10-24 |
Family
ID=65234715
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980008659.2A Active CN111615687B (zh) | 2018-01-16 | 2019-01-09 | 使用高速缓存一致性协议数据来解耦跟踪数据流 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10558572B2 (zh) |
EP (1) | EP3740872B1 (zh) |
CN (1) | CN111615687B (zh) |
WO (1) | WO2019143500A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10031834B2 (en) | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
US10671512B2 (en) * | 2018-10-23 | 2020-06-02 | Microsoft Technology Licensing, Llc | Processor memory reordering hints in a bit-accurate trace |
US11573883B1 (en) * | 2018-12-13 | 2023-02-07 | Cadence Design Systems, Inc. | Systems and methods for enhanced compression of trace data in an emulation system |
US11409634B2 (en) * | 2019-11-14 | 2022-08-09 | Cisco Technology, Inc. | Retroactive tracing in a distributed system |
FR3103590B1 (fr) * | 2019-11-27 | 2023-03-24 | Commissariat Energie Atomique | Procédé de construction d’une signature caractéristique des accès, par un microprocesseur, à une mémoire |
US11360906B2 (en) | 2020-08-14 | 2022-06-14 | Alibaba Group Holding Limited | Inter-device processing system with cache coherency |
US20220200626A1 (en) * | 2020-12-21 | 2022-06-23 | Intel Corporation | Flexible compression header and code generation |
CN117170889B (zh) * | 2023-11-01 | 2024-01-23 | 沐曦集成电路(上海)有限公司 | 异构非阻塞数据包同步处理系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622276A (zh) * | 2004-12-29 | 2012-08-01 | 英特尔公司 | 多处理器环境中基于事务的共享数据操作 |
CN104040500A (zh) * | 2011-11-15 | 2014-09-10 | 英特尔公司 | 基于线程相似性的调度线程执行 |
Family Cites Families (86)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4598364A (en) | 1983-06-29 | 1986-07-01 | International Business Machines Corporation | Efficient trace method adaptable to multiprocessors |
WO1993017385A1 (en) | 1992-02-27 | 1993-09-02 | Intel Corporation | Dynamic flow instruction cache memory |
US5905855A (en) | 1997-02-28 | 1999-05-18 | Transmeta Corporation | Method and apparatus for correcting errors in computer systems |
US6167536A (en) | 1997-04-08 | 2000-12-26 | Advanced Micro Devices, Inc. | Trace cache for a microprocessor-based device |
US6094729A (en) | 1997-04-08 | 2000-07-25 | Advanced Micro Devices, Inc. | Debug interface including a compact trace record storage |
US6009270A (en) | 1997-04-08 | 1999-12-28 | Advanced Micro Devices, Inc. | Trace synchronization in a processor |
US5944841A (en) | 1997-04-15 | 1999-08-31 | Advanced Micro Devices, Inc. | Microprocessor with built-in instruction tracing capability |
US6101524A (en) | 1997-10-23 | 2000-08-08 | International Business Machines Corporation | Deterministic replay of multithreaded applications |
US6553564B1 (en) | 1997-12-12 | 2003-04-22 | International Business Machines Corporation | Process and system for merging trace data for primarily interpreted methods |
US6351844B1 (en) | 1998-11-05 | 2002-02-26 | Hewlett-Packard Company | Method for selecting active code traces for translation in a caching dynamic translator |
US6823473B2 (en) | 2000-04-19 | 2004-11-23 | Hewlett-Packard Development Company, L.P. | Simultaneous and redundantly threaded processor uncached load address comparator and data value replication circuit |
US6854108B1 (en) | 2000-05-11 | 2005-02-08 | International Business Machines Corporation | Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors |
US7448025B2 (en) | 2000-12-29 | 2008-11-04 | Intel Corporation | Qualification of event detection by thread ID and thread privilege level |
US6634011B1 (en) | 2001-02-15 | 2003-10-14 | Silicon Graphics, Inc. | Method and apparatus for recording program execution in a microprocessor based integrated circuit |
US20020144101A1 (en) | 2001-03-30 | 2002-10-03 | Hong Wang | Caching DAG traces |
US7178133B1 (en) | 2001-04-30 | 2007-02-13 | Mips Technologies, Inc. | Trace control based on a characteristic of a processor's operating state |
US7185234B1 (en) | 2001-04-30 | 2007-02-27 | Mips Technologies, Inc. | Trace control from hardware and software |
US7181728B1 (en) | 2001-04-30 | 2007-02-20 | Mips Technologies, Inc. | User controlled trace records |
US20030079205A1 (en) | 2001-10-22 | 2003-04-24 | Takeshi Miyao | System and method for managing operating systems |
US7051239B2 (en) | 2001-12-28 | 2006-05-23 | Hewlett-Packard Development Company, L.P. | Method and apparatus for efficiently implementing trace and/or logic analysis mechanisms on a processor chip |
US7089400B1 (en) | 2002-08-29 | 2006-08-08 | Advanced Micro Devices, Inc. | Data speculation based on stack-relative addressing patterns |
US20040117690A1 (en) | 2002-12-13 | 2004-06-17 | Andersson Anders J. | Method and apparatus for using a hardware disk controller for storing processor execution trace information on a storage device |
US20040153635A1 (en) | 2002-12-30 | 2004-08-05 | Kaushik Shivnandan D. | Privileged-based qualification of branch trace store data |
US7526757B2 (en) | 2004-01-14 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program |
US20050223364A1 (en) | 2004-03-30 | 2005-10-06 | Peri Ramesh V | Method and apparatus to compact trace in a trace buffer |
US8010337B2 (en) | 2004-09-22 | 2011-08-30 | Microsoft Corporation | Predicting database system performance |
US7447946B2 (en) | 2004-11-05 | 2008-11-04 | Arm Limited | Storage of trace data within a data processing apparatus |
JP4114879B2 (ja) | 2005-01-21 | 2008-07-09 | インターナショナル・ビジネス・マシーンズ・コーポレーション | トレース情報収集システム、トレース情報収集方法、及びトレース情報収集プログラム |
US7640539B2 (en) | 2005-04-12 | 2009-12-29 | International Business Machines Corporation | Instruction profiling using multiple metrics |
US8301868B2 (en) | 2005-09-23 | 2012-10-30 | Intel Corporation | System to profile and optimize user software in a managed run-time environment |
US7877630B1 (en) | 2005-09-28 | 2011-01-25 | Oracle America, Inc. | Trace based rollback of a speculatively updated cache |
US7984281B2 (en) | 2005-10-18 | 2011-07-19 | Qualcomm Incorporated | Shared interrupt controller for a multi-threaded processor |
US9268666B2 (en) | 2005-10-21 | 2016-02-23 | Undo Ltd. | System and method for debugging of computer programs |
US7620938B2 (en) | 2005-10-31 | 2009-11-17 | Microsoft Corporation | Compressed program recording |
US20070106827A1 (en) | 2005-11-08 | 2007-05-10 | Boatright Bryan D | Centralized interrupt controller |
US7461209B2 (en) | 2005-12-06 | 2008-12-02 | International Business Machines Corporation | Transient cache storage with discard function for disposable data |
US20070150881A1 (en) | 2005-12-22 | 2007-06-28 | Motorola, Inc. | Method and system for run-time cache logging |
US20070220361A1 (en) | 2006-02-03 | 2007-09-20 | International Business Machines Corporation | Method and apparatus for guaranteeing memory bandwidth for trace data |
US7958497B1 (en) | 2006-06-07 | 2011-06-07 | Replay Solutions, Inc. | State synchronization in recording and replaying computer programs |
US7676632B2 (en) | 2006-07-18 | 2010-03-09 | Via Technologies, Inc. | Partial cache way locking |
US7472218B2 (en) | 2006-09-08 | 2008-12-30 | International Business Machines Corporation | Assisted trace facility to improve CPU cache performance |
US20080114964A1 (en) | 2006-11-14 | 2008-05-15 | Davis Gordon T | Apparatus and Method for Cache Maintenance |
US20080250207A1 (en) | 2006-11-14 | 2008-10-09 | Davis Gordon T | Design structure for cache maintenance |
US8370806B2 (en) | 2006-11-15 | 2013-02-05 | Qualcomm Incorporated | Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor |
US8261130B2 (en) | 2007-03-02 | 2012-09-04 | Infineon Technologies Ag | Program code trace signature |
US8484516B2 (en) | 2007-04-11 | 2013-07-09 | Qualcomm Incorporated | Inter-thread trace alignment method and system for a multi-threaded processor |
KR100883517B1 (ko) * | 2007-06-13 | 2009-02-11 | 성균관대학교산학협력단 | 예측 기반 동적 쓰레드 풀 조정방법 및 이를 사용하는에이전트 플랫폼 |
US20090037886A1 (en) | 2007-07-30 | 2009-02-05 | Mips Technologies, Inc. | Apparatus and method for evaluating a free-running trace stream |
CN101446909B (zh) | 2007-11-30 | 2011-12-28 | 国际商业机器公司 | 用于管理任务事件的方法和系统 |
US8078807B2 (en) | 2007-12-27 | 2011-12-13 | Intel Corporation | Accelerating software lookups by using buffered or ephemeral stores |
US8413122B2 (en) | 2009-02-12 | 2013-04-02 | International Business Machines Corporation | System and method for demonstrating the correctness of an execution trace in concurrent processing environments |
US8402318B2 (en) | 2009-03-24 | 2013-03-19 | The Trustees Of Columbia University In The City Of New York | Systems and methods for recording and replaying application execution |
US8589629B2 (en) | 2009-03-27 | 2013-11-19 | Advanced Micro Devices, Inc. | Method for way allocation and way locking in a cache |
US8140903B2 (en) | 2009-04-16 | 2012-03-20 | International Business Machines Corporation | Hardware process trace facility |
US8423965B2 (en) | 2009-06-23 | 2013-04-16 | Microsoft Corporation | Tracing of data flow |
JP2011013867A (ja) | 2009-06-30 | 2011-01-20 | Panasonic Corp | データ処理装置、性能評価解析システム |
US8719796B2 (en) | 2010-01-26 | 2014-05-06 | The Board Of Trustees Of The University Of Illinois | Parametric trace slicing |
US8468501B2 (en) | 2010-04-21 | 2013-06-18 | International Business Machines Corporation | Partial recording of a computer program execution for replay |
US9015441B2 (en) | 2010-04-30 | 2015-04-21 | Microsoft Technology Licensing, Llc | Memory usage scanning |
US8499200B2 (en) | 2010-05-24 | 2013-07-30 | Ncr Corporation | Managing code-tracing data |
US20120042212A1 (en) | 2010-08-10 | 2012-02-16 | Gilbert Laurenti | Mixed Mode Processor Tracing |
US9645913B2 (en) | 2011-08-03 | 2017-05-09 | Daniel Geist | Method and apparatus for debugging programs |
US20130055033A1 (en) | 2011-08-22 | 2013-02-28 | International Business Machines Corporation | Hardware-assisted program trace collection with selectable call-signature capture |
US8584110B2 (en) | 2011-09-30 | 2013-11-12 | International Business Machines Corporation | Execution trace truncation |
US8719828B2 (en) * | 2011-10-14 | 2014-05-06 | Intel Corporation | Method, apparatus, and system for adaptive thread scheduling in transactional memory systems |
US8612650B1 (en) | 2012-03-13 | 2013-12-17 | Western Digital Technologies, Inc. | Virtual extension of buffer to reduce buffer overflow during tracing |
US9058415B1 (en) | 2013-03-15 | 2015-06-16 | Google Inc. | Counting events using hardware performance counters and annotated instructions |
US9304863B2 (en) | 2013-03-15 | 2016-04-05 | International Business Machines Corporation | Transactions for checkpointing and reverse execution |
US9189360B2 (en) | 2013-06-15 | 2015-11-17 | Intel Corporation | Processor that records tracing data in non contiguous system memory slices |
US9086974B2 (en) | 2013-09-26 | 2015-07-21 | International Business Machines Corporation | Centralized management of high-contention cache lines in multi-processor computing environments |
US9880935B2 (en) * | 2014-03-24 | 2018-01-30 | Intel Corporation | Efficient data transfer between a processor core and an accelerator |
US9785568B2 (en) | 2014-05-19 | 2017-10-10 | Empire Technology Development Llc | Cache lookup bypass in multi-level cache systems |
US9535815B2 (en) | 2014-06-04 | 2017-01-03 | Nvidia Corporation | System, method, and computer program product for collecting execution statistics for graphics processing unit workloads |
US9300320B2 (en) | 2014-06-27 | 2016-03-29 | Qualcomm Incorporated | System and method for dictionary-based cache-line level code compression for on-chip memories using gradual bit removal |
US9875173B2 (en) | 2014-06-30 | 2018-01-23 | Microsoft Technology Licensing, Llc | Time travel debugging in managed runtime |
US9361228B2 (en) | 2014-08-05 | 2016-06-07 | Qualcomm Incorporated | Cache line compaction of compressed data segments |
US9588870B2 (en) | 2015-04-06 | 2017-03-07 | Microsoft Technology Licensing, Llc | Time travel debugging for browser components |
US10509713B2 (en) | 2015-08-18 | 2019-12-17 | Telefonaktiebolaget Lm Ericsson (Publ) | Observation by a debug host with memory model and timing offset calculation between instruction and data traces of software execution carried on in a debug target having a main memory and a cache arrangement |
US9767237B2 (en) | 2015-11-13 | 2017-09-19 | Mentor Graphics Corporation | Target capture and replay in emulation |
US9569338B1 (en) | 2015-12-02 | 2017-02-14 | International Business Machines Corporation | Fingerprint-initiated trace extraction |
US10042761B2 (en) * | 2016-05-03 | 2018-08-07 | International Business Machines Corporation | Read and write sets for transactions of a multithreaded computing environment |
US10031833B2 (en) | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
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 |
EP3526673A4 (en) | 2016-10-11 | 2020-06-17 | Green Hills Software, LLC | SYSTEMS, METHODS AND DEVICES FOR VERTICALLY INTEGRATED INSTRUMENTATION AND TRACE RECONSTITUTION |
US10459824B2 (en) * | 2017-09-18 | 2019-10-29 | Microsoft Technology Licensing, Llc | Cache-based trace recording using cache coherence protocol data |
-
2018
- 2018-01-16 US US15/872,453 patent/US10558572B2/en active Active
-
2019
- 2019-01-09 EP EP19701943.3A patent/EP3740872B1/en active Active
- 2019-01-09 CN CN201980008659.2A patent/CN111615687B/zh active Active
- 2019-01-09 WO PCT/US2019/012801 patent/WO2019143500A1/en unknown
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622276A (zh) * | 2004-12-29 | 2012-08-01 | 英特尔公司 | 多处理器环境中基于事务的共享数据操作 |
CN104040500A (zh) * | 2011-11-15 | 2014-09-10 | 英特尔公司 | 基于线程相似性的调度线程执行 |
Also Published As
Publication number | Publication date |
---|---|
US20190220403A1 (en) | 2019-07-18 |
EP3740872A1 (en) | 2020-11-25 |
CN111615687A (zh) | 2020-09-01 |
US10558572B2 (en) | 2020-02-11 |
WO2019143500A1 (en) | 2019-07-25 |
EP3740872B1 (en) | 2023-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111615687B (zh) | 使用高速缓存一致性协议数据来解耦跟踪数据流 | |
JP7152474B2 (ja) | キャッシュコヒーレンスプロトコルデータを用いたキャッシュベーストレース記録 | |
JP7334163B2 (ja) | 上位レベルキャッシュへの要求によるキャッシュへのインフラックスのログ記録 | |
JP7221979B2 (ja) | 上位層キャッシュ内のエントリに基づいて下位層キャッシュへの流入をログすることによるトレース記録 | |
EP3752922B1 (en) | Trace recording by logging influxes to an upper-layer shared cache, plus cache coherence protocol transitions among lower-layer caches | |
US10860485B2 (en) | Leveraging existing logic paths during bit-accurate processor tracing | |
RU2773437C2 (ru) | Запись трассировки посредством регистрации входящих потоков в кэш нижнего уровня на основе элементов в кэше верхнего уровня | |
RU2775818C2 (ru) | Запись трассировки на основе кэша с использованием данных протокола когерентности кэша | |
KR102661543B1 (ko) | 요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅 | |
US20240095187A1 (en) | Logging cache line lifetime hints when recording bit-accurate trace | |
NZ761306B2 (en) | Cache-based trace recording using cache coherence protocol data |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |