CN115552381A - 记录存储器值跟踪以与独立高速缓存一致性协议跟踪一起使用 - Google Patents
记录存储器值跟踪以与独立高速缓存一致性协议跟踪一起使用 Download PDFInfo
- Publication number
- CN115552381A CN115552381A CN202180033358.2A CN202180033358A CN115552381A CN 115552381 A CN115552381 A CN 115552381A CN 202180033358 A CN202180033358 A CN 202180033358A CN 115552381 A CN115552381 A CN 115552381A
- Authority
- CN
- China
- Prior art keywords
- memory
- trace
- execution
- execution context
- cache
- 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
Links
- 230000004044 response Effects 0.000 claims abstract description 17
- 238000012545 processing Methods 0.000 claims description 172
- 230000000977 initiatory effect Effects 0.000 claims description 19
- 230000036961 partial effect Effects 0.000 claims description 9
- 238000000034 method Methods 0.000 abstract description 80
- 230000008569 process Effects 0.000 abstract description 20
- 230000006870 function Effects 0.000 abstract description 12
- 230000000694 effects Effects 0.000 description 66
- 230000002085 persistent effect Effects 0.000 description 14
- 230000006399 behavior Effects 0.000 description 11
- 239000003999 initiator Substances 0.000 description 9
- 230000005540 biological transmission Effects 0.000 description 6
- 230000004224 protection Effects 0.000 description 6
- 230000009471 action Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000000926 separation method Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000001934 delay Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000011010 flushing procedure Methods 0.000 description 3
- 238000002955 isolation Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000001693 membrane extraction with a sorbent interface 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
- 229920002451 polyvinyl alcohol Polymers 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000001681 protective effect Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000000523 sample Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013403 standard screening design Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
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/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0835—Cache 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)
-
- 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
- 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/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/556—Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6245—Protecting personal data, e.g. for financial or medical purposes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/3471—Address tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/885—Monitoring specific for caches
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Medical Informatics (AREA)
- Databases & Information Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种计算机系统,基于将高速缓存一致性协议(CCP)消息记录到第一跟踪中,以及将存储器快照记录到第二跟踪中来记录可重放执行跟踪。基于确定将要启用对第一执行上下文的执行的跟踪,计算机系统开始将第一执行上下文的存储器空间的一个或多个存储器快照日志记录到第二跟踪中,并且启用处理器的硬件跟踪功能。启用跟踪功能使处理器响应于对第一执行上下文的存储器空间的一个或多个存储器访问而生成的CCP消息日志记录到第一跟踪中。在启用处理器的硬件跟踪特征之后,计算机系统还日志记录或以其他方式处理第二执行上下文向第一执行上下文的存储器空间的写入。
Description
技术领域
本公开涉及在记录计算上下文的可重放执行跟踪时保护敏感信息的系统、方法和设备。
背景技术
跟踪和纠正不期望的软件行为是软件开发中的一项核心活动。不期望的软件行为可能包括许多事情,例如执行崩溃、运行时异常、执行性能缓慢、数据结果不正确、数据损坏等。不期望的软件行为是由多种因素触发的,如数据输入、用户输入、竞争条件(例如,访问共享资源时)等。由于触发因素的多样性,不期望的软件行为通常很少见,看起来是随机的,极难再现。因此,对于开发人员来说,识别给定的不想要的软件行为通常是非常耗时和困难的。一旦确定了一个不希望出现的软件行为,确定其(多个)根本原因通常又是非常耗时和困难的。
开发人员已经使用了多种方法来识别不希望出现的软件行为,然后识别应用的代码中导致不希望出现软件行为的(多个)位置。例如,开发人员经常针对不同的输入(例如,单元测试)测试应用的代码的不同部分。另一个例子是,开发人员经常考虑在调试器中执行应用的代码(例如,设置断点/观察点,在代码执行时单步执行代码行等)。另一个例子是,开发人员经常在分析器中观察代码执行行为(例如,计时、覆盖率)。另一个例子是,开发人员经常在应用的代码中插入诊断代码(例如,跟踪语句)。
虽然传统的诊断工具(如调试器、分析器等)对“实时”正向执行代码进行操作,但新兴的诊断工具支持“历史”调试(也称为“时间旅行”或“反向”调试),其中执行上下文的至少一部分的执行被记录到一个或多个跟踪文件(即执行跟踪)中。使用一些跟踪技术,执行跟踪可以包含“位精确”的历史执行跟踪数据,这使得跟踪的执行上下文的记录部分可以被虚拟地“重放”(例如,通过仿真),直到单个指令的粒度(例如,机器代码指令、中间语言代码指令等)。因此,使用“位准确”的跟踪数据,诊断工具使开发人员能够推断记录的主题上下文的先前执行,而不是传统的调试,后者仅限于“实时”正向执行。例如,使用可重放的执行跟踪,一些历史调试器提供用户体验,支持向前和向后断点/观察点,使代码能够向前和向后单步执行等。另一方面,一些历史探查器能够从先前执行的代码中导出代码执行行为(例如,计时、覆盖率)。
一些记录执行跟踪的技术至少部分基于微处理器(处理器)在处理器的执行上下文的执行期间将至少一部分流入(即,高速缓存未命中)日志记录到处理器高速缓存中的执行跟踪。与软件仿真等非基于高速缓存的记录技术相比,基于高速缓存的录制技术有很多机会减少录制开销和/或减少记录到执行跟踪中的数据量。然而,如果执行上下文从存储器中读取敏感存储器值,例如个人识别信息(PII)、加密密钥等,那么这些敏感存储器值有可能成为高速缓存流入,因此传统的基于高速缓存的记录技术可将这些敏感值日志记录到执行跟踪中。因此,在跟踪与存储敏感数据值的存储器交互的执行上下文时,基于高速缓存的记录技术存在潜在的安全问题。
发明内容
本文描述的至少一些实施例通过将执行跟踪分离为两个独立和不同的组件跟踪来缓解与基于高速缓存的记录技术相关的安全问题。组件跟踪包括由处理器记录的第一组件跟踪,当这些处理单元对执行上下文执行存储器访问时,该第一组件跟踪记录多个处理单元之间通信的高速缓存一致性协议(CCP)消息的至少一部分。值得注意的是,第一组件跟踪缺少与这些存储器访问相关联的存储器值。组件跟踪还包括由软件操作环境记录的第二个组件跟踪,该跟踪记录至少一部分系统存储器的一个或多个快照。在实施例中,第一组件跟踪包含足够的信息,可用于分析和/或调试执行上下文(例如,分析执行上下文使用的处理器高速缓存),但第一跟踪缺少足够的信息来实际重播执行上下文的记录执行。相反,在实施例中,通过将第一组件跟踪中包含的信息(例如,CCP消息)与第二组件跟踪中包括的信息(比如,存储器快照)相结合来实现执行上下文的记录执行的回放。
鉴于本文的公开内容,可以理解,以本文所述的方式将执行跟踪分离为不同的组件跟踪,支持数据分离和将组件跟踪存储在不同安全域中的能力,以及将不同的数据安全策略应用于组件跟踪的能力,对组件跟踪等应用不同数据保护的能力。在实施例中,第二组件跟踪(例如,包含存储器数据)存储在更具特权的安全域中(例如,与存储第一组件跟踪的安全域相比),将更严格的数据安全策略应用于第二组件跟踪(例如,与应用于第一组件跟踪的数据安全政策相比),和/或对第二组件追踪应用更高级别的数据保护(例如,相比于应用于第一组分跟踪的数据投影方案)。因此,敏感存储器值(如PII、加密密钥等)在第二个组件跟踪中受到保护。同时,以本文所述的方式将执行跟踪分离为组件跟踪,仍然提供了许多与更传统的基于高速缓存的记录技术相同的机会,以减少记录开销和/或减少记录到执行跟踪中的数据量。
此外,与较为传统的基于高速缓存的记录技术相比,以本文所述的方式将执行跟踪分离为不同的组件跟踪会减少存储器带宽的使用。特别是,记录至少一部分基于存储器访问通信的CCP消息的组件跟踪的处理器将这些CCP消息推送到存储器总线上并进入执行跟踪(例如,在系统存储器或持久存储中)。然而,与传统的基于高速缓存的记录技术不同,该处理器避免将相应的存储器值推送到存储器总线上。由于与给定存储器访问相关联的CCP消息明显小于与存储器访问相关的存储器值,因此使用本文技术记录组件跟踪的处理器将比使用基于高速缓存的传统记录技术记录跟踪的处理器推送到存储器总线的数据量小得多。
实施例涉及基于将CCP消息记录到第一跟踪和将一个或多个存储器快照记录到第二跟踪来记录可重放的(replayable)执行记录的方法、系统和计算机程序产品,其中CCP消息可用于从一个或多个存储器快照获取存储器值。在这些实施例中,计算机系统确定要启用由处理器的多个处理单元跟踪第一执行上下文的执行。基于确定要启用对第一执行上下文执行的跟踪,计算机系统(i)开始将第一执行上下文的存储器空间的一个或多个存储器快照日志记录到第二跟踪中,以及(ii)启用处理器的硬件跟踪功能。启用处理器的硬件跟踪功能会导致处理器将响应多个处理单元中的一个或多个对存储器的访问而生成的一个或多个CCP消息日志记录到第一执行上下文的存储器空间中。在启用处理器的硬件跟踪功能后,计算机系统在执行第二执行上下文时执行以下至少一项操作:(i)将第二执行语境写入第一执行上下文的存储器空间,日志记录到第一跟踪或第二跟踪的一个或多个中;(ii)将由第二执行上下文映射到第一执行上下文的存储器空间的文件的标识日志记录到第二跟踪中;(iii)至少基于第二执行上下文写入高速缓存中与第一执行上下文的存储器空间中的存储器位置重叠的高速缓存行,将高速缓存行从高速缓存中移除或标记为无效;或(iv)至少基于第二执行上下文写入第一执行上下文的存储空间内的存储区域,将该存储区域标记为需要结合第一执行上下文的执行而被日志记录。
实施例还涉及用于处理器的方法、系统和计算机程序产品,该处理器基于将一个或多个CCP消息记录到第一跟踪,参与记录可重放执行记录,其中CCP消息可用于从存储在第二跟踪中的一个或多个存储器快照获取存储器值。在这些实施例中,包括一个或多个处理单元和高速缓存的处理器执行控制逻辑,该控制逻辑使处理器检测多个处理单位中的第一处理单元对存储器的访问。在执行上下文期间,存储器访问的目标是特定的存储器地址。基于检测存储器访问,处理器将可用于从存储在第二个跟踪中的一个或多个存储器快照获取与特定存储器地址对应的存储器值的信息日志记录到第一跟踪中。这包括日志记录特定存储器地址和以下至少一个:(i)第一CCP消息,指示多个处理单元中没有一个在高速缓存内具有与特定存储器地址重叠的第一高速缓存行;(ii)第二CCP消息,指示第一处理单元针对特定存储器地址发起高速缓存未命中;或(iii)第三CCP消息,指示第一处理单元从多个处理单元的第二处理单元获得与特定存储器地址重叠的高速缓存内的第二高速缓存行。
提供此发明内容是为了以简化的形式介绍一些概念,这些概念将在下文的详细说明中进一步描述。本摘要并非旨在确定所要求保护的标的物的关键特征或基本特征,也并非旨在帮助确定所要求的主题的范围。
附图说明
为了描述获得上述以及本公开其他优点和特征的方式,将通过参考附图中所示的具体实施例,对上述简要描述的本公开进行更具体的描述。了解到这些附图仅描述了本公开的典型实施例,因此不应被视为限制其范围,将通过使用附图对本公开进行更具体和详细的描述和解释,其中:
图1A示出了一个示例计算环境,该环境支持基于处理器将与跟踪执行上下文的存储器访问相关的CCP消息记录到第一跟踪,而无需将与这些存储器访问相关联的存储器值记录到第一跟踪,以及基于操作环境,将一个或多个存储器快照记录到单独的第二跟踪中;
图1B示出了一个处理器控制逻辑示例,该逻辑基于处理器将与跟踪执行上下文的存储器访问相关的CCP消息记录到第一跟踪中,而参与记录可重放执行跟踪,而不将与这些存储器访问相关联的存储器值记录到第一跟踪中;
图1C示出了一个操作环境示例,该操作环境参与记录可重放的执行跟踪,至少基于将一个或多个存储器快照记录到第二个跟踪中;
图2示出了一个示例处理器高速缓存;
图3示出了执行跟踪的示例;
图4A-图4C示出了多个处理单元的示例存储器访问活动;
图5A示出了计算机系统记录可重放执行跟踪的示例方法流程图,该方法基于将CCP消息记录到第一跟踪中,以及将一个或多个存储器快照记录到第二跟踪中,CCP消息可用于从一个或多个存储器快照中获取存储器值;以及
图5B显示了处理器将一个或多个CCP消息记录到第一跟踪的示例方法的流程图,CCP消息可用于从存储在第二个跟踪中的一个或多个存储器快照获取存储器值。
具体实施方式
本文所述的至少一些实施例将执行跟踪分离为组件跟踪。在实施方案中,将执行跟踪分离成组件跟踪有利于数据分离和将组件跟踪存储到不同的安全域中的能力,具有不同的数据安全策略,具有不同的保护措施等。这可以保护敏感的存储器值,如PII、加密密钥等,同时提供许多相同的机会来减少记录开销和/或减少记录到执行跟踪中的数据量,就像更传统的基于高速缓存的记录技术一样。在实施方案中,与更传统的基于高速缓存的记录技术相比,将执行轨迹分离为组件轨迹也有利于减少存储器带宽的使用。特别地,本文所述的至少一些实施例将多个处理单元之间通信的CCP消息的至少一部分记录为第一组件跟踪,因为这些处理单元为执行上下文执行存储器访问,并将系统存储器的至少一部分的一个或多个快照记录为第二组件跟踪。在实施例中,第一组件跟踪包含足够的信息,以用于剖析和/或调试执行上下文(例如分析执行上下文的处理器高速缓存使用),但第一组件跟踪缺乏足够的信息来实际重放执行上下文的记录执行。尽管如此,通过将第一组件跟踪中包含的信息与第二组件跟踪中包含的信息相结合,可以完成对执行环境的记录执行的重放。
为了实现这些和其他实施例,图1A示出了一个示例计算环境100,该环境支持基于处理器将与跟踪执行上下文的存储器访问相关的CCP消息记录到第一跟踪,而无需将与这些存储器访问相关联的存储器值记录到第一跟踪,以及基于将一个或多个存储器快照记录到单独的第二跟踪中的操作环境。具体而言,计算环境100包括专用或通用计算机系统101,该计算机系统101包括操作环境110,该操作环境110被配置为至少基于将执行上下文存储器的一个或多个存储器快照记录到一个组件跟踪中来记录执行上下文的可重放执行跟踪。相应地,计算机系统101包括一个或多个处理器102,其配置为在执行期间将一个或多个CCP消息记录到与跟踪执行上下文的存储器访问相关的单独组件跟踪中。记录的CCP消息可用于使用操作环境110记录的存储器快照重建这些存储器访问的存储器值。如图所示,计算机系统101还包括至少系统存储器103(主存储器)和持久存储器104,它们通过一个或多个通信总线105通信地相互耦合,并连接到处理器102。
本公开范围内的实施例可以包括用于携带或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这种计算机可读介质可以是通用或专用计算机系统可以访问的任何可用介质。存储计算机可执行指令和/或数据结构的计算机可读介质是计算机存储介质。携带计算机可执行指令和/或数据结构的计算机可读介质是传输介质。因此,作为示例而非限制,本公开的实施例可以包括至少两种截然不同的计算机可读介质:计算机存储介质和传输介质。
计算机存储介质是存储计算机可执行指令和/或数据结构的物理存储介质(例如,系统存储器103和/或持久存储器104)。物理存储介质包括计算机硬件,如RAM、ROM、EEPROM、固态驱动器(“SSD”)、闪存、相变存储器(“PCM”)、光盘存储器、磁盘存储器或其他磁存储设备,或任何其他可用于以计算机可执行指令或数据结构形式存储程序代码的硬件存储设备,可由通用或专用计算机系统访问和执行以实现本公开的公开功能。
传输介质可包括网络和/或数据链路,可用于以计算机可执行指令或数据结构的形式传输程序代码,并可由通用或专用计算机系统访问。“网络”被定义为一个或多个数据链路,能够在计算机系统和/或模块和/或其他电子设备之间传输电子数据。当通过网络或其他通信连接(硬接线、无线或硬接线或无线组合)向计算机系统传输或提供信息时,计算机系统可能会将该连接视为传输介质。上述内容的组合也应包括在计算机可读媒体的范围内。
此外,当到达各种计算机系统组件时,以计算机可执行指令或数据结构形式的程序代码可以从传输介质自动传输到计算机存储介质(反之亦然)。例如,通过网络或数据链路接收的计算机可执行指令或数据结构可以缓冲在网络接口模块(未显示)内的RAM中,然后最终传输到计算机系统RAM(例如,系统存储器103)和/或计算机系统中易失性较低的计算机存储介质(例如,持久存储器104)。因此,应当理解,计算机存储介质可以包括在也(甚至主要)利用传输介质的计算机系统组件中。
例如,计算机可执行指令包括在一个或多个处理器上执行时使通用计算机系统、专用计算机系统或专用处理设备执行某种功能或一组功能的指令和数据。例如,计算机可执行指令可以是机器代码指令(例如二进制文件)、中间格式指令(例如汇编语言)甚至源代码。
本领域技术人员将理解,本公开可在具有许多类型的计算机系统配置的网络计算环境中实施,包括个人计算机、台式计算机、笔记本电脑、信息处理器、手持设备、多处理器系统、基于微处理器或可编程的消费电子产品、网络PC、微型计算机、大型计算机、移动电话、PDA、平板电脑、传呼机、路由器、交换机等。本公开也可在分布式系统环境中实施,其中本地和远程计算机系统通过网络连接(通过硬线数据链接、无线数据链接或通过硬线和无线数据链接的组合),都执行任务。因此,在分布式系统环境中,一个计算机系统可以包括多个组成的计算机系统。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。
本领域技术人员还将理解,本公开可以在云计算环境中实施。云计算环境可以是分布式的,尽管这不是必需的。分布式时,云计算环境可以在一个组织内进行国际分布式和/或在多个组织中拥有组件。在本说明和以下声明中,“云计算”被定义为一种模型,用于实现对可配置计算资源(例如,网络、服务器、存储、应用程序和服务)共享池的按需网络访问。“云计算”的定义并不局限于在适当部署时可以从此类模型中获得的任何其他众多优势。
云计算模型可以由各种特性组成,例如按需自助服务、广泛的网络访问、资源池、快速弹性、可测量的服务等。云计算模型也可能以各种服务模型的形式出现,例如软件即服务(“SaaS”)、平台即服务(PaaS)和基础设施即服务(IaaS)。云计算模型也可以使用不同的部署模型进行部署,例如私有云、社区云、公共云、混合云等等。
一些实施例(例如云计算环境)可能包含一个系统,该系统包括一个或多个主机,每个主机都能够运行一个或多个虚拟机。在操作期间,虚拟机模拟一个操作计算系统,支持一个操作系统,也许还支持一个或多个其他应用程序。在一些实施例中,每个主机都包含一个虚拟机管理程序,该管理程序使用从虚拟机视图中提取的物理资源来模拟虚拟机的虚拟资源。虚拟机管理程序还提供了虚拟机之间的适当隔离。因此,从任何给定虚拟机的角度来看,虚拟机管理程序提供虚拟机与物理资源交互的假象,即使虚拟机只与物理资源的外观(例如,虚拟资源)交互。物理资源的示例,包括处理容量、存储器、磁盘空间、网络带宽、媒体驱动器等。
如图1A所示,在实施例中,每个处理器102包括一个或多个处理单元106、一个或多个高速缓存107、控制逻辑109,在一些实施例中还包括一个或者多个翻译查询缓冲区(TLB)108。通常,每个处理单元106(例如处理器核心)在执行单元106b处执行机器代码指令。在执行这些机器代码指令期间,至少一些指令使用内部处理器寄存器106a作为临时存储位置,和/或通过高速缓存107读写系统存储器103中的各个位置。给定处理器102中的每个处理单元106执行从相应处理器102的预定义处理器指令集体系结构(ISA)中选择的机器代码指令。每个处理器102的特定ISA可能因处理器制造商和处理器型号而异。常见的ISA包括INTEL,INC.的IA-64和IA-32体系结构,ADVANCED MICRO DEVICES,INC.的AMD64体系结构,以及ARM HOLDINGS,PLC的各种高级RISC机器(“ARM”)体系结构,尽管存在大量其他ISA,并且本公开可以使用这些ISA。通常,机器代码指令是处理器可执行的最小外部可见(即处理器外部)代码单元。
寄存器106a是基于硬件的存储位置,根据其相应处理器102的ISA定义。通常,当这些指令在执行单元106b执行时,寄存器106a由机器代码指令或处理单元106读取和/或写入。寄存器106a通常用于存储从高速缓存107获取的值,以用作输入机器代码指令,存储执行机器代码指令的结果,存储程序指令计数,支持线程堆栈的维护等。在一些实施例中,寄存器106a可以包括“标志”,用于表示由于执行了机器代码指令而引起的某些状态变化(例如,指示算术运算是否导致进位、零结果等)。在一些实施例中,寄存器106a包括一个或多个控制寄存器(例如,用于控制处理器操作的不同方面)和/或其他处理器型号专用寄存器(MSR)。
在处理单元106执行机器代码指令期间,(多个)高速缓存107临时高速缓存系统存储器103的部分。在一些实施例中,高速缓存107包括高速缓存存储应用程序代码的系统存储器103部分的一个或多个“代码”部分,以及高速缓存存储应用程序运行时数据的系统存储器102部分的一个或多个“数据”部分。如果处理单元106需要尚未存储在高速缓存107中的数据(例如,代码或应用程序运行时数据),则处理单元106会启动“高速缓存未命中”,导致所需数据从系统存储器103提取并进入高速缓存107,同时可能会替换并“逐出”高速缓存107内已存储的一些其他数据,使其返回系统存储器103。
在实施例中,每个高速缓存107包括多个“高速缓存行”,每个高速缓存行存储来自后备存储器(例如,系统存储器103)的存储器块。例如,图2示出了包括多个高速缓存行203的处理器高速缓存200的示例。在该示例中,每个高速缓存行203至少包括地址部分201和值部分202。在实施例中,每个高速缓存行203中的地址部分201被配置为在高速缓存行对应的系统存储器103中存储至少一个存储器地址,并且,值部分202最初将从该地址开始获得的数据值存储在系统存储器103中。根据值部件202的大小,每个高速缓存行203可以将跨越多个连续的单独可寻址位置的数据存储在系统存储器103中。每个高速缓存行202的值部202可以由处理单元106修改,并最终被逐出到系统存储器103。如处理器高速缓存200内的省略号所示,高速缓存107可以包括大量高速缓存行。例如,当代64位INTEL处理器可以为每个包含512条或更多高速缓存行的处理单元106包含单个LI高速缓存。在这样的高速缓存中,每个高速缓存行通常可用于参考6字节(48位)到8字节(64位)存储器地址存储64字节(512位)值。
在某些情况下,(多个)高速缓存107的高速缓存行的地址部分存储物理存储器地址,例如系统存储器103中的实际对应存储器地址。在其他情况下,(多个)高速缓存107的高速缓存行地址部分存储虚拟存储器地址。在实施例中,虚拟存储器地址是虚拟地址空间中的一个地址,由操作系统向在(多个)处理器102上执行的进程公开。该虚拟地址空间提供了一个或多个抽象,例如进程有自己的专用存储器空间和/或进程有比系统存储器103中更多的可用存储器。例如,可以使用这种抽象来促进在(多个)处理器102处执行的不同进程之间的存储器隔离,包括用户模式进程和内核模式进程之间的隔离。在实施例中,虚拟到物理存储器地址映射保存在存储在系统存储器103中的存储器页表中,并由操作系统和/或虚拟机管理程序(例如,操作环境110)管理。通常,这些存储器分页表包括多个分页表条目(PTE),这些条目将虚拟存储器地址的范围(即页面)映射到物理存储器地址的区域(如页面)。在实施例中,每个PTE存储关于其相应存储器页面的附加属性或标志,例如存储器页面权限(例如只读、可写等)、页面状态(例如脏、干净等)等。在实施例中,每个处理器102内的TLB 108支持虚拟寻址,并包含一种专用形式的高速缓存,用于存储最近获得的PTE映射虚拟和物理存储器页,如从存储在系统存储器103中的存储器页表中获得的那样。在一些实施方案中,PTE是多级层次结构的一部分,其中包括一个或多个页面目录条目(PDE),支持发现单个PTE。在处理器102缺少TLB 108的实施例中,该处理器可能缺少对虚拟存储器寻址的支持。
在实施例中,高速缓存107被划分为单独的层、层或级别,例如第1层(LI)、第2层(L2)和第3层(L3)等。根据处理器实现,这些层中的一个层可以是处理器102的一部分,本身(例如,LI和L2),和/或可以与处理器102分离(例如,L3)。因此,在一些实施例中,高速缓存107包括这些层(LI)中的一个,而在其他实施例中高速缓存107包含多个这些层(例如,LI和L2,甚至L3)。在一些实施例中,多个处理单元106中的每一个都包括或与其自身的LI高速缓存相关联,而每个L2高速缓存是一个共享高速缓存,用作两个或多个LI高速缓存的后备存储(因此由两个或更多处理单元106共享)。在实施例中,各个LI高速缓存也被认为是共享的,因为它们通过高速缓存一致性协议(CCP)消息相互协调。这种协调确保了多个处理单元访问同一存储器位置时的数据一致性(例如,通过确保在所有LI高速缓存中一致查看每个高速缓存的存储器位置)。在实施例中,多个L2和/或L3高速缓存通过处理器的CCP进行类似的协调。如果处理器102支持超线程,则可以另外查看由两个或更多逻辑处理单元共享的每个单独的LI高速缓存。
处理器的CCP定义了当处理器102的各个处理单元106读取和写入高速缓存107中的数据时,如何在高速缓存107中保持一致性,以及如何确保各个处理单元06始终从高速缓存107中给定位置读取有效数据。CCP通常与,由处理器ISA定义的存储器模型。常见CCP的示例包括MSI协议(即修改、共享和无效)、MESI协议(即,修改、排他,共享和无效)和MOESI协议(即,修改、拥有、排他、共享和无效)。这些协议中的每一个都为共享高速缓存中的各个位置(例如,线)定义了状态。“修改的”高速缓存位置包含高速缓存中已修改的数据,因此与备份存储中的相应数据(例如,系统存储器103或另一个高速缓存)不一致。当具有“已修改”状态的位置从高速缓存中逐出时,普通CCP要求高速缓存保证其数据被写回备份存储,或者另一个高速缓存接管此职责。“共享”高速缓存位置包含未从备份存储中修改的数据,以只读状态存在,并且由处理单元106共享的数据。高速缓存可以逐出此数据,而无需将其写入备份存储。“无效”高速缓存位置不包含有效数据,可以认为是空的,可用于存储高速缓存未命中的数据。“独占”高速缓存位置包含与后备存储匹配的数据,仅由单个处理单元106使用。它可以在任何时候更改为“共享”状态(即响应读取请求),也可以在写入时更改为“修改”状态。“拥有的”高速缓存位置由两个或多个处理单元106共享,但其中一个处理单元具有对其进行更改的独占权限。当该处理发生变化时,它会通知其他处理单位,因为通知的处理单位可能需要根据CCP的实施情况进行失效或更新。在实施例中,存在CCP消息的固有总排序。
在实施例中,每个处理器102的控制逻辑109包括控制处理器102操作的微码(即可执行指令)和/或片上(on-die)门逻辑。通常,控制逻辑109在处理器102的硬件和处理器102暴露给执行应用程序(例如,操作环境110和应用程序111)的处理器ISA之间起解释器的作用,并控制处理器102的内部操作。在实施例中,控制逻辑109体现在处理器存储上,例如ROM、EEPROM等。在一些实施例中,该处理器上的存储是可写的(在这种情况下,控制逻辑109是可更新的),而在其他实施例中,该处理器上存储是只读的(在那种情况下,不能更新控制逻辑109)。
尽管未示出,但在一些实施例中,处理器102支持创建更安全的存储器飞地(enclaves),用于存储数据和/或可执行指令。例如,在实施例中,处理器102提供机器代码指令(例如,INTEL软件守护扩展(SGX)),其允许用户级和操作系统代码定义存储器的私有区域,称为飞地,其内容受到保护,无法被飞地本身之外的任何进程读取或保存,包括以较高权限级别运行的进程。在实施例中,支持外壳的处理器102对系统存储器103的一部分进行加密;然后,仅在处理器102本身内解密这部分存储器,即使如此,也仅针对从飞地内运行的代码和数据解密。
持久存储器104存储表示可执行软件组件的计算机可执行指令和/或数据结构。相应地,在处理器102处执行这些软件组件期间,这些计算机可执行指令和/或数据结构的一个或多个部分被加载到系统存储器103中。例如,持久存储器104被示为存储对应于操作环境110和一个或多个应用111的计算机可执行指令和/或数据结构。相应地,系统存储器103被示为存储一个或多个操作环境运行时110’(例如,支持执行操作环境110的机器代码指令和/或运行时数据),并且存储一个或者多个应用程序运行时111’(例如:支持执行一个或多个应用程序111的机器代码指示和/或运转时数据)。
在图1A中,操作环境110被显示为潜在地包括虚拟机管理程序110a,以及包括一个或多个操作系统110b。相应地,操作环境运行时110’显示为可能包括虚拟机管理程序运行时110a’,以及包括一个或多个操作系统运行时110b’。例如,在一些实施例中,操作环境110包括直接在计算机系统101的硬件(例如,处理器102、系统存储器103和持久存储器104)上执行的虚拟机管理程序110a,以及在虚拟机监控器110a上执行的一个或多个操作系统110b。然而,在其他实施例中,操作环境110包括直接在计算机系统101的硬件(例如处理器102、系统存储器103和持久存储器104)上执行的操作系统110b。
在实施例中,系统存储器103和持久存储器104还存储其他数据,例如一个或多个可重放的执行跟踪(即,存储在系统存储器103中的执行跟踪112’和/或存储在持久存储器104中的执行追踪112)。在一些实施例中,可重放的执行跟踪在生成期间最初存储在系统存储器103中(即,执行跟踪112’),随后可持久化到持久存储104中(即执行跟踪112)。在其他实施例中,可重放的执行跟踪在生成期间最初存储在持久存储器104中(即,执行跟踪112)。如图所示,在本文的实施例中,每个执行跟踪112/112’由两个组件跟踪(或组件跟踪数据流)、组件跟踪112a/112a’和组件跟踪112b/112b’组成。在实施例中,组件跟踪112a/112a’由处理器102直接生成(例如,在控制逻辑109的指导下),而组件跟踪112b/112b’由操作环境110生成。随后将讨论每个组件跟踪112a/112a’和112b/112b’的特定内容。为了简洁起见,本公开涉及使用112参考数字的执行跟踪,以及使用112a和112b参考数字的组件跟踪。除非另有明确规定或上下文另有规定,否则附加或替代地使用参考数字112适用于参考数字112’;附加地或替代地,参考数字112a的任何使用适用于参考数字112a’;并且附加地或替代地,附图标记112b的任何使用适用于附图标记112b’。值得注意的是,一些实施例将组件跟踪112a和112b存储在一起(例如,作为同一文件中的数据流,作为相同目录中的文件等),而其他实施例分别存储组件跟踪112b和112a-例如在不同的存储设备上,在不同的计算机系统上等。在实施例中,分别存储组件跟踪112a和112b使这些组件跟踪112a和112b能够存储在不同的安全域中,在不同的策略下,使用不同的安全保护等。
在实施例中,每个可重放的执行跟踪112包含对应上下文(例如,进程、操作系统、虚拟机、飞地、虚拟机管理程序等)的“位精确”执行记录,作为在处理器102处执行的上下文。因此,如本文所使用的,可重放执行跟踪是该上下文的执行活动的“位准确”记录。该位准确记录使之前作为处理单元106上下文的一部分执行的机器代码指令能够在随后重播,以便在重播期间,这些机器代码指令以相同的顺序重新执行,并使用与跟踪记录期间相同的数据。本文实施例使用的基于高速缓存的跟踪技术建立在每个处理器102(包括其高速缓存107)包括半封闭或准封闭系统的观察之上。例如,一旦用于执行上下文的部分数据(即机器代码指令和运行时数据)加载到处理器的高速缓存107中,处理单元106就可以在没有任何其他外部输入的情况下继续执行该上下文,作为一个半闭式或准闭式系统来处理突发时间。特别是,一旦高速缓存107加载了机器代码指令和运行时数据,执行单元106b就可以使用存储在高速缓存107的数据部分中的运行时数据作为这些机器代码指令的输入,并使用寄存器106a,从高速缓存107的代码部分加载和执行这些机器代码指示。只要处理器102执行所需的数据(即机器代码指令和运行时数据)存在于高速缓存107中,处理器102就可以继续执行该上下文,而无需进一步的外部输入。
当处理单元106需要一些数据流入时(例如,因为它正在执行、将执行或可能执行的机器代码指令访问高速缓存107中没有的代码或运行时数据),处理器102进行“高速缓存未命中”,从系统存储器103将适当的数据导入高速缓存107。例如,如果当处理单元106执行对存储运行时数据的应用程序运行时111’内的存储器地址执行存储器操作的机器代码指令时发生数据高速缓存未命中,则处理器102将运行时数据从系统存储器103中的该存储器地址导入到高速缓存107的数据部分的高速缓存行之一。类似地,如果当处理单元106试图从存储应用程序代码的应用程序运行时111’内的存储器地址提取机器代码指令时发生代码高速缓存未命中,则处理器102将代码数据从系统存储器103中的该存储器地址导入到高速缓存107的代码部分的高速缓存行之一。然后,处理单元106使用新导入的数据继续执行,直到需要新数据为止。
在实施方案中,作为一般概述,每个处理器102的控制逻辑109被配置为通过将在处理器的处理单元106之间和/或与其他处理器102之间通信的CCP消息的至少一个子集记录到对应于执行上下文的组件跟踪112a中,以参与记录执行上下文的位精确表示,该执行上下文通过高速缓存107进行的存储器访问相关。在实施方案中,对于由执行上下文通过高速缓存107进行的存储器访问,控制逻辑109将被访问的存储器地址记录到组件跟踪112a中,但避免记录任何相应的存储器值。另一方面,操作环境110被配置为通过将从系统存储器103获得的至少一个或多个存储器值(例如,以一个或多个存储器快照的形式)记录到与执行环境相对应的另一个组件跟踪112b中,从而参与记录执行环境的位精确表示。正如后文详述,组件跟踪112a可用于确定上下文在执行时访问了哪些存储器地址(包括哪个处理单元进行了每次访问,以及以什么顺序),而组件跟踪112b可用于获取和/或计算被访问的存储器值。因此,组件追踪112a和112b可以组合起来,以再现在处理器的处理单元106执行上下文的代码时信息流入处理器的高速缓存107的情况。
在实施例中,每个处理器102的控制逻辑109还配置为将执行上下文进行的任何未高速缓存读取(例如,从直接存储器访问(DMA)硬件设备读取,从系统存储器103标记为不可高速缓存的部分读取,等等)记录到组件跟踪112a中,以及执行任何非确定性指令的一个或多个副作用(例如,由于执行非确定性指令而更改的寄存器值)。在实施例中,如后面将更详细地解释的那样,控制逻辑109或操作环境110中的一个或两个也示出了其他执行上下文的活动,这些执行上下文修改正在记录的执行上下文的存储器空间。
图3示出了执行跟踪的示例(例如,执行跟踪112之一)。特别是,图3示出了一个执行跟踪300,它包括第一组件跟踪301(例如,对应于组件跟踪112a)和单独且不同的第二组件跟踪305(例如对应于组件追踪112b)。通常,组件跟踪301存储处理器102直接记录的信息(例如,在控制逻辑109中的跟踪器117的指示下),而组件跟踪305存储操作环境110记录的信息。
如图所示,组件跟踪301包括一个或多个数据流302(即,数据流302a-302n)。在实施例中,不同的数据流302对应于不同的线程、不同类型的跟踪数据、不同的跟踪数据安全域等。如数据流302a所示,在实施例里,每个数据流302s包括多个数据包304。由于被日志记录在每个数据包304中的特定数据根据数据包所表示的特定数据开始而变化,因此这些数据包304被示为具有不同的大小。在实施例中,数据包304用于记录信息,例如与通过高速缓存107处理的存储器访问有关的CCP消息(或其标志)、与通过高速缓存107处理的存储器访存有关的存储器地址信息、一个或多个寄存器106a的值的哈希、定时信息(例如指令计数)、代码跟踪信息(例如,来自分支或调用跟踪)、未高速缓存读取的日志(即,绕过高速缓存107的读取存储器访问)、对所执行指令的引用(例如,使用应用程序二进制图像中的地址或偏移量)等。在实施例中,数据流302a还包括由一个或多个关键帧303(例如,关键帧303a和303b)组成的数据包,每个关键帧都记录足以恢复开始处理器状态以启动跟踪重播的信息,例如寄存器值的快照。另一方面,组件跟踪305包括一个或多个存储从系统存储器103获得的存储器值的存储器快照306。在一些实施例中,组件跟踪302还包括数据流307,其包括存储存储器写入、定时信息、计数信息、排序信息等的数据包。鉴于此描述,可以理解,组件跟踪301主要包括处理器102的指令执行和高速缓存活动的记录,但通常缺少处理器102读取的存储器值。另一方面,组件跟踪305主要包括“批量数据”,例如以存储器快照的形式,可以从中获取读取的值。
在实施例中,执行跟踪112还包括由处理单元106执行的实际代码,例如通过存储在组件跟踪301的跟踪数据流302中执行的指令的记录,或通过存储组件跟踪305中应用程序二进制文件的副本。然而,在其他实施例中执行跟踪112省略了执行的实际码,而是依赖于单独访问应用程序代码(例如,应用程序111)。
为了说明操作环境110和控制逻辑109如何将执行上下文的位精确表示记录到不同的组件跟踪112a和112b中,图1B示出了控制逻辑109,包括控制逻辑109的实施例在将执行上下文的执行记录到第一组件跟踪112a时使用的组件(例如,跟踪使能器115、高速缓存刷新器116、跟踪器117等)。此外,图1C显示了操作环境110的更多细节,包括操作环境110的实施例在将执行上下文的执行记录到第二组件跟踪112b时使用的跟踪器118的组件(例如,高速缓存刷新启动器118a、存储器快照管理器118b、处理器跟踪使能器118c、外部活动处理机118d、跟踪加密器118e等)。控制逻辑109和操作环境110的所示组件以及任何子组件表示控制逻辑109和/或操作环境110根据本文所述的各种实施例可以实现或利用的各种功能。然而,应当认识到,所描述的组件(包括其标识、子组件和布置)仅作为辅助描述本文所描述的控制逻辑109和/或操作环境110的各种实施例,并且这些组件不限制软件和/或硬件如何实现本文描述的控制逻辑109和/或操作环境110的各种实施例,或其特定功能。
作为对操作环境110的一般介绍,虚拟机管理程序110a和/或操作系统110b包括跟踪器118,其为启动跟踪处理器102上的一个或多个执行上下文以及创建这些上下文的组件跟踪112b提供支持。在实施例中,跟踪器118至少部分地作为虚拟机管理程序110a的组件和/或作为操作系统110b中至少一个的内核模式组件执行。在其他实施例中,跟踪器118至少部分地作为操作系统110b中的至少一个的用户模式组件执行。在实施例中,跟踪器118具有多个部分,它们在以下两个或多个上下文中执行:(i)操作系统110b中至少一个的用户模式,(ii)操作系统110中至少一种的内核模式,或(iii)虚拟机管理程序110a。在一些实施例中,跟踪器118是管理程序110a和/或操作系统110b中的至少一个的集成组件,而在其他实施例中(例如,由应用程序111),跟踪器118是作为管理程序110a和/或作业系统110b的扩展提供的(例如,作为操作系统驱动程序、内核扩展、内核模块、管理程序模块或扩展等)。因此,即使示出跟踪器118作为操作环境110的一个组件执行(至少部分执行),但跟踪器118实际上可以由第三方(例如,通过应用程序111之一)提供给操作环境110。
现在转到跟踪器118的组件,在一些实施例中,在开始跟踪给定的执行上下文之前,高速缓存刷新发起器118a通过刷新和/或使高速缓存107的一个或多个部分无效来确保高速缓存107处于已知状态,或者通过捕捉高速缓存107的一个或多个部分(例如,进入组件跟踪112a或112b中的一个)来确保高速缓存107处于可再现状态。在一些实施例中,高速缓存刷新发起器118a仅刷新、失效或快照与启用跟踪的执行上下文的存储器空间内的存储器页对应的高速缓存行。高速缓存刷新发起器118a以虚线显示,因为在一些实施例中,是控制逻辑109刷新、失效和/或快照高速缓存107(例如,响应为执行上下文启用跟踪的请求)。
同样,在启动对给定执行上下文的跟踪之前,存储器快照管理器118b启动将系统存储器103的一个或多个快照存储到组件跟踪112b中(例如,作为存储器快照306)。在一些实施例中,存储器快照管理器118b仅快照系统存储器103中与启用跟踪的执行上下文的存储器空间相对应的部分。在实施例中,存储器快照管理器118b将存储器快照与时间戳、计数等相关联。存储器快照管理程序118b如何启动存储器快照有多种实施例。在一些实施例中,存储器快照管理器118b在开始跟踪执行上下文之前,将至少一个存储器快照存储到组件跟踪112b中。在一些实施例中,该存储器快照包括已映射到启用跟踪的执行上下文的存储器空间的每个物理存储器页。在本实施例的变体中,该存储器快照仅包括实际存在于系统存储器103中的物理存储器页,即,仅包括尚未调出到交换文件或交换分区(例如,在持久存储器104上)的物理存储器页面。在此变形中,存储器快照管理器118b仅将调出的物理存储器页快照到组件跟踪112b(如果该页随后被调回系统存储器)。在另一个实施例中,存储器快照管理器118b通过跟踪所跟踪的执行上下文实际访问的存储器页来启动存储器快照,并且存储器快照管理程序118b在跟踪执行上下文实际上访问这些页时按需对其进行快照。在一些实施例中,除了在开始跟踪执行上下文之前启动存储器快照外,存储器快照管理器118b还在随后执行跟踪执行上下文期间启动并存储偶尔的存储器快照。在各种实施例中,这些后续存储器快照是独立的存储器快照,或者是依赖于一个或多个先前存储器快照的差异存储器快照。
处理器跟踪使能器118c针对给定的执行上下文在处理器102处启动硬件跟踪功能,例如通过在处理器102执行适当的指令。在实施例中,在处理器102处启动硬件跟踪功能包括处理器跟踪使能器118c,例如通过在系统存储器103或寄存器106a中设置值,向处理器102通信要启用跟踪的执行上下文的标识。在一些实施例中,执行上下文的标识通过虚拟处理器标识符(VPID)进行通信。
在许多情况下,跟踪执行上下文可以与一个或多个其他执行上下文(如操作系统内核)并行或顺序执行。在某些情况下,这些(多个)“外部”执行上下文中的一个(或多个)可能会写入跟踪执行上下文的存储器空间。在一个示例中,为了响应来自硬件设备的中断,操作系统内核处理直接存储器访问(DMA)请求,该请求写入跟踪上下文的存储器空间。在实施例中,外部活动处理机118d确保对跟踪上下文的存储器空间的任何写入都被日志记录到执行跟踪112中,或者采取一些其他操作来确保写入被记录。在一些实施例中,外部活动处理机118d调用存储器快照管理器118b以创建修改的存储器的一个或多个快照(例如,存储器快照306内)。在一些实施例中,外部活动处理机118d将一个或多个写入日志记录到组件跟踪112b的数据流中(例如,在数据流306中)。在一些实施例中,外部活动处理机118d指示处理器102将一个或多个写入日志记录到组件跟踪112b中(例如,通过与外部活动处理机117e的通信)。在实施例中,外部活动处理机118d将被日志记录的写入与时间戳、计数等相关联。在一些实施例中。外部活动处理机118d会导致高速缓存107中被写入修改的任何高速缓存行被逐出或无效(因此,如果跟踪上下文读取修改的存储器位置,则可确保随后高速缓存未命中。在一些实施例中,外部活动处理机118d标记与写入相对应的存储器页,以便后续日志记录(例如,通过与跟踪执行上下文的随后执行相关联的到跟踪器118的陷入)。
由于组件跟踪112b包含存储器快照,并且可能包含与写入跟踪上下文存储器空间有关的信息,因此组件跟踪112b可能包含敏感信息(例如PII、加密密钥等)。因此,在实施例中,跟踪加密器118e对组件跟踪112b的全部或部分进行加密,以保护该敏感信息。
现在转到控制逻辑109,跟踪使能器115启用处理器102的基于硬件的跟踪功能。在实施例中,跟踪使能器115响应于操作环境110的请求(例如,处理器跟踪使能器118c)进行操作。在启用跟踪之前,高速缓存刷新器116通过刷新和/或使高速缓存107的一个或多个部分无效来确保高速缓存107处于已知状态,或者通过对高速缓存107的一个或多个部分进行快照(例如,到组件跟踪112a或112b中的一个)来确保高速缓冲高速缓存107处于可重放状态。在一些实施例中,高速缓存刷新器116响应来自高速缓存刷新发起器118a的指令进行操作,而在其他实施例中高速缓存刷新程序116响应跟踪启用程序115的指令进行运行。鉴于前面对高速缓存刷新启动器118a的讨论,可以理解,在一些实施方案中高速缓存冲洗器116刷新、失效,或仅快照与启用跟踪的执行上下文的存储器空间内的存储器页对应的高速缓存行。
跟踪器117负责将某些类型的处理器活动(如CCP消息)日志记录到组件跟踪112a中。在实施例中,存储器访问检测器117a检测执行跟踪执行上下文的处理单元106何时访问系统存储器103中的目标存储器地址。在某些情况下,存储器访问被定向到高速缓存107高速缓存的目标存储器位置。在这些情况下,至少基于存储器访问检测器117a检测到的存储器访问,CCP日志记录器117b确定是否记录与存储器访问相关的一个或多个CCP消息,并启动任何适当的记录到组件跟踪112a。在实施例中,CCP日志记录器117b将记录的CCP消息与时间戳、计数等相关联。
现在参考图4A-图4C提供了CCP消息日志记录的示例,其示出了多个处理单元的存储器访问活动示例。具体而言,图4A示出了一个示例400a,其包括用于处理单元401(即,处理单元401a-401d)的,并且可以包括两个共享高速缓存402(即,由处理单元401a和401b共享的共享高速缓存402a,以及由处理单元401c和401d共享的共享高速缓存402b)和系统存储器403。示例400a显示,系统存储器403具有多个存储位置,每个存储位置存储相应的存储值(即存储值7的存储位置403a,存储值22的存储位置603b,等等)。在示例400a中,处理单元401a执行访问(例如,读取或写入)存储器位置403a的指令。在实施例中,处理单元401a向其他处理单元401发送CCP消息,以询问其他处理单元中是否有存储器位置403a的高速缓存副本。在示例400a中,处理单元401b、401c或401d都没有存储器位置403a的高速缓存副本。因此,处理单元401a在存储器位置403a上启动高速缓存未命中(例如,基于处理单元401a从处理单元401b、401c和401d接收到否定响应;或基于处理单元401a没有从处理单元501b、401c和401d收到肯定响应)。因此,如图所示,处理单元401a获得(例如,进入其LI高速缓存)存储器位置403a的高速缓存副本,其中包括值7。如图所述,如果包括,共享高速缓存402a(例如,L2高速缓存)也可以获得存储器位置403a的副本,其中包括值7。在实施例中,CCP日志记录器117b将一个或多个第一CCP消息日志记录到组件跟踪112a中,该跟踪112a提供了已经从系统存储器403中获得存储器位置403a的处理单元401a的一个或多个指示,例如,一个或多个CCP消息指示没有其他处理单元具有存储器位置403a的副本(例如,来自处理单元401b、401c和401d的否定响应的副本;处理单元401a没有收到来自处理单元401b、401c和401d等的肯定响应的一个或多个指示)、指示处理单元401a在存储器位置403a的地址上发起高速缓存未命中的一个或多个CCP消息(可能由高速缓存行号取整)等。
转到图4B,在示例400b处理单元401a中,已将值11写入存储器位置403a。随后,处理单元401b执行访问存储器位置403a的指令。在实施例中,处理单元401b向其他处理单元401发送CCP消息,以询问其他处理单元中是否有存储器位置403a的高速缓存副本。在示例400b中,处理单元401a具有存储器位置403a的高速缓存副本,因此,处理单元401a向处理单元401b发送一条CCP消息,指示该CCP消息。因此,如图所示,处理单元401b从处理单元401a获得(例如,进入其LI高速缓存)存储器位置403a的高速缓存副本,包括值11(例如,从处理单元401a的LI高速缓存中)。在实施例中,CCP日志记录器117b将一个或多个第二CCP消息日志记录到组件跟踪112a中,提供处理单元401b从处理单元401a的LI高速缓存获得存储器位置403a的一个或多个指示,CCP消息处理单元401的副本发送到处理单元401b。
转到图4C,例如,400c处理单元401a和/或401b已将存储器位置403a从其高速缓存中逐出,因此系统存储器403现在存储存储器位置403a的值11。在一些实施例中,CCP日志记录器117b将一个或多个第三CCP消息日志记录到组件跟踪112a中,以提供这些逐出的一个或多个指示。随后,处理单元401c执行访问存储器位置403a的指令。在实施例中,处理单元401c向其他处理单元401发送CCP消息,以询问其他处理单元中是否有存储器位置403a的高速缓存副本。在示例400c中,处理单元401a、401b或401d都没有存储器位置403a的高速缓存副本。因此,处理单元401c在存储器位置403a上启用高速缓存未命中(例如,基于处理单元401c从处理单元401a、401b和401d接收到否定响应;或基于处理单元401c没有从处理单元501b、401c和401d收到肯定响应)。因此,如图所示,处理单元401c获得(例如,进入其LI高速缓存)存储器位置403a的高速缓存副本,其中包括值11。如图所显示,如果包括,共享高速缓存402b(例如,L2高速缓存)也可以获得存储器位置403a的副本,其中包括值11。在实施例中,CCP日志记录器117b将一个或多个第四CCP消息日志记录到组件跟踪112a中,该CCP消息提供了处理单元401c已经从系统存储器403中获得存储器位置403a的一个或多个指示,例如,一个或多个CCP消息表示没有其他处理单元具有存储器位置403a的副本(例如,来自处理单元401a、401b和401d的否定响应的副本);处理单元401c没有收到来自处理单元401a、401b和401d等的肯定响应的一个或多个指示)、指示处理单元401c在存储器位置403a的地址上发起高速缓存未命中的一个或多个CCP消息(可能由高速缓存行号取整)等。
值得注意的是,示例400a-400c中的存储器访问基于系统存储器403的初始存储器快照(例如,组件跟踪112b内),并且至少基于CCP日志记录器117b所日志记录的CCP消息(组件跟踪112a内)可再现。例如,通过使用一个或多个第一CCP消息将高速缓存未命中重放到系统存储器403(并使用存储器快照获得值7),可以再现示例400a中处理单元401a对存储器位置403a的访问(即,读取值7)。在示例400b中,处理单元401b对存储器位置403a的访问(即读取值11)是可再现的,方法是通过处理单元401a重放将值11写入存储器位置403a的指令,并通过使用一个或多个第二CCP消息重放处理单元401b&从处理单元401a中获取存储器位置403+403a值。在示例400c中,处理单元401c对存储器位置403a的访问(即读取值11)可以通过使用一个或多个第四CCP消息将高速缓存未命中重放到系统存储器403来重放。值得注意的是,可以使用一个或者多个第三CCP消息(逐出)或,如果一个或多个第三CCP消息未被记录,则通过已知的推断,即处理单元401a的写入发生在处理单元401c的读取之前。因此,示例400a-400c中对主存储器的所有访问都是可重放的,无需将任何存储器值日志记录到组件跟踪112a中。
在其他情况下,存储器访问被定向到“未高速缓存”目标存储器地址,因此存储器访问绕过高速缓存107。在这些情况下,至少基于存储器访问检测器117a检测到的存储器访问,未高速缓存读取日志记录器117c将存储器访问日志记录到执行跟踪112中。在一些实施例中,未高速缓存读取日志记录器117c记录,在执行跟踪112中,存储器访问的目标存储器地址或未高速缓存存储器访问读取的值中的一个或两个。当记录由非高速缓存存储器访问读取的值时,非高速缓存读取日志记录器117c的一些实施例将该值记录到组件跟踪112a中。在这些实施例中的一些实施例中,未高速缓存读取日志记录器117c对组件跟踪112a内的值进行加密。在一个示例中,未高速缓存读取日志记录器117c对存储该值的组件跟踪112a内的数据包304或其部分进行加密。在另一个示例中,未高速缓存读取日志记录器117c将值存储在组件跟踪112a内的加密数据流中。未高速缓存读取日志记录器117c的其他实施例将该值日志记录到组件跟踪112b中,例如经由对跟踪器118的陷入。在实施例中,未高速缓存读取日志记录器117c将所日志记录的未高速缓存读取与时间戳、计数等相关联。
有时,跟踪上下文可能会执行不确定的处理器指令,该指令被定义为其输出不完全依赖其输入的指令。例如,INTEL IA-64和IA-32体系结构中的RDTSC指令不接受输入,在调用时,它将处理器时间戳计数器的值作为输出返回到寄存器中。因此,指令的输出并不完全依赖于其输入。在实施例中,非确定性指令日志记录器117d基于记录执行该指令的一个或多个副作用,来日志记录非确定性指令的执行。在实施例中,指令执行的副作用包括修改一个或多个寄存器106a。因此,在实施例中,非确定性指令日志记录器117d日志记录非确定性指令的执行,至少将通过执行指令修改的一个或多个寄存器106a的值重新编码到组件跟踪112a中。在实施例中,非确定性指令日志记录器117d将日志记录的非确定性指令与时间戳、计数等相关联。
如操作环境110的外部活动处理机118d所述,跟踪执行上下文可以与一个或多个其他执行上下文并发或顺序执行,并且这些“外部”执行上下文中的一个(或多个)可以写入跟踪执行上下文的存储器空间。在实施例中,外部活动处理机117e与外部活动处理机118d合作或代替其操作,以确保对跟踪上下文的存储器空间的任何写入都被日志记录到执行跟踪112中,或者采取一些其他操作来确保写入被记录。在一些实施例中,外部活动处理机117e将存储器地址或写入值中的至少一个日志记录到组件跟踪112a(例如,写入加密数据流或数据包)或组件跟踪112b中。在实施例中,外部活动处理机117e将日志记录的写入与时间戳、计数等相关联。在一些实施例中。外部活动处理机117e将逐出与写入的存储器地址重叠的高速缓存行或使其无效。在一些实施例中,外部活动处理机117e将与写入的存储器地址相对应的存储器页标记为需要被日志记录。在一些实施例中,外部活动处理机117e启动陷入处理机(例如,通过软件中断),其日志记录与存储器地址对应的存储器页面。
如前所示,一些实施例将一些事件与时间戳、计数等相关联。如前所述,存在CCP消息的固有总排序。因此,在一些实施例中,基于日志记录的CCP事件(例如,被日志记录到组件跟踪112a中的CCP消息)的一个或两个固有顺序,或时间戳、计数,可以识别跨组件跟踪112b的相关事件顺序,与其他日志记录的事件(例如,写入、不确定指令、存储器快照等,日志记录到组件跟踪112a和/或组件跟踪112a中)相关。注意,在实施例中,只需要确定事件的一般顺序,而不是事件的确切时间。例如,如果用户模式执行上下文从给定的存储器位置读取数据,内核执行上下文随后写入该存储器位置,并且用户空间执行上下文随后再次从该存储器位置读取,则一些实施例记录足够的信息,以便在第一次读取之后和第二次读取之前对写入进行排序,但可能不会记录写入的确切时间。在实施例中,正确回放所需的全部内容是能够将写入应用于第一读取和第二读取之间的窗口内的任何时间。在一个示例中,第一和第二读取由CCP日志记录器117b日志记录为CCP消息(例如,日志记录到组件跟踪112a),并且写入参考外部活动处理机118d的指令计数而被日志记录(例如,日志记录到组件跟踪112b中)。由于CCP消息本身是可以相互排序的,因此在本例中,如果指令计数在CCP协议中是可以排序的,则该指令计数足以在第一次读取和第二次读取之间排序写入。
现在更详细地描述了控制逻辑109和操作环境110的进一步操作,主要与图5A和5B有关。图5A显示了计算机系统记录可重放执行跟踪的示例方法500a的流程图,该方法基于将CCP消息记录到第一跟踪,以及将一个或多个存储器快照记录到第二个跟踪,CCP消息可用于从一个或多个存储器快照获取存储器值。图5B显示了处理器将一个或多个CCP消息记录到第一跟踪的示例方法500b的流程图,CCP消息可用于从存储在第二个记录中的一个或多个存储器快照中获取存储器值。以下讨论涉及许多方法和方法行为。虽然方法行为可以按特定顺序讨论,或者可以在流程图中说明为以特定顺序发生,但除非特别说明,否则不需要特定顺序,或者因为行为被特别描述为依赖于在行为执行之前完成的另一行为而需要特定顺序。
参考图5A和5B,方法500a包括由操作环境执行的动作501-506(例如,管理程序110a和/或操作系统110b),而方法500b包括由处理器执行的动作507-513(例如,基于控制逻辑109的处理器102)。因此,在一些实施例中,方法500a和500b是独立和不同的方法(即,一种在操作环境110的指导下独立实现和执行,另一种在控制逻辑109的指导下单独实现和执行),而在其他实施例中,方法500a和500b是由计算机系统101使用操作环境110和控制逻辑109之间的协作来执行的单个方法的组件。
最初参考操作环境110,方法500a(例如,通过操作环境110的操作执行)包括501的动作,确定要启用基于硬件的第一执行上下文跟踪。在一些实施例中,动作501包括确定要启用多个处理单元对第一执行上下文的执行的跟踪。在一个示例中,跟踪器118确定配置用于在处理器102执行的上下文(例如,进程、操作系统、虚拟机、飞地、虚拟机管理程序等)将在其执行期间被跟踪,因此,将在处理器102启用对该执行上下文的硬件辅助跟踪。在实施例中,该确定基于一些指示(例如,在系统存储器103中、在持久存储器104中、在寄存器106a中等),即为执行上下文分配了跟踪或日志记录状态(例如,基于用户输入或基于策略分配了该状态)。
如图所示,至少基于已执行动作501,方法500a进入动作502或动作503中的一个或多个,动作502为第一执行上下文启动存储器快照,动作503启动高速缓存刷新。在图5A中,动作502和503被说明为可能并行执行,尽管可以理解,实施例可以交替地串行执行这些动作502或503(按任意顺序)。
在一些实施例中,动作502(即,为第一执行上下文启动存储器快照)包括,基于确定要启用第一执行上下文的执行跟踪,开始将第一执行上下文存储器空间的一个或多个存储器快照日志记录到第二跟踪中。在一个示例中,存储器快照管理器118b将系统存储器103的一个或多个快照启动到组件跟踪112b中(例如,作为存储器快照306中的一个或者多个)。在一些实施例中,存储器快照管理器118b实际上在方法500a进行动作504之前,将至少一个存储器快照存储到组件跟踪112b中。在其他实施例中,存储器快照管理器118b仅在方法500a进行动作504之前启动存储器快照处理(例如,通过跟踪被跟踪的执行上下文访问的存储器位置)。在后一实施例的一个示例中,动作502包括启动对第一执行上下文的存储空间内的一个或多个存储区域(例如,高速缓存行、存储页面等)的跟踪,该存储区域由多个处理单元中的至少一个访问。在实施例中,跟踪存储器区域在读取时或随后(例如,当处理器102有可用周期时,就在提交对跟踪存储器区域的写入之前,等等)按需存储到快照中。
无论存储器快照管理器118b是存储存储器快照,还是仅仅启动存储器快照过程,在方法500a进行到行为504之前,在各种实施例中,存储器快照管理器118b存储至少一个完整的存储器快照(例如系统存储器103的全部)或至少一个部分存储器快照(例如仅系统存储器103的一部分)。因此,在动作502的一些实施例中,启动对一个或多个存储器快照的日志记录包括启动对完整存储器快照或部分存储器快照的至少一个的日志记录。在实施例中,当动作502启动对部分存储器快照的日志记录时,该部分存储器快照不包括以下的至少一个(i)第一执行上下文的存储器空间内的已分页的存储器页(例如,被分页到耐用存储104上的交换文件或交换分区的存储器页),或(ii)第一执行上下文的存储器空间内未被第一执行上下文访问的存储器页(即,基于跟踪哪些存储器区域被第一执行上下文访问)。
在一些实施例中,动作503(即,启动高速缓存刷新)包括,基于确定要启用对第一执行上下文执行的跟踪,启动逐出或使与第一执行上下文的存储器空间重叠的一个或多个高速缓存行无效。在一个示例中,在方法500a进行动作504之前,高速缓存刷新发起器118a主动指示处理器102逐出其高速缓存107的全部或部分或使其无效。如动作503和508之间的箭头所示,这会导致处理器102执行逐出/使用(例如,使用高速缓存刷新器116)。在实施例中,高速缓存刷新发起器118a指示处理器102仅逐出/失效与第一执行上下文的存储器空间内的存储器地址重叠的高速缓存行。
在动作502和503中的一个或两个之后,方法500a进入动作504,以启用对第一执行上下文的基于硬件的跟踪。在一些实施例中,动作504基于确定要启用第一执行上下文的执行跟踪,包括启用处理器的硬件跟踪功能。在一个示例中,处理器跟踪使能器118c与跟踪使能器115通信,表示应启用对第一执行上下文的跟踪。如动作504和507之间的箭头所示,这会导致处理器对第一执行上下文启用基于硬件的跟踪。在一些实施例中,启用处理器的硬件跟踪功能会导致处理器将响应多个处理单元中的一个或多个存储器访问而生成的一个或多个CCP消息日志记录到第一执行上下文的存储器空间中。结合方法500b更详细地描述了这些实施例。
如前所述,方法500a的一些实施例省略了动作503(即启动高速缓存刷新)。在这些实施例中,在动作504中启用基于硬件的第一执行上下文跟踪反而会触发高速缓存刷新。例如,如动作504和508之间的箭头所示,在动作504中启用基于硬件的第一执行上下文跟踪会导致处理器102执行逐出/无效(例如,使用高速缓存刷新器116)。因此,在方法500a的一些实施例中,启用处理器的硬件跟踪功能也会导致处理器从高速缓存中刷新至少一个与第一执行上下文的存储器空间重叠的高速缓存行。
如图所示,至少基于已执行动作504,方法500a进入动作505或动作503中的一个或多个,该动作505用于启动第一执行上下文的附加存储器快照,动作503用于处理由第二执行上下文对第一执行上下文存储器空间的修改。在图5A中,动作505和506被示为可能并行执行,尽管可以理解,实施例可以交替地串行执行这些动作505或506(以任意顺序)。
在一些实施例中,动作505(即为第一执行上下文启动附加存储器快照)包括,在启用处理器的硬件跟踪功能后,在跟踪第一执行上下文期间启动一个或多个附加存储器快照。在一个示例中,存储器快照管理器118b在执行第一上下文期间启动临时存储器快照并将其存储到存储器快照306中。在一些实施例中,附加存储器快照是独立的存储器快照(无论是完全还是部分)。在其他实施例中,附加存储器快照是依赖于一个或多个先前存储器快照的差分存储器快照(例如,以描述如何将先前存储器快照转换为后续存储器快照的图解的形式)。值得注意的是,这些额外的存储器快照可用于在跟踪记录的各个点启动重播。
在一些实施例中,动作506(即通过第二执行上下文处理第一执行上下文的存储空间的修改)包括在启用处理器的硬件跟踪功能后,通过第二运行上下文处理写入。在一个示例中,第一(即跟踪的)执行上下文与第二个执行上下文(如操作系统内核)并行或顺序执行,并且第二个运行上下文写入第一执行上下文的存储器空间。因此,外部活动处理机118d采取一个或多个操作来日志记录或以其他方式记录此写入。在实施例中,动作506包括外部活动处理机118d,该外部活动处理机在执行第二执行上下文时执行以下一项或多项操作:(i)将第二执行语境写入第一执行上下文的存储器空间,日志记录到第一跟踪或第二跟踪的一个或多个中;(ii)将由第二执行上下文映射到第一执行上下文的存储器空间的文件的标识日志记录到第二跟踪中;(iii)至少基于第二执行上下文写入高速缓存中与第一执行上下文的存储器空间中的存储器位置重叠的高速缓存行,将高速缓存行从高速缓存中移除或标记为无效;或(iv)至少基于第二执行上下文写入第一执行上下文的存储空间内的存储区域,将该存储区域标记为需要结合第一执行上下文执行而被日志记录。在一些实施例中,多个外部执行上下文写入第一执行上下文的存储器空间。在这些实施例中,术语“第二执行上下文”是指这些复数外部上下文。
在一些实施例中,外部活动处理机118d将第二执行上下文写入第一执行上下文的存储器空间日志记录到第一跟踪或第二跟踪的一个或多个中。在一个示例中,外部活动处理机118d通过调用存储器快照管理器118b来日志记录写入,以在组件跟踪112b(例如,存储器快照306)中创建一个或多个快照,捕获被写入修改的任何存储器位置。在另一个示例中,外部活动处理机118d将写入日志记录到组件跟踪112b的数据流中(例如,数据流307)。在一些实施例中,通过第二执行上下文日志记录写入包括将DMA操作的结果(例如,由操作内核代表硬件设备处理)日志记录到第二跟踪中。
在一些实施例中,外部活动处理机118d将第二执行上下文映射的文件的标识日志记录到第二跟踪中,记录到第一执行上下文的存储器空间中。在一个示例中,写入第一执行上下文的存储器空间的内容包含在回放期间可以访问的文件(例如,应用程序二进制文件、数据文件等)的内容。因此,外部活动处理机118d不是将文件本身的数据(例如,一次或多次写入)记录到组件跟踪112b中,而是将标识文件的信息日志记录到组件追踪112b中(例如,引用一个或多个文件名、文件标识符、哈希、校验和等)。
在一些实施例中,至少基于第二个执行上下文写入高速缓存中的高速缓存行,该高速缓存行与第一执行上下文的存储器空间中的存储器位置重叠,外部活动处理机118d将高速缓存行从高速缓存中逐出或标记为无效。在一个示例中,外部活动处理机118d指示高速缓存刷新器116将任何写入高速缓存行从高速缓存107移出或失效,并移入系统存储器103。通过这样做,如果第一执行上下文随后访问与移出/失效高速缓存行重叠的存储器地址,CCP日志记录器117b记录与访问的高速缓存未命中相关的相应CCP消息。在一些实施例中,外部活动处理机118d还调用存储器快照管理器118b来快照(例如,进入组件跟踪112b)系统存储器103中与逐出的数据相对应的至少一部分和/或日志记录写入(例如,到组件跟踪112b中)。
在一些实施例中,至少基于第二执行上下文写入第一执行上下文的存储器空间内的存储器区域,外部活动处理机118d将该存储器区域标记为需要与第一执行上下文执行相关联地日志记录。在一个示例中,外部活动处理机118d将日志记录延迟到写入实际消耗的时间,方法是将与写入相对应的存储器页(例如,通过PTE或PDE,在存储在系统存储器103中的数据结构内,等等)标记为需要随后日志记录(例如,如果随后由第一执行上下文访问)。为此,外部活动处理机118d减少了施加在第二个执行上下文上的日志记录开销,并可能避免将写操作全部日志记录下来(例如,如果第一执行上下文以后再也不会访问标记的存储器页)。在实施例中,如果第一执行上下文随后访问标记的存储器页,则标记存储器页的日志记录由控制逻辑109中的外部活动处理机117e触发。在一些实施例中,通过启动跟踪器118的陷入,对标记存储器页的后续访问被日志记录到组件跟踪112b中。在实施例中的跟踪器118s通过使用存储器快照管理器118b将存储器快照(完整或差异)存储到组件跟踪112b中来执行此日志记录。因此,在实施例中,结合第一执行上下文的后续执行,计算机系统将存储器区域的至少一部分日志记录到第二跟踪中。在其他实施例中,基于未高速缓存读取日志记录器117c,将对标记存储器页的后续访问日志记录到组件跟踪112a中,作为将读取日志记录为未高速缓存读取。因此,在实施例中,结合第一执行上下文的后续执行,计算机系统将存储器区域的至少一部分作为未高速缓存读取日志记录到第一跟踪中。
在一些实施例中,外部活动处理机118d总是日志记录检测到的写入,或总是延迟日志记录,而在其他实施例中外部活动处理机118d包括用于决定是否日志记录写入或延迟日志记录的逻辑。在各种实施例中,此逻辑基于写入的数据量、生成写入的应用程序编程接口(API)的性质、写入的目标存储器区域的属性(例如,基于目标存储器区域,例如堆栈或堆)等进行操作。在一个示例中,一些操作系统内核与用户模式进程共享一个或多个存储器页。在此示例中,外部活动处理机118d将内核写入此共享存储器页的日志记录延迟到用户模式进程使用为止。在另一个示例中,此共享存储器页对于用户模式是只读的,因此已知内核会对此共享页进行任何更改。因此,在这个进一步的示例中,外部活动处理机118d只日志记录用户模式进程指向内核更改的存储器地址的读取,并避免日志记录共享存储器页面中其他存储器地址的读操作。在另一个示例中,外部活动处理机118d立即日志记录一个返回值,该返回值通过一些内核调用写入用户模式进程的存储器空间。
如前所述,在一些实施例中,使用不同的安全保护来存储组件跟踪112a和112b。因此,在一些实施例中,方法500a包括加密第二跟踪(例如,组件记录112b)的动作。鉴于上述公开内容,可以理解,第二个跟踪主要包括“批量数据”,例如以存储器快照的形式,其中可能包含敏感的存储器值。因此,在一些实施例中,跟踪加密器118e对第二个跟踪进行加密,以对这些敏感存储器值应用加密安全保护。在一些实施例中,跟踪加密器118e在创建第二个跟踪的过程中“动态”加密第二个记录,而在其他实施例中的跟踪加密器18e在创建第一跟踪后加密第二跟踪。
现在转到图5B,方法500b至少基于处理器102上的控制逻辑109的操作来执行,处理器102包括多个处理单元106和高速缓存107。如图所示,方法500b包括507的动作,该动作为第一执行上下文启用基于硬件的跟踪。在一些实施例中,动作507基于来自操作环境的指令,包括启用处理器的硬件跟踪功能,包括启用执行上下文的跟踪。在一个示例中,基于在动作504中从处理器跟踪使能器118c接收到的指令,跟踪使能器115启用对方法500a中讨论的第一执行上下文的跟踪。
方法500b还包括执行高速缓存刷新的动作508。在一些实施例中,动作508包括从高速缓存中刷新与执行上下文的存储器空间重叠的至少一个高速缓存行,以启用执行上下文的跟踪记录。在一个示例中,高速缓存刷新器116刷新所有高速缓存107,或刷新高速缓存107中与第一执行上下文的存储器空间相对应的标识部分。正如结合动作503和504所讨论的那样,在各种实施例中,动作508基于来自高速缓存刷新发起器118a的明示指令(即动作503),或基于来自处理器跟踪使能器118c的指令来执行,以启用跟踪功能(即,动作504)。因此,虽然动作508被显示为动作507的一部分,但在一些实施例中,动作508是与动作507分开执行的,并且是在动作507之前执行的(因此,行动508用虚线表示)。
在动作507和508之后,方法500b进入以下一个或多个:动作509,检测第一执行上下文的针对特定存储器地址的存储器访问;动作512,处理第二执行上下文向第一执行上下文的存储空间的写入;或动作513,日志记录非确定性指令的副作用。方法500b执行的特定动作取决于跟踪执行上下文执行的指令的性质。
在一些实施例中,动作509(即,通过第一执行上下文检测针对特定存储器地址的存储器访问)包括通过多个处理单元的第一处理单元检测存储器访问,在执行上下文期间,存储器访问针对特定存储器地址。在一个示例中,存储器访问检测器117a检测第一执行上下文的机器代码指令何时访问系统存储器103中的位置。存储器访问的目标特定存储器地址可以是配置为由高速缓存107高速缓存的地址,也可以是未配置为由高速缓存107高速缓存。
基于存储器访问的性质,在动作509之后,方法500b的一些实施例继续动作510以日志记录未高速缓存的读取,或动作511以日志记录可用于从存储器快照获取值的CCP消息。在实施例中,如果存储器访问是针对未配置为由高速缓存107高速缓存的存储器地址的读取,则方法500b进行动作510,如果存储器访问是针对配置为由快速高速缓存107高速缓存中的存储器地址进行的读,则进行动作511。
在一些实施例中,动作510(即,日志记录未高速缓存的读取)包括确定存储器访问是针对未高速缓存的存储器位置的读取,并且基于存储器访问是指向未高速缓存存储器位置的读,日志记录由存储器访问读取的至少一个值。在一个示例中,存储器访问检测器117a检测到存储器访问是未高速缓存读取,因此调用未高速缓存读取日志记录器117c。无高速缓存读取日志记录器117c反过来将无高速缓存读取日志记录到组件跟踪112a中。如前所述,在实施例中,未高速缓存读取日志记录器117c日志记录存储器访问的一个或两个目标存储器地址或未高速缓存存储器访问读取的值。当日志记录由未高速缓存存储器访问读取的值时,未高速缓存读取日志记录器117c的一些实施例在组件跟踪112a内加密该值,例如通过加密数据包304或其部分,或通过将该值存储在组件跟踪112内的加密数据流中。因此,在动作510的一些实施例中,第一跟踪包括第一跟踪数据流,并且日志记录第二存储器访问读取的值包括以下至少一个:(i)将该值日志记录到加密的第二跟踪数据流中,或在第一跟踪数据流量中加密该值。
在一些实施例中,动作511(即,日志记录可用于从存储器快照获取值的CCP消息)包括,基于检测存储器访问,将可用于从存储在第二个跟踪中的一个或多个存储器快照获取与特定存储器地址对应的存储器值的信息日志记录到第一跟踪中。在一个示例中,CCP日志记录器117b将通过高速缓存107处理检测到的存储器访问而导致的一个或多个CCP活动迹象日志记录到组件跟踪112a中。在实施例中,动作512包括日志记录特定存储器地址和以下至少一个:(i)第一CCP消息,指示多个处理单元中没有一个在高速缓存内具有与特定存储器地址重叠的第一高速缓存行;(ii)第二CCP消息,指示第一处理单元针对特定存储器地址发起高速缓存未命中;或(iii)第三CCP消息,指示第一处理单元从多个处理单元的第二处理单元获得与特定存储器地址重叠的高速缓存内的第二高速缓存行。图4A-图4C提供了这些CCP消息的示例。
在一些实施例中,CCP日志记录器117b使处理器日志记录第一CCP消息,该消息指示多个处理单元中没有一个拥有高速缓存内与特定存储器地址重叠的第一高速缓存行。例如,图4A提供了一个示例400a,其中处理单元401a在断定没有其他处理单元具有存储器位置403a的高速缓存副本后,在存储器位置403a上启动了高速缓存未命中,图4C提供了一个示例400c,其中处理单元401c在断定没有其他处理单元具有存储器位置403a的高速缓存副本后,在存储器位置403a上启动了高速缓存未命中。在两个示例400a和400c中,CCP日志记录器117b将一个或多个CCP消息日志记录到组件跟踪112a中,提供了处理单元401a/401c的一个或多个指示,该处理单元已经从系统存储器403获得了存储器位置403a,例如一条或更多条CCP信息,指示没有其他处理单元具有存储器位置403a的副本,和/或一些其他排序信息,例如时间戳、指令计数等。
在一些实施例中,CCP日志记录器117b使处理器日志记录第二CCP消息,该消息指示第一处理单元为特定存储器地址启动了高速缓存未命中。例如,图4A提供了一个示例400a,其中处理单元401a在断定没有其他处理单元具有存储器位置403a的高速缓存副本后,在存储器位置403a上启动了高速缓存未命中,图4C提供了一个示例400c,其中处理单元401c在断定没有其他处理单元具有存储器位置403a的高速缓存副本后,在存储器位置403a上启动了高速缓存未命中。在两个示例400a和400c中,CCP日志记录器117b将一个或多个CCP消息日志记录到组件跟踪112a中,提供处理单元401a/401c的一个或多个指示,该处理单元401a/401c已从系统存储器403获得存储器位置403a,例如,或一条或更多条CCP信息,指示处理单元401a/401c在存储器位置403a的地址上启动了高速缓存未命中。
在一些实施例中,CCP日志记录器117b使处理器日志记录第三CCP消息,该消息指示第一处理单元从第二处理单元获得与特定存储器地址重叠的高速缓存内的第二高速缓存行。例如,图4B提供了一个示例400b,其中处理单元401b从处理单元401a获取存储器位置403a的高速缓存副本。在示例400b中,CCP日志记录器117b将一个或多个CCP消息日志记录到组件跟踪112a中,提供处理单元401b的一个或多个指示,该处理单元已从处理单元401a获得存储器位置403a,CCP消息处理单元401的副本发送到处理单元401b。
在一些实施例中,CCP日志记录器117b使处理器将一个或多个CCP消息日志记录到第一跟踪中,该消息指示多个处理单元中的一个或多个从高速缓存中取出。例如,图4C提供了一个示例400c,其中处理单元401a和/或401b将其存储器位置403a的副本逐出到系统存储器403。在示例400b中,CCP日志记录器117b的实施例将一个或多个CCP消息日志记录到组件跟踪112a中,提供了这些逐出的一个或多个指示。
在一些实施例中,执行上下文包括第一执行上下文,并且第二执行上下文发起写入第一执行上下文的存储空间。在这些实施例中,动作512(即,处理第二执行上下文向第一执行上下文的存储器空间的写入)包括外部活动处理机117e,它执行以下至少一项来处理写入:(i)日志记录至少一个存储器地址或写入值,(ii)逐出与写入的存储器地址重叠的高速缓存行,(iii)将与写入的存储器地址相对应的存储器页标记为需要日志记录,或(iv)启动陷入处理机,该陷入处理机日志记录与存储器地址相对应该的存储器页。
在一些实施例中,外部活动处理机117e日志记录存储器地址或写入值中的至少一个。在一个示例中,外部活动处理机117e将写操作日志记录到组件跟踪112a的数据流中。在实施例中,当将写入日志记录到组件跟踪112a的数据流中时,第一跟踪包括第一跟踪数据流,并且日志记录写入值包括以下至少一个:(i)将写入值日志记录到加密的第二跟踪数据流中,或在第一跟踪数据流内加密写入值。在另一个示例中,外部活动处理机117e通过调用存储器快照管理器118b,在组件跟踪112b中创建一个或多个快照,以捕获被写操作修改的任何存储器位置,从而与外部活动处理机118d协调以日志记录写操作。
在一些实施例中,外部活动处理机117e会逐出与写入的存储器地址重叠的高速缓存行,或将其标记为无效。在一个示例中,外部活动处理机117e指示高速缓存刷新器116将任何写入高速缓存行从高速缓存107中移出或失效,并放入系统存储器103中。通过这样做,如果第一执行上下文随后访问与移出/失效高速缓存行重叠的存储器地址,CCP日志记录器117b将记录与访问相关的适当CCP消息。在一些实施例中,外部活动处理机117e还与外部活动处理机118d协调,以调用存储器快照管理器118b对与逐出的数据相对应的系统存储器103的至少一部分进行快照(例如,进入组件跟踪112b)和/或日志记录写操作(例如,写入组件跟踪112b)。
在一些实施例中,外部活动处理机117e将与写入的存储器地址相对应的存储器页标记为需要日志记录。在一个示例中,外部活动处理机117e与外部活动处理机118d协调,将与写入对应的存储器页(例如,通过PTE或PDE,在存储在系统存储器103中的数据结构内,等等)标记为需要随后日志记录(例如,如果随后由第一执行上下文访问)。
在一些实施例中,外部活动处理机118d启动陷入处理机,该陷入处理机日志记录与存储器地址对应的存储器页面。在一个示例中,外部活动处理机117e触发一个中断,该中断导致跟踪器118执行一个陷入处理机,该陷入处理机将与存储器地址对应的存储器页日志记录到组件跟踪112b中。
在一些实施例中,动作513(即,日志记录非确定性指令的副作用)包括将执行上下文的至少一个非确定性处理器指令的执行副作用日志记录到第一跟踪中。在一个示例中,非确定性指令日志记录器117d通过第一次执行来检测非确定性指令的执行,并将该指令执行的副作用日志记录到组件跟踪112a中。在一些实施例中,通过记录一个或多个寄存器106a的值来日志记录这些副作用。
在实施例中,第一跟踪(例如,在方法500b的操作期间主要由跟踪器117记录的组件跟踪112a)和第二个跟踪(如,在方法500a的操作期间由跟踪剂118记录的主要组件跟踪112b)可组合以重放第一执行上下文的执行。在一些实施例中,第一跟踪和第二跟踪是可组合的,至少部分基于将提供第一跟踪内事件的至少部分排序的第一时间戳和/或计数与提供第二跟踪内事件的最少部分排序的第二时间戳和(或)计数进行比较。
在实施例中,第一跟踪和第二跟踪可组合以重放第一执行上下文的执行,其基于使用日志记录到第一跟踪中的一个或多个CCP消息,来识别被日志记录到第二跟踪内的一个以上存储器快照中并且被多个处理单元中的至少一个所消耗的存储器值。例如,如结合图4A-4C所讨论的,基于系统存储器403的初始存储器快照(例如,在组件跟踪112b内),并且至少基于CCP日志记录器117b日志记录的CCP消息(在组件跟踪112a内),示例400a-400c中的存储器访问是可再现的。例如,组件跟踪112a中的CCP消息可用于标识存储器地址(当请求存储器地址时,可能具有执行时间范围),然后该存储器地址可用于确定组件跟踪112b中的值(例如,存储器快照306中的值)。
在实施例中,第一跟踪和第二跟踪可组合以重放第一执行上下文的执行,其基于使用被日志记录到第一跟踪中的一个或多个CCP消息来识别多个处理单元中的第一所消耗的存储器值,该存储器值先前由多个处理单位中的第二个所写入。例如,如图4B所述,在示例中,400b处理单元401b从处理单元401a(之前已写入其存储器位置403a的高速缓存副本)获取存储器位置403a的高速缓存副本,以及CCP日志记录器117b将CCP消息日志记录到组件跟踪112a中,以提供处理单元401b已从处理单元401a获得存储器位置403a的指示。因此,这些CCP消息可用于重现该活动(例如,基于日志记录的CCP消息的排序,在一些实施例中,该排序基于与这些消息相关的时间戳和/或计数,基于CCP消息固有的排序等)。
在实施例中,跟踪器117仅在通常为处理器102启用日志记录和/或为当前正在执行的上下文启用日志记录时工作。因此,在一些实施例中,处理器确定针对至少一个处理器或执行上下文启用日志记录,并且处理器至少基于针对处理器或执行上下文中的至少一个启用了日志记录而日志记录可用于从存储在第二跟踪中的一个或多个存储器快照获取与特定存储器地址对应的存储器值的信息。
在一些实施例中,跟踪器117确定与存储器访问的目标存储器地址相关联的存储器区域是否已标记为被日志记录或未被日志记录(例如,通过PTE或PDE中的一个或多个标志,通过存储在系统存储器103中的数据结构中的映射,通过存储于寄存器106a中的映射等),如果与目标存储器地址相关联的存储器区域被标记为未被日志记录,则跟踪器117禁止日志记录存储器访问。因此,在一些实施例中,方法500b包括确定是否为对应于特定存储器地址的存储器区域启用日志记录,以及至少基于是否针对存储器区域而启用了日志记录,确定是否日志记录可用于从存储在第二跟踪中的一个或多个存储器快照获取与特定存储器地址对应的存储器值的信息。
在一些实施例中,CCP日志记录器117b避免日志记录用于存储器访问的CCP消息,或未高速缓存读取日志记录器117c避免日志记录存储器访问,如果已标记为以其他方式可重构或可预测的访问的目标存储器地址(例如,通过访问存储器映射文件、通过访问存储的存储器快照、通过模拟存储器映射硬件设备、通过再现已知行为、通过以已知方式组合可用数据等)。因此,在一些实施例中,存储器访问检测器117a确定存储器访问的目标是只读存储器位置,并且至少基于针对只读存储器位置的存储器访问,CCP日志记录器117b避免日志记录用于存储器访问的CCP消息,或者无高速缓存读取日志记录器117c避免日志记录用于存储器访问的无高速缓存读取。
如前所述,处理器102与其高速缓存107形成一个准封闭系统,因此,通过从执行跟踪112重构流入这些高速缓存107的数据(加上非确定性指令、未高速缓存读取等),可以实现本文描述的执行跟踪112(即,包括组件跟踪112a和112b)的回放。组件跟踪112a中的CCP数据提供有关数据何时通过高速缓存未命中流入高速缓存107的信息,而高速缓存未命中所流入的数据可以从组件跟踪112b中的存储器快照和/或从执行跟踪112的回放直到高速缓存未命中点获得。
因此,本文描述的至少一些实施例将执行跟踪分离为组件跟踪。在实施例中,将执行跟踪分离为组件跟踪支持数据分离,并能够使用不同的数据安全策略、不同的保护等将组件跟踪存储到不同的安全域中。这保护了敏感的存储器值,例如PI I、加密密钥等,同时提供许多与更传统的基于高速缓存的记录技术相同的机会来减少记录开销和/或减少记录到执行跟踪中的数据量。在实施例中,与更传统的基于高速缓存的记录技术相比,将执行跟踪分离为组件跟踪也支持减少存储器带宽的使用。具体而言,本文所述的至少一些实施例记录了在多个处理单元之间通信的CCP消息的至少一部分,因为这些处理单元对执行上下文执行存储器访问以进入第一组件跟踪,并将至少一部分系统存储器的一个或多个快照记录到第二组件跟踪。虽然第一组件跟踪包含足够的信息,支持分析和/或调试执行上下文(例如,分析执行上下文使用的处理器高速缓存),但第一组件追踪缺少足够的信息来实际重播执行上下文的记录执行。尽管如此,通过将第一组件跟踪中包含的信息与第二个组件跟踪包含的信息相结合,可以重播执行上下文的记录执行。
尽管已经用特定于结构特征和/或方法行为的语言描述了主题,但应当理解,所附权利要求中定义的主题不一定局限于上述特征或行为,或者上述行为的顺序。相反,所述特征和行为被披露为实施权利要求的示例形式。
本公开可以在不脱离其基本特征的情况下以其他具体形式体现出来。所描述的实施例在所有方面都应被视为只是说明性的,而不是限制性的。因此,本公开的范围是由所附的权利要求书而不是由上述的描述来表示。在权利要求书的含义和等效范围内的所有变化都将被纳入其范围。当在所附权利要求中介绍要素时,“一个”、“一种”、“该”和“所述”等词意指有一个或多个要素。术语“包含”、“包括”和“具有”意在包含,并意味着除了所列要素外,可能还有其他要素。
Claims (15)
1.一种计算机系统(101),包括:
处理器(102),包括多个处理单元(106)和高速缓存(107);
存储器(103);以及
计算机可读介质(104),其上存储有计算机可执行指令,所述指令能够由所述处理器执行,以使所述计算机系统基于将高速缓存一致性协议(CCP)消息记录到第一跟踪并且基于将一个或多个存储器快照记录到第二跟踪来记录可重放执行跟踪,所述CCP消息可用于从一个或多个存储器快照获得存储器值,所述计算机可执行指令包括所述处理器可执行以使所述计算机系统至少如下执行的指令:
确定(118)将要启用对第一执行上下文的由所述多个处理单元的执行的跟踪;以及
基于确定将要启用对所述第一执行上下文的执行的跟踪,至少如下执行:
启动(118b)所述第一执行上下文的存储器空间的一个或多个存储器快照向所述第二跟踪中的日志记录;以及
启用(118c)所述处理器的硬件跟踪特征,其使所述处理器向所述第一记录中日志记录一个或多个CCP消息,所述一个或多个CCP消息响应于所述多个处理单元中的一个或多个对所述第一执行上下文的所述存储器空间的存储器访问而生成;以及
在启用所述处理器的所述硬件跟踪特征之后,结合第二执行上下文的执行,执行(118d)以下至少一项:
将所述第二执行上下文向所述第一执行上下文的所述存储器空间的写入,日志记录到所述第一跟踪或所述第二跟踪的一个或多个中;
将所述第二执行上下文向所述第一执行上下文的所述存储器空间中的映射文件的身份,日志记录到所述第二跟踪中;
至少基于所述第二执行上下文对所述高速缓存中与所述第一执行上下文的存储器空间中的存储器位置重叠的高速缓存行进行写入,将所述高速缓存行从所述高速缓存中逐出或标记为无效;或
至少基于所述第二执行上下文对所述第一执行上下文的所述存储器空间内的存储器区域进行写入,将所述存储器区域标记为需要结合所述第一执行上下文的执行而被日志记录。
2.根据权利要求1所述的计算机系统,所述计算机可执行指令还包括所述处理器可执行的指令,用以使所述计算机系统加密所述第二跟踪。
3.根据任意前述权利要求所述的计算机系统,其中启用所述处理器的所述硬件跟踪功能还使所述处理器从所述高速缓存刷新(116)与所述第一执行上下文的存储器空间重叠的至少一个高速缓存行。
4.根据任意前述权利要求所述的计算机系统,其中所述第一跟踪和所述第二跟踪是能够组合,以重放所述第一执行上下文的执行。
5.根据权利要求4所述的计算机系统,其中基于使用被日志记录到所述第一跟踪中的所述一个或多个CCP消息来标识被日志记录到所述第二跟踪中的所述一个或多个存储器快照中并且由所述多个处理单元中的至少一个消耗的存储器值,所述第一跟踪和所述第二跟踪是能够组合的,以重放所述第一执行上下文的执行。
6.根据权利要求4所述的计算机系统,其中基于使用被日志记录到所述第一跟踪中的所述一个或多个CCP消息来标识所述多个处理单元中的第一处理单元所消耗、先前由所述多个处理单元中的第二处理单元消耗的存储器值,所述第一跟踪和所述第二跟踪是能够组合的,以重放所述第一执行上下文的执行。
7.根据任意前述权利要求所述的计算机系统,其中启动对所述一个或多个存储器快照的日志记录包括:启动对部分存储器快照的日志记录。
8.根据权利要求7所述的计算机系统,其中所述部分存储器快照不包括以下至少之一:(i)所述第一执行上下文的所述存储器空间内的被页出的存储器页,或(ii)所述第一执行上下文的所述存储器空间内未被所述第一执行上下文访问的存储器页。
9.根据任意前述权利要求所述的计算机系统,其中启动对所述一个或多个存储器快照的日志记录包括:启动对所述第一执行上下文的所述存储器空间内的一个或多个存储器区域的追踪,所述一个或多个存储器区域被所述多个处理单元中的至少一个访问。
10.根据任意前述权利要求所述的计算机系统,其中所述计算机系统日志记录所述第二执行上下文向所述第一执行上下文的所述存储空间的写入。
11.根据权利要求10所述的计算机系统,其中日志记录所述第二执行上下文的所述写入包括:将直接存储器访问(DMA)操作的结果日志记录到所述第二跟踪中。
12.根据任意前述权利要求所述的计算机系统,其中所述计算机系统日志记录所述第二执行上下文向所述第一执行上下文的所述存储空间映射的所述文件的所述身份。
13.根据任意前述权利要求所述的计算机系统,其中所述计算机系统逐出(118a)与所述第一执行上下文的存储器空间中的所述存储器位置重叠并且由所述第二执行上下文写入的所述高速缓存行。
14.根据任意前述权利要求所述的计算机系统,其中,至少基于所述第二执行上下文已对所述第一执行上下文的所述存储器空间内的所述存储区域进行写入,所述计算机系统将所述存储器区域标记为需要结合所述第一执行上下文的执行而被日志记录。
15.根据权利要求14所述的计算机系统,其中,结合所述第一执行上下文的后续执行,所述计算机系统将所述存储器区域的至少一部分日志记录到所述第二跟踪中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
LULU101767 | 2020-05-05 | ||
LU101767A LU101767B1 (en) | 2020-05-05 | 2020-05-05 | Recording a memory value trace for use with a separate cache coherency protocol trace |
PCT/US2021/030220 WO2021225895A1 (en) | 2020-05-05 | 2021-04-30 | Recording a memory value trace for use with a separate cache coherency protocol trace |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115552381A true CN115552381A (zh) | 2022-12-30 |
Family
ID=70614500
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180033358.2A Pending CN115552381A (zh) | 2020-05-05 | 2021-04-30 | 记录存储器值跟踪以与独立高速缓存一致性协议跟踪一起使用 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20230350804A1 (zh) |
EP (1) | EP4118532A1 (zh) |
CN (1) | CN115552381A (zh) |
LU (1) | LU101767B1 (zh) |
WO (1) | WO2021225895A1 (zh) |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6139689B2 (ja) * | 2012-10-22 | 2017-05-31 | インテル・コーポレーション | 装置 |
GB2532232A (en) * | 2014-11-12 | 2016-05-18 | Ibm | Verifying a graph-based coherency verification tool |
US9471313B1 (en) * | 2015-11-25 | 2016-10-18 | International Business Machines Corporation | Flushing speculative instruction processing |
US10031834B2 (en) * | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
US9934127B1 (en) * | 2017-03-08 | 2018-04-03 | Microsoft Technology Licensing, Llc | Indexing a trace by insertion of key frames for replay responsiveness |
US10089230B1 (en) * | 2017-04-01 | 2018-10-02 | Intel Corporation | Resource-specific flushes and invalidations of cache and memory fabric structures |
US10459824B2 (en) * | 2017-09-18 | 2019-10-29 | Microsoft Technology Licensing, Llc | Cache-based trace recording using cache coherence protocol data |
US10481998B2 (en) * | 2018-03-15 | 2019-11-19 | Microsoft Technology Licensing, Llc | Protecting sensitive information in time travel trace debugging |
US11474871B1 (en) * | 2019-09-25 | 2022-10-18 | Xilinx, Inc. | Cache coherent acceleration function virtualization |
-
2020
- 2020-05-05 LU LU101767A patent/LU101767B1/en active IP Right Grant
-
2021
- 2021-04-30 WO PCT/US2021/030220 patent/WO2021225895A1/en unknown
- 2021-04-30 CN CN202180033358.2A patent/CN115552381A/zh active Pending
- 2021-04-30 US US17/921,067 patent/US20230350804A1/en active Pending
- 2021-04-30 EP EP21726534.7A patent/EP4118532A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP4118532A1 (en) | 2023-01-18 |
LU101767B1 (en) | 2021-11-05 |
WO2021225895A1 (en) | 2021-11-11 |
US20230350804A1 (en) | 2023-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7152474B2 (ja) | キャッシュコヒーレンスプロトコルデータを用いたキャッシュベーストレース記録 | |
US20220269615A1 (en) | Cache-based trace logging using tags in system memory | |
US20190196928A1 (en) | Efficient breakpoint detection via caches | |
US20230176971A1 (en) | Recording a cache coherency protocol trace for use with a separate memory value trace | |
US12013793B2 (en) | Memory address compression within an execution trace | |
US20230342282A1 (en) | Memory page markings as logging cues for processor-based execution tracing | |
US20240193092A1 (en) | Processor support for using cache way-locking to simultaneously record plural execution contexts into independent execution traces | |
US20220269614A1 (en) | Treating main memory as a collection of tagged cache lines for trace logging | |
LU101767B1 (en) | Recording a memory value trace for use with a separate cache coherency protocol trace | |
US12032472B2 (en) | Physical memory address omission or obfuscation within an execution trace | |
LU102708B1 (en) | Physical memory address omission or obfuscation within an execution trace | |
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 | |
US11960406B2 (en) | Omitting processor-based logging of separately obtainable memory values during program tracing | |
US20240184688A1 (en) | Processor support for using memory page markings as logging cues to simultaneously record plural execution contexts into independent execution traces | |
CN116868172A (zh) | 将主存储器视为跟踪日志记录的标记高速缓存行的集合 | |
EP4295233A1 (en) | Treating main memory as a collection of tagged cache lines for trace logging |
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 |