在计算机程序执行中,垃圾收集活动帮助提供自动存储器管理。所讨论的“垃圾”是分配给程序以供使用的存储器空间,其不再被该程序需要,但是尚未可供其他程序使用。垃圾收集器是一种软件,其被设计来标识此类存储器区域,以便可以回收它们以用于后续重新分配。
垃圾收集可以使程序员免于手动释放不再被需要的数据对象的需要,从而使编程更容易。垃圾收集还可以帮助防止一些运行时错误,从而通过提高数据的完整性和可用性来增强网络安全。许多编程语言或者需要垃圾收集,或者允许垃圾收集作为选项。一些软件开发环境在给定程序的执行期间允许自动垃圾收集和手动存储器管理两者。
垃圾收集的有效实现可以是高优先级,因为垃圾收集器可能频繁运行或在不可预测的时间运行,或两者,并且垃圾收集可能显著减慢应用程序的执行。事实上,大多数(如果不是全部)垃圾收集器有时会利用停止世界(stop-the-world)的方法,该方法会阻止应用程序与垃圾收集器同时并发地运行。程序在以这种方式被停止时不会对输入进行响应,因此垃圾收集可能会降低应用程序的所测量的效率和由用户感知到的其响应性二者。然而,仅仅减少在垃圾收集上所花费的处理时间量也可能减少回收的存储器量,并且因此以其他方式(例如,通过增加在易失性与非易失性存储设备之间交换数据所花费的时间)妨碍应用程序性能。
技术实现要素:
本文档中描述的一些实施例在计算系统中提供了改进的垃圾收集(GC)。特别地,一些实施例将行为驱动的堆栈扫描优化(BDSSO)功能性嵌入在系统内。BDSSO功能性通过增加应用程序执行与垃圾收集器的堆栈扫描活动的并发性来减少停止世界的时间。在一些GC堆栈扫描期间应用程序可能仍被停止,但是BDSSO使可以安全并且有效地让应用程序继续运行,同时针对GC而扫描应用的执行堆栈的明显恒定(至少对于预期的堆栈扫描时间)部分。
本文描述的一些增强的并发性实施例包括存储器和处理器或与存储器和处理器可操作地通信。存储器由程序的执行堆栈来配置;执行堆栈包括在感兴趣的时间段内的程序的执行框架。存储器还由行为驱动的堆栈扫描优化(BDSSO)软件来配置。处理器与存储器可操作地通信,并且被配置为执行BDSSO软件以执行BDSSO步骤,这些步骤包括:(a)获取执行堆栈框架出现数据,(b)针对多个执行框架中的每个执行框架,从执行堆栈框架出现数据来确定相应的框架执行可能性,(c)至少部分地基于框架执行可能性来选择堆栈扫描深度,所选择的堆栈扫描深度小于整个执行堆栈的完全深度,(d)在所选择的堆栈扫描深度处安装垃圾收集扫描返回屏障,以及然后(e)允许跟踪垃圾收集器在程序还在运行时扫描该扫描返回屏障下方的执行堆栈。
在这些实施例中的一些实施例中,选择扫描返回屏障放置,以降低在垃圾收集器扫描执行堆栈时程序将命中扫描返回屏障的风险。因此,通过执行BDSSO步骤增加了并发性,因为在垃圾收集器扫描该扫描返回屏障下方的执行堆栈的同时,程序与垃圾收集器并发地运行,除非程序执行命中扫描返回屏障的框架返回操作。在那种情况下,在垃圾收集器对程序移动到执行堆栈的部分(该部分在扫描期间被假定为恒定的)中进行响应的同时,程序执行被暂停。
与本文教示有关的其他技术活动和特性对于本领域技术人员来说也将变得清楚的。给出的示例仅仅是说明性的。本发明内容并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在被用来限制所要求保护的主题的范围。相反,本发明内容被提供来以简化的形式介绍将在下面详细描述中进一步描述的一些技术概念。创新是通过正确理解的权利要求来限定的,并且在本发明内容与权利要求相冲突的范围内,应以权利要求为准。
附图说明
将参照附图给出更具体的描述。这些附图仅图示了被选择的方面,因此并未完全确定覆盖范围或范围。
图1是一般性地图示了计算机系统并且还一般性地图示了配置的存储介质的框图;
图2是图示了包括硬件并且还包括垃圾收集器和其他软件的计算系统的框图;
图3是图示了用于垃圾收集的执行堆栈扫描的一些方面的框图;
图4是图示了配置具有并发性增强功能性的系统的方面的框图;
图5是图示了一些框架出现数据的一些方面的框图;
图6是图示了一些执行堆栈快照的一些方面的图;
图7是图示了一些并发性增强方法中的步骤的流程图;和
图8是进一步图示了一些并发性增强方法中的步骤的流程图。
具体实施方式
概述
创新可能会超越其起源,但是了解创新的起源可以帮助人们更充分地理解创新。在本案例中,本文描述的一些教示是由致力于改进Microsoft管理运行时间产品的性能的微软创新者所面临的技术挑战所激发的。此类产品包括,例如用于微软、各种和其他*nix和苹果操作系统环境的管理软件框架,以及一些和虚拟机环境产品,以及在和其他云环境中的许多产品(分别是微软公司、Linus Torvalds、苹果公司、甲骨文美国公司、甲骨文美国公司和微软公司的商标)。
具体地,技术挑战是如何提高在垃圾收集期间暂停的程序的响应性。紧迫的挑战是如何通过执行应用程序或其他软件来增加垃圾收集堆栈扫描的并发性,其他软件使用正由垃圾收集器管理的存储器。这样的程序可以随着时间的推移来修改它们的对象图,并且因此它们在垃圾收集术语中被称为“更改器”(mutator)。堆栈是计算机程序用来跟踪函数使用情况的数字制品,这些函数是几乎所有现代程序的基本构建块。程序可以具有一个或多个堆栈;例如,计算系统的每个处理器核心都可以执行单独的线程,该线程具有它自己相应的线程堆栈。
垃圾收集器扫描更改器程序堆栈以标识可以可回收的存储器片段,因此在此类标识活动期间在堆栈中进行的更改可能会导致数据损坏、程序崩溃和其他不希望的结果。具体来说,跟踪垃圾收集器使用堆栈作为根扫描的部分以标识哪些对象是活动的,并且然后将其余对象视为可回收的。因此,最安全的方法是在扫描堆栈时(即,在根扫描期间跟踪垃圾收集器使用堆栈时)将暂停执行除垃圾收集器之外的所有内容,并且潜在的可回收的存储器正被标识。然而,这种幼稚的方法在某些情形中暂停更改器超过了必要的时间,因此有时会使用其他方法来代替。特别地,一些方法试图通过减少在更改器被暂停时扫描的堆栈量来减少强加于更改器的停止世界的时间。
例如,一种方法仅在更改器堆栈的顶部(即,第一、最近的)执行框架正被扫描时暂停更改器。然后,在顶部框架已经被扫描之后,允许更改器与垃圾收集堆栈扫描器并发地运行。扫描返回屏障被放置在顶部框架下方,以使得如果更改器尝试改变顶部框架下方的任何内容,则垃圾收集器将再次获得独占控制权。取决于诸如与停止更改器相关联的开销的因素,以及更改器访问顶层框架下方框架的频率,这种仅顶层框架停止世界的方法不必然会改善更改器性能,并且有时可能会降低更改器性能。
本文描述的一些实施例获得计算系统的堆栈活动数据,并且根据该数据来确定堆栈顶部附近的特定框架在堆栈正被扫描时将改变的可能性有多大。扫描返回屏障相应地被放置在堆栈中。更改器在最有可能出现改变的框架被扫描时被暂停,然后在堆栈的其余部分被扫描时,更改器和堆栈扫描器并发地运行,除非更改器尝试访问扫描返回屏障下方的堆栈。在这种情况下,更改器会再次被暂停,并且相关的一个或多个框架被扫描。扫描屏障可以被重新定位、重新安装在同一位置处或者完全被移除。即使初始扫描屏障放置不是对堆栈扫描期间哪些框架将保持不变的正确预测,基于如本文教示的堆栈活动来放置扫描屏障而不是始终将扫描屏障放置在固定位置以总是增加系统的并发性。
本文描述的一些实施例可以被一些人在更广泛的上下文中查看。例如,诸如访问、并发性、执行、管理、存储器、收集和暂停之类的概念可以被认为与特定实施例相关。然而,从广泛上下文的可用性来看,并不能得出本文正在为抽象思想寻求专有权;事实并非如此。相反,本公开关注于提供适当的具体实施例,其技术效果完全或部分地解决了特定技术问题,诸如如何增加计算系统中的更改器和堆栈扫描器的并发执行的机会。涉及访问、并发、执行、管理、存储器、收集或暂停的其他已配置的存储介质、系统和过程不在本范围内。因此,在正确理解本公开内容的情况下,也避免了模糊性、纯粹抽象性、缺乏技术特征以及随之而来的证明问题。
更一般地,技术人员将认识到,并非本公开的每个部分或其中的任何特定细节都必定满足诸如启用、书面描述或最佳模式的法律标准。此外,实施例不限于本文描述的特定的启发示例、管理存储器环境、操作系统、编程语言、软件过程、开发工具、标识符、数据结构、符号、控制流、伪代码、命名约定或本文描述的其他实现选择。与任何其他专利公开的任何明显冲突,即使来自本发明的所有者,在解释本专利公开中呈现的权利要求时也没有任何作用。
技术特性
本文描述的实施例的技术特征对于本领域普通技术人员来说将是明显的,并且对于广泛的细心读者来说也将以多个方式将是明显的。一些实施例涉及诸如扫描程序的执行堆栈、暂停软件的执行、重定向软件函数返回操作以及在执行堆栈中安装扫描返回屏障等技术活动,这些活动各自都是深深植根于计算技术中的活动。所讨论的一些技术机制包括例如扫描返回屏障、执行堆栈、垃圾收集安全点、程序分析样本和并发性增强。所讨论的一些技术影响包括例如增加了更改器和堆栈扫描器彼此将并发地运行的可能性,并且提高了在存储器管理环境中运行的程序的响应性。因此,纯粹的思想过程显然被排除在外。根据所提供的描述,基于教示的技术特征的其他优点对于技术人员来说也将是明显的。
首字母缩略词、缩写、名称和符号
在下面定义了一些首字母缩写词、缩写、名称和符号。其他定义在本文中的其他地方,或者不需要这里的定义来被技术人员理解。
ALU:算术逻辑单元
API:应用程序接口
BIOS:基本输入/输出系统
CD:压缩盘
CPU:中央处理单元
DVD:数字多功能盘或数字视频盘
FPGA:现场可编程门阵列
FPU:浮点处理单元
GPU:图形处理单元
GUI:图形用户界面
IaaS或IAAS:基础设施即服务
ID:标识或身份
IoT:物联网
LAN:局域网
OS:操作系统
PaaS或PAAS:平台即服务
RAM:随机存取存储器
ROM:只读存储器
UEFI:统一可扩展固件接口
VM:虚拟机
WAN:广域网
一些附加术语
在本文中参考了诸如在附图中示出的那些之类的示例性实施例,并且在本文中使用特定语言对其进行描述。但是,对于(多个)相关领域的技术人员和拥有本公开内容的技术人员来说,在本文中示的特征的变更和进一步修改以及本文中的特定实施例中所示的抽象原理的附加技术应用应当被认为是在权利要求的范围内。
在本公开中阐明了术语的含义,因此在阅读权利要求时应仔细注意这些阐述。给出了具体示例,但是(多个)相关领域的技术人员将理解,其他示例也可以落入所使用的术语的含义内,并且落入一个或多个权利要求的范围内。术语在此处的含义不必然与它们在一般用法(特别是在非技术用法)、特定行业的用法或特定词典或词典集中的含义相同。附图标记可以与各种措词一起使用,以帮助示出术语的广度。从文本的给定部分中省略附图标记并不一定意味着该文本没有讨论附图的内容。发明人主张并行使其对特定和选定的词典编纂的权利。带引号的术语是显式定义的,但是术语也可以不使用引号而被隐式地定义。术语可以在详细描述中和/或在申请文件的其他位置处被显示或隐式地定义。
如在本文中所使用的,“计算机系统”(又名“计算系统”)可以包括例如一个或多个服务器、主板、处理节点、膝上型计算机、平板计算机、个人计算机(便携式或非便携式)、个人数字助理、智能手机、智能手表、智能手环、蜂窝或移动电话、至少具有处理器和存储器的其他移动设备、视频游戏系统、增强现实系统、全息投影系统、电视、可穿戴计算系统和/或提供至少部分地通过指令来进行控制的一个或多个处理器的(多个)其他设备。指令可以采取固件或存储器和/或专用电路中的其他软件的形式。
“多线程”计算机系统是支持多个执行线程的计算机系统。术语“线程”应被理解为包括能够调度或受到调度并且可能同步的代码。在本公开之外,线程也可以通过诸如“任务”、“过程”或“协程”之类的其他名称而是已知的。然而,在本文中在线程和过程之间进行区分,因为线程限定了过程内部的执行路径。此外,过程的线程共享给定的地址空间,而不同的过程具有不同的各自的地址空间。过程的线程可以并行运行、顺序运行、或者以并行执行和顺序执行的组合(例如,时间分片)来运行。
“处理器”是线程处理单元,诸如同时多线程实现中的核心。处理器包括硬件。给定芯片可以容纳一个或多个处理器。处理器可以是通用的,也可以针对特定用途而被定制,诸如矢量处理、图形处理、信号处理、浮点算术处理、加密、I/O处理、机器学习等。
“内核”包括操作系统、管理程序、虚拟机、BIOS或UEFI代码以及类似的硬件接口软件。
“代码”意指处理器指令、数据(包括常量、变量和数据结构)或指令和数据两者。“代码”和“软件”在本文中可互换使用。可执行代码、解释代码和固件是代码的一些示例。
“程序”在本文中被广泛地使用,以包括应用、内核、驱动程序、中断处理程序、固件、状态机、库和由程序员(也被称为开发方)编写和/或自动生成的其他代码。
“例程”是一段可调用的代码,其通常将控制返回给就在程序执行中调用该例程的点之后的指令。取决于所使用的术语,有时会在“函数”和“程序”(procedure)之间进行区分:函数通常返回值,而程序(procedure)不返回。如在本文中所使用的,“例程”包括函数和程序(procedure)。例程可以具有返回值的代码(例如,sin(x)),或者它可能只是返回而不提供值(例如,void函数)。
“服务”意指在云计算环境或其他网络或计算系统环境中提供的可消耗程序产品,其提供对多个程序的资源或资源访问。
“云”意指用于计算、存储和联网的池化资源,其可弹性地用于所测量的按需服务。云可以是私有的、公共的、社区的或混合的,并且云服务可以以基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)或其他服务的形式来提供。除非另有说明,否则从文件读取或写入到文件的任何讨论均包括读取/写入本地文件或通过网络(可以是云网络或其他网络)的读取/写入或者两者都进行(本地和联网的读取/写入)。
“IoT”或“物联网”意指可寻址嵌入式计算节点的任何联网集。这样的节点是本文中所限定的计算机系统的示例,但是它们还具有以下特性中的至少两个特性:(a)没有本地人类可读显示器;(b)没有本地键盘;(c)输入的主要来源是跟踪非语言数据来源的传感器;(d)没有本地旋转磁盘存储——RAM芯片或ROM芯片提供唯一本地存储器;(e)没有CD或DVD驱动器;(f)嵌入在家用电器或家庭固定装置中;(g)嵌入在植入式或可穿戴式医疗设备中;(h)嵌入在车辆中;(i)嵌入在过程自动化控制系统中;(j)侧重于以下一项的设计:环境监测、市政基础设施监测、工业设备监测、能源使用监测、人类或动物健康监测、物理安全或物理运输系统监测。IoT存储可以是未经授权访问的目标,无论是经由云、经由另一网络还是经由直接本地访问尝试。
对计算资源的“访问”包括使用许可或其他能力来读取、修改、写入、执行或以其他方式利用该资源。尝试访问可能与实际访问明确区分开来,但是没有“尝试”限定词的“访问”包括尝试访问和实际执行或提供的访问。
如本文中所使用的,除非另有说明,否则“包括”允许附加元素(即,包括意指包含)。
“优化”意指改进,不必要是完美。例如,可以对已经被优化的程序或算法进行进一步的改进。
“过程”(process)在本文中有时被用作计算科学领域的术语,并且在该技术意义上涵盖计算资源用户,其例如还可以包括或被称为协程、线程、任务、中断处理程序、应用过程、内核过程、程序(procedure)或对象方法。实际上,“过程”是由系统实用程序标识的计算实体,诸如任务管理器、或其他操作系统环境中的类似实用程序(分别为微软公司和Linus Torvalds的商标)。“过程”(process)在本文中也被用作专利法领域的术语,例如,在描述过程权利要求时,与系统权利要求或制品(已配置的存储介质)权利要求相对。类似地,“方法”在本文中有时被用作计算科学领域的技术术语(“例程”),也被用作专利法领域的术语(“过程”)。专利法意义上的“过程”和“方法”在本文中可互换使用。技术人员将理解在特定实例中预期具有的含义,并且还将理解(在专利法意义上)给定要求保护的过程或方法有时可以使用一个或多个过程或方法(在计算科学意义上)来实现。
与没有自动化相反,“自动地”意指通过使用自动化(例如,针对本文讨论的特定操作和技术效果,由软件配置的通用计算硬件)。特别地,“自动地”执行的步骤尽管可以由人启动或由人交互式地引导,但是它们并不是通过手在纸上或在人的大脑中来执行。使用机器执行自动步骤以获得在没有这样提供的技术交互的情况下将无法实现的一个或多个技术效果。假定自动执行的步骤包括至少一个主动执行的操作。
技术人员理解,技术效果是技术实施例的推定目的。例如,在一个实施例中涉及计算,并且一些计算也可以在没有技术组件的情况下(例如,通过纸和铅笔,甚至作为脑力步骤)执行,这一事实并不能消除技术效果的存在或改变实施例的具体技术性质。诸如确定堆栈框架执行可能性、安装扫描返回屏障以及本文讨论的许多其他操作之类的并发性增强操作被理解为固有地是数字化的。人类大脑不能直接与CPU或其他处理器或RAM或其他数字存储装置进行接口,来读取和写入必要的数据以执行本文所教示的并发性增强步骤。鉴于本公开,本领域技术人员将很好地理解这一切,但是有时可能需要将这一点告知其他人或提醒其他人。
“以计算的方式”同样意指计算设备(至少是处理器加上存储器)正被使用,并且排除了仅通过人类思想或仅通过人类行为获得的结果。例如,用纸和铅笔进行算术并不是如本文所理解的那样以计算的方式进行的算术。计算结果更快、更广泛、更深入、更准确、更一致、更全面和/或以其他方式提供超出人类表现范围的技术效果。“计算步骤”是以计算的方式执行的步骤。“自动地”和“以计算的方式”都不必然意指“立即”。“以计算的方式”和“自动地”在本文中可互换使用。
“主动地”意指没有来自用户的直接请求。事实上,在步骤的结果已被呈现给用户之前,用户甚至可能没有意识到实施例的主动步骤是可能的。除非另有说明,否则本文所描述的任何计算和/或自动步骤也可以主动进行。
贯穿本文档,使用可选的复数“(多个)”意指存在一个或多个所指示的特征。例如,“(多个)处理器”意指“一个或多个处理器”或等效的“至少一个处理器”。
出于美国法律和实践的目的,在权利要求书或其他地方使用本文中的词语“步骤”并非旨在援引装置加功能(means plus function)、步骤加功能(step plus function)或美国法典35第112节第六款/第112(f)条的权利要求解释。特此明确反驳对此种效果的任何推定。
出于美国法律和实践的目的,除非权利要求使用短语“用于……的部件”,否则权利要求并不旨在援引部件加功能的解释。旨在被解释为部件加功能语言的权利要求语言(如果存在)将通过使用短语“用于……的部件”来明确记载该意图。当采用部件加功能的解释时,无论是通过使用“用于……的部件”和/或通过法院对权利要求语言的法律解释,说明书中针对给定名词或给定动词所记载的部件应被理解为与权利要求语言链接并且在本文中通过以下任何方式链接在一起:在附图的框图中的相同框内出现、以相同或相似的名称来标示、以相同的附图标记来标示、以任何附图中描绘的功能关系、在本公开文本中指出的功能关系。例如,如果权利要求限制记载了“zac小部件”并且该权利要求限制受到部件加功能解释的约束,那么至少在说明书中任何图框、段落或示例中提及“zac小部件”的任何地方所标识的所有结构、或由指派给zac小部件的任何附图标记连接在一起的所有结构、或被公开为与zac小部件的结构或操作具有功能关系的所有结构,将被视为本申请中针对zac小部件所标识的结构的部分,并将帮助限定zac小部件结构的等效集。
本领域技术人员将认识到本创新公开讨论了各种数据值和数据结构,并且认识到这些项驻留在存储器(RAM、磁盘等)中,从而配置存储器。本领域技术人员还将认识到,本发明公开讨论了在给定实现中以可执行代码具化的各种算法步骤,并且此类代码也驻留在存储器中,并且它有效地配置执行它的任何通用处理器,从而将其从通用处理器转换为功能专用硬件的专用处理器。
因此,技术人员不会错误地将(a)权利要求中记载的存储器和(b)权利要求中记载的数据结构或数据值或代码视为非重叠项。数据结构、数据值和代码被理解为驻留在存储器中,即使权利要求没有明确地为所提及的每个数据结构或数据值或代码段叙述驻留。因此,不需要对这种驻留进行明确的叙述。然而,它们也不被禁止,并且可以存在一两个精选叙述以进行强调,而不会将所有其他数据值和数据结构以及代码排除在驻留之外。同样,权利要求中记载的代码功能性被理解为配置处理器,而不管该配置数量是否在权利要求中被明确记载。
贯穿该文档,除非另有明确说明,否则对过程中的步骤的任何引用均假定该步骤可以由感兴趣的一方直接执行和/或由一方通过干预机制和/或干预实体间接执行,并且仍然在步骤的范围内。也就是说,除非明确说明直接执行,否则不需要由感兴趣方直接执行该步骤。例如,涉及感兴趣方的行动的步骤(诸如,关于目标或其他主题的分析、比较、计算、创建、确定、显示、增强、执行、收集、生成、指示、安装、定位、维护、减轻、修改、获取、操作、执行、预测、提供、读取、接收、减少、删除、替换、运行、采样、扫描、选择、存储、统计、使用、利用、变化、写入(以及分析、被分析、比较、被比较等)可能涉及由一些其他方的干预动作(诸如上述或转发、复制、上传、下载、编码、解码、压缩、解压缩、加密、解密、认证、调用等),包括本文档中提及的任何动作,但仍应被理解为由感兴趣方直接执行。
每当提及数据或指令时,将理解这些项对计算机可读存储器和/或计算机可读存储介质进行配置,从而将其转换为特定制品,而不是例如简单地存在于纸上、人的思想中或者仅仅是在电线上传播的信号。出于美国专利保护的目的,根据美国专利商标局(USPTO)在In re Nuijten案中的解释,存储器或其他计算机可读存储介质不是传播信号、载波或属于可专利主题范围之外的单纯能量。在美国,没有任何权利要求涵盖信号本身或单纯的能量,并且鉴于本公开而主张其他权利要求解释在表面上是不合理的。除非在美国境外准许的权利要求中另有明确说明,否则权利要求不涵盖信号本身或单纯的能量。
此外,尽管本文其他地方有明显相反的说明,但是在以下方面之间应理解为明显的区别:(a)一方面是计算机可读存储介质与计算机可读存储器,和(b)另一方面是传输介质,也被称为信号介质。传输介质是传播信号或载波的计算机可读介质。相比之下,计算机可读存储介质和计算机可读存储器不是传播信号或载波的计算机可读介质。除非权利要求中另有明确说明,否则“计算机可读介质”意指计算机可读存储介质,其不是传播信号本身,也不是单纯的能量。
本文中的“实施例”是示例。术语“实施例”与“本发明”不可互换。实施例可以自由地共享或借用各方面来创建其他实施例(只要结果可操作),即使在本文中本身没有明确地描述各方面的结果组合。要求明确且单独地描述每个被许可组合和每一个被许可组合对于本领域技术人员而言不是必要的,并且这与承认专利说明书是将本领域技术人员作为读者所编写的政策相违背。关于由甚至很少量可组合特征引起的可能组合数量的形式化组合计算和非正式化直觉也将表明,本文描述的各方面存在大量各方面的组合。因此,要求对每个和每一个组合都进行明确记载将与要求简明扼要的专利说明书和使读者了解所涉及技术领域的政策相违背。
附图标记列表
提供以下列表是为了方便和支持附图并且作为说明书文本的部分,其通过参考多个项来描述创新。此处未列出的项仍然可以是给定实施例的部分。为了使文本更易读,在文本中一些(而非全部)引用项附近应用了给定附图标记。相同的附图标记可以被用于参考给定项的不同示例或不同实例。附图标记列表是:
100操作环境,也被称为计算环境
102计算机系统,也被称为计算系统
104用户
106外围设备
108总体的网络,包括例如LAN、WAN、软件定义网络、云和其他有线或无线网络
110处理器
112计算机可读存储介质,例如RAM、硬盘
114可移除的、已配置的计算机可读存储介质
116可由处理器执行的指令;可以位于可移除存储介质上或其他存储器(易失性或非易失性或两者)中
118数据
120(多个)内核,例如(多个)操作系统、BIOS、UEFI、设备驱动器
122工具,例如防病毒软件、防火墙、分组嗅探器软件、入侵检测系统、入侵防御系统、调试器、分析器、编译器、解释器、反编译器、汇编器、反汇编器、源代码编辑器、自动完成软件、模拟器、模糊器、存储库访问工具、版本控制工具、优化器、协作工具、软件开发工具和工具套件(包括例如集成开发环境)、硬件开发工具和工具套件、诊断等
124应用,例如文字处理器、网络浏览器、电子表格、游戏、电子邮件工具、命令
126显示屏,也被称为“显示器”
128未以其他方式与附图标记106、108、110、112、114相关联的计算硬件
202总体的计算硬件,包括与附图标记106、108、110、112、114、126、128、424中的一个或多个附图标记相关联的硬件
204执行堆栈;也可以被简称为“堆栈”
206执行堆栈框架;也可以被称为“堆栈框架”或被简称为“框架”
208系统软件,例如内核120
210用户软件,例如应用124
212更改器软件,即可以对堆栈的部分进行更改(mutate)的软件;更改器软件可以是系统软件或用户软件
214垃圾收集器软件;也可以被称为“垃圾收集器”或“GC”
216线程,即计算机程序中的执行线程
300用于垃圾收集的执行堆栈扫描方面
302用于垃圾收集的执行堆栈扫描;也可以被称为“堆栈扫描”或被简称为“扫描”;也是指执行堆栈扫描
304框架出现数据,即,指示框架出现的数据
306垃圾收集安全点;也可以被简称为“安全点”
308实际扫描深度,例如堆栈中的深度,向下到实际追求框架的停止世界扫描
310总体的框架深度,例如堆栈顶部处于深度零处,堆栈顶部下方的一个框架处于深度一,应理解,该示例使用零索引但是其他示例可以使用一索引,以使得堆栈框架的顶部在深度一,下一框架在深度二,依此类推
312框架返回地址;也可以被称为“返回地址”;指示当与包含该返回地址的框架相对应的函数或其他例程执行完毕并且系统准备好将该框架从堆栈中弹出并且将控制转移到所指示的返回地址时,处理控制所转移到的地址
314框架执行可能性,即,指示在GC扫描更改器的堆栈时框架将被更改器访问的、所计算的可能性的概率或其他值(例如,布尔可能(“isLikely”)或不可能(“isNotLikely”));也可以被称为“执行可能性”
316扫描返回屏障;可以通过例如劫持框架返回地址来实现扫描返回屏障,即,实施例保存返回地址,将其在框架中替换为GC扫描返回屏障代码的地址,该GC扫描返回屏障代码执行例如堆栈扫描,并且当扫描返回屏障代码完成时,它从框架中删除它自己的地址并且根据恢复的返回地址进行控制转移;扫描返回屏障操作与主要操作来拦截写入(例如,记录正被写入的内容和位置)的写入屏障形成对比,也与主要才做来拦截读取的读取屏障形成对比,例如当线程想要在读取变量值之前更新变量时,尽管日志或更新或两者都可以通过扫描返回屏障代码来完成
318已安装的扫描返回屏障的堆栈深度;除非另有说明,否则本文中的“扫描深度”指的是这个预测的扫描深度318,而不是实际的扫描深度308
320感兴趣的时间段
322GC执行(尤其包括堆栈扫描)与其他软件(尤其是更改器软件)的执行的并发性
324堆栈完全深度,例如,给定堆栈中的总框架数,包括扫描返回屏障上方的框架并且还包括扫描返回屏障下方的框架
326执行样本,例如,包括关于在特定时间点处的堆栈的数据
328堆栈生长方向;为方便起见,本文包括权利要求在内的讨论被表述为在存储器中向上增长的堆栈,最近的框架在堆栈的顶部或附近,而最旧的框架在堆栈的底部或附近,但是技术人员将意识到一些堆栈实现是相反的,因为它们的堆栈向下增长;本文的教示适用于在任何方向(例如,向上、向下或侧向)生长的堆栈
330框架返回操作,例如将处理控制转移到位于返回地址处的指令
400配备有并发性增强功能性的系统
402行为驱动的堆栈扫描优化(BDSSO)软件,例如,执行方法700或方法800或以其他方式基于更改器堆栈活动而在不同堆栈深度处采用扫描返回屏障的软件
404分析器工具;也可以被称为“性能分析器”或被简称为“分析器”
406管理运行时间,即,使用自动垃圾收集来提供存储器管理的运行时
408到管理运行时间的接口,例如API,
410总体的堆栈数据
412用于例程的完全执行或用于完成例程执行的估计的执行时间414执行例程所花费的经过时间
416例程,例如函数
418框架执行概率,例如,0到1范围内的浮点数值,表示在堆栈扫描期间框架将被执行的计算出的概率
420框架执行概率阈值;例如可以由管理方或其他用户设置,或者可以通过机器学习推理或统计建模来选择
422执行堆栈扫描器;出于目前的目的,这个扫描器被认为是垃圾收集器214的部分,尽管在其他上下文中可能会在GC代码和堆栈扫描器代码之间进行区分
424处理器核心
426软件或硬件或两者,其形成到系统400的接口,其允许I/O
500框架出现数据的方面或特性
502针对给定软件片段或程序执行的给定部分所经过的执行时间
504处理器或处理器核心循环计数
506存储器消耗量或可计算存储器消耗量的数据,例如,通过计算相邻框架对的位置之间的差异
508包含在程序执行中的特定点处的框架出现数据的快照
510程序执行中的特定点;例如可以被表示为最近执行的机器指令的位置,或被表示为循环计数,或通过程序执行的另一度量来表示
602堆栈的顶部
604扫描返回屏障上方的框架
700流程图;700还指由图7流程图所图示或与图7流程图一致的并发性增强方法
702获取堆栈框架出现数据
704确定在GC堆栈扫描期间堆栈框架执行的可能性
706选择堆栈扫描深度,即,选择堆栈中将安装扫描返回屏障的位置
708安装扫描返回屏障,例如,通过保存框架的当前返回地址并且将其替换为GC软件的地址,该GC软件在将控制转移到所保存的返回地址处的指令之前暂停更改器并且扫描(多个)框架
710允许执行堆栈扫描与更改器执行并发地(至少部分地)进行
800流程图;800还指由图8流程图所图示或与图8流程图一致的并发性增强方法(其结合了图7的步骤)
802通过基于预测的堆栈活动来选择堆栈深度并且安装扫描返回屏障来优化堆栈扫描并发性
804并发地运行,例如,同时执行更改器和堆栈扫描器
806收集堆栈数据
808例如通过与管理运行时间接口408交互来利用管理运行时间
810创建执行样本
812以计算的方式分析执行样本
814针对两个或更多个线程逐个线程地执行并发性增强步骤
816在程序之间改变所选择的扫描深度(即,扫描返回屏障位置),或执行导致这种变化的指令
818在给定程序的执行之间改变所选择的扫描深度(即,扫描返回屏障位置),或执行导致这种变型的指令;除了在程序之间改变816扫描深度或在给定程序的执行之间改变818扫描深度,在一些实施例中,还在单个程序的单次执行过程中确定和调整针对每个线程的扫描深度
820在选择706扫描返回屏障位置时避免依赖于分析的性能数据
822统计堆栈快照中的框架
824将例程的经过的部分执行时间与估计的总执行时间进行比较,或使用估计的时间来完成例程
826以规则的间隔对执行堆栈进行采样;这可以例如使用操作系统级采样来完成,诸如在微软环境中使用Windows事件跟踪(ETW)进行采样,或者在环境中利用perf进行采样,或者使用与运行时无关的其他工具进行采样,或者可以通过特定运行时来进行采样,例如通过或其他虚拟机(分别为微软公司、Linus Torvalds、甲骨文美国公司的商标)
828移除已安装的扫描返回屏障,例如通过将其替换为屏障所替换的返回地址
830将框架执行概率与概率阈值进行比较
832执行软件;泛指执行以及本文所提供的软件执行的任何特定示例
834暂停软件执行,例如在垃圾收集的停止世界部分期间
836例如基于返回地址之前的剩余指令的数目或例程的执行时间502的测量历史来获得用于完成例程的执行的估计完成时间
838在本公开中讨论的尚未指派一些其他附图标记的任何步骤
操作环境
参考图1,针对实施例的操作环境100包括至少一个计算机系统102。计算机系统102可以是多处理器计算机系统,也可以不是。操作环境可以包括给定的计算机系统中的一个或多个机器,其可以在云内形成集群、客户端-服务器联网的和/或对等联网。个体机器是计算机系统,并且协作的机器组也是计算机系统。给定的计算机系统102可以被配置用于例如具有应用的端用户、用于管理方、作为服务器、作为分布式处理节点、和/或以其他方式来配置。
人类用户104可以通过使用显示器、键盘和其他外围设备106,经由键入的文本、触摸、语音、移动、计算机视觉、手势和/或其他形式的I/O而与计算机系统102交互。屏幕126可以是可移除外围设备106或者可以是系统102的集成部分。用户界面可以支持实施例与一个或多个人类用户之间的交互。用户界面可以包括命令行界面、图形用户界面(GUI)、自然用户界面(NUI)、语音命令界面和/或其他用户界面(UI)呈现,它们可以作为不同的选项而被呈现或者可以被集成。
系统管理方、网络管理方、云管理方、安全分析师和其他安全人员、操作人员、开发方、测试人员、工程师、审计人员和端用户各自都是特定类型的用户104。代表一个或多个人行动的自动化代理、脚本、回放软件、设备等也可以是用户104,例如以促进测试系统102。取决于存储设备和/或联网设备与处理器110的可分离性,存储设备和/或网络设备在一些实施例中可以被视为外围设备并且在其他实施例中可以被视为系统102的部分。例如,未在图1中示出的其他计算机系统可以以技术方式与计算机系统102交互,或者使用经由网络接口设备到网络108的一个或多个连接而与另一系统实施例交互。
每个计算机系统102包括至少一个处理器110。类似于其他合适的系统,计算机系统102也包括一个或多个计算机可读存储介质112。存储介质112可以是不同的物理类型。存储介质112可以是易失性存储器、非易失性存储器、原地固定介质、可移除介质、磁介质、光学介质、固态介质和/或其他类型的物理持久性存储介质(不同于单纯的传播信号或单纯的能量)。特别地,当被插入或以其他方式被安装时,诸如便携式(即,外部)硬盘驱动、CD、DVD、存储棒或其他可移除非易失性存储介质的已配置的存储介质114可以在功能上成为计算机系统的技术部分,从而使得其内容可访问,以与处理器110交互并且由处理器110使用。可移除的已配置的存储介质114是计算机可读存储介质112的示例。计算机可读存储介质112的一些其他示例包括内置RAM、ROM、硬盘以及用户104不容易移除的其他存储器存储设备。为了符合当前的美国专利要求,在美国未决或已授权的任何权利要求下,计算机可读介质、计算机可读存储介质或计算机可读存储器均不是信号本身或单纯的能量。
存储介质114配置有可由处理器110执行的二进制指令116;在本文中广义上使用“可执行”来包括例如机器代码、可解释代码、字节代码和/或在虚拟机上运行的代码。存储介质114还配置具有数据118,数据118通过指令116的执行而被创建、修改、引用和/或以其他方式被用于技术效果。指令116和数据118对其所驻留在其中的存储器或其他存储介质114进行配置;当该存储器或其他计算机可读存储介质是给定计算机系统的功能部分时,指令116和数据118也对该计算机系统进行配置。在一些实施例中,数据118的部分表示真实世界中的项,诸如产品特性、库存、物理测量、设置、图像、读数、目标、体积等等。这样的数据还通过备份、恢复、提交、中止、重新格式化和/或其他技术操作来进行转换。
尽管实施例可以被描述为被实现为由计算设备(例如,通用计算机、服务器或集群)中的一个或多个处理器执行的软件指令,但是这样的描述并不意味着穷尽所有可能的实施例。本领域技术人员将理解,通常也可以直接在硬件逻辑中全部或部分地实现相同或相似的功能性,以提供相同或相似的技术效果。备选地或者附加于软件实现,本文描述的技术功能性可以至少部分地由一个或多个硬件逻辑组件来执行。例如并且在不排除其他实现的情况下,实施例可以包括硬件逻辑组件110、128,诸如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统组件(SOC)、复杂可编程逻辑器件(CPLD)和类似组件。例如,实施例的组件可以基于其输入、输出和/或其技术效果而被分组为交互功能模块。
除了处理器110(例如CPU、ALU、FPU和/或GPU)、存储器/存储介质112和显示器126之外,操作环境例如还可以包括其他硬件128,诸如电池、总线、电源、有线和无线网络接口卡。名词“屏幕”和“显示器”在本文中可互换使用。显示器126可以包括一个或多个触摸屏、响应于来自笔或平板计算机的输入的屏幕或仅用于输出操作的屏幕。在一些实施例中,诸如人类用户I/O设备(屏幕、键盘、鼠标、平板计算机、麦克风、扬声器、运动传感器等)的外围设备106将存在于与一个或多个处理器110和存储器的可操作通信中。
在一些实施例中,系统包括通过有线和/或无线网络108连接的多个计算机。联网接口设备128可以使用诸如分组交换网络接口卡、无线收发器或电话网络接口的网络组件来提供对网络108的访问,这些组件例如可以存在于给定的计算机系统中。联网接口设备和其他网络组件(诸如,交换机或路由器或防火墙)的虚拟化也可以存在于例如软件定义的网络或沙盒或其他安全云计算环境中。给定的实施例还可以通过直接存储器访问、可移除非易失性存储介质或其他信息存储-取回和/或传输方法来传送技术数据和/或技术指令。
本领域技术人员将了解,本文在“操作环境”下呈现的前述方面和其他方面可以形成给定实施例的部分。本文档的标题并非旨在将特征严格分类为实施和非实施特征集。
一个或多个项在附图中以轮廓线形式示出,或者在括号内被列出,以强调它们不必然是所图示的操作环境或所有实施例的部分,而是可以与如本文所讨论的操作环境或一些实施例中的项进行互操作。在任何附图或任何实施例中,并不必然需要非轮廓线或括号形式的项。特别地,图1是为了方便而被提供;在图1中包括的项并不意味着该项或所描述的该项的用途是在当前的创新之前是已知的。
关于系统的更多信息
一些实施例使用或提供并发性增强系统,诸如示例系统400或如本文教示的那样增强的另一系统102。并发性增强系统包括程序212的执行堆栈204。执行堆栈包括在感兴趣的时间段320上的执行框架206。并发性增强系统的存储器112由执行堆栈来配置,并且存储器112还由行为驱动的堆栈扫描优化(BDSSO)软件402来配置。并发性增强系统的处理器110与存储器可操作地通信。处理器110被配置为,执行BDSSO软件402以执行BDSSO步骤,这些步骤包括:(a)获取执行堆栈框架出现数据304,(b)针对多个执行框架206中的每个框架,从执行堆栈框架出现数据来确定相应的框架执行可能性314,(c)至少部分地基于框架执行可能性来选择堆栈扫描深度318,所选择的堆栈扫描深度小于整个执行堆栈的完全深度324,(d)在所选择的堆栈扫描深度处安装垃圾收集扫描返回屏障316,以及然后(e)允许跟踪垃圾收集器214在程序212运行时扫描该扫描返回屏障下方的执行堆栈。通过执行BDSSO步骤增加了系统并发性,因为在垃圾收集器扫描该扫描返回屏障下方的执行堆栈的同时,程序212与垃圾收集器214并发地运行,除非程序执行命中扫描返回屏障的框架返回操作330。
例如,在一些实施例中,在应用线程216停止时,扫描返回屏障316上方的框架206,但是可以在应用124正在运行时扫描堆栈的其余部分。多线程应用是更改器程序212的示例。返回屏障允许并发地扫描屏障下方的堆栈部分的实施例,而不会引发在扫描期间将检测不到堆栈更改的风险。利用或不利用BDSSO软件都将扫描整个堆栈,但是利用BDSSO时,在线程216停止时进行的扫描较少。
获取堆栈框架出现数据的一种方式是使用现有的分析器样本,使样本执行双重任务。因此,一些实施例包括在程序212的执行期间由性能分析器工具404创建的执行样本326。分析器404被设计为生成用于性能报告的样本,但是在一些实施例中,BDSSO软件402至少部分地通过分析执行样本来获取执行堆栈框架出现数据。特别地,样本将包含具有返回地址312的框架206。然而,与垃圾收集并发性增强相反,由于分析器样本是为程序性能分析而设计的,所以样本326将通常包含不被用于垃圾收集并发性增强的性能数据,例如处理器循环计数504或其他执行时间测量502,以及存储器消耗数据506或其计算基础。
获取堆栈框架出现数据304的另一方式是利用受管理运行时间406。例如,一些实施例通过虚拟机工具接口(JVMTI)(甲骨文美国公司的商标)来获取堆栈框架数据410。根据设计,该接口408可以被用来获取堆栈数据,该堆栈数据包括在垃圾收集安全点306处获取的分析样本。这对于性能分析(样本的预期用途)可能多少有些不利,因为安全点在程序执行期间可能未以规则间隔进行定位,或者可能未以所期望的细粒度进行定位。然而,如本文所教示的,在安全点处进行采样实际上有助于并发性增强,因为垃圾收集安全点处的堆栈行为与预测堆栈的哪个部分在垃圾收集器扫描堆栈的同时可能保持稳定高度相关。
因此,一些增强的并发性系统实施例包括管理运行时间406,并且BDSSO软件402至少部分地通过利用管理运行时间在垃圾收集安全点306处搜集806堆栈数据410来获取执行堆栈框架出现数据304。
如所指出,一种熟悉的方法是在至少作为扫描返回屏障的初始定位而仅扫描顶部框架的同时暂停834更改器212。受益于本文的教示,该方法可以被视为始终将扫描返回屏障设置在堆栈的第一框架下方的方法,而不管涉及哪个程序212并且不管因程序的各种执行而导致程序行为的任何变化。相比之下,在本文教示的一些实施例中,增强系统通过下列方式中的至少一个方式不同于固定深度堆栈扫描系统而进一步被表征:垃圾收集扫描返回屏障316被安装在执行堆栈的至少两个框架下方;系统具有多个程序212,并且所选择的堆栈扫描深度318因程序之间变化;或者所选择的堆栈扫描深度318针对给定程序212的不同感兴趣时间段320而变化,即使在给定程序的单个执行中也是如此。
在一些实施例中,增强的系统改进了GC堆栈扫描和不包含多个线程的更改器之间的并发性。然而,其他实施例将本文的教示应用于多线程程序212。特别地,在一些实施例中,运行程序212的处理器具有N个核心424,N至少为二,并且程序212具有M个线程216,其中2≤=M<=N。每个线程216具有相应的执行堆栈204,并且BDSSO软件402针对M个线程中的每个线程在每个线程的基础上执行BDSSO步骤814。即,BDSSO软件代表垃圾收集线程针对垃圾收集的每个线程放置一个扫描返回屏障,并且不同的垃圾收集线程可能具有不同的相应扫描返回屏障深度318。给定程序212的一些线程可能是垃圾收集的,而该程序的其他线程不是。
如所指出,尽管可以使用(或重用)分析器样本来获取框架出现数据304,以通过选择性和自适应扫描返回屏障放置来用于并发性增强,但是一些实施例还利用比分析器依赖的更少的样本数据来正常工作。例如,在一些实施例中,执行堆栈框架出现数据304包括返回地址312,并且执行堆栈框架出现数据304没有以下项中的每项:说明所经过的执行时间的数据502、说明处理器循环计数的数据504、说明存储器消耗量或存储器消耗量的基础计算的数据506。在一些情况下,数据502、504、506可用于BDSSO软件402,但在确定框架执行可能性314时或在选择扫描返回屏障位置318时不被BDSSO软件依赖也不由BDSSO计算。在一些情况下,堆栈框架出现数据304没有数据502并且也没有数据504。
通过本文对计算硬件的扩展讨论,本文还描述了其他系统实施例,其直接或可导出为所描述的过程或所配置的介质的系统版本。
尽管在附图中示出了具体的架构示例,但是实施例可以与那些示例不同。例如,不同附图中所示的项可以一起被包括在一个实施例中,附图中所示的项可以被省略,不同项中所示的功能性可以被组合成更少的项或单个项,项可以被重新命名,或者项可以以不同的方式相互连接。
在本公开中提供了示例以帮助说明技术的各方面,但是在本文档内给出的示例并未描述所有可能的实施例。实施例不限于本文提供的组件名称、优化、算法选择、样本326内容、堆栈实现、方法或场景的具体示例。例如,给定实施例可以包括附加的或不同的技术特征、机制、序列、数据结构或功能性,并且可以以其他方式背离本文提供的示例。
过程(又名方法)
图7图示了方法700,其是可以由增强系统诸如系统400或如本文教示的另一并发性增强系统执行或辅助的方法的示例。图8进一步图示了适合在系统400或具有本文教示的创新功能性的其他系统的操作期间使用的并发性增强方法(其也可以在该词的法律意义上被称为“过程”)。图8包括图7中所示步骤的一些改进、补充或上下文动作。图8还结合了图7中所示的步骤。除非另有说明,否则附图中所示的或以其他方式公开的技术过程将被自动执行,例如通过增强的垃圾收集器214。在涉及人类管理方或其他人类的动作的范围内,还可以部分自动地、部分手动地执行过程,例如,在一些实施例中,人类管理方可以指定框架执行概率阈值420。在本文中设想具有创新性的过程都不是完全手动的。在给定实施例中,可以重复过程的零个或多个图示步骤,可能利用不同的参数或数据来对其进行操作。实施例中的步骤也可以按照与图7和图8中所布局的从上到下的顺序不同的顺序来进行。步骤可以顺序地、以部分重叠的方式或完全并行地执行。特别地,遍历流程图700的动作项或流程图800的动作项以指示在过程期间所执行的步骤的顺序可以因过程的各种执行而变化。流程图遍历顺序也可以因过程实施例而变化。如果所执行的过程是可操作的并且符合至少一项权利要求,则步骤也可以被省略、组合、重命名、重新分组、在一个或多个机器上执行或者以其他方式背离所图示的流程。
一些实施例使用或提供一种用于优化垃圾收集的执行堆栈跟踪的并发性增强方法,包括以下步骤:获取702执行堆栈的执行堆栈框架出现数据;针对多个执行框架中的每个执行框架,从执行堆栈框架出现数据来自动确定704相应的框架执行可能性;至少部分地基于框架执行可能性来自动选择706堆栈扫描深度,所选择的堆栈扫描深度小于整个执行堆栈的完全深度;在所选择的堆栈扫描深度处自动安装708垃圾收集扫描返回屏障;并且允许710跟踪垃圾收集器仅将执行堆栈扫描302到所选择的堆栈扫描深度。与在不执行该方法而扫描执行堆栈以进行垃圾收集相比,由于垃圾收集器堆栈扫描软件的执行832与更改器软件的执行832并发地出现804,因此通过执行该方法来增加802并发性。
一些实施例使用堆栈框架存在快照的窗口来确定框架执行可能性。每个快照508包括执行框架集。快照分析812的目标是找到堆栈中的位置318,对于该位置,在该点下方的所有内容在样本集之间(即,快照之间)保持不变(或大部分不变)。在一些实施例中,执行堆栈框架出现数据304包括在程序212的执行期间针对不同点510的堆栈框架快照508,并且确定704框架执行可能性314包括:统计822特定执行框架集在堆栈框架快照集中出现了多少次。例如,在图6中所示的示例中,所示的五个快照508中的一些框架206在快照之间改变,而其他的没有改变。时间在图6中从左到右进行。在该示例中,扫描屏障深度318被设置为刚好在未改变的框架206上方,在所有示出改变的框架604下方。
更一般地,在一些实施例中,如果框架F没有出现在所有最后N个样本中,那么该实施例不尝试与更改器的执行并发地扫描框架F。在图6示例中,最右边(最近)堆栈的顶部四个框架并未出现在所有最后5个(N=5)样本(快照)中,因此这四个框架在并发扫描截止点318上方。在截止深度318下方的框架确实全都出现在最后5个快照中,并且垃圾收集器将相应地尝试扫描它们,同时与产生5个采样的堆栈204的更改器并发地运行。
在一些实施例中,确定704框架执行可能性的另一种方式使用估计的例程执行长度数据。在一些中,确定704框架执行可能性包括以下至少一项:将针对例程416的部分执行所经过的执行时间414与针对例程的完全执行的估计的执行时间进行比较824,或者得到836针对例程的完全执行的估计完成时间412。
在一些实施例中,获取702堆栈框架出现数据的一种方式是通过在程序执行期间周期性地对执行堆栈进行采样826。其他实施例可以以伪随机间隔来执行采样,或其他非周期性采样。
当程序212具有深度堆栈204并且大部分活动在前数个框架中时,如本文所教示的并发性增强的益处可能特别大。例如,在一些实施例中,执行堆栈框架出现数据304包括在程序212的执行期间针对不同点的堆栈框架快照508,其中大多数快照各自示出至少一百个框架206的堆栈深度324,但是所选择的堆栈扫描深度318小于十并且大于一。
在一些实施例中,确定704框架执行可能性并且选择706堆栈扫描深度被执行,而不20不读取或以其他方式不依赖于以下任一项:说明针对任何堆栈框架的所经过的执行时间的数据502、说明针对任何堆栈框架的处理器循环计数的数据504、或者说明针对任何堆栈框架的存储器消耗量的数据506。
在一些实施例中,获取702执行堆栈框架出现数据包括:获取由分析器工具创建的执行样本。在一些实施例中,获取702执行堆栈框架出现数据包括:利用808管理运行时间用于在垃圾收集安全点处进行分析。
在一些实施例中,该方法找到至少一个线程,其堆栈样本具有反复框架集。特别地,更改器软件包括应用程序124,并且该方法包括针对应用程序的至少两个线程在每线程的基础上利用相应的线程216的多个执行堆栈中的每个执行堆栈来至少执行获取702、确定704、选择706和安装708。
已配置的存储介质
一些实施例包括已配置的计算机可读存储介质112。存储介质112可以包括磁盘(磁、光或其他)、RAM、EEPROM或其他ROM,和/或其他可配置存储器,尤其包括计算机可读存储介质(不是单纯的传播信号)。已配置的存储介质具体可以是诸如CD、DVD或闪存的可移除存储介质114。可以是可移除或不可移除的、以及可以是易失性或非易失性的通用存储器使用诸如框架出现数据304、扫描返回屏障深度318、执行可能性314和BDSSO软件402的各项而被配置成实施例,以从可移除存储介质114和/或诸如网络连接的另一源读取的数据118和指令116的形式,来形成已配置的存储介质。如本文所公开的,已配置的存储介质112能够使计算机系统102执行用于并发性增强的技术处理步骤。因此,附图帮助图示已配置的存储介质实施例和过程(也称为方法)实施例,以及系统和过程实施例。特别地,图7或图8中所图示的或本文中以其他方式教示的任何过程步骤可以被用来帮助将存储介质配置为形成已配置的存储介质实施例。
一些实施例使用或提供配置有数据118和指令116的计算机可读存储介质112、114,这些数据118和指令116在由至少一个处理器110执行时使计算系统执行优化垃圾收集的执行堆栈跟踪的并发性增强方法。该方法包括:获取702针对程序的执行堆栈的执行堆栈框架出现数据;针对多个执行框架中的每个执行框架,从执行堆栈框架出现数据来自动确定704相应的框架执行可能性;至少部分地基于框架执行可能性来自动选择706堆栈扫描深度,所选择的堆栈扫描深度小于整个执行堆栈的完全深度;在所选择的堆栈扫描深度处自动安装708垃圾收集扫描返回屏障;并且允许710跟踪垃圾收集器仅将执行堆栈扫描到所选择的堆栈扫描深度;由此,通过执行该方法来增加802垃圾收集堆栈扫描与程序执行的并发性。
在一些实施例中,程序212在执行832时命中扫描返回屏障,并且该方法还包括:移除828扫描返回屏障,自动选择706不同的堆栈扫描深度(例如,堆栈进一步向下的深度),并且在该不同的堆栈扫描深度处自动安装708扫描返回屏障。代替选择更深一个框架的深度,一些实施例选择更深K个框架的深度,其中K由管理方设置,或者K可以被动态地确定,例如作为被移除深度的截断部分,例如将K设置为大于或等于被移除深度除以四的下一整数。
在一些实施例中,执行堆栈对应于程序212的线程,并且该方法在线程的执行期间的不同时间以不同的堆栈扫描深度318来重复选择706和安装708,但是每次垃圾收集扫描返回屏障都被安装在执行堆栈的至少两个框架下方。在这些实施例中的一些实施例中,执行堆栈框架出现数据304包括在程序的执行期间针对不同点的堆栈框架快照508,至少80%的快照各自示出至少八十个框架的堆栈深度,并且所选择的堆栈扫描深度小于九。
在一些实施例中,确定704框架执行可能性包括:将框架执行概率418与框架执行概率阈值420进行比较830。例如,如果框架F出现在最近的十个堆栈快照中的四个快照中,则该框架的概率418可以被计算为0.4,并且如果将扫描返回屏障放置在框架下方的阈值420被设置为0.2,那么将0.4与0.2进行比较会产生可能改变(“LikelyToChange”)的可能性314,它太高而无法将框架F包括在并发扫描执行堆栈的较低部分中。
附加的示例和观察
本领域技术人员将认识到,并非本公开的每个部分或其中的任何特定细节都必须满足诸如启用、书面描述或最佳模式的法律标准。此外,实施例不限于特定的网络、协议、工具、标识符、字段、数据结构、函数或其他实现选择。与任何其他专利公开的任何明显冲突,即使是来自本发明的所有者,也没有解释本专利公开中呈现的权利要求的作用。根据与本公开的所有部分有关的这种理解,提供了一些附加的示例和观察结果。
受益于本文所提供的教示,技术人员可以根据各种特征来查看垃圾收集。例如,堆栈跟踪、具有STW时间更短的低延迟、并发堆栈扫描和更改器执行以获得更好的更改器响应、在STW期间的固定计数框架扫描、基于实际堆栈活动的动态计数框架扫描以及其他特性可以在熟悉的垃圾收集器或创新的垃圾收集器中或者在一些情况下在两种收集器中被标识。特别地,本领域技术人员将认识到,给定的实现可以在一些方面或在某些时候根据本文的新教示进行操作,并且在其他方面或在其他时间也可以以熟悉的方式操作。
一些实施例为并发垃圾收集提供或使用智能部分堆栈扫描。作为上下文,跟踪垃圾收集器214通过遍历对象图来进行操作以确定哪些对象是可到达的(并且因此哪些对象是不可到达的并且可以被视为垃圾)。跟踪收集器从根集开始其标记过程,然后遍历其引用的传递闭包。根是假定可到达的对象。根标识来自多个地方,包括执行堆栈。扫描用于根的堆栈可能是昂贵的,因为现实世界程序中的堆栈可能非常深,需要遍历许多激活框架206。并发垃圾收集器试图将必须暂停应用线程的时间最小化,因此减少堆栈扫描所花费的时间量对它们来说是很重要的。
用于并发堆栈扫描的一些减轻方法在停止世界(STW)中止中仅扫描正在执行的框架——顶部框架,然后让应用124恢复。这种方法可以设立堆栈屏障,以便如果app试图返回到前一框架,则系统重新进入STW。一些减轻方法仅扫描正在执行的框架,但是当更改器线程试图转到未扫描的框架时,它们使更改器线程通过在再次运行用户代码之前对该框架进行标记工作来帮助GC。一些减轻方法将堆栈拆分为固定大小的部分,并且一次扫描一个部分。这些减轻方法共有的一件事是,它们扫描STW中的所有、一个或一些其他预定数量的框架,而不考虑最近的堆栈活动或过去的堆栈活动的任何使用以尝试预测更改器在堆栈扫描期间将试图进入哪些框架。
相比之下,此处呈现的一些实施例通过以动态选择扫描返回屏障深度的形式做出这样的预测来构建并发堆栈扫描。代替提前预先确定GC将在STW中扫描多少堆栈,一些实施例将通过使用采样信息进行动态调整以进行智能猜测,该智能猜测对进行猜测318所花费的资源与可能增加的并发性进行平衡。
例如,通过在运行过程中周期性地对执行堆栈进行采样,一些实施例可以拾取通知这种猜测318的一些模式。例如,假设采样示出线程具有非常深堆栈的执行模式(数百个框架),但是只有前6个框架在样本之间出现变化。在看到这种模式足够长的时间(例如,四个连续的快照)之后,增强系统推断:在即将到来的GC中需要从第7个框架返回的概率很低,因此该深度是设立返回屏障并且在该深度以下执行并发扫描的良好位置。
如果猜测被证明是正确的,则增强的系统将在降低更改器线程遭遇扫描相关延迟的可能性的同时获得并发堆栈扫描的优势。如果猜测被证明是不正确的并且函数确实在堆栈扫描期间命中堆栈屏障,那么增强系统可以再次尝试猜测,或者它可以采用与堆栈屏障一起使用的现有减轻方法。
本领域技术人员将理解,本文描述的实施例可以具有优于其他方法的各种技术优势。例如,针对一些现有的部分堆栈扫描的解决方案使用在应用线程停止时预先确定要扫描多少堆栈的概念。这种一刀切的方法可能导致效率低下,例如当GC在中止期间扫描的框架多于线程在那个时间期间返回的框架时,GC将不必要地延长线程的中止时间。如果GC扫描器422在中止期间选择扫描太少的框架,则线程可能会在中止之后遭遇堆栈屏障,并且不得不与GC进行更多的等待和更多的协调。本文呈现的一些实施例通过基于程序行为在运行时确定非并发扫描框架的数量来避免这两种不利结果。
一些附加的组合和变型
代码、数据结构、逻辑、组件、通信和/或其功能等价物的这些任何组合也可以与上述系统中的任何系统及其变型进行组合。过程可以以可操作的任何子集或组合或序列来包括本文描述的任何步骤。每个变型可以单独出现,或者与任何一个或多个其他变型组合地出现。每个变型可以与任何过程一起出现,并且每个过程可以与任何一个或多个其他过程进行组合。每个过程或过程的组合(包括变型)可以与任何上述已配置的存储介质组合和变型进行组合。
结论
简而言之,在计算系统102中回收存储器112的垃圾收集(GC)有时暂停834应用124、web服务和其他更改器程序212,以便扫描302它们的执行堆栈204,这降低了它们的响应性。但是由行为驱动的堆栈扫描优化(BDSSO)功能性(诸如,BDSSO软件402)减少802暂停时间,该功能性增加了更改器212执行832与GC堆栈扫描的并发性322。BDSSO获取702执行堆栈框架出现数据304,确定704框架执行可能性314,基于可能性来选择706堆栈扫描深度318,并且在所选择的深度318处安装708扫描返回屏障316。然后在更改器212运行832的同时GC 214扫描302执行在屏障316下方的堆栈204,因此增加802并发性322并且提高802更改器212响应性。所选择的706屏障位置318根据实际堆栈204活动而变化816、818,以便提供优化的802并发性,而不是使用诸如固定深度或固定的均匀间隔深度集的屏障放置的不灵活方法。BDSSO可以重用现有的分析器404样本326或虚拟机接口408。缺少诸如执行时间502、循环计数504或所使用的存储器506的分析器性能数据的瘦样本326也可以被用于BDSSO,这在处理器110的使用和由样本326消耗的存储器112方面,允许采样成本更低。本文所提供的教示可以被应用于云中、服务器、工作站或其他地方的计算系统102,从而提供提高应用软件响应性并且支持自动存储器回收的特定并发性增强。
实施例本身也被理解为包括或受益于经过测试的和适当的安全控制和隐私控制,诸如通用数据保护条例(GDPR),例如应当理解,应采取适当的措施来帮助防止误用计算系统通过将恶意软件注入或激活到垃圾收集软件中。本文所教示的工具和技术的使用与此类控制的使用兼容。
尽管微软技术在一些激励性示例中被使用,但是本文的教示不限于在由微软提供或管理的技术中使用。例如,在适当的许可下,本教示可以被体现在由其他云服务提供方所提供的软件或服务中。
尽管特定实施例在本文中被明确地图示和描述为过程、已配置的存储介质或系统,但是应当了解,对一种类型的实施例的讨论通常还扩展到其他实施例类型。例如,结合图7和图8对过程的描述还有助于描述已配置的存储介质,并且有助于描述如结合其他附图所讨论的系统和制造方的技术效果和操作。没有遵循将一个实施例的限制解读对另一实施例的限制。特别地,过程不必然限于在讨论系统或制造(例如,已配置的存储器)时所呈现的数据结构和布置。
本领域技术人员将理解,实现细节可以与特定代码(诸如,特定API、特定字段、特定种类的运行时或编程语言或架构以及特定计算环境)有关,并且因此不需要在每个实施例中都出现。本领域技术人员还将理解,在讨论细节时使用的程序标识符和一些其他术语是特定于实现的,并且因此不需要涉及每个实施例。尽管如此,尽管这里不必然要求它们存在,但是这样的细节可以通过提供上下文来帮助一些读者和/或可以图示本文所讨论的技术的许多可能实现中的一些实现。
通过适当注意本文所提供的项,包括技术过程、技术效果、技术机制和技术细节,这些项对所有要求保护的或可要求保护的实施例是说明性的而非全面的,技术人员将理解本文描述的本公开和实施例不针对技术领域之外的主题,也不针对诸如主要或原始原因或动机之类的其自身的任何想法,也不针对仅结果本身,也不针对心理过程或心理步骤,也不针对商业方法或流行的经济实践,也不针对仅组织人类活动的方法,也不针对自然法则本身,也不针对自然发生的事物或过程,也不针对生物或生物的部分,也不针对数学公式本身,也不针对孤立的软件本身,也不针对仅传统计算机,也不针对任何完全无法察觉的东西或任何抽象的想法本身,也不针对无关紧要的后解决活动,也不针对完全在未指定的装置上实现的任何方法,也不针对无法产生有用和具体的结果的任何方法,也不针对所有使用领域的任何抢占,也不针对根据寻求或正被许可或强制实施专利保护的司法管辖区的法律而不符合专利保护的任何其他主题。
除非本文中明确指出了这种排除,否则本文中对具有一些特征X的实施例的引用以及本文中在其他地方对具有一些特征Y的实施例的引用并不从本公开中排除同时具有特征X和特征Y的实施例。所有可能的否定权利要求限制都在本公开的范围内,从某种意义上说,即使在本文任何示例中均未给出特定的排除,也可以将被陈述为实施例一部分的任何特征明确地从包括在另一个实施例中移除。术语“实施例”在本文中仅被用作“过程、系统、制品、已配置的计算机可读存储介质和/或以与适用法律一致的方式所应用的本文中的教示的其他示例”的更方便形式。因此,只要实施例与至少一个权利要求一致,则给定“实施例”可以包括本文所公开的特征的任何组合。
并非在每个实施例中都需要存在附图中所示的每个项。相反,实施例可以包含附图中未明确示出的(多个)项。尽管这里通过特定示例在文本和附图中图示了一些可能性,但是实施例可以脱离这些示例。例如,示例的特定技术效果或技术特征可以被省略、重命名、不同地分组、重复、以不同的方式在硬件和/或软件中被实例化、或者是出现在两个或更多示例中的效果或特征的混合。在一些实施例中,在一个位置处示出的功能性也可以在不同的位置处被提供;本领域技术人员将认识到,在不必从被视为整体的交互模块集合中省略所期望的技术效果的情况下,可以在给定的实现中以各种方式限定功能性模块。由于空间限制或者为了方便起见,不同的步骤可以一起被示出在附图中的单个框中,但是仍然可以分开执行,例如,在方法的给定执行中,一个步骤可以在没有另一步骤的情况下被执行。
全文中通过附图标记对附图进行了参考。在附图中或在文本中,与给定附图标记相关联的措词中的任何明显不一致之处都应当被理解为简单地扩大了该附图标记所参考的范围。即使使用相同的附图标记,给定的附图标记的不同实例也可以指代不同的实施例。类似地,给定的附图标记可以被用来指代动词、名词和/或每个词的对应实例,例如处理器110可以通过执行指令来处理110指令。
如本文中所使用的,诸如“一”、“一个”和“该”之类的术语包括所指示的项或步骤中的一个或多个。特别地,在权利要求中,对项的引用通常意味着存在至少一个这样的项,并且对步骤的引用意味着该步骤的至少一个实例被执行。类似地,在上下文允许的情况下,“是(is)”和其他单数动词形式应被理解为包含“是(are)”和其他复数形式的可能性,以避免语法错误或误解。
标题仅是为了方便;关于给定主题的信息可以在标题指示该主题的部分之外找到。
所提交的所有权利要求和摘要都是说明书的部分。
就本文使用的任何术语暗示或以其他方式指代行业标准而言,并且就适用法律要求标识这种标准的特定版本而言,本公开应被理解为指代最新版本的该标准,其根据适用的专利法至少在本公开的最早优先权日以草案形式(最终形式优先,如果较新)已被公布。
尽管已在附图中示出并在上面描述了示例性实施例,但是对于本领域的普通技术人员来说明显的是,在不背离权利要求中阐述的原理和概念的情况下,可以进行许多修改并且这样的修改不必包含整个抽象概念。尽管以特定于结构特征和/或程序动作的语言描述了主题,但是应当理解,所附权利要求中限定的主题不必限于上面权利要求中描述的特定技术特征或动作。在给定定义或示例中标识的每个方式或方面或技术效果不必在每个实施例中都存在或被利用。而是,所描述的特定特征和动作和效果作为示例而被公开,以在实现权利要求时考虑。
未涵盖整个抽象概念但落入权利要求的等效含义和范围内的所有变化均应被包含在法律允许的全部范围内。