通过日志记录对上层共享缓存的流入量以及下层缓存之间的缓存一致性协议转换来进行跟踪记录的制作方法

文档序号:22400357发布日期:2020-09-29 18:12阅读:105来源:国知局

背景技术
::当在软件应用的开发期间编写代码时,开发人员通常花费大量时间来“调试”代码以查找运行时和其他源代码错误。这样做时,开发人员可以采用几种方法来重现和定位源代码缺陷(bug),例如,基于不同的输入来观察程序的行为、插入调试代码(例如,打印变量值、跟踪执行分支等)、临时移除代码部分等。追踪运行时错误以查明代码缺陷可能会占用应用开发时间的很大一部分。为了协助开发人员进行代码调试过程,许多类型的调试应用(“调试器”)已经被开发。这些工具向开发人员提供了跟踪(trace)计算机代码的执行、将其可视化和对其进行改变的能力。例如,调试器可以将代码指令的执行可视化、可以在代码执行期间的不同时间呈现代码变量值、可以使得开发人员能够改变代码执行路径、和/或可以使得开发人员能够在感兴趣的代码元素上设置“断点”和/或“观察点”(“断点”和/或“观察点”在执行期间被到达时,使得代码的执行被暂停)等。新兴的调试应用的形式实现了“时间旅行(timetravel)”、“反向”或“历史”调试。通过“时间旅行”调试,程序(例如,诸如线程的可执行实体)的执行由跟踪应用记录(record)/跟踪到一个或多个跟踪文件中。这些跟踪文件然后可以用于稍后重播程序的执行,以进行前向和后向分析。例如,“时间旅行”调试器可以使得开发人员能够设置前向断点/观察点(如常规调试器)以及反向断点/观察点。几个注意事项在记录跟踪文件时可以被考虑。最突出的是,在所记录的跟踪数据的稳健性与通过跟踪程序所产生的开销之间存在固有的权衡。这些权衡主要体现在跟踪文件的大小以及对所跟踪的程序的执行的性能影响。而且,由于跟踪可能在硬件协助下完成(或完全在软件中完成),因此可能还存在硬件设计和其他硬件成本方面的考虑。技术实现要素:本文描述的实施例涉及用于使用硬件辅助由处理器来创建比特精确的“时间旅行”跟踪记录的机制。这些机制基于在至少两个处理器缓存层级(tier)或层(layer)上跨多个处理单元跟踪执行效果。特别地,这些机制可以修改处理器的硬件和/或微代码,使得它帮助记录(i)对外部或“上层”共享处理器缓存的流入量(influx)(即,缓存未命中),以及(ii)由外部/上层共享处理器缓存支持的多个内部或“下层”处理器缓存之间的缓存一致性协议(ccp)转换(transition)。这些技术可以被扩展到“n”级(level,又译作级别)缓存。以这种方式记录跟踪文件可以只需要进行适度的处理器修改,并且与现有的跟踪记录方法相比,它可以将跟踪记录的性能影响以及跟踪文件大小都减少几个数量级。实施例涉及(多个)计算设备,计算设备包括多个处理单元、多个(n-1)级缓存以及与多个(n-1)级缓存中的两个或更多个(n-1)级缓存相关联的n级缓存。n级缓存被配置为两个或更多个(n-1)级缓存的后备存储库。(多个)计算设备包括控制逻辑,控制逻辑至少基于在跨多个处理单元的执行期间检测到对n级缓存中特定位置的一个或多个数据流入量,来将(多个)计算设备配置为使对n级缓存中特定位置的一个或多个数据流入量被日志记录(log)。控制逻辑还将(多个)计算设备配置为使得两个或更多个(n-1)级缓存之间的一个或多个(n-1)级ccp转换被日志记录。(n-1)级ccp转换由多个处理单元中的两个或更多个处理单元访问的特定位置引起。实施例还涉及用于基于对外部级缓存的数据流入量和内部缓存之间的ccp转换进行跟踪记录的方法。这些方法在计算设备处实现,计算设备包括(i)多个处理单元,(ii)多个(n-1)级缓存和(iii)n级缓存,该n级缓存与多个(n-1)级缓存中的两个或更多个(n-1)级缓存相关联并且被配置为两个或更多个(n-1)级缓存的后备存储库。方法包括:至少基于在跨多个处理单元的执行期间检测到对n级缓存中的特定位置的一个或多个数据流入量而使对n级缓存中特定位置的一个或多个数据流入量被日志记录。方法还包括:使两个或更多个(n-1)级缓存之间的一个或多个(n-1)级缓存一致性协议(ccp)转换被日志记录,(n-1)级ccp转换由特定位置被多个处理单元中的两个或更多个处理单元访问而引起。提供本
发明内容是为了以简化的形式介绍一些概念,这些概念将在下面的具体实施方式中进一步描述。本
发明内容既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。附图说明为了描述本发明的上述以及其他优点和特征可以被获得的方式,对以上简要描述的本发明的更具体的描述将通过参考在附图中图示的本发明的特定实施例来进行。理解到这些附图仅描绘了本发明的典型实施例,因此不应认为是对本发明范围的限制,本发明将通过使用附图以附加的特征和细节来描述和解释,在附图中:图1图示了示例计算环境,示例计算环境通过在多个处理单元执行那些线程时,在两个或更多个处理器缓存层上记录效果,从而记录应用的多个线程的“比特精确”跟踪,这包括记录对上层共享处理器缓存的流入量以及多个下层处理器缓存之间的缓存一致性协议(ccp)转换;图2a图示了包括多层缓存的示例计算环境;图2b图示了缓存的示例;图3图示了当缓存行由多个处理单元进行读取和写入时,在加载状态和存储状态之间转换的示例;图4图示了用于基于对外部级缓存的数据流入量和内部缓存之间的ccp转换来进行跟踪记录的示例方法的流程图;图5a图示了包括n级缓存层和多个(n-1)级缓存层的示例计算环境;图5b图示了包括n级缓存层、多个(n-1)级缓存层和多个(n-2)级缓存层的示例计算环境;图6a图示了利用一个或多个附加记账比特来扩展其每个缓存行的示例共享缓存;图6b图示了共享缓存的示例,该共享缓存包括存储了存储器地址和值的常规缓存行以及用于存储应用于常规缓存行的记账比特的一个或多个保留缓存行;图7a图示了其中仅下级缓存的子集被日志记录的跟踪记录的示例;以及图7b图示了其中仅下级缓存的子集被日志记录的跟踪记录的示例,在具有至少两个外部n级缓存的环境中,每个外部n级缓存与多个内部(n-1)级缓存相关联。具体实施方式本文描述的实施例涉及用于使用硬件辅助由处理器来创建比特精确的“时间旅行”跟踪记录的机制。这些机制基于跟踪至少两个处理器缓存层级或层上跨多个处理单元的执行效果。特别地,这些机制可以修改处理器的硬件和/或微代码,使得它帮助记录(i)对外部或“上层”共享处理器缓存的流入量(即,缓存未命中),以及(ii)由外部/上层共享处理器缓存支持的多个内部或“下层”处理器缓存之间的缓存一致性协议(ccp)转换。这些技术可以被扩展到“n”级缓存。以这种方式记录跟踪文件可以只需要进行适度的处理器修改,并且与现有的跟踪记录方法相比,它可以将跟踪记录的性能影响以及跟踪文件大小都减少几个数量级。图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跟踪的主题的应用以及一个或多个跟踪文件104d)。当这些程序正在执行时(例如,使用(多个)处理器102)时,系统存储器103可以存储对应的运行时数据,诸如,运行时数据结构、计算机可执行指令等。因此,图1将系统存储器103图示为包括运行时应用代码103a和应用运行时数据103b(例如,各自与应用104c相对应)。跟踪器104a可用于记录执行应用(诸如,应用104c)的比特精确跟踪,并将跟踪数据存储在(多个)跟踪文件104d中。在一些实施例中,跟踪器104a是独立的应用,而在其他实施例中,跟踪器104a被集成到另一软件组件(诸如,操作系统内核104b、管理程序、云结构等)中。尽管(多个)跟踪文件104d被描绘为被存储在数据存储库104中,但是(多个)跟踪文件104d也可以被专有地或临时地记录在系统存储器103中或某个其他存储设备处。如稍后所阐明的,跟踪器104a可以与使得能够利用处理器的ccp进行跟踪的(多个)处理器102的特定特征互操作。图1包括(多个)处理器102的内部硬件组件的简化表示。如图所示,每个处理器102包括多个处理单元102a。每个处理单元可以是物理的(即,物理处理器核心)和/或逻辑的(即,由支持超线程的物理核心提供的逻辑核心,其中多于一个应用线程在物理核心处执行)。因此,例如,即使处理器102在一些实施例中仅包括单个物理处理单元(核心),它也可以包括由该单个物理处理单元呈现的两个或更多个逻辑处理单元102a。每个处理单元102a执行由应用(例如,跟踪器104a、操作内核104b、应用104c等)限定的处理器指令,并且该指令从预定义的处理器指令集架构(isa)中被选择。每个处理器102的特定isa基于处理器制造方和处理器模型而变化。常见的isa包括来自intel公司的ia-64和ia-32架构、来自advancedmicrodevices公司的amd64架构以及来自armholdings,plc的各种advancedriscmachine(“arm”)架构,但是大量的其他isa存在并且可以由本发明使用。通常,“指令”是由处理器可执行的最小的外部可见(即,在处理器外部)的代码单元。每个处理单元102a从一个或多个处理器缓存102b获得处理器指令,并且基于(多个)缓存102b中的数据、基于寄存器102d中的数据和/或在没有输入数据的情况下来执行处理器指令。一般而言,每个缓存102b是少量(即,相对于系统存储器103的典型数量而言为少)的随机存取存储器,该随机存取存储器存储后备存储库(诸如,系统存储器103和/或(多个)缓存102b中的另一缓存)的各部分在处理器上的副本。例如,当执行应用代码103a时,一个或多个缓存102b包含应用运行时数据103b的某些部分。如果(多个)处理单元102a需要尚未被存储在特定缓存102b中的数据,则发生“缓存未命中”,并且该数据从系统存储器103或另一缓存被获取,可能从该缓存102b“逐出”一些其他数据。通常,(多个)处理器缓存102b被划分为分离的层级、层或级别,诸如,层1(l1)、层2(l2)、层3(l3)等。取决于处理器实现,层级可以是处理器102本身的一部分(例如,l1和l2)和/或可以与处理器102(例如,l3)分离。因此,图1的(多个)缓存102b可以包括这些层之一(l1),或者可以包括这些层中的多个(例如,l1和l2,甚至l3)。图2a图示了展示多层缓存的示例环境200。在图2a中,存在两个处理器201a和201b(例如,每个对应于图1的不同处理器102)以及系统存储器202(例如,对应于图1的系统存储器103)。在示例环境200中,每个处理器201包括四个物理处理单元(即,用于处理器201a的单元a1-a4和用于处理器210b的单元b1-b4)。示例环境200还在每个处理单元201内包括三层缓存。环境200仅是一个示例布局,并且不限于本文中的实施例可以在其中操作的缓存层级结构。在环境200中,在最下或最内层,每个处理单元与它自己的专用l1缓存相关联(例如,处理器201a中的l1缓存“l1-a1”用于单元a1,处理器201a中的l1缓存“l1-a2”用于单元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的后备存储库。如图2a所示,当多个缓存层被使用时,(多个)处理单元102a与最下层(l1)直接交互。在大多数情况下,数据在各层之间流动(例如,在读取时,l3缓存与系统存储器103交互并将数据用于l2缓存,而l2缓存又将数据用于l1缓存)。当处理单元102a执行写入操作时,缓存进行协调以确保已影响了在(多个)处理单元102a之间共享的数据的那些缓存不再具有数据。该协调使用ccp执行。环境200中的缓存因此可以被视为“共享”缓存。例如,每个l2和l3缓存服务于给定处理器201内的多个处理单元,并且因此被处理单元共享。即使每个缓存对应于单个处理单元,给定处理器201中的l1缓存总体上也可以视为共享的,因为单独的l1缓存可以彼此协调(即,经由ccp)以确保一致性(即,使得每个缓存的存储器位置跨所有l1缓存被一致地查看)。类似地,每个处理器201内的l2缓存可以经由ccp协调。附加地,如果处理器201支持超线程,则每个单独的l1缓存可以被视为由两个或更多个逻辑处理单元共享,因此即使在单独的级别上也可以被“共享”。通常,每个缓存包括多个“缓存行”。每个缓存行存储来自其后备存储库(例如,系统存储器202或更高层的缓存)的存储器块。例如,图2b图示了缓存203的至少一部分的示例,缓存203包括多个缓存行206,每个缓存行206包括至少地址部分204和值部分205。每个缓存行206的地址部分204被配置为在缓存行所对应的系统存储器202中存储地址,并且值部分205最初存储从系统存储器202接收到的值。值部分205可以被处理单元修改,并且最终被逐出回到后备存储库。如省略号所指示,缓存203可以包括大量的缓存行。例如,当代的intel处理器可以包含具有512个或更多缓存行的单独l1缓存。在这样的缓存中,每个缓存行通常可用于存储8字节(64比特)存储器地址的64字节(512比特)值。如图2a直观所示,缓存大小通常随每一层增加(即,l2缓存通常大于l1缓存,l3缓存通常大于l2缓存等)。每个缓存行206的地址部分204中存储的地址可以是物理地址,诸如,系统存储器202中的实际存储器地址。备选地,地址部分204中存储的地址可以是虚拟地址,虚拟地址是被映射到物理地址以提供抽象(例如,使用操作系统管理的页表(pagetable))的地址。这样的抽象可以用于例如促进在(多个)处理器102处执行的不同过程之间的存储器隔离,包括用户模式过程和与操作系统内核104b相关联的内核模式过程之间的隔离。当虚拟地址被使用时,处理器102可以包括转译旁视(translationlookaside)缓冲器(tlb)102f(通常是存储器管理单元(mmu)的一部分),转译旁视缓冲器(tlb)102f维持物理地址和虚拟地址之间最近使用的存储器地址映射。(多个)缓存102b可以包括代码缓存部分和数据缓存部分。当执行应用代码103a时,(多个)缓存102b的(多个)代码部分可以存储应用代码103a中存储的处理器指令的至少一部分,并且(多个)缓存102b的(多个)数据部分可以存储应用运行时数据103b的数据结构的至少一部分。另外,缓存可以是包含性的、独占的(exclusive)、也可以包括包含性和独占的行为。例如,在包含性缓存中,l3层将数据的超集存储在l3层下面的l2层中,而l2层将l1层的超集存储在它们之下。在独占缓存中,各层可以不相交,例如,如果l3缓存中存在l1缓存需要的数据,则它们可以交换信息,诸如,数据、地址等。返回到图1,每个处理器102还包括微代码102c,微代码102c包括控制处理器102的操作的控制逻辑(即,可执行指令),并且该控制逻辑通常用作处理器的硬件和由处理器102向执行应用公开的处理器isa之间的解释器。微代码102通常体现在诸如rom、eeprom等的处理器上存储装置中。寄存器102d是基于(多个)处理器102的isa被定义并通过处理器指令被读取和/或写入的基于硬件的存储位置。例如,寄存器102d通常用于存储从(多个)缓存102b获取的值以供指令使用、存储执行指令的结果和/或存储状况(status)或状态(诸如,执行指令的一些副作用(例如,值改变的符号、值达到零、进位的发生等))、处理器循环计数等。因此,一些寄存器102d可以包括用于发信号通知由执行处理器指令引起的某种状态改变的“标志(flag)”。在一些实施例中,处理器102还可以包括用于控制处理器操作的不同方面的控制寄存器。尽管图1将寄存器102d描绘为单个框,但是将理解,每个处理单元102a通常包括该处理单元专用的一个或多个对应寄存器集合102d。在一些实施例中,(多个)处理器102可以包括一个或多个缓冲器102e。如下文将要讨论的,(多个)缓冲器102e可以用作跟踪数据的临时存储位置。因此,例如,(多个)处理器102可以将跟踪数据的各部分存储在(多个)缓冲器102e中,并且在适当的时间(诸如,当存在可用的存储器总线带宽和/或空闲的处理器循环时),将该数据刷新到(多个)跟踪文件104d。如上所述,处理器根据一个或多个ccp在(多个)缓存102b上操作。通常,ccp限定当各种处理单元102a从各种缓存102b中读取和写入数据时,各种缓存102b之间的数据之间的一致性如何被保持,以及如何确保各种处理单元102a始终从(多个)缓存102b中的给定位置读取有效数据。ccp通常与处理器102的isa定义的存储器模型相关并启用该存储器模型。通用ccp的示例包括msi协议(即,修改的、共享的和无效的)、mesi协议(即,修改的、独占的、共享的和无效的)和moesi协议(即,修改的、拥有的、独占的、共享的和无效的)。这些协议中的每一个为(多个)缓存102b中的单独位置(例如,行)限定状态。“修改的”缓存位置包含已在(多个)缓存102b中被修改并且因此与后备存储库(例如,系统存储器103或另一缓存)中的对应数据不一致的数据。当具有“修改的”状态的位置从(多个)缓存102b被逐出时,通用ccp需要缓存来保证其数据被写回到后备存储库,或者由另一缓存接管该责任。“共享的”缓存位置包含未从后备存储库中的数据进行修改、以只读状态存在并且被(多个)处理单元102a共享的数据。(多个)缓存102b可以在无需将其写入后备存储库的情况下,逐出该数据。“无效的”缓存位置不包含有效数据并且可以被认为是空的并且可用于存储来自缓存未命中的数据。“专用”缓存位置包含与后备存储库相匹配并且仅由单个处理单元102a使用的数据。该数据可以在任何时间(即,响应于读取请求)被改变为“共享的”状态,或者可以在对其进行写入时被改变为“修改的”状态。“拥有的”缓存位置由两个或多个处理单元102a共享,但是处理单元之一具有对其进行改变的独占权。当该处理进行改变时,因为所通知的处理单元可能需要基于ccp实现来进行无效或更新,所以它通知其他处理单元。不同处理器和/或不同ccp对缓存一致性状态进行跟踪并使得该缓存一致性数据可用于跟踪器104a的粒度可以变化。例如,在一方面,一些处理器/ccp跟踪每个缓存行以及每个处理单元的缓存一致性。这些处理器/ccp因此可以跟踪与每个处理单元相关的每个缓存行的状态。因为单个缓存行与每个处理单元102a相关,这意味着单个缓存行可以具有关于其状态的信息。其他处理器/ccp的粒度较小,并且仅跟踪缓存行级别的缓存一致性(并且缺少每个处理单元的信息)。另一方面,因为一次只有一个处理器可以占用(独占的、修改的等)行,所以处理器制造方可以只出于效率考虑而选择在缓存行级别跟踪缓存一致性。作为中间粒度的示例,处理器/ccp可以跟踪每个缓存行的缓存一致性,以及具有当前缓存行状态的处理单元的索引(例如,四个处理单元处理器的索引为0、1、2、3)。如所暗示的,实施例利用处理器102的(多个)缓存102b来有效地记录执行应用104c和/或操作系统内核104b的比特精确的跟踪。这些实施例基于发明人的以下观察而被建立:处理器102(包括(多个)缓存102b)形成了半闭合或准闭合系统。例如,一旦用于过程的数据的各部分(即,代码数据和运行时应用数据)被加载到(多个)缓存102b中,处理器102就可以在没有任何输入的情况下,在时间突发内以半闭合或准闭合系统自行运行。特别地,一旦(多个)缓存102b被加载了数据,一个或多个处理单元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的活动能够被再现。该方法在单个缓存级(例如,l1)处操作,并日志记录对该缓存级的数据流入量,以及处理单元引起给定ccp操作的粒度下的ccp操作的日志。这包括日志记录先前哪个(哪些)处理单元对缓存行进行读取和/或写入访问。然而,对该第三方法的稳健支持可能导致对处理器的ccp逻辑的广泛修改,这是因为它在处理单元引起ccp操作的粒度下操作。根据本文的实施例,第四方法在两个或更多个缓存级下操作。特别地,它日志记录对“上级”共享的缓存(例如,图2a中的l2或l3级)的数据流入量。它还使用至少一个“下级”缓存的ccp(例如,如果共享的缓存为l2,则为图2a中l1缓存的ccp;或者如果共享的缓存为l3,则为图2a中l2缓存的ccp)来日志记录针对每个缓存存储器位置的ccp状态转换(即,“加载”操作的各部分与“存储”操作的各部分之间)的子集。效果是与第三方法相比,日志记录更少的ccp数据(即,由于它基于加载/存储转换而不是按每个处理单元的活动来进行记录,因此它记录的ccp状态数据比第三方法少得多)。在实现中,这样的日志可以进行后处理和扩充,以达到在第三方法中记录的详细程度,但是可以使用与第三方法相比成本更低的硬件修改来实现(例如,因为更少的ccp数据需要由处理器102追踪和记录)。如所提及的,该第四方法记录“加载”操作的各部分与“存储”操作的各部分之间的转换。为了便于描述,本文的示例将以上讨论的ccp中使用的缓存行状态(即,修改的、拥有的、独占的、共享的和无效的)(即,msi、mesi和moesi)映射到“加载”状态(即,缓存行已被读取)或“存储”状态(即,缓存行已被写入)中的一个。下面的表1示出了非限制性示例映射。将理解,可以存在除了本文讨论的之外的ccp和状态,并且鉴于本文中的公开内容,本领域的普通技术人员将认识到,类似的映射可以利用许多不同的ccp来进行。备选地,实现方式可以记录实际ccp状态(例如,修改的、拥有的、独占的和共享的)之间的转换,而不是所映射的状态之间的转换。协议状态所映射的状态修改的存储拥有的加载独占的存储共享的加载无效的未映射–缓存行被认为空并且没有转换被追踪表1图3图示了在缓存行由多个处理单元读取和写入时,表1的加载状态和存储状态之间的转换的示例300。特别地,图3图示了第一时间线301,第一时间线301基于在示出缓存行活动的第二时间线302上示出的加载和存储操作,示出了在加载各部分和存储各部分之间的转换。如时间线302的最左侧所示,处理单元p1将值a存储到缓存行,然后将值b和c存储到缓存行。例如,在存储304a的该时段期间,p1可以使得缓存行处于“独占”ccp状态。接下来,时间线302示出了处理单元p2执行加载、读取值c。对应地,时间线301将其示出为从存储时段304a到加载时段304b的转换点303a。在时段304b期间,存在p1和p2的多个加载,每个加载读取值c。时段304b可以对应于例如缓存行处于“共享的”ccp状态的时段。下一存储是由p3进行的,并且它写入了值d。这在时间线301中示出为加载时段304b到新存储时段304c之间的另一转换点303b。下一活动是由p1加载(读取值d),这被示出为存储时段304c与新加载时段304d之间的新转换点303c。该时段304d包括p1、p2和p3的加载,各自读取值d。最后,时间线302示出了p1的存储,写入值e。这被示出为加载时段304d到新的存储时段304e之间的最终转换点303d。根据本文的实施例,基于图3的活动,针对缓存行被日志记录的基于ccp的数据可以包括每个转换点303a-303d的身份。该数据可用于重播来确定处理单元(即,p1、p2和p3)被执行的顺序。然后,通过重播在每个处理单元处被执行的代码(按照由所日志记录的ccp数据标识的顺序),从缓存行读取和/或写入缓存行的值可以被重建。尽管这些值可以在重播时被重建,但是一些实施例可以通过也在一个或多个转换点处日志记录缓存行的值来记录更稳健的跟踪。其他基于ccp的数据可以被日志记录,诸如,哪个(哪些)处理单元访问了每个转换点之间的缓存。在图3中,每个加载/存储转换也对应于处理单元之间的转换。然而,实施例可以通过单独的处理单元来日志记录一个或多个加载/存储转换。例如,如果在转换点303a处,加载已经由p1而不是p2执行,则该转换点303a将是单独的处理单元(即,p1)的转换。除了日志记录与处理单元之间的转换相对应的加载/存储转换之外,或者甚至作为其备选方案,实施例还可以日志记录这样的转换。当然,其他日志数据可以被记录,以帮助重建处理单元被执行的顺序。例如,实施例可以偶尔地(例如,每n个指令,其中n可以是数百万条指令或更多的数量级)日志记录每个处理器102的寄存器值(或类似值)的哈希,从而帮助重播引擎在多个潜在执行路径中进行挑选。图4图示了用于基于对外部级缓存的数据流入量和内部缓存之间的ccp转换来进行跟踪记录的方法400的示例。现在,图4在图1-图3的上下文中被描述,并且鉴于图5a和图5b的附加示例计算环境500a和500b被描述。通常,方法400在包括多个处理单元和两个或更多个缓存层的环境中操作,其中外部或更高级缓存层(即,n级)充当内部或较低级缓存层(即,(n-1)级)的后备存储库。内部或较低级缓存层又可以充当另一内部或更低级缓存层(即,(n-2)级)的后备存储库。这些层可以向内延续任意数量的层。尽管不是必需的,但在许多环境中,最内层或最低层缓存层中的每个单独缓存均对应于单个物理处理单元。图5a和图5b图示了这些概念。图5a图示了包括两个缓存层(即,n级和(n-1)级)的计算环境503的示例500a。例如,图5a描绘了至少一个n级缓存501a。在图5a中,该n级缓存501a被描绘为l2缓存层。在该n级缓存501a下方,图5a示出了两个(n-1)级缓存502a和502b,但是如省略号505a所示,可以存在多于两个的(n-1)级缓存502。在图5a中,(n-1)级缓存502被描绘为l1缓存层。尽管处理单元在图5a中未被明确示出,但是在许多处理器环境中,每个(n-1)级缓存502可以对应于单个物理处理单元。因此,在一个示例中,n级缓存501a可以对应于包含两个或更多个物理核心的一个处理器插槽,每个物理核心与其自身的(n-1)级缓存502相关联。如省略号505c和n级缓存501b所示,可以存在任意数量的n级缓存501(以及对应的较低级缓存)。例如,在一些处理环境中,每个n级缓存501可以对应于不同的处理器插槽。然而,在其他处理环境(诸如,非均匀存储器存取(numa)处理环境)中,这些n级缓存501可以是同一处理器插槽内的“组”,每个组各自由不同的存储器或存储器区段支持。另一方面,图5b图示了计算环境504的示例500b,计算环境504包括三个缓存层(即,n级、(n-1)级和(n-2)级)。在此,示例500b包括至少一个n级缓存503a(例如,l3缓存),该n级缓存503a包括两个或更多个(n-1)级缓存501a(例如,l2缓存),并且该(n-1)级缓存501a进而各自包括两个或更多个(n-2)级缓存502(例如,l1缓存)。再次,如省略号505d和n级缓存503b所指示的,可以存在任何数量的n级缓存503(和对应的较低级缓存)。尽管处理单元在图5b中未被明确示出,但是在许多处理器环境中,每个(n-2)级缓存502可以对应于单个物理处理单元,并且每个(n-1)级缓存501和(n)级缓存503可以对应于多个处理单元。现在返回图4,方法400在执行期间跨多个处理单元进行操作。例如,图4可以进行操作以便于促进跟踪多个线程的执行。如图所示,方法400包括动作401,动作401是在跨多个处理单元并行执行期间,日志记录对n级缓存的流入量。在一些实施例中,动作401可以包括至少基于在跨多个处理单元的执行期间检测到n级缓存中特定位置的一个或多个数据流入量,使对n级缓存中特定位置的一个或多个数据流入量被日志记录。例如,在跨处理单元执行(例如,通过多个线程中的一个或多个)期间,可能存在一个或多个缓存未命中,这导致针对系统存储器103中特定存储器位置的数据被导入到外部缓存中。在图5a的环境503中,这可能意味着针对每个缓存未命中,特定存储器位置被缓存在n级缓存501a(例如,l2缓存)的缓存行中。另一方面,在图5b的环境504中,这可能意味着对于每个缓存未命中,特定存储器位置被缓存在n级缓存503a(例如,l3缓存)的缓存行中。由于这些缓存未命中,(多个)处理器102的电路和/或微代码102c可以发起对被导入到该外部缓存的数据的日志记录,以将其日志记录到(多个)跟踪文件104d。备选地,动作401可以由包括操作系统内核104b和/或管理程序的跟踪器104a发起。方法400还包括在并行执行期间,日志记录(n-1)级缓存一致性协议转换(例如,在多个(n-1)级缓存之间)的动作402。在一些实施例中,动作402可以包括:使两个或更多个(n-1)级缓存之间的一个或多个(n-1)级ccp转换被日志记录,(n-1)级ccp转换由特定位置被多个处理单元中的两个或更多个处理单元访问而引起。例如,尽管缓存未命中可能最初会填充外部/较高级缓存(例如,图5a中的n级缓存501a或图5b中的n级缓存503a),但是特别是在包含性缓存被使用时,数据最终在下层缓存层之间传递,并被一个或多个处理单元消耗。实施例日志记录了针对所缓存的存储器位置的ccp转换(该转换随后可以用于重建数据的使用方式),而不是在该数据被传递通过各层并被消耗时再次日志记录该数据。因此,例如,在图5a的环境503中,这可能意味着当其对应的处理单元从与所缓冲的存储器位置相对应的(n-1)级缓存行读取或向其写入时,日志记录(n-1)级缓存(即,缓存502a和502b)之间的ccp转换。另一方面,在图5b的环境504中,因为这些缓存是该环境中的n-1级缓存,这可能意味着日志记录缓存501a和501b之间的ccp转换。再次,日志记录可以由(多个)处理器102的电路和/或微代码102c来发起。备选地,日志记录可以由包括操作系统内核104b和/或管理程序的跟踪器104a来发起。如结合图3所讨论的,该ccp日志记录可以包括:当缓存存储器位置由(n-1)级缓存(缓存502a和502b)访问时,日志记录存储时段和加载时段之间的一个或多个转换点。这也可能潜在地包括在这些转换点中的一个或多个处,日志记录所缓存的存储器位置中存储的值。这还可以包括:使基于单个处理单元的活动的一个或多个ccp转换(例如,单个处理单元的加载/存储转换)被日志记录。在图5a的环境503中,没有附加的较低级缓存,因此方法400可以结束。然而,环境504包括另一层。这样,方法400还可以包括动作403,动作403为在并行执行期间,日志记录(n-2)级缓存一致性协议转换(例如,多个(n-2)级缓存之间)。动作403可以在还包括多个(n-2)级缓存的环境中被执行,并且其中每个(n-1)级缓存与多个(n-2)级缓存中的两个或更多个相关联,并且(n-1)级缓存被配置为两个或更多个(n-2)级缓存的后备存储库。在一些实施例中,动作403可以包括:使两个或更多个(n-2)级缓存之间的一个或多个(n-2)级ccp转换被日志记录,(n-2)级ccp转换由特定位置被多个处理单元中的两个或更多个处理单元访问而引起。因此,例如,在图5b的环境504中,这可能意味着当其对应的处理单元从与所缓存的存储器位置相对应的(n-2)级缓存行读取或向其写入时,日志记录(n-2)级缓存(即,缓存502a和502b)之间的ccp转换。类似于动作402,该ccp日志记录可以包括:当缓存存储器位置由(n-2)级缓存(即,缓存502a和502b)访问时,日志记录存储时段和加载时段之间的一个或多个转换点。这也可能潜在地包括:在这些转换点中的一个或多个处,日志记录所缓存的存储器位置中存储的值。图4指示动作403可以被执行任意次,同时每次减小n级。因此,方法400可以在包括两个或更多个缓存层(即,n≥2)的环境中进行操作,而对可以被使用的缓存层的数量没有上限。附加地,方法400可以针对每个外部n级缓存层来重复执行(通常并行执行)。因此,例如,在图5a中,方法400可以针对缓存层501a并且还针对缓存层501b来执行。在图5b中,方法400可以针对缓存层503a并且还针对缓存层503b来执行。当方法400在两个或更多个n级缓存层上被执行时,基于每个外部n级缓存层生成的日志数据可以被日志记录到跟踪文件104d中的不同数据流(例如,每个处理单元一个数据流),或者可以日志记录到单个数据流,同时以使得不同n级缓存的数据能够被分离的方式进行标记。通过参考跨数据集使用的单调递增数(min)、指示数据集之间的缓存通信的ccp数据等日志记录某些事件(例如,对共享的存储器的访问),这两个数据集之间的顺序可以至少部分地进行排序。如结合图1所描述的,(多个)处理器102可以包括(多个)缓冲器102d,缓冲器102d可以用于临时存储跟踪数据。因此,在方法400中,“使得”不同类型的数据被日志记录可以包括处理器102将这样的数据存储到(多个)缓冲器102d中。附加地或备选地,这可以包括处理器102将这样的数据传送到跟踪器104a、将这样的数据写入到(多个)跟踪文件104d和/或通知跟踪器104a该数据在(多个)缓冲器102d中可用。在一些实施例中,(多个)缓冲器102d可以包括(多个)缓存102b的一个或多个保留部分。如还结合图1所描述的,处理器102还可以包括控制寄存器,控制寄存器用于控制处理器操作的不同方面。在一些实施例中,一个或多个控制寄存器包括控制是否启用日志记录的一个或多个比特。这可以处于处理单元组(例如,插槽、numa组等)的粒度,或者甚至基于每个处理单元。因此,使用这样的日志记录控制比特,在任何给定时间仅处理单元的子集(包括零集)可以实际上参与日志记录。以这种方式,跟踪器104a可以细粒度地控制哪些处理单元/线程正在被跟踪以及何时该跟踪是活动的。这可以使得跟踪器104a能够控制哪个(哪些)应用正在被跟踪、应用中的哪个(哪些)特定线程正在被跟踪、内核模式代码是否正在被跟踪等。如先前所提及,一些跟踪方法利用对(多个)缓存102b中的一个或多个的扩展(即,附加的“日志记录”或“记账”比特),其使得处理器102能够针对每一缓存行来标识消耗了缓存行的一个或多个处理单元102a。类似的技术可以结合方法400被使用以减少需要被日志记录的数据量,同时仍保持全保真度跟踪。例如,“日志记录”或“记账”比特的使用可以在以下情况下防止缓存行被重新日志记录:在处理单元转换到另一上下文(例如,另一线程、内核模式等)之后,如果该其他上下文未修改缓存行的话。附加地或备选地,“日志记录”或“记账”比特的使用可以使得一个线程的跟踪条目能够参考已代表另一线程被日志记录的数据。因此,如本文所使用的,“全保真度”跟踪是包含足以使得被跟踪实体完全重播的信息的任何跟踪,即使特定“全保真度”跟踪实际上可能包含封装可能使用替代跟踪技术记录的相同信息的较少数据。为了理解这些概念,图6a图示了示例共享的缓存600a(类似于图2b的共享的缓存203),共享的缓存600a利用一个或多个附加记账比特601来扩展其每个缓存行604。因此,每个缓存行604包括(多个)记账比特601、常规地址比特602和值比特603。备选地,图6b图示了共享的缓存600b的一个示例,共享的缓存600b包括存储了存储器地址602和值603的常规缓存行605,以及用于存储应用于常规缓存行605的记账比特的一个或多个保留缓存行606。(多个)保留缓存行606的比特被分配到不同记账比特组中,每个组对应于一个不同的常规缓存行605。在图6b的示例的变型中,(多个)保留缓存行606可以被保留为组相联(set-associative)缓存的每个索引中的一个(或多个)路(way)。例如,在8路组相联缓存中,集合中的一个路可以被保留用于适用于集合中其他七个路的记账比特。由于给定集合中的所有路通常被大多数处理器并行读取,因此这可以降低实现保留缓存行的复杂度,并可以加快对保留缓存行的访问。不论记账比特实际如何被存储,针对外部(n级)缓存的每个缓存行的(多个)记账比特601可以包括用作由(多个)处理器102使用来指示缓存行中的当前值是否实际上被参与日志记录的处理单元消耗的标志(即,开启或关断)的一个或多个比特。这很有用,因为如果导入到n级的值实际上未被所跟踪的处理单元使用,则该值无需被日志记录。例如,如果导入到n级的值实际上被所跟踪的处理单元使用,则一些实现仅将当前值日志记录在缓存行中(即,在动作401)。值可以被导入到n级缓存中,但实际上未被使用,这是因为处理器201可能参与推测性执行。处理器201可以通过执行其预测将来可能执行的指令来参与推测性执行,以保持其执行流水线完整。这些推测性指令的执行可能导致n级缓存未命中。如果事实证明导致这些缓存未命中的(多个)推测性指令没有被撤回(retire)(例如,这些指令由于与预测/推测的执行路径不同的执行路径被采用而被丢弃),则一些实现可以选择不日志记录这些值。因此,处理器102/跟踪器104a可以仅在针对给定缓存行设置了这些比特之一的情况下才日志记录缓存未命中的值。附加地或备选地,如果同一值被重新导入到n级缓存中,则这些比特可以被用来防止同一值被再次日志记录。例如,推测性缓存未命中可能使所日志记录的值从n级缓存中被逐出。稍后,非推测性指令可以再次访问该值,从而导致另一缓存未命中。这些比特可以用于跟踪这种情况,从而可以用于避免重新日志记录该值。在一些实施例中,下层缓存可以被配置为将消费数据“推送”到更高级缓存来辅助日志记录。例如,当记账比特在外部n层缓存上被使用时,一个或多个较低级缓存可以将当特定值被消耗时的指示(可能与有关消耗了特定值的处理单元的信息一起)传送到外部n层缓存。这为外部n层缓存提供了可以用于设置/清除比特的信息。如所提到的,一些实施例可以包括具有一个或多个日志记录控制比特的控制寄存器,该控制寄存器控制处理单元是否参与日志记录。如所提到的,虽然这可以处于每个处理单元的粒度,但是也可以处于处理单元组的粒度。一些实现可能完全缺少日志记录控制比特。当只期望日志记录处理单元的子集时,这些情况中的任一者都会带来挑战。例如,图7a图示了使用方法400的跟踪记录的示例700a,但是其中仅较低级缓存的子集被日志记录。特别地,图7a示出了外部n级缓存701(例如,l2缓存)和四个内部(n-1)级缓存702a-702d。如星号所示,只有与(n-1)级缓存702a、702b和702d相关联的处理单元才是跟踪器104a感兴趣记录的单元。然而,如果硬件环境缺少日志记录控制比特或者具有通常仅以n级缓存701的粒度操作的日志记录控制比特,则(n-1)级缓存702c也将被记录。这种情况可能会带来一些问题。首先,所得到的跟踪可能包括与在缓存702c处执行的代码有关的不必要的跟踪数据。第二,当在缓存702c处执行的代码的信任级别与使用缓存702a、702b和702d执行的代码的信任级别不同时,可能会引起安全问题。这可能是因为与使用缓存702c执行的代码相关联的(多个)过程具有与使用缓存702a、702b和702d执行的代码相关联的(多个)过程不同的信任级别(例如,它们可能来自不同的用户和/或使用缓存702a、702b和702d执行的代码可能在用户模式下操作,而使用缓存702c执行的代码可能在内核模式下操作)。备选地,这可能是因为对使用缓存702c执行的代码进行管理的内核与对使用缓存702a、702b和702d执行的代码进行管理的内核不同(例如,如果这两个内核在管理程序之上被执行,并且管理程序将与缓存702c相关联的(多个)处理单元指派给一个内核,并将与缓存702a、702b和702d相关联的(多个)处理单元指派给另一个内核)。为了克服这些问题,一些实施例可以对所得的跟踪文件进行后处理,以便分离出跟踪数据流,并产生仅包含需要跟踪的数据流子集的跟踪文件(即,以移除针对除了期望记录的处理单元之外的处理单元的数据流)。为了维护安全性,此操作通常将在其所具有的信任级别至少等于用于跟踪记录的信任级别的硬件和软件环境中被执行。例如,如果跟踪记录在内核级别被执行,则后处理环境通常将具有至少与内核的信任级别等效的信任级别,或者如果跟踪记录在管理程序级别被执行,则后处理环境通常具有至少与管理程序的信任级别等效的信任级别。后处理可以在执行了记录的同一计算机系统处被执行,也可以在具有必需信任级别的一个或多个其他计算机系统处被执行。附加地,后处理可以潜在地实时或近实时地被执行(由正在执行记录的计算机系统或者由一个(一些)其他计算机系统),或者可以推迟到以后。注意,如本文所使用的,“信任级别”可以指代用户级别的信任(与软件强制许可相对),诸如系统和/或基础架构管理员的信任级别。例如,如果管理程序是云基础架构的一部分,则该基础架构的其他组件可以处于相同的信任级别,即使它们位于不同的机器中,只要它们确保与管理程序相同级别的隔离、访问限制等。如所提及的,方法400可以针对多个外部n级缓存层(例如,不同的插槽或numa组)来并行执行。如所解释的,情况可能导致每个外部层的数据流都不同。本文所述的后处理也适用于这些情况。例如,图7b图示了具有两个外部n级缓存701a和701b(例如,l2缓存)、每个外部n级缓存各自具有四个内部(n-1)级缓存702a-702h(例如,l1缓存)的示例700b。如星号所示,与n级缓存701a内的(n-1)级缓存702a、702b和702d相关联的处理单元以及与n级缓存701b内的(n-1)级缓存702e和702f相关联的处理单元是跟踪器104a感兴趣记录的单元。然而,n级缓存701a内的(n-1)级缓存702c以及n级缓存701b内的702g以及702h也可以被记录。在此,类似的后处理可以对n级缓存701a记录的数据以适当的信任级别来执行,而分离的后处理可以对n级缓存701b记录的数据以适当的信任级别来执行。这些原理不限于分离出未被请求记录的跟踪数据。相反,它们还可以用于分离所有都要求记录但彼此之间具有不同信任级别的线程的跟踪。例如,返回到图7a,在与缓存702a和702b相关联的处理单元上执行的线程与在关联于缓存702d的处理单元上执行的(多个)线程具有不同的信任级别,即使它们都在同一内核上被执行。此处,与内核的信任级别至少等效的后处理可以被用来将这些跟踪分离为不同的跟踪文件。这甚至可以被扩展到其他信任级别。例如,进一步假设使用缓存702a、702b和702d执行线程的内核与使用缓存702c执行(多个)线程的内核(均在同一管理程序上执行)不同。在此,与管理程序的信任级别至少等效的后处理可以将使用缓存702a、702b和702d的线程的跟踪数据与使用缓存702c的(多个)线程的跟踪数据分离。然后,以与使用缓存702a、702b和702d的管理程序或内核的信任级别至少等效的后处理可以将使用缓存702a、702b的线程的跟踪数据与使用缓存702d的(多个)线程的跟踪数据分离。因此,本文的实施例基于在至少两个处理器缓存层级或层上跨多个处理单元跟踪执行效果,来创建比特精确的“时间旅行”跟踪记录。这可以包括对处理器硬件和/或微代码进行修改,以帮助记录(i)对外部或“上层”共享的处理器缓存的流入量(即,缓存未命中),以及(ii)由外部/上层共享的处理器缓存支持的多个内部或“下层”处理器缓存之间的缓存一致性协议(ccp)转换。这些技术可以被扩展到“n”级缓存。以这种方式记录跟踪文件可以只需要进行适度的处理器修改,并且在与现有的跟踪记录方法相比时,它们可以将跟踪记录的性能影响以及跟踪文件大小都减少几个数量级。在不脱离本发明的精神或基本特征的情况下,本发明可以以其他特定形式来体现。所描述的实施例在所有方面仅应被认为是说明性的而非限制性的。因此,本发明的范围由所附权利要求书而不是前面的描述指示。落入权利要求的等同含义和范围内的所有改变均应包含在其范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1