CN115485668A - 存储器页标记作为基于处理器的执行跟踪的日志记录线索 - Google Patents

存储器页标记作为基于处理器的执行跟踪的日志记录线索 Download PDF

Info

Publication number
CN115485668A
CN115485668A CN202180033402.XA CN202180033402A CN115485668A CN 115485668 A CN115485668 A CN 115485668A CN 202180033402 A CN202180033402 A CN 202180033402A CN 115485668 A CN115485668 A CN 115485668A
Authority
CN
China
Prior art keywords
memory
logged
logging
processor
context
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202180033402.XA
Other languages
English (en)
Inventor
J·莫拉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN115485668A publication Critical patent/CN115485668A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • G06F11/3072Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3037Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/885Monitoring specific for caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/608Details relating to cache mapping

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Debugging And Monitoring (AREA)

Abstract

基于高速缓存的跟踪是基于将存储器区域分类为被日志记录还是未被日志记录。计算机系统标识第一上下文的第一存储器空间内的第一存储器区域,并确定第一上下文处于日志记录状态。计算机系统配置数据结构以将第一存储器区域分类为被日志记录。该数据结构还将对应于第二上下文的第二存储器区域分类为未被日志记录。计算机系统向处理器公开数据结构。在检测到处理单元的存储器访问时,处理器使用对以下一项多项的确定来启动日志记录动作或避免日志记录动作:(i)目标存储器地址被分类为被日志记录还是未被日志记录,(ii)执行上下文进行日志记录还是不进行日志记录,或(iii)存储器访问的类型。

Description

存储器页标记作为基于处理器的执行跟踪的日志记录线索
技术领域
本公开涉及用于降低与记录计算机程序的可重放执行跟踪相关联的计算开销的系统、方法和设备。
背景技术
跟踪和纠正不期望的软件行为是软件开发中的一项核心活动。不期望的软件行为可能包括许多事情,例如执行崩溃、运行时异常、执行性能缓慢、数据结果不正确、数据损坏等。不期望的软件行为是由多种因素触发的,如数据输入、用户输入、竞争条件(例如,访问共享资源时)等。由于触发因素的多样性,不期望的软件行为通常很少见,看起来是随机的,极难再现。因此,对于开发人员来说,识别给定的不想要的软件行为通常是非常耗时和困难的。一旦确定了一个不希望出现的软件行为,确定其根本原因通常又是非常耗时和困难的。
开发人员已经使用了多种方法来识别不希望出现的软件行为,然后识别应用的代码中导致不希望出现软件行为的位置。例如,开发人员经常针对不同的输入(例如,单元测试)测试应用的代码的不同部分。另一个例子是,开发人员经常考虑在调试器中执行应用的代码(例如,设置断点/观察点,在代码执行时单步执行代码行等)。另一个例子是,开发人员经常在分析器中观察代码执行行为(例如,计时、覆盖率)。另一个例子是,开发人员经常在应用的代码中插入诊断代码(例如,跟踪语句)。
尽管传统的诊断工具(如调试器、分析器等)对“实时”正向执行代码进行操作,但新兴的诊断工具支持“历史”调试(也称为“时间旅行”或“反向”调试),其中执行上下文的至少一部分的执行被记录到一个或多个跟踪文件(即执行跟踪)中。使用一些跟踪技术,执行跟踪可以包含“位精确”的历史执行跟踪数据,这使得跟踪的执行上下文的记录部分可以被虚拟地“重放”(例如,通过仿真),直到单个指令的粒度(例如,机器代码指令、中间语言代码指令等)。因此,使用“位精确”的跟踪数据,诊断工具使开发人员能够推断记录的主题上下文的先前执行,而不是传统的调试,后者仅限于“实时”正向执行。例如,使用可重放的执行跟踪,一些历史调试器提供用户体验,支持向前和向后断点/观察点,使代码能够向前和向后单步执行等。另一方面,一些历史探查器能够从先前执行的代码中导出代码执行行为(例如,计时、覆盖率)。
一些用于记录执行跟踪的技术主要基于记录对微处理器(处理器)高速缓存的流入来操作。然而,由于现代处理器通常以几万到几十万MIPS(每秒数百万条指令)的速度执行,程序线程的可重放执行跟踪可以捕获大量信息,即使只捕获线程执行的几分之一秒。因此,可重放的执行跟踪在存储器和/或磁盘上的大小迅速增大。一些基于高速缓存的跟踪技术通过在处理器的高速缓存中添加“跟踪位”来减少跟踪的大小,这些跟踪位用于跟踪每条高速缓存线是否已被用日志记录到跟踪中。然而,将跟踪位添加到处理器高速缓存中会使处理器的物理集成电路(1C)芯片尺寸增加很多。此外,实现控制这些跟踪位的逻辑进一步增加了1C芯片大小,并将跟踪开销引入存储器访问指令的关键执行路径。因此,添加跟踪位和相应的控制逻辑会导致显著的处理器性能和设计权衡,并有可能在处理器制造期间通过增加1C芯片尺寸而降低产量。
发明内容
本文描述的至少一些实施例减轻了与使用基于高速缓存的跟踪位来记录可重放的执行跟踪相关联的处理器性能、设计和制造挑战。具体而言,本文描述的至少一些实施例通过使用存储器标记作为用于基于处理器的执行跟踪的日志记录线索(cue),在不牺牲其使用的好处的情况下,消除了处理器高速缓存内对跟踪位的使用。这些实施至少部分地基于对相应的执行上下文是否启用或禁用日志记录而将不同的存储器区域(诸如,物理存储器页)分类为被日志记录或未被日志记录。当处理存储器访问时,处理器访问这些存储器标记,以确定存储器访问所针对的存储器区域被分类为被日志记录还是未被日志记录。然后,处理器使用该决策作为输入,以确定是否对该存储器访问执行日志记录动作。
鉴于本文的公开,可以理解的是,当与使用基于高速缓存的跟踪位相比,使用存储器标记作为基于处理器的执行跟踪的日志记录线索降低了处理器设计的复杂性,将跟踪逻辑从处理器的关键执行路径中推开,并且可以在较小的IC芯片尺寸内实施。同时,使用存储器标记作为日志记录线索,可以在许多与使用基于高速缓存的跟踪位相同的方面减少跟踪尺寸。例如,使用存储器标记可以消除对许多以前是高速缓存逐出的高速缓存流入的冗余日志记录,并将日志记录限制在仅与实际处于日志记录状态的执行上下文相关联的存储器空间。
实施例涉及用于向处理器传输存储器中的区域的分类为被日志记录或未被日志记录的方法、系统和计算机程序产品。在这些实施例中,计算机系统包括处理器和存储器,其标识被配置为在处理器执行的第一上下文,并标识存储器内的第一区域。第一区域对应于第一上下文的第一存储器空间的至少一部分。计算机系统确定第一上下文被指派为日志记录状态,并用第一区域的第一分类将数据结构配置为被日志记录。该数据结构还包括存储器内的第二区域中的第二分类为未被日志记录。第二区域与第二上下文的第二存储器空间的至少一部分相对应,其被配置用于在处理器处执行,并被指派为非日志记录状态。计算机系统向处理器传输以下至少一项:第一分类、第二分类或对数据结构的引用。
实施例还涉及用于处理器访问存储器中的区域的分类为被日志记录或未被日志记录的方法、系统和计算机程序产品。在这些实施例中,包括一个或多个处理单元和高速缓存的处理器执行控制逻辑,该控制逻辑使处理器检测由一个或多个处理单元中的特定处理单元的存储器访问。该存储器访问的目标在于特定存储器地址。至少基于检测到特定处理单元的存储器访问,处理器确定以下一项或多项:(i)特定存储器地址被分类为被日志记录还是未被日志记录,(ii)特定处理单元在日志记录上下文内执行还是在非日志记录上下文内执行,或(iii)存储器访问的类型。基于确定,处理器执行以下之一:(a)至少基于以下一项或多项启动日志记录动作:(i)特定处理单元在日志记录上下文内执行,或者(ii)特定存储器地址被分类为被日志记录;或者(b)至少基于以下一项或多项避免启动日志记录动作:(i)特定存储器地址被分类为未被日志记录,或者(ii)存储器访问为写入。
提供此发明内容是为了以简化的形式介绍一些概念,这些概念将在下文的详细说明中进一步描述。本摘要并非旨在确定所要求保护的标的物的关键特征或基本特征,也并非旨在帮助确定所要求的主题的范围。
附图说明
为了描述获得上述以及本公开其他优点和特征的方式,将通过参考附图中所示的具体实施例,对上述简要描述的本公开进行更具体的描述。了解到这些附图仅描述了本公开的典型实施例,因此不应被视为限制其范围,将通过使用附图对本公开进行更具体和详细的描述和解释,其中:
图1A示出了示例性计算环境,该示例性计算环境基于将存储器的区域分类为被日志记录或未被日志记录,并且基于处理器使用这些分类做出日志记录决策而促进跟踪处理器执行;
图1B示出了处理器控制逻辑的示例,该处理器控制逻辑基于存储器的区域的分类为被日志记录或未被日志记录而做出日志记录决策;
图1C示出了操作环境的示例,该操作环境将存储器的区域分类为被日志记录或未被日志记录的;
图2示出了示例处理器高速缓存;
图3示出了执行跟踪的示例;
图4A和图4B示出了物理到虚拟存储器地址空间映射的示例;
图5示出了用于计算机系统向处理器传输存储器中的区域的分类为被日志记录或未被日志记录,以及用于处理器访问存储器中的区域的分类为被日志记录或未被日志记录,以作为跟踪日志记录的一部分的示例方法的流程图;以及
图6示出了示例表,其显示潜在的日志记录决策的矩阵。
具体实施方式
本文描述的至少一些实施例基于将不同的存储器区域(诸如,物理存储器页)分类为被日志记录或未被日志记录,至少基于对相应的执行上下文启用日志记录还是禁用日志记录,来执行基于高速缓存的跟踪。然后,在处理存储器访问时,处理器访问这些存储器标记,以确定存储器访问所针对的存储器区域被分类为被日志记录还是未被日志记录。处理器使用该确定作为输入来确定是否针对存储器访问执行日志记录动作。
为了实现这些和其他实施例,图1A示出了示例计算环境100,该计算环境基于将存储器的区域分类为被日志记录或未被日志记录,并基于处理器使用这些分类做出日志记录决策,来促进跟踪处理器执行。特别地,计算环境100包括专用或通用计算机系统101,该计算机系统被配置为向处理器传输存储器中的区域的分类,该分类为被日志记录或未被日志记录。相应地,计算机系统101包括一个或多个处理器102,被配置为访问存储器中的区域的分类为被日志记录或未被日志记录,作为跟踪日志记录的一部分。如图所示,计算机系统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、一个或多个翻译查询缓冲区(TLB)108、以及控制逻辑109。通常,每个处理单元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被划分为单独的层级、层或级别,例如第1层(LI)、第2层(L2)和第3层(L3)等。根据处理器实现,这些层中的一个层可以是处理器102的一部分,本身(例如,LI和L2),和/或可以与处理器102分离(例如,L3)。因此,在一些实施例中,(多个)高速缓存107包括这些层中的一个(LI),而在其他实施例中(多个)高速缓存107包括这些层中的多个层(例如,LI和L2,甚至L3)。在一些实施例中,(多个)高速缓存107中的至少一个层可以是(多个)处理单元106的部分。
在实施例中,(多个)高速缓存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,则其可能缺少对虚拟存储器寻址的支持。
在实施例中,每个处理器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的机器代码指示和/或运转时数据)。系统存储器103和持久存储104还可以存储其他数据,诸如,一个或多个可重放执行跟踪(即,存储在系统存储器103中的(多个)执行跟踪112’和/或存储在持久存储104中的执行跟踪112)和一个或多个数据结构113,其支持在跟踪应用111期间促进操作环境110与控制逻辑109之间的通信。
在图1A中,操作环境110被显示为潜在地包括管理程序110a,以及包括一个或多个操作系统110b。相应地,操作环境运行时110’显示为可能包括管理程序运行时110a’,以及包括一个或多个操作系统运行时110a’。例如,在一些实施例中,操作环境110包括直接在计算机系统101的硬件(例如,处理器102、系统存储器103和持久存储器104)上执行的管理程序110a,以及在管理程序110a上执行的一个或多个操作系统110b。然而,在其他实施例中,操作环境110包括直接在计算机系统101的硬件(例如处理器102、系统存储器103和持久存储器104)上执行的操作系统110b。
在实施例中,操作环境110和控制逻辑109协作以至少基于使用存储器标记作为用于基于处理器的执行跟踪的记录线索来记录(多个)处理器102处的代码执行的一个或多个可重放的执行跟踪112/112’。更特别地,在实施例中,操作环境110和控制逻辑109协作以基于将不同的存储器区域(诸如,系统存储器103中的物理存储器页)分类为被日志记录或未被日志记录而记录(多个)可重放的执行跟踪112/112’,该分类进而基于对于相应的执行上下文是否启用或禁用日志记录。在实施例中,执行上下文对应于在操作系统110b之上执行的进程、操作系统110b、由管理程序110a创建的虚拟机/存储器分区、飞地、嵌套的管理程序等的至少一个。在实施例中,使用存储器标记作为用于基于处理器的执行跟踪的日志记录线索至少基于以下项来在跟踪期间做出日志记录决策:(i)操作环境110维护一个或多个数据结构113,该数据结构将不同的存储器区域分类为被日志记录和未被日志记录,以及(ii)处理器102使用这些数据结构113。
在实施例中,操作环境110和控制逻辑109用于记录可重放的执行跟踪112/112’的跟踪技术至少基于(多个)处理器102在代码执行期间记录到其(多个)高速缓存107的流入。在实施例中,每个可重放的执行跟踪112/112’包括在上下文在(多个)处理器102处执行时,对应上下文(例如,进程、操作系统、虚拟机、飞地、管理程序等)的执行的“位精确”记录。如本文所用,可重放的执行跟踪是该上下文的执行活动的“位精确”记录。该位精确记录使此前作为处理单元106处的上下文的一部分执行的机器代码指令能够在稍后重放,以便在重放期间,这些机器代码指令以相同的顺序重新执行,并使用与跟踪记录期间相同的数据。尽管如前所述,可以使用多种可能的位精确跟踪方法,但本文的实施例基于记录在上下文执行期间到高速缓存107的至少一些流入来记录位精确执行跟踪。通过在上下文执行期间记录这些流入中的至少一些流入,该上下文的可重放的执行跟踪112/112’捕获了作为上下文一部分执行的机器代码指令执行的至少一些存储器读取。
在实施例中,每个可重放的执行跟踪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能够记录在处理器102处执行的上下文的执行的位精确表示,这些数据能够在处理器的处理单元106执行上下文的代码时,将信息流重现到处理器的高速缓存107中。例如,一些记录这些流入的方法以每个处理单元为基础操作。这些方法涉及到,对于要跟踪的每个处理单元,在(多个)高速缓存107内记录高速缓存未命中的至少一个子集,以及执行期间将每个数据段带入(多个)高速缓存107的时间(例如,使用执行的指令计数或其他计数器)。在一些实施例中,这些方法还涉及对正在跟踪的每个处理单元记录由该处理单元的活动引起的任何未高速缓存的读取(即,从硬件组件和绕过(多个)高速缓存107的不可高速缓存存储器的读取),以及执行任何非确定性处理器指令的副作用(例如,在执行非确定性处理器指示后,(多个)寄存器106a的一个或多个值)。
图3示出了执行跟踪的示例(例如,(多个)执行跟踪112/112’中的一个)。具体而言,图3示出了执行跟踪300,其包括多个数据流301(即,数据流301a-301n)。在实施例中,每个数据流301表示不同上下文的执行,诸如从应用111的代码执行的不同线程。在示例中,数据流301a记录应用111的第一线程的执行,而数据流301n记录应用11的第n线程。如图所示,数据流302a包括多个数据分组302。由于记录在每个数据分组302中的具体数据可能不同,因此这些数据分组被示为具有不同的大小。在实施例中,当使用时间旅行调试技术时,数据分组302将输入(例如,寄存器值、存储器值等)记录到作为应用111的第一线程的一部分执行的一个或多个可执行指令中。在实施例中,存储器值是作为对高速缓存107的流入和/或作为未被高速缓存的读取而获得的。在实施例中,数据流301a还包括一个或多个关键帧303(例如,关键帧303a和303b),每个关键帧都记录了足够的信息,诸如寄存器和/或存储器值的快照,从而能够重放线程的先前执行,这从关键帧的点开始并继续前进。
在实施例中,执行跟踪还包括作为应用111的一部分执行的实际代码。因此,在图3中,每个数据分组302被示为包括非阴影数据输入部分304和阴影代码部分305。在实施例中,每个数据分组302的代码部分(如果有)包括基于相应数据输入执行的可执行指令。然而,在其他实施例中,执行跟踪省略了所执行的实际代码,而依赖于对应用111的代码的单独访问(例如,从持久存储104)。在这些其他实施例中,每个数据分组指定对应用程序二进制图像中的(多个)适当可执行指令的地址或偏移量。尽管未示出,但执行跟踪300可能包括存储一个或多个代码执行输出的数据流301。应注意,使用数据分组的不同数据输入和代码部分仅用于说明目的,并且可以以多种方式存储相同的数据,例如通过使用多个数据分组。
如果存在多个数据流301,则在实施例中,这些数据流包括排序事件。每个排序事件记录可以跨不同的执行上下文(诸如线程)排序的事件的发生。在一个示例中,排序事件对应于线程之间的交互,例如对线程共享的存储器的访问。因此,例如,如果跟踪到第一数据流(例如301a)中的第一线程写入同步变量,则第一排序事件将记录到该数据流(如301a)。稍后,如果跟踪到第二数据流(例如301b)的第二线程读取该同步变量,则第二排序事件被记录到该数据流(例如301b)中。这些测序事件具有内在的有序性。例如,在一些实施例中,每个测序事件都与单调递增的值相关联,单调递增的值定义了测序事件之间的总顺序。在一个示例中,记录到第一数据流中的第一排序事件被赋予值“1”,记录到第二数据流的第二排序事件被给予值“2”,依此类推。
如前所述,一些现有跟踪方法利用了对处理器高速缓存的修改,这些修改跟踪每个高速缓存线是否可以被认为已经被至少一个处理单元记录。在各种实现中,这些高速缓存修改扩展了处理器的一个或多个高速缓存,以包括额外的“日志记录”位(或标志),或保留一个或多个高速缓存线以供日志记录位使用。这些日志记录位使处理器能够针对每个高速缓存线标识消耗/记录高速缓存线的一个或多个处理单元。使用日志记录位可以使处理器的控制逻辑避免在处理单元转换到另一执行上下文(例如,另一线程、另一虚拟机、内核模式等)之后重新记录针对一个执行上下文的高速缓存线流入,如果该其他上下文没有修改高速缓存线。此外,使用日志记录位可以使针对一个上下文的跟踪条目能够引用已经代表另一上下文记录的数据。然而,如前所述,在高速缓存中使用日志记录位增加了处理器的IC芯片的物理尺寸和复杂性,并引入逻辑来管理关键代码执行路径的跟踪位。
作为基于高速缓存的日志记录位的替代方案,已经提到,在本文描述的实施例中,操作环境110和控制逻辑109至少基于使用存储器标记作为用于基于处理器的执行跟踪的日志记录线索,协作记录一个或多个可重放的执行跟踪112/112’。如前所述,在实施例中,操作环境110和控制逻辑109基于将诸如系统存储器103中的物理存储器页的不同存储器区域分类为被日志记录或未被日志记录,协作记录可重放的执行跟踪112/112’,哪些分类进而基于针对相应的执行上下文是否启用或禁用日志记录。如前所述,使用存储器标记作为用于基于处理器的执行跟踪的日志记录线索至少基于以下项来在跟踪过程中的日志记录决策:(i)操作环境110维护一个或多个数据结构113,这些结构113将不同的存储器区域分类为被日志记录和未被日志记录,以及(ii)(多个)处理器102使用这些数据结构113。
为了说明操作环境110和控制逻辑109如何实现上述功能的一些实施例,图IB示出了控制逻辑109的额外细节,包括控制逻辑109的实施例在基于存储器的区域的分类为被日志记录还是未被日志记录而做出日志记录决策时使用的组件(例如,存储器访问检测器114、存储器分类确定器115、日志记录状态确定器116、日志记录处理机117等)。此外,图1C示出了操作环境110的额外细节,包括跟踪器118的组件(例如,上下文标识符118a、存储器区域标识符118b、日志记录状态确定器118c、数据结构管理器118d等),操作环境110的实施例使用这些组件以便将存储器的区域分类为被日志记录或未被日志记录。所描述的控制逻辑109和操作环境110的组件以及任何子组件代表控制逻辑109和/或操作环境110根据本文描述的各种实施例可以实现或使用的各种功能。然而,应当认识到,所描述的组件(包括其标识、子组件和布置)仅被呈现以辅助描述本文所描述的控制逻辑109和/或操作环境110的各种实施例,并且这些组件不限制软件和/或硬件如何实现本文描述的控制逻辑109和/或操作环境110的各种实施例,或其特定功能。
作为操作环境110的一般介绍,管理程序110a和/或操作系统110b配置系统存储器103以支持在处理器102处执行多个执行上下文。在各种实施例中,这包括操作环境110将系统存储器103配置为支持存储器空间,这些存储器空间与一个或多个进程(例如,与(多个)应用111相对应)相对应,与操作系统110b的一个或多个操作系统相对应,与一个或多个存储器分区相对应(例如,由管理程序110a创建,这些存储器分区中的每个存储器分区可以执行操作系统110a中的至少一个),与飞地相对应,与嵌套的管理程序相对应,等等。在实施例中,配置系统存储器103以支持多个执行上下文的执行包括创建和配置一个或多个数据结构,诸如一个或多个PTE、一个或多个PDE、一或多个二级地址表(SLAT),等等,这些数据结构将系统存储器103中的一个或多个物理存储器页映射(或支持映射)到给定上下文的相应存储空间内的一个或多个虚拟存储器页。
跟踪器118增强了管理程序110a和/或操作系统110b,以支持跟踪(多个)处理器102处的一个或多个执行上下文的执行,包括创建和/或维护数据结构113,以供控制逻辑109用于确定给定存储器访问的目标已经被分类为被日志记录还是未被日志记录,并将该分类用作确定是否应将存储器访问用日志记录到执行跟踪112/112’中的线索。在实施例中,跟踪器118至少部分地作为管理程序110a的组件和/或作为操作系统110b中至少一个的内核模式组件执行。在其他实施例中,跟踪器118至少部分地作为操作系统110b中的至少一个的用户模式组件执行。在实施例中,跟踪器118具有多个部分,它们在以下两个或多个上下文中执行:(i)操作系统110b中至少一个的用户模式,(ii)操作系统110中至少一种的内核模式,或(iii)管理程序110a。在一些实施例中,跟踪器118被分布为管理程序110a的组件和/或(多个)操作系统110b中的至少一个,而在其他实施例中(例如,由应用111),跟踪器118是作为管理程序110a和/或作业系统110b的扩展提供的(例如,作为操作系统驱动程序、内核扩展、内核模块、管理程序模块或扩展等)。因此,即使示出跟踪器118作为操作环境110的一个组件执行(至少部分执行),但跟踪器118实际上可以由第三方提供给操作环境110。
上下文标识符118a标识由操作环境110配置用于在处理器102处执行的一个或多个执行上下文。在示例中,上下文标识符118a标识与一个(或多个)进程(例如,对应于(多个)应用111)对应的(多个)执行上下文、操作系统(例如,对应于(多个)操作系统110b)、存储器分区(例如,由管理程序110a创建)、飞地、嵌套的管理程序等。在实施例中,上下文标识符118a操作以标识在创建执行上下文时和/或创建执行上下文后的一些其他时间的给定执行上下文。
存储器区域标识符118b标识系统存储器103的一个或多个区域,这些区域被映射到由上下文标识符118a标识的执行上下文的存储器空间。在一些实施例中,存储器区域标识符118b标识系统存储器103的所有区域,这些区域被映射到所标识的上下文的存储器空间,而在其他实施例中,存储器区域标识符118b标识比所有区域少的区域。在一些实施例中,存储器区域标识符118b标识系统存储器103内和/或所标识的上下文的存储器空间内的多个连续区域,而在其他实施例中,存储器区域标识符118b标识系统存储器103内和/或所标识的上下文的存储器空间内的多个非连续区域。在一些实施例中,存储器区域标识符118b标识系统存储器103中与物理存储器页相对应的区域,而在其他实施例中,存储器区域标识符118b标识其他存储器区域大小,诸如高速缓存线大小或存储器的某些任意大小。
日志记录状态确定器118c确定由上下文标识符118a标识的执行上下文的日志记录状态。在实施例中,每个执行上下文被指派以下至少一项:日志记录状态(其中针对上下文启用执行跟踪)或非日志记录状态。在一些实施例中,执行上下文在创建上下文时被指派为非日志记录状态,并且仅在快速请求时才被指派为日志记录状态(例如,通过跟踪器118或与之相关的一些组件)。在实施例中,一些执行上下文在其存在期间在日志状态和非日志状态之间转换的次数。
数据结构管理器118d对数据结构113配置(多个)处理器102将记录哪些存储器区域,以及将不记录哪些存储器区域的线索。稍后将描述不同类型的数据结构113。在一些实施例中,当数据结构管理器118d或一些其他组件(例如,管理程序110a和/或操作系统110b)创建数据结构113时,数据结构113默认将存储器区域分类为未被日志记录。在这些实施例中,这些存储器区域的分类随后由数据结构管理器118d更改。然而,在其他实施例中,存储器区域分类是由数据结构管理器118d基于相应执行上下文的日志记录状态确定的。在实施例中,数据结构管理器118d将数据结构113的至少一部分传输至(多个)处理器102。稍后描述数据结构管理器118d与(多个)处理器102通信的方式示例。
作为对控制逻辑109的总体介绍,存储器访问检测器114检测执行执行上下文的处理单元106何时访问目标存储器地址。至少基于存储器访问检测器114检测到的存储器访问,存储器分类确定器115利用存储在数据结构113中的信息来确定与目标存储器地址对应的存储器区域被分类为被日志记录还是未被日志记录,日志记录状态确定器116确定由处理单元106执行的执行上下文处于日志记录状态还是非日志记录状态。在一些实施例中,存储器访问检测器114还确定存储器访问的类型,例如读取(加载)类型或写入(存储)类型。日志记录处理机117基于(i)与目标存储器地址对应的存储器区域的分类,(ii)执行上下文的日志记录状态,或(iii)存储器访问的类型中的一项或多项,来调用日志记录逻辑117a执行针对存储器访问的日志记录动作,或调用非日志记录逻辑117b以避免执行针对存储器访问的日志记录动作。
现在主要结合图5来现在更详细地描述控制逻辑109和操作环境110的进一步操作,图5示出了示例方法500的流程图,方法500用于计算机系统向处理器传输存储器中的区域的分类为被日志记录还未被日志记录,处理器基于访问作为跟踪日志记录的一部分的存储器中的区域的分类为被日志记录还是未被日志记录来做出日志记录决策。以下讨论涉及许多方法和方法动作。尽管方法动作可以按特定顺序讨论,或者可以在流程图中说明为以特定顺序发生,但除非特别说明,否则不需要特定顺序,或者因为动作被特别描述为依赖于在该动作执行之前完成的另一动作而需要特定顺序。
参考图5,方法500包括由操作环境(例如,管理程序110a和/或操作系统110b)执行的动作501-505,以及由处理器(例如,基于控制逻辑109的处理器102)执行的动作506-511。因此,方法500可以被视为由计算机系统101实现和执行的单个方法(包括操作环境110和处理器102),或者被视为分开的方法——一个方法由操作环境110实现并与操作环境110的执行相关联而执行(即方法500a,包括动作501-505),以及另一方法由处理器102单独实现并通过处理器102的操作而执行(即,方法500b,包括动作506-511)。
首先参考操作环境110,方法500a(例如,通过操作环境110的操作来执行)包括动作501,标识一个或多个执行上下文。在一些实施例中,动作501包括标识配置为在处理器处执行的第一上下文。在示例中,上下文标识符118a标识配置用于在处理器102处执行的执行上下文。在实施例中,在动作501中,上下文标识符118a标识对应于进程、操作系统、虚拟机、存储器分区、飞地或管理程序中至少一个的第一上下文。
如图所示,至少基于已执行动作501,方法500a进行至动作502,标识用于每个所标识的执行上下文的(多个)存储器区域,以及动作503,确定针对每个所标识的执行上下文的日志记录状态。在图5中,动作502和503被示为并行执行,但是可以理解,实施例可以备选地顺序地执行这些动作502或503(按任意顺序)。
在一些实施例中,动作502(即,标识每个所标识的执行上下文的(多个)存储器区域)包括标识存储器内的一个或多个第一区域,(多个)第一区域对应于第一上下文的第一存储器空间的至少一部分。在示例中,存储器区域标识符118b标识系统存储器103中的一个或多个区域,这些区域对应于动作501中标识的执行上下文的存储空间(例如,由操作系统110b为用户模式进程配置的虚拟存储器空间、与操作系统110b的内核模式对应的存储器空间、由管理程序110a为虚拟存储器分区配置的虚拟存储空间等)。
为了说明存储器区域标识符118b如何标识系统存储器103中与所标识的执行上下文相对应的(多个)区域,图4A示出了物理到虚拟存储器地址空间映射的示例400a。具体而言,示例400a示出了物理地址空间401,例如对应于系统存储器103中的物理地址。此外,示例400a示出了两个虚拟地址空间402和403。每个地址空间被示为包括多个可寻址存储器位置(即,用于物理地址空间401的物理存储器位置401a-l至401a-n,用于虚拟地址空间402的虚拟存储器位置402a-l至402a-n,以及用于虚拟地址空间403的虚拟存储器位置403a-l至403a-n)。此外,在每个地址空间中,这些可寻址存储器位置被示为被安排到不同的存储器页中(即,物理存储器页401b-l到401b-n用于物理地址空间401,虚拟存储器页402b-l到402b-n用于虚拟地址空间402,以及虚拟存储器页面403b-l至403b-n用于虚拟地址空间403)。尽管地址空间401-403被示为仅包含少量可寻址存储器位置,但地址空间401、402和403中的每个地址空间内的省略号表示这些地址空间可以包括比图示更多的可寻址存储器地址。此外,尽管为了便于说明,每个存储器页只示出了三个可寻址的存储器位置,但应当认识到,存储器页可以根据实现具有不同的大小,并且它们通常包括不止三个的可寻址存储器位置。值得注意的是,在示例400a中物理地址空间401被示为比虚拟地址空间402和403小,以强调物理地址空间和虚拟地址空间的大小不必相等,并且计算机系统中的可用物理存储器量通常小于提供给每个执行进程的虚拟存储器空间。
在示例400a中,虚拟地址空间403表示动作501中标识的第一上下文的第一存储器空间。如物理地址空间401中的物理存储器页401b-2和虚拟地址空间403中的虚拟存储器页403b-2之间的第一个箭头所示,存在映射到虚拟地址空间403的第一区域(即,虚拟存储器位置403a-4到403a-6)的物理地址空间401的第一区域。此外,如物理地址空间401中的物理存储器页401b-3和虚拟地址空间403中的虚拟存储器页403b-4之间的第二个箭头所示,存在映射到虚拟地址空间403的第二区域(即,虚拟存储器位置403a-7到403a-7)的物理地址空间401的第二区域(即,物理存储器位置401a-10到401a-12)。因此,在该示例中,存储器区域标识符118b可以将物理存储器页401b-2和401b-4标识为系统存储器103中的一个或多个第一区域,该第一区域对应于第一上下文的第一存储器空间的至少一部分。
在一些实施例中,动作503(即,确定每个所标识的执行上下文的日志记录状态)包括确定第一上下文被指派日志记录状态。在示例中,日志记录状态确定器118c确定第一可执行上下文(即,对应于虚拟地址空间403)已经被至指派了日志记录状态。例如,基于用户输入或基于策略,跟踪器118(或与之相关的某些组件)可能已经确定要在第一上下文执行期间跟踪第一上下文,并创建针对第一上下文被指派为日志记录状态的一些指示(例如,在系统存储器103中、在持久存储104中、在寄存器106a中,等等)。基于此指示,日志记录状态确定器118c确定第一上下文被指派日志记录状态。
方法500a还包括动作504,用(多个)执行上下文的日志记录分类来配置数据结构。在一些实施例中,动作503包括基于确定,用一个或多个第一区域的第一分类来配置数据结构,该第一分类为被日志记录。在示例中,数据结构管理器118d修改(多个)数据结构113以指示正在记录动作502中标识的(多个)第一存储器区域。参考图4A,对应于物理存储器位置401a-4至401a-6和401a-10至401a-12中的每个物理存储器位置的复选标记(√)指示这些物理存储器位置位于(多个)数据结构113中配置为被日志记录的系统存储器103的(多个)区域内。
此外,在动作503的一些实施例中,数据结构还包括存储器内的一个或多个第二区域第二分类,第二分类为未被日志记录,一个或更多第二区域对应于第二上下文的第二存储空间的至少一部分,第二上下文被配置为在处理器处执行,并被指派了非日志记录状态。在实施例中,第二上下文对应于进程、操作系统、虚拟机、存储器分区、飞地或管理程序中的至少一个。第二上下文的第二存储空间在图4A中由虚拟地址空间402表示。如物理地址空间401中的物理存储器页401b-l和虚拟地址空间402中的虚拟存储器页402b-2之间的第一个箭头所示,存在映射到虚拟地址空间402的第一区域(即,虚拟存储器位置402a-4到402a-6)的物理地址空间401的第一区域(即,物理存储器位置401a-l到401a-3)。在图4B中,对应于物理存储器位置401a-l到401a-3中的每个物理存储器位置的X标记(×)指示这些物理存储器位置位于数据结构113中配置为未被日志记录的系统存储器103的(多个)区域内。在一些实施例中,物理存储器位置401a-l至401a-3的分类为未被日志记录是通过方法500a的先前操作而实现的(即,其中动作501-503相对于第二上下文操作,第二上下文处于非日志记录状态)。在其他实施例中,物理存储器位置401a-l至401a-3的分类为未被日志记录是(多个)数据结构113内的默认分类。在这些其他实施例里,除非执行上下文被指派了日志记录状态,否则与该执行上下文相关联的任何物理存储器范围都被分类为未被日志记录。
(多个)数据结构113的确切形式因实施例而异。尽管数据结构113被描述在系统存储器103内,但在一些实施例中,它们至少部分地存储在寄存器106a或(多个)TLB 108中的一个或多个中。此外,尽管(多个)数据结构113被描述为与操作环境运行时110’分离,但是应当理解,在一些实施例中,(多个)数据结构113可以是操作环境运行时110’的一部分、至少部分(例如,如图1A中(多个)数据结构113和操作环境运行时间110’之间的箭头所示)。
在一些实施例中,(多个)数据结构113包括存储器页表,数据结构管理器118d修改这些页表内的一个或多个PTE和/或一个或多个PDE,以指示(多个)相应存储器页中的存储器地址被分类为被日志记录还是未被日志记录。在一些实施例中,数据结构管理器118d使用PTE和/或PDE内的一个或多个标志位指示被日志记录或未被日志记录的分类。在一些实施例中,操作环境110扩展PTE和/或PDE以包括用于信号发送日志记录状态的(多个)新标志位,并且数据结构管理器118d相应地修改这些新标志位。一些实施例利用PTE为该PTE覆盖的所有存储器页提供分类,并利用PDE为该PDE覆盖的所有PTE提供至少一个默认分类。在实施例中,PTE可以覆盖相应PDE的默认分类。例如,在动作504的一些实施例中,用第一区域的、作为被日志记录的第一分类配置数据结构包括配置与存储器中与第一区域重叠的第一存储器页对应的一个或多个第一PTE或PDE标志,以便将第一存储器页分类为被日志记录。在这些实施例中,存储器内的第二区域的第二分类为未被日志记录包括配置与存储器中与第二区域重叠的第二存储器页对应的一个或多个第二PTE或PDF标志,从而将第二存储器页分类为未被日志记录。
在一些实施例中,(多个)数据结构113包含一个或多个位图,并且数据结构管理器118d修改(多个)位图中的一个或更多位,以指示与这些位对应的一个或者多个存储器区域内的存储器地址被分类为被日志记录还是未被日志记录。与每个位对应的具体的存储器量可能因实现而异。在各种实施例中,每个位对应于存储器页、高速缓存线或某些任意大小的存储器中的一个。在实施例中,如果每个位对应于某个任意大小的存储器,则数据结构管理器118d将该数据大小存储在寄存器106a中的至少一个内。因此,在动作504的一些实施例中,用第一区域的、作为被日志记录的第一分类配置数据结构包括配置位图中的一个或多个第一位,以便将第一区域分类为被日志记录。在这些实施例中,存储器内的第二区域的第二分类为未被日志记录包括位图中的一个或多个第二位,其将第二区域分类为未被日志记录。
在一些实施例中,(多个)数据结构113的至少一部分或对其的指针存储在寄存器106a内。在一个实施例中,数据结构管理器118d在一个或多个寄存器106a内存储一个或讴歌存储器区域(例如,对应于被分类为被日志记录的区域)的标识。例如,在一些实施例中,数据结构管理器118d将存储器区域的标识存储在断点比较器寄存器内(例如,参考起始存储器地址和偏移量,诸如参考数据大小和结束存储器地址等)。在另一实施例中,数据结构管理器118d将指向前面讨论的位图的指针存储在一个或多个寄存器106a内,以使处理器102能够在系统存储器103中定位位图。在另一实施例中,数据结构管理器118d将位图上的每个位所引用的数据的大小存储在一个或多个寄存器106a内,以使处理器102能够标识与位图中的每个位对应的(多个)存储器区域。因此,在动作504的一些实施例中,用第一区域的第一分类为被日志记录配置数据结构包括用存储器中的基础存储器地址或存储器大小中的至少一个配置处理器中的寄存器,其中基础存储器地址或存储器大小中的至少一个标识对位图或第一区域的引用中的至少一个。在实施例中,数据结构管理器118d在基于处理器的存储器保护单元(MPU)内存储数据结构113的至少一部分,或其指针。一些实施例除了使用寄存器106a之外还利用MPU,而其他实施例则利用MPU来替代使用寄存器106a。
如本领域普通技术人员所理解的,在许多环境中,针对执行上下文的物理到虚拟映射可以在执行上下文的生命周期中频繁动态地更改。因此,方法500a可以在这些映射更改时动态更新数据结构113。例如,图4B示出了示例400b的物理到虚拟存储器地址空间映射的附加示例400b,但在随后的时间中,(i)物理地址空间401中的物理存储器页401b-2和虚拟地址空间403中的虚拟存储器页403b-2之间,以及(ii)物理地址空间401中的物理存储器页401b-4中和虚拟地址空间403b-3中的虚拟存储器页403b-3之间的先前映射已经被移除(例如,由于物理存储器页401b-2和401b-4被页出(page out)到磁盘),其中添加了物理地址空间401中的物理存储器页401b-3和虚拟地址空间403中的虚拟存储器页403b-4之间的新映射,并且其中添加了物理地址空间401中的物理存储器页401b-4和虚拟地址空间402中的虚拟存储器页402b-5之间的新映射。此外,示例400b示出,物理存储器页401b-3现在被分类为被日志记录(例如,因为它现在映射到第一上下文的第一存储器空间),并且物理存储器页面401b-2和401b-4现在被分类为未被日志记录(例如,因为它们不再映射到日志记录上下文)。因此,可以理解,在方法500a的一些实施例中,计算机系统执行对第一存储器空间或第二存储器空间中的一个或多个的重新分配。在实施例中,基于第一存储器空间的重新分配,计算机系统确定一个或多个第一区域(例如,物理存储器页401b-2和401b-4)不再位于第一存储器空间内,并且将该一个或多个第一区域重新分类为未被日志记录。在附加或备选实施例中,基于第一存储空间的重新分配,计算机系统在存储器内标识与第一存储器空间对应的第三区域(例如,物理存储器页401b-3),并用第三区域的第三分类为被日志记录来配置数据结构。
在一些实施例中,当将存储器区域分类为被日志记录时,数据结构修改器118d用一个或多个标识符标记分类,诸如与执行上下文相关联的虚拟处理器标识符(VPID)。在实施例中,可以用不止一个执行上下文的标识符标记给定的存储器区域,表示存储器区域代表不止一个执行上下文被记录。如后文将讨论的,在一些实施例中,(多个)处理器102利用该标识符作为日志记录决策的一部分。因此,在一些实施例中,在动作504中,用第一分类配置数据结构包括用标识符标记第一区域。
方法500a还包括动作505,将数据结构传输至处理器。在一些实施例中,动作503包括向处理器传输第一分类、第二分类或对数据结构的引用中的至少一个。例如,在一些实施例中,数据结构113包括存储在包含第一分类和第二分类的系统存储器103中的存储器PTE和/或PDE。在这些实施例中,数据结构管理器118d通过处理器102的自然操作,经由处理器的(多个)TLB 108的操作公开这些分类。在其他实施例中的数据结构113包括存储在系统存储器103中的一个或多个位图,这些位图包含第一分类和第二分类。在这些实施例中,数据结构管理器118d通过配置一个或多个寄存器106a来访问位图来公开这些分类。在其他实施例中,数据结构113包括寄存器106a,其自身中的一个或多个,并且数据结构管理器118d通过配置这些寄存器来公开这些分类。
在一些实施例中,基于已将第一分类、第二分类或对数据结构的引用中的至少一项传输至处理器,处理器基于以下一项或多项启动日志记录动作:(i)一个或多个处理单元中的特定处理单元执行第一上下文,或(ii)存储器访问的目标存储器地址在数据结构内被分类为被日志记录。在其他实施例中,基于已将第一分类、第二分类或对数据结构的引用中的至少一项传输至处理器,处理器基于以下一项或多项而避免启动日志记录动作(i)目标存储器地址在数据结构内被分类为未被日志记录,或(ii)存储器访问的类型为写入。现在参考方法500b更详细地描述这些实施例。
如图所示,方法500b(例如,至少基于一个或多个处理器102处的控制逻辑109的操作来执行)包括动作506,在处理单元处执行执行上下文。在一些实施例中,动作506包括执行结合方法500a讨论的第一执行上下文或第二执行上下文之一的机器代码指令。
方法500b还包括动作507,检测处理单元的存储器访问,存储器访问的目标在于特定存储器地址。在一些实施例中,动作507包括检测一个或多个处理单元中的特定处理单元个对存储器的访问,存储器访问的目标在于特定存储器地址。在示例中,存储器访问检测器114检测第一执行上下文或第二执行上下文的机器代码指令何时访问系统存储器103中的位置(例如,通过对高速缓存107的请求)。
从动作507开始,方法500b进入以下一项或多项:(i)动作508,查阅(多个)数据结构以确定特定存储器地址被分类为被日志记录还是未被日志记录;(ii)动作509,确定处理单元正在进行日志记录还是不进行日志记录;或(iii)动作510,确定存储器访问的类型。在图5中,动作508、509和510被示为并行执行,但是可以理解,实施例可以至少部分顺序执行这些动作(以任何顺序)。动作508、509和510用虚线表示,以证明方法500b可以包括,也可以不包括针对给定存储器访问的每个动作。
在一些实施例中,动作508(即,查阅(多个)数据结构以确定特定存储器地址被分类为被日志记录还是未被日志记录)包括,至少基于检测到特定处理单元的存储器访问,确定特定存储地址被分类为被日志记录还是未被日志记录。在示例中,存储器分类确定器115访问(多个)数据结构113或其一部分,以确定所访问的存储器地址是在被分类为被日志记录的存储器区域内,还是在被分类为未被日志记录的存储器区内。值得注意的是,在实施例中,无论所访问的存储器地址是否已经高速缓存在(多个)高速缓存107中,存储器分类确定器115都会运行。因此,在实施例中,处理器102进行与处理针对特定存储器地址的高速缓存未命或者在定位与特定存储器地址重叠的现有高速缓存线中的至少一个有关的动作508。
在各种实施例中,存储器分类确定器115直接访问数据结构113(即,从系统存储器103)和/或通过处理器存储(例如,寄存器106a、(多个)高速缓存107、(多个)TLB 108等等)。例如,如果(多个)数据结构113包括存储器页和/或目录表,则在实施例中,存储器分类确定器115从(多个)TLB 108访问与所访问的(多个)存储器地址对应的PTE或PDE中的至少一个,并确定该PTE/PDE中的(多个)标志位是否指示对应的存储器页被分类为被日志记录,或者存储器页被分类为未被日志记录。因此,在动作508的实施例中,确定特定存储器地址被分类为被日志记录还是未被日志记录包括从包含特定存储器地址的相应存储器页的PTE或PDE标识一个或多个PTE或PDE标志,该PTE或PDE标志指示相应存储器页被分类为被日志记录还是未被日志记录。
在另一示例中,如果(多个)数据结构113包括存储在系统存储器103中的位图,则在实施例中,存储器分类确定器115从系统存储器103和/或(多个)高速缓存107读取位图,并确定该位图中的位是否指示对应的存储器区域被分类为被日志记录还是未被日志记录。因此,在动作508的实施例中,确定特定存储器地址被分类为被日志记录还是未被日志记录包括从位图中标识与包含特定存储器地址的相应存储器区域相关联的位,该位指示相应的存储器区域被分类为被日志记录还是未被日志记录。
在另一示例中,如果数据结构管理器118d将信息存储在寄存器106a中的一个或多个寄存器中(例如,断点比较器寄存器内的存储器范围、指向位图的指针、位图上的每位所引用的数据的大小等等),则存储器分类确定器115可以酌情查阅处理器寄存器。因此,在动作508的实施例中,确定特定存储器地址被分类为被日志记录还是未被日志记录包括从处理器寄存器标识基本存储器地址或存储器大小中的至少一个,该基本存储器地址或者存储器大小可用于确定特定存储器地址被分类为被日志记录还是未被日志记录。
在一些实施例中,动作509(即,确定处理单元进行日志记录还是不进行日志记录)包括至少基于检测到特定处理单元的存储器访问,确定特定处理单元在日志记录上下文内执行还是在非日志记录上下文内执行。在示例中,基于用户输入或基于策略,跟踪器118(或与之相关的某些组件)可能已确定执行上下文在其执行期间要被跟踪或不被跟踪,并创建执行上下文被指派了日志记录状态还非日志记录状态的一些指示(例如,在系统存储器103、在持久存储104中、在寄存器106a中等等)。因此,在动作509中,日志记录状态确定器116使用该指示来确定处理单元正在执行被指派了日志记录状态的上下文,还是该处理单元正在执行被指派了非日志记录状态的上下文。
在一些实施例中,动作510(即,确定存储器访问的类型)包括至少基于检测到特定处理单元的存储器访问,确定存储器访问的类型。例如,作为检测存储器访问的一部分,存储器访问检测器114可以确定该存储器访问的类型。如本领域普通技术人员所理解的,存储器访问可以有多种类型,诸如,读取(加载)、写入(存储)、推测读取、预取、推测写入、隐式读取等等。
如图5所示,动作508、509或510中的一个或多个动作的结果被动作511用于进行日志记录决策。在一些实施例中,动作511包括动作511a,用日志记录存储器访问(例如,使用日志记录处理机117的日志记录逻辑117a),或动作511b,忽略用日志记录存储器访问(例如,利用日志记录处理机116的非日志记录逻辑117b)。在一些实施例中,动作511a包括基于确定(即,动作508、509和/或510),至少基于以下一项或多项启动日志记录动作(i)特定处理单元在日志上下文内执行,或(ii)特定存储器地址被分类为被日志记录。在其他实施例中,动作511b包括基于确定(即,动作508、509和/或510),至少基于以下一项或多项避免启动日志记录动作:(i)特定存储器地址被分类为未被日志记录或(ii)存储器访问为写入。
为了说明动作511和日志记录处理机117的操作的一些实施例,图6示出了示例表600,其示出了日志记录处理机116在一些实施例中的至少一些日志记录决策的矩阵。如图6所示,表600包括方框601-608中的基于以下一项或多项的各种日志记录动作或非日志记录动作:(i)执行上下文的日志记录状态(即,如在动作509中确定的),(ii)所访问的存储器区域的分类(即,如在动作508中确定的),或(iii)存储器访问的类型(即,如在动作510中确定的)。如上所述,存储器访问可以有多种类型,如读取、写入、推测读取、预取、推测写入、隐式读取等。表600着重介绍了存储器访问导致高速缓存未命中的情形(无论访问类型如何),以及存储器访问导致实际被提交的写入的情形(例如,写入和正确推测的推测写入)。在一些实施例中,日志记录处理机117调用非日志记录逻辑117b以用于未被提交的写入存储器访问(例如,错误推测的推测写入),而在其他实施例中,控制逻辑109完全避免在未提交的写入存储器访问中调用日志记录处理机116。为了理解动作511和日志记录处理机117,现在给出对框601-608中的每个框的详细描述。
如方框601所示,在实施例中,日志记录逻辑117a通过将高速缓存未命中记录到执行跟踪112/112’中来启动针对存储器访问的日志记录动作。在实施例中,日志记录逻辑117a基于以下一项或多项启动日志记录动作:(i)特定处理单元在日志上下文内执行,(ii)特定存储器地址被分类为被日志记录,或(iii)存储器访问导致高速缓存未命中。这里,记录高速缓存未命中记录了由记录的执行上下文导致的对(多个)高速缓存107的流入,因此,能够稍后在该上下文的重放期间从执行跟踪112/112’重现该流入的值。
如方框602所示,在实施例中,非日志记录逻辑117b避免启动针对存储器访问的日志记录动作。在实施例中,非日志记录逻辑117b基于以下一项或多项避免启动日志记录动作:(i)特定处理单元在日志记录上下文内执行,(ii)特定存储器地址被分类为被日志记录,或者(iii)存储器访问执行被提交(或正在被提交)的写入。这里,即使特定处理单元在日志记录上下文内执行,并且即使特定存储器地址被分类为被日志记录,由存储器访问写入的值也可以通过产生该值的先前机器代码指令的重放而被重现,因此在一些实施例中,完整的执行跟踪112/112’无需包括写入的记录。
如方框603所示,在一些实施例中,日志记录逻辑117a启动针对存储器访问的一个或多个日志记录动作,而在其他实施例中,非日志记录逻辑117b避免启动日志记录动作和/或触发故障。无论以哪种方式,日志记录逻辑117a或非日志记录逻辑117b都基于以下一项或多项来操作:(i)特定处理单元在日志上下文内执行,(ii)特定存储器地址被分类为未被日志记录,或(iii)存储器访问导致高速缓存未命中。在日志记录逻辑117a针对存储器访问启动一个或多个日志记录动作的实施例中,即使特定存储器地址被分类为未被日志记录,日志记录逻辑117a也会这样做。在这些实施例中,日志记录逻辑117a启动日志记录动作,因为执行上下文处于日志记录状态,并且日志记录动作确保执行上下文的完整执行跟踪112/112’。如图所示,在实施例中,日志记录动作包括以下一项或多项:记录高速缓存未命中、将存储器访问记录为未高速缓存的读取或更新要记录的存储器地址(和/或其对应的存储器区域)的日志记录分类。在实施例中,日志记录逻辑117a基于更新位图中的位、更新(多个)TLB 108中的PTE或PDE、更新寄存器等来更新存储器地址/区域的日志记录分类。在非日志记录逻辑117b避免记录或启动故障的实施例中,即使执行上下文处于日志记录状态,非日志记录逻辑118b也会这样做。在这些实施例中,非日志记录逻辑117b避免记录和/或启动故障,以避免记录可能被故意标记为未被日志记录的存储器地址(例如,为了避免记录敏感信息),或避免记录已标记为以其他方式可重构或可预测的存储器地址(例如,通过访问存储器映射文件、通过访问存储的存储器快照、通过模拟存储器映射的硬件设备、通过重现已知行为、通过以已知方式组合可用数据等等)。值得注意的是,如果非日志记录逻辑117b避免记录存储器访问,并且在框603中未启动故障,则在实施例中,执行上下文的执行跟踪112/112’是不完整的,除非存储器地址的值是可重构或可预测的。在一些实施例中,如果存储器地址被标记为以其他方式可重构或可预测,则非日志记录逻辑117b避免记录,否则会发生故障。
如方框604所示,在实施例中,非日志记录逻辑117b避免启动针对存储器访问的日志记录动作。在实施例中,非日志记录逻辑117b基于以下一项或多项避免启动日志记录动作:(i)特定处理单元在日志记录上下文内执行,(ii)特定存储器地址被分类为未被日志记录,或(iii)存储器访问执行被提交(或正被提交)写入。这里,即使特定处理单元在日志记录上下文内执行,由存储器访问写入的值也可以通过重放产生该值的先前机器代码指令来重现,因此在一些实施例中,完整的执行跟踪112/112’无需包括写入的记录。
如方框605所示,在实施例中,日志记录逻辑117a通过将高速缓存未命中记录到执行跟踪112/112’中来启动针对存储器访问的日志记录动作。在实施例中,日志记录逻辑117a基于以下一项或多项启动日志记录动作:(i)特定处理单元在非日志上下文内执行,(ii)特定存储器地址被分类为被日志记录,或(iii)存储器访问导致高速缓存未命中。在实施例中,即使执行上下文处于非日志记录状态,日志记录逻辑117a也会启动日志记录动作,因为该非日志记录上下文已经将数据带到被分类为被日志记录的高速缓存107中。如果在日志记录上下文访问该数据之前没有逐出该数据,则日志记录上下文可能不会导致对数据的高速缓存未命中,因此在实施例中,日志记录上下文的执行跟踪112/112’可能是不完整的。在一个示例中,非日志记录上下文可以是内核线程,其访问的信息也将由正在跟踪的用户模式进程访问。在此示例中,如果在内核线程执行期间未记录访问的数据,则存在在稍后执行用户模式进程期间未记录数据的风险,因为它已经在(多个)高速缓存107中。
如方框606所示,在实施例中,日志记录逻辑117a启动针对存储器访问的日志记录动作。在实施例中,日志记录逻辑117a基于以下一项或多项启动日志记录动作:(i)特定处理单元在非日志上下文内执行,(ii)特定存储器地址被分类为被日志记录,或(iii)存储器访问为被提交(或正被提交)的写入。在实施例中,即使执行上下文处于非日志记录状态,日志记录逻辑117a也会启动日志记录动作,因为非日志记录上下文修改了分类为被日志记录的存储器地址的值。如果没有采取日志记录动作,则在实施例中,针对日志记录上下文的执行跟踪112/112’是不完整的。在实施例中,日志记录动作包括以下一项或多项:记录写入(例如,记录到日志记录上下文的执行跟踪112/112’中),或在写入后逐出高速缓存线。在实施例中,当逐出高速缓存线时,无需执行对写入的日志记录,因为如果日志记录上下文稍后访问,写入的值将被记录为流入(高速缓存未命中)。
如图所示,在框606中,在一些实施例中,日志记录逻辑117a推迟记录写入和/或逐出高速缓存线。例如,如果非日志记录上下文重复写入高速缓存线,则在实施例中,日志记录逻辑117a仅记录最后一次写入,或仅在最后一次写操作后收回缓存线。在一些实施例中,日志记录逻辑117a基于(多个)高速缓存107维护的高速缓存一致性协议(CCP)状态推迟日志记录动作。在一些实施方案中,与非日志记录上下文的上下文切换相关,日志记录逻辑116a使用CCP状态来确定被分类为被日志记录的哪些(多个)高速缓存线具有脏状态,并逐出这些高速缓存线。在其他实施例中,日志记录逻辑117a基于维持针对高速缓存线或存储器页以及(多个)TLB 108或系统存储器103中的跟踪状态来推迟日志记录动作。
如方框607所示,在实施例中,非日志记录逻辑117b避免启动针对存储器访问的日志记录动作。在实施例中,非日志记录逻辑117b基于以下一项或多项避免启动日志记录动作:(i)特定处理单元在非日志记录上下文内执行,(ii)特定存储器地址被分类为未被日志记录,或(iii)存储器访问执行读取。这里,特定处理单元在非日志记录上下文内执行,并且特定存储器地址被分类为未被日志记录,因此无需记录读取。
如方框608所示,在实施例中,非日志记录逻辑117b禁止启动存储器访问的日志记录动作。在实施例中,非日志记录逻辑117b避免基于以下一个或多个启动日志记录动作:(i)特定处理单元在非日志记录上下文内执行,(ii)特定存储器地址被分类为未被日志记录,或(iii)存储器访问执行写入。这里,特定处理单元在非日志记录上下文内执行,并且特定存储器地址被分类为未被日志记录,因此无需记录写入。
在实施例中,当记录高速缓存未命中时,日志记录逻辑117a记录以下一项或两项:作为存储器访问的目标的存储器地址,或通过高速缓存未命中获得的相应存储器值。在一些实施例中,日志记录逻辑117a记录存储器地址和该值。然而,在其他实施例中,日志记录逻辑117a记录存储器地址,但不记录该值。在这些其他实施例中,日志记录逻辑117a记录可用于推断或重建该值的一些附加信息,诸如,CCP消息的至少一部分、分支跟踪或调用跟踪,或处理器寄存器106a的散列。
鉴于前面对表600的讨论,应当理解,在动作511的一些实施例中,日志记录逻辑117a使处理器至少基于特定处理单元在日志记录上下文内执行而启动日志记录动作。在这些实施例中,当存储器访问导致高速缓存未命中时,在动作511a中启动日志记录动作包括以下至少一项:(i)当特定存储器地址被分类为被日志记录时,记录特定存储器地址和/或来自高速缓存未命中的对应值(例如,方框601)中的至少一项,或(ii)当特定存储器地址被分类为未被日志记录时,执行以下一项或多项:记录特定存储器地址和/或来自高速缓存未命中的对应值中的至少一项,记录未高速缓存的读取或将特定存储器地址分类为被日志记录(例如,框603内的日志记录部分)。在一些实施例中,当将特定存储器地址分类为被日志记录时,动作511包括更新以下至少一项:位图中的位、寄存器中的存储器地址、或TLB条目。
鉴于前面对表600的讨论,还应理解,在动作511的一些实施例中,日志记录逻辑117a使处理器至少基于特定存储器地址被分类为被日志记录而启动日志记录动作。在这些实施例中,在动作511a中启动日志记录动作包括以下至少一项:(i)当存储器访问导致高速缓存未命中时,用日志记录特定存储器地址和/或来自高速缓存未命中的对应值(例如,框601或框605)中的至少一项,或(ii)当存储器访问对高速缓存线执行提交写入时,并且当特定处理单元在非日志记录上下文内执行时,执行如下一项或多项:将写入记录到高速缓存线,或者将写入记录到高速缓存线并逐出高速缓存线(例如,框606)。在一些实施例中,日志记录逻辑117a基于以下一项或多项来延迟日志记录动作:(i)高速缓存一致性协议转换的值或(ii)跟踪位的值。
鉴于前面对表600的讨论,还应理解,在动作511的一些实施例中,非日志记录逻辑117b使处理器至少基于特定存储器地址被分类为未被日志记录(例如,框603、框607或框608内的非日志记录部分)而避免启动日志记录动作,在动作511的一些实施例中,非日志记录逻辑117b使处理器至少基于存储器访问是写入(例如,框602、604或608)而避免启动日志记录动作。
如前所述,在实施例中,当将存储器区域分类为被日志记录时,数据结构修改器118d使用诸如VPID之类的、与执行上下文相关联的标识符来标记分类,并且(多个)处理器102利用该标识符作为日志记录决策的一部分。因此,在一些实施例中,日志记录处理机117确定与特定存储器地址相关联的第一标识符,并确定与日志记录上下文相关联的第二标识符,并且动作511包括进一步基于第一标识符与第二标识符是否存在匹配来启动日志记录动作,或避免启动日志记录动作。在示例中,日志记录处理机117确定执行上下文的标识符是否与给定存储器地址被标记用于日志记录的上下文的标识符匹配,并基于是否匹配来做出日志记录决策。在示例中,无论是执行日志记录上下文还是非日志记录上下文,如果目标存储器地址对应的存储器区域被分类为被日志记录并且用多个日志记录上下文的标识符来标记,则日志记录处理机117可以启动对多个执行跟踪(例如,对应于日志记录上下文)的日志记录动作。在另一示例中,当执行日志记录上下文时,如果目标存储器地址对应的存储器区域被分类为被日志记录并且用非匹配标识符来标记,则日志记录处理机117可以选择避免进行日志记录。
除了向执行上下文指派日志记录状态或非日志记录状态之外,一些实施例还支持针对(多个)处理器102中的一个或多个处理器全局启用或禁用日志记录。在这些实施例中,控制逻辑109仅确定当在动作507中检测到存储器访问时,如果针对处理器102全局启用日志记录,则是否应当记录存储器地址和/或执行上下文。因此,在方法500b的一些实施例中,控制逻辑109还使处理器102确定针对处理器启用还是禁用日志记录,并且仅针对处理器112全局启用日志记录时,才启动动作508、509或511中的一个或多个动作。
尽管在方法500中未示出,但在一些实施例中,当针对(多个)处理器102中的一个或多个处理器全局启用日志记录,和/或当执行上下文被指派了日志记录状态时(即,当针对上下文启用日志记录时),计算机系统101将(多个)高速缓存107置于已知的初始状态以用于跟踪,和/或用日志记录足以在跟踪重放期间重现初始高速缓存状态的数据。在实施例中,这是对整个(多个)高速缓存107执行的,而在其他实施例中仅对(多个)高速缓存107的子集执行,该高速缓存107的子集在启用日志记录的任何(多个)执行上下文的(多个)存储器空间内存储数据。在实施例中,计算机系统101通过刷新(多个)高速缓存107中的缓存线的至少一个子集和/或通过使(多个)高速缓存107中的缓存线的至少一个子集无效(例如,这些(多个)高速缓存线在启用日志记录的任何(多个)执行上下文的(多个)存储器空间内存储数据),将(多个)高速缓存107置于已知的初始状态以用于跟踪。在实施例中,计算机系统101通过用日志记录(多个)高速缓存107中的缓存线的至少一个子集的快照(例如,这些(多个)高速缓存线在启用日志记录的任何(多个)执行上下文的(多个)存储器空间内存储数据)来记录足以在跟踪重放期间重现初始的高速缓存状态的数据。
当方法500在包括多个处理单元106和/或多个处理器102的环境中实现时,一些实施例将附加信息用日志记录到(多个)执行跟踪112/112’中,该信息可以用于以后重建/消除由这些多个处理单元106和/或处理器102在高速缓存107的共享部分中的读取和写入的顺序。在实施例中,该附加信息包括以下一项或多项:(i)在这些多个处理单元106和/或处理器102之间传输的CCP消息的至少一个子集;(ii)显式排序信息(例如,通过将日志记录事件与单调增加的值相关联);(iii)某种形式的处理器代码跟踪(例如,分支跟踪或调用跟踪),或(iv)可以用于在重放期间消除可能的路径的数据(例如,通过存储对一个或多个寄存器106的值的偶尔的散列,并可以在重放期间与重建的寄存器状态相比较)。
因此,本文描述的至少一些实施例使用存储器标记作为用于基于处理器的执行跟踪的日志记录线索。这些实施例至少部分基于针对相应的执行上下文是否启用或禁用日志记录,将诸如物理存储器页之类的不同存储器区域分类为被日志记录或未被日志记录。在处理存储器访问时,处理器访问这些存储器标记以确定存储器访问所针对的存储器区域是否被分类为被日志记录或未被日志记录。然后,处理器将该确定用作输入,以确定是否针对存储器访问执行日志记录动作。在实施例中,与诸如使用基于高速缓存的跟踪位之类的现有技术相比,使用存储器标记作为用于基于处理器的执行跟踪的日志记录线索具有明显的技术优势。例如,使用存储器标记作为基于处理器的执行跟踪的日志记录线索降低了处理器设计的复杂性,将跟踪逻辑推出处理器的关键执行路径,并且可以在较小的1C芯片尺寸内实现。同时,使用存储器标记作为日志记录线索可以以许多与使用基于高速缓存的跟踪位相同的方式降低跟踪大小。例如,使用存储器标记可以消除以前高速缓存逐出的许多高速缓存流入的冗余日志记录,并将日志记录限制为仅与实际处于日志记录状态的执行上下文相关联的存储器空间。
尽管已经用特定于结构特征和/或方法行为的语言描述了主题,但应当理解,所附权利要求中定义的主题不一定局限于上述特征或行为,或者上述行为的顺序。相反,所述特征和行为被披露为实施权利要求的示例形式。
本公开可以在不脱离其基本特征的情况下以其他具体形式体现出来。所描述的实施例在所有方面都应被视为只是说明性的,而不是限制性的。因此,本公开的范围是由所附的权利要求书而不是由上述的描述来表示。在权利要求书的含义和等效范围内的所有变化都将被纳入其范围。当在所附权利要求中介绍要素时,“一个”、“一种”、“该”和“所述”等词意指有一个或多个要素。术语“包含”、“包括”和“具有”意在包含,并意味着除了所列要素外,可能还有其他要素。

Claims (15)

1.一种处理器(102),被配置为基于访问存储器中的区域的分类为被日志记录还是未被日志记录而做出日志记录决策,所述处理器包括:
一个或多个处理单元(106);
高速缓存(107);以及
控制逻辑(109),其使所述处理器至少如下执行:
检测(114)所述一个或多个处理单元中的特定一个处理单元的存储器访问,所述存储器访问的目标在于特定存储器地址;
至少基于检测到所述特定处理单元的所述存储器访问,确定以下一项或多项:(i)所述特定存储器地址被分类为被日志记录还是未被日志记录(115),(ii)所述特定处理单元在日志记录上下文内执行还是在非日志记录上下文内执行(116),或(iii)所述存储器访问的类型(114);以及
基于所述确定,执行(117)以下一项:
至少基于以下一项或多项,启动(117a)日志记录动作:(i)所述特定处理单元在所述日志记录上下文内执行,或者(ii)所述特定存储器地址被分类为被日志记录;或者
至少基于以下一项或多项,避免启动所述日志记录动作:(i)所述特定存储器地址被分类为未被日志记录,或者(ii)所述存储器访问的所述类型为写入。
2.根据权利要求1所述的处理器,其中所述控制逻辑使所述处理器至少基于所述特定处理单元在日志记录上下文内执行来启动所述日志记录动作,并且其中当所述存储器访问导致高速缓存未命中时,启动包括以下至少一项的所述日志记录动作:
当所述特定存储器地址被分类为被日志记录时,用日志记录以下至少一项:所述特定存储器地址或来自所述高速缓存未命中的相应值,或者
当所述特定存储器地址被分类为未被日志记录时,执行以下一项或多项:
用日志记录以下至少一项:所述特定存储器地址或来自所述高速缓存未命中的相应值;
用日志记录未高速缓存的读取;或者
将所述特定存储器地址分类为被日志记录。
3.根据权利要求2所述的处理器,其中将所述特定存储器地址分类为被日志记录包括更新以下至少一项:
位图中的位;
翻译查询缓冲区(TLB)条目;或者
寄存器(106a)中的存储器地址。
4.根据权利要求1所述的处理器,其中所述控制逻辑使所述处理器至少基于所述特定存储器地址被分类为被日志记录来启动所述日志记录动作,并且其中启动包括以下至少一项的搜索日志记录动作:
当所述存储器访问导致高速缓存未命中时,用日志记录以下至少一项:所述特定存储器地址或来自所述高速缓存未命中的相应值;
当所述存储器访问执行对高速缓存线的提交写入时,并且当所述特定处理单元在所述非日志记录上下文内执行时,执行以下一项或多项:
将所述写入用日志记录到所述高速缓存线;或者
将所述写入用日志记录到所述高速缓存线并逐出所述高速缓存线。
5.根据权利要求4所述的处理器,其中所述控制逻辑使所述处理器基于以下一项或多项来延迟所述日志记录动作:(i)高速缓存一致性协议翻译的值或(ii)跟踪位的值。
6.根据权利要求1所述的处理器,其中所述控制逻辑使所述处理器至少基于所述特定存储器地址被分类为未被日志记录来避免启动所述日志记录动作。
7.根据权利要求1所述的处理器,其中所述控制逻辑使所述处理器至少基于所述存储器访问为写入来避免启动所述日志记录动作。
8.根据权利要求1-7中任一项所述的处理器,其中所述控制逻辑还使所述处理器:
确定与特定存储器地址相关联的第一标识符,并确定与所述日志记录上下文相关联的第二标识符;以及
还基于所述第一标识符与所述第二标识符之间是否存在匹配,来启动所述日志记录动作,或者避免启动所述日志记录动作。
9.根据权利要求1-8中任一项所述的处理器,其中确定所述特定存储器地址被分类为被日志记录还是未被日志记录包括以下至少一项:
从包含所述特定存储器地址的相应存储器页的页表条目(PTE)标识一个或多个PTE标志,所述一个或多个PTE标志指示所述相应存储器页被分类为被日志记录还是未被日志记录;
从位图中标识与包含所述特定存储器地址的相应存储器区域相关联的位,所述位指示所述相应存储器区域被分类为被日志记录还是未被日志记录;或者
从处理器寄存器(106a)标识基本存储器地址或存储器大小中的至少一项,所述基本存储器地址或所述存储器大小可用于确定所述特定存储器地址被分类为被日志记录还是未被日志记录。
10.一种计算机系统(101),包括:
处理器(102),包括一个或多个处理单元(106);
存储器(103);以及
计算机可读介质(104),其上存储有计算机可执行指令,所述计算机可执行指令可由所述处理器执行以使所述计算机系统向所述处理器传输所述存储器中的区域的分类,所述分类为被日志记录或未被日志记录,所述计算机可执行指令包括指令,所述指令可由所述处理器执行以使所述计算机系统至少如下执行:
标识(118a)被配置用于在所述处理器处执行的第一上下文;
标识(118b)所述存储器内的第一区域,所述第一区域对应于所述第一上下文的第一存储器空间的至少一部分;
确定(118c)所述第一上下文被指派为日志记录状态;
基于所述确定,用所述第一区域的第一分类为被日志记录来配置(118d)数据结构,所述数据结构还包括所述存储器内的第二区域的第二分类为未被日志记录,所述第二区域对应于第二上下文的第二存储器空间的至少一部分,所述第二上下文被配置用于在所述处理器处执行并且被指派为非日志记录状态;以及
向所述处理器传输(118d)以下至少一项:所述第一分类、所述第二分类、或对所述数据结构的引用。
11.根据权利要求1所述的计算机系统,其中所述第一上下文或所述第二上下文中的至少一项对应于进程、操作系统、虚拟机、存储器分区、飞地或管理程序中的至少一项。
12.根据前述权利要求中的任一项所述的计算机系统,其中配置所述数据结构包括以下至少一项:
配置与所述存储器中与所述第一区域重叠的第一存储器页对应的一个或多个第一页表条目(PTE)标志,以便将所述第一存储器页分类为被日志记录,并且其中所述存储器内的所述第二区域的所述第二分类为未被日志记录包括与所述存储器中与所述第二区域重叠的第二存储器页对应的第二PTE标志将所述第二存储器页分类为未被日志记录;
配置位图中的一个或多个第一位,以便将所述第一区域分类为被日志记录,并且其中所述存储器内的搜索第二区域的所述第二分类为未被日志记录包括所述位图中的一个或多个第二位将所述第二区域分类为未被日志记录;或者
用所述存储器中的基本存储器地址或者存储器大小中的至少一项来配置处理器中的寄存器(106a),其中所述基本存储器地址和所述存储器大小中至少一项标识以下至少一项:对所述位图的引用或对所述第一区域的引用。
13.根据前述权利要求中的任一项所述的计算机系统,其中配置具有所述第一分类的搜索数据结构包括用标识符标记所述第一区域。
14.根据前述权利要求中的任一项所述的计算机系统,所述计算机可执行指令还包括指令,所述指令可由所述处理器执行以使所述计算机系统:
执行所述第一存储器空间的重新分配;以及
基于所述重新分配,执行以下至少一项:
确定(118b)所述第一区域不再位于所述第一存储器空间内,并将所述第一区域的(118d)重新分类为未被日志记录;或者
标识(118b)与所述第一存储器空间对应的所述存储器内的第三区域,并且用所述第三区域的第三分类为被日志记录来配置(118d)所述数据结构。
15.根据前述权利要求中的任一项所述的计算机系统,其中,基于已向所述处理器传输所述第一分类、所述第二分类或对所述数据结构的所述引用中的至少一项,所述处理器执行以下一项:
至少基于以下一项或多项,启动(117a)日志记录动作:(i)所述一个或多个处理单元中的特定处理单元执行所述第一上下文,或者(ii)存储器访问的目标存储器地址在所述数据结构内被分类为被日志记录;或者
至少基于以下一项或多项,避免(117b)启动所述日志记录动作:(i)所述目标存储器地址在所述数据结构内被分类为未被日志记录,或者(ii)所述存储器访问的类型为写入。
CN202180033402.XA 2020-05-05 2021-04-30 存储器页标记作为基于处理器的执行跟踪的日志记录线索 Pending CN115485668A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
LU101770A LU101770B1 (en) 2020-05-05 2020-05-05 Memory page markings as logging cues for processor-based execution tracing
LULU101770 2020-05-05
PCT/US2021/030222 WO2021225896A1 (en) 2020-05-05 2021-04-30 Memory page markings as logging cues for processor-based execution tracing

Publications (1)

Publication Number Publication Date
CN115485668A true CN115485668A (zh) 2022-12-16

Family

ID=70614503

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180033402.XA Pending CN115485668A (zh) 2020-05-05 2021-04-30 存储器页标记作为基于处理器的执行跟踪的日志记录线索

Country Status (5)

Country Link
US (1) US20230342282A1 (zh)
EP (1) EP4121860A1 (zh)
CN (1) CN115485668A (zh)
LU (1) LU101770B1 (zh)
WO (1) WO2021225896A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
LU101768B1 (en) * 2020-05-05 2021-11-05 Microsoft Technology Licensing Llc Recording a cache coherency protocol trace for use with a separate memory value trace
KR102528593B1 (ko) * 2021-08-17 2023-05-04 국방과학연구소 비정상 프로세스 식별 장치 및 방법, 컴퓨터 판독 가능한 기록 매체 및 컴퓨터 프로그램

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2315449A1 (en) * 2000-08-10 2002-02-10 Ibm Canada Limited-Ibm Canada Limitee Generation of runtime execution traces of applications and associated problem determination
US9195593B1 (en) * 2014-09-27 2015-11-24 Oracle International Corporation Hardware assisted object memory migration
US9690716B2 (en) * 2015-02-13 2017-06-27 Intel Corporation High performance persistent memory for region-centric consistent and atomic updates
EP3306479A1 (en) * 2016-10-06 2018-04-11 Stichting IMEC Nederland Memory structure comprising scratchpad memory
US10459824B2 (en) * 2017-09-18 2019-10-29 Microsoft Technology Licensing, Llc Cache-based trace recording using cache coherence protocol data
US10593010B2 (en) * 2017-12-13 2020-03-17 Microsoft Technology Licensing, Llc Techniques for capturing and executing graphics processing operations
US10496537B2 (en) * 2018-02-23 2019-12-03 Microsoft Technology Licensing, Llc Trace recording by logging influxes to a lower-layer cache based on entries in an upper-layer cache
US10481998B2 (en) * 2018-03-15 2019-11-19 Microsoft Technology Licensing, Llc Protecting sensitive information in time travel trace debugging

Also Published As

Publication number Publication date
LU101770B1 (en) 2021-11-05
WO2021225896A1 (en) 2021-11-11
US20230342282A1 (en) 2023-10-26
EP4121860A1 (en) 2023-01-25

Similar Documents

Publication Publication Date Title
KR102645481B1 (ko) 상위 계층 캐시의 항목을 기반으로 하위 계층 캐시로의 유입을 로깅함으로써 트레이스 기록
US20220269615A1 (en) Cache-based trace logging using tags in system memory
CN115485668A (zh) 存储器页标记作为基于处理器的执行跟踪的日志记录线索
US20240248856A1 (en) Memory address compression within an execution trace
US20240193092A1 (en) Processor support for using cache way-locking to simultaneously record plural execution contexts into independent execution traces
EP4268082B1 (en) Logging cache line lifetime hints when recording bit-accurate trace
US20220269614A1 (en) Treating main memory as a collection of tagged cache lines for trace logging
CN115552381A (zh) 记录存储器值跟踪以与独立高速缓存一致性协议跟踪一起使用
CN115485667A (zh) 记录高速缓存一致性协议跟踪以与独立存储器值跟踪结合使用
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
EP4278262B1 (en) Physical memory address omission or obfuscation within an execution trace
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) 将主存储器视为跟踪日志记录的标记高速缓存行的集合
WO2022177698A1 (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