用于进行重放执行的方法和系统

申请号 CN201380044851.X 申请日 2013-09-26 公开(公告)号 CN104541244A 公开(公告)日 2015-04-22
申请人 英特尔公司; 发明人 J.E.戈特施利奇; K.丹内; C.L.佩雷拉; G.A.波卡姆; R.卡萨; 胡世亮; T.克拉尼希;
摘要 一个或更多个 实施例 可提供用于执行重放的方法。方法包括启动程序的执行,程序具有多个指令集,并且每个指令集具有多个指令组 块 。方法也包括在执行前由在处理器上运行的 虚拟机 单元截取多个组块的组块的指令。方法还包括由在处理器上运行的重放模块确定组块是否为活动组块,并且响应组块是活动组块,执行指令。
权利要求

1.至少一种上面存储有指令的非短暂性机器可访问存储介质,所述指令在机器上被执行时,促使所述机器执行以下操作:
启动程序的执行,所述程序具有多个指令集,并且每个指令集具有多个指令组
在执行前截取所述多个组块的组块的指令;
确定所述组块是否为活动组块;以及
响应所述组块是所述活动组块,执行所述指令。
2.如权利要求1所述的非短暂性机器可访问存储装置,其中每个指令集对应于线程。
3.如权利要求2所述的非短暂性机器可访问存储装置,还包括在机器上被执行时促使所述机器执行以下操作的指令:
确定所述指令是否为所述线程中的第一指令;
响应所述指令是所述第一指令,将新线程标识指派到所述线程;以及将所述新线程标识映射到用于所述线程的原标识。
4.如权利要求2-3任一项所述的非短暂性机器可访问存储装置,还包括在机器上被执行时促使所述机器执行以下操作的指令:
识别所述组块是否为所述多个组块的最后组块;以及
如果所述组块是所述最后组块,则在所述组块执行后在自由模式中操作所述线程。
5.如权利要求1-3任一项所述的非短暂性机器可访问存储装置,还包括在机器上被执行时促使所述机器执行以下操作的指令:
响应所述组块不是所述活动组块,暂停所述指令,直至所述组块是所述活动组块。
6.如权利要求1-3任一项所述的非短暂性机器可访问存储装置,其中所述多个组块的所述活动组块当前在由所述重放模块执行。
7.如权利要求1-3任一项所述的非短暂性机器可访问存储装置,还包括在机器上被执行时促使所述机器执行以下操作的指令:
确定所述执行是否匹配记录的执行。
8.一种设备,包括:
在处理器上执行的虚拟机单元,所述虚拟机单元配置成在执行前截取多个组块的组块的指令;以及
在所述处理器上执行的重放模块,所述重放模块配置成:
启动程序的执行,所述程序具有多个指令集,并且每个指令集具有所述多个指令组块;
确定所述组块是否为活动组块;以及
响应所述组块是所述活动组块,执行所述指令。
9.如权利要求8所述的设备,其中每个指令集对应于线程。
10.如权利要求9所述的设备,其中所述重放模块还配置成:
确定所述指令是否为所述线程中的第一指令;
响应所述指令是所述第一指令,将新线程标识指派到所述线程;以及将所述新线程标识映射到用于所述线程的原标识。
11.如权利要求9-10任一项所述的设备,其中所述重放模块还配置成:
识别所述组块是否为所述多个组块的最后组块;以及
如果所述组块是所述最后组块,则在所述组块执行后在自由模式中操作所述线程。
12.如权利要求8-10任一项所述的设备,其中所述重放模块还配置成:
响应所述组块不是所述活动组块,暂停所述指令,直至所述组块是所述活动组块。
13.如权利要求8-10任一项所述的设备,其中所述多个组块的所述活动组块当前在由重放模块执行。
14.如权利要求8-10任一项所述的设备,还包括:
在所述处理器上执行的验证模块,所述验证模块配置成:确定所述执行是否匹配记录的执行。
15.一种用于执行重放的方法,包括:
启动程序的执行,所述程序具有多个指令集,并且每个指令集具有多个指令组块;
在执行前由在处理器上执行的虚拟机单元截取所述多个组块的组块的指令;
由在所述处理器上执行的重放模块确定所述组块是否为活动组块;以及响应所述组块是所述活动组块,执行所述指令。
16.如权利要求15所述的方法,其中每个指令集对应于线程。
17.如权利要求16所述的方法,还包括:
确定所述指令是否为所述线程中的第一指令;
响应所述指令是所述第一指令,将新线程标识指派到所述线程;以及将所述新线程标识映射到用于所述线程的原标识。
18.如权利要求16-17任一项所述的方法,还包括:
识别所述组块是否为所述多个组块的最后组块;以及
如果所述组块是所述最后组块,则在所述组块执行后在自由模式中操作所述线程。
19.如权利要求15-17任一项所述的方法,还包括:
响应所述组块不是所述活动组块,暂停所述指令,直至所述组块是所述活动组块。
20.如权利要求15-17任一项所述的方法,还包括:
确定所述执行是否匹配记录的执行。

说明书全文

用于进行重放执行的方法和系统

技术领域

[0001] 本公开内容一般涉及重放执行领域,并且更具体地说,涉及由基于组存储器竞争记录器重放记录的执行。

背景技术

[0002] 今天,在包括服务器、台式机、膝上型计算机、移动装置和系统芯片等许多计算装置中能够发现多核处理器。到这些多核处理器系统的转变已允许开发并行程序以利用增强的性能。随着并行程序在软件开发环境中变得普及,越来越多的关注集中在缺乏用于此类程序的调试工具上。
[0003] 在多核处理器系统和共享存储器中运行的并行程序如果未适当同步,则能够导致非确定性的执行。这种非确定性可在不同情况下出现,包括执行的不同线程在共享存储器中交织,使得程序执行的再现和理解变得困难的许多方式。此类非确定性执行能够导致并发违反,其往往随着共享存储器访问的数量增大、软件线程的数量增大和程序复杂性增加而更频繁地发生。附图说明
[0004] 为提供本公开内容及其优点的更完整的理解,将结合附图,参照以下描述,其中类似的标号表示类似的部分,其中:图1是根据一实施例数据处理系统的示例图示;
图2是根据一实施例的记录的日志数据库的示例图示;
图3是根据一实施例,示出用于存储器竞争记录器重放的方法的简化流程图
图4是根据一实施例,示出用于重放程序的方法的简化流程图;
图5是根据一实施例,示出用于重放进程的方法的简化流程图;图6是根据一实施例,示出用于重放进程的方法的简化流程图;
图7是根据一实施例,示出用于重放指令的进程的简化流程图;
图8是根据一实施例,示出用于映射线程标识的进程的简化流程图;
图9是根据一实施例,示出用于操作自由模式的进程的简化流程图;
图10是根据一实施例的处理器的示例图示;以及
图11示出根据本发明一实施例,以点对点配置布置的计算系统。

具体实施方式

[0005] 示例实施例图1是根据一实施例的数据处理系统100的示例图示。数据处理系统100包括耦合到系统存储器104的多核处理器102。多核处理器102可包括可执行线程108的核106。“线程”也可称为“进程”。源程序二进制110或“程序”可以是在数据处理系统100中执行的应用程序或程序。在执行源程序二进制110时,记录器单元112可跟踪在多核处理器102与系统存储器104之间的信号。记录器单元112可在记录的日志数据库114和线程顺序数据库116中存储这些记录。重放器机器单元118可访问数据库114和116以重放源程序二进制110的执行。重放器机器单元118可包括虚拟机单元120和重放模块122。
[0006] 多核处理器102用于为可加载到系统存储器104中的软件执行指令。视特定实现而定,多核处理器102可以是多个处理器、能够执行多个进程的单个处理器或某一其它类型的处理器。在本文中参照某个项目使用时,数字指一个或更多个项目。此外,多核处理器102可使用多个异类处理器系统实现,系统中主处理器与辅助处理器存在于单个芯片上。作为另一说明性示例,多核处理器102可以是包含相同类型的多个处理器的对称多核处理器系统。用于多种应用的处理器可通过单处理核或多处理核提供有多线程能。每个线程或核能够在一个指令集上操作,而另一线程或核在不同指令集上独立操作。多核处理器102可部署在多个处理器体系结构中,以便例如两个双核处理器表示四个独立的处理核。
[0007] 系统存储器104是存储装置的示例。存储装置是能够在临时基础和/或永久性基础上存储信息的任何一个硬件,信息例如但不限于是数据、功能形式的程序代码和/或其它适合的信息。在这些示例中,存储装置也可称为计算机可读存储装置。系统存储器104例如能够包括随机存取存储器(RAM)或任何其它适合的易失性或非易失性存储装置。视特定实现而定,系统存储器104也能够包括可采用各种形式的持久性存储装置。
[0008] 系统存储器104可包括操作系统124和不同存储器位置。这些存储器位置的一个或更多个位置可以是共享存储器126。共享存储器126可由多核处理器102的不止一个核访问。系统存储器104可包括源程序二进制110。源程序二进制110可包括在要由多核处理器102执行的程序中有一个或更多个指令的序列。
[0009] 记录器单元112可以是存储器竞争记录器(MRR)的示例。记录器单元112可用于记录核106的每个核执行哪些指令。在一个示例中,将要由核106执行的指令分割成线程108。每个核将执行全部的单个线程,并且随后转到另一线程。在本公开内容的一实施例中,记录器单元112记录在多核处理器体系结构上共享存储器126访问的交织。
[0010] 使用诸如事务存储器、硬件省略或签名,能够跟踪由负载或存储操作访问的系统存储器104的存储器位置。一种机制每核使用两个布隆滤波器以分别监视负载和存储地址。每次负载或存储操作提交时,增大计数器(每核增大1),并且将对应访问的存储器地址插入适当的布隆滤波器。读集(RS)是受监视负载地址集,并且写集(WS)是受监视存储地址集。计数器根据访问的存储器地址的数量描述执行的当前区域,这称为组块。
[0011] 记录器单元112可在记录的日志数据库114中存储记录。记录器单元112在组块128由线程108执行时记录组块128,并且在记录的日志数据库114中在记录的日志文件
128中存储记录。线程108的每个线程可执行多个组块。对于每个线程,可在记录的日志数据库114中存储不同记录的日志文件129。记录的日志文件129可包括该特定线程的组块
128。记录器单元112也可记录在线程108之间的排序,并且在线程顺序数据库116中有序存储顺序。每个组块包括用于该组块的源程序二进制110执行的指令的数量。此外,线程
108可由重放模块122映射。
[0012] 在共享的存储器多核处理器系统中,相干协议通过发出对共享存储器访问的相干请求,跨核保持存储器相干。在接收相干请求时,硬件检查带有入站地址的RS和WS。在入站地址是读,并且在WS中发现带有地址的匹配时检测到冲突;或者在入站地址是写,并且在RS或WS中发现带有地址的匹配时检测到冲突。检测到冲突终止了当前组块。在终止组块时,记录器单元112记录包括组块的大小的跟踪条目(即,计数器的值)和全局时间戳。全局时间戳用于提供跨所有记录的组块128的总顺序。关于在新一代的多核处理器体系结构,恒定时间戳(TSC)能够用作全局时间戳。在组块终止后,清空RS和WS,并且重置计数器。
[0013] 在总存储顺序(TSO)下记录共享存储器访问的交织的主要困难是负载能够在以前的存储前被重新排序。此重新排序能够导致组块的不正确排序。遵循递增时间戳顺序的结果组块执行顺序不匹配提交顺序。实施例解决了此问题而不更改高速缓存相干协议或高速缓存子系统。
[0014] 实施例提供了在有从TSO执行获得组块排序的条件下,重新执行这些组块的结果与原程序执行是一致的。在将存储排序到与其随后的负载提交处组块相同的组块中的存储器时,不存在可能的排序违反。缺乏可能的排序违反是由于负载和存储在相同组块中以原子方式执行。
[0015] 存储提交到与组块已从其退出的组块不同的组块中的存储器,并且存在在更早组块中提交的更迟负载时,随后存在可发生排序违反的可能。在来自不同处理器的组块的全局排序中(按时间戳排序),以前排序系统能够形成在更迟的负载提交处组块与以前的存储提交处组块之间交织的冲突远程组块。在此情况下,负载提交处的组块可称为问题组块(P-组块)。在P-组块终止时,记录在存储缓冲器(STB)中仍等待提交的以前退出存储的数量。由于这些存储是在P-组块终止时的待决提交,因此,这些存储只能够被排序到具有比负载提交处P-组块更高时间戳的组块中的存储器。通过计算重新排序的存储窗口(RSW)的大小,获得此类存储的数量,该窗口被定义成正好是随后负载通过的存储的数量。
[0016] 重放器机器单元118可重放源程序二进制110的记录的执行。在来自源程序二进制110的指令执行前,重放器机器单元118利用虚拟机单元120截取指令。重放模块122可管理每个指令的执行。重放模块122可访问记录的日志数据库114中的组块128,并且以组块128的顺序执行指令。如上所提及的一样,组块128可已加有时间戳,并且根据其时间戳排序。在重放模块122中当前在执行的组块是活动组块130。
[0017] 重放模块122也可访问线程顺序数据库116。对于重放模块122识别的每个新线程,为该线程创建新重放线程ID 132。新重放线程ID 132可映射到原线程ID 134以便重放模块122可识别哪些组块属于哪些线程。
[0018] 重放模块122也可包括验证模块136。验证模块可动态检查重放的程序执行匹配记录的执行的正确性。通过在组块未完全重放时确定组块不完整,并且随后暂停在不完整组块的重放,比较重放的程序的指令指针与在中断期间记录的程序的指令指针,在程序终止时检查重放的指令的总数是否匹配记录的指令的总数,和/或在执行结束时检查重放的程序的最终存储器状态是否匹配记录的程序的最终存储器状态,验证模块136可检查正确性。
[0019] 图1中数据处理系统100的图示无意暗示不同说明性实施例可实现的方式的物理或体系结构限制。除所示组件外,可使用其它组件,和/或可使用其它组件替代所示组件。在一些说明性实施例中,一些组件可以是不必要的。此外,显示了框以示出一些功能组件。
在不同说明性实施例中实现时,可将这些框的一个或更多个框组合和/或分割成不同框。
例如,操作系统124可位于单独的存储器或存储装置中。另外,源程序二进制110也可位于其它位置中。
[0020] 在操作方面,并且具体而言,在一实施例中,记录的日志文件129包含用于线程的记录的组块。记录的日志文件129用于捕捉共享存储器交织在源程序二进制的记录的执行中在线程之间发生的顺序。
[0021] 本公开内容的一个或更多个实施例提供虚拟机单元,虚拟机单元能够允许或不允许记录的程序的重放的执行的单独线程的进行。
[0022] 本公开内容的一个或更多个实施例提供足以分析记录的日志文件和使用结果将重放的程序排序使得其执行与记录的程序的执行相同的算法
[0023] 本公开内容的一个或更多个实施例提供正确性检查,正确性检查以一种或更多种以下方式动态确保重放的执行精确地匹配记录的执行。
[0024] 在一实施例中的第一示例正确性检查中,以原来记录在记录的程序中的每个组块的相同顺序重放组块。一旦在重放的程序中执行的指令的数量超过当前组块,重放的执行便转到加有时间戳和排序的下一组块。如果组块未完全重放,则在不完整组块的执行暂停,允许开发人员调查根本原因,并且识别哪个组块尚未完成其执行。
[0025] 在一实施例中的另一正确性检查中,在通过中断操作终止组块时,可比较重放的程序的指令指针(IP)与记录的程序的IP。要使重放的程序正确,这些IP比较可能要相同。如果IP不匹配,则验证模块记录IP失配错误,并且继续执行。
[0026] 在一实施例中的仍有的另一正确性检查中,在丢弃作为不同环境的一部分的任何差别(例如,环境变量)后,重放的指令的总数可能要匹配记录的指令的总数。验证模块可执行有关在用于每个线程的程序终止时这些指令的检查和为整个程序执行的总指令的检查。如果发现用于任何线程的偏差,则可记录错误。
[0027] 在一实施例中的仍有的另一正确性检查中,可在执行结束时检查重放的程序的最终存储器状态以确保它匹配记录的程序的最终存储器状态。如果重放的共享存储器访问的顺序与记录的顺序不同,则最终存储器状态不同。在重放的程序终止时,验证模块136可执行与原程序的存储器快照比较。如果存储器状态不同,则可记录错误。
[0028] 本公开内容的一个或更多个实施例提供上述算法的优化以改进重放模块的实用性。
[0029] 另外,在一实施例中,重放模块122包括自由模式138。一个或更多个实施例提供了在线程完成其最终组块的执行时,允许线程在自由模式138中执行。自由模式138允许线程执行而在其它执行线程之间无任何排序约束。自由模式138也可通过重放模块的应用程序编程接口(API)直接启用或禁用,以便诸如数据竞争检测工具的在重放模块之上构建的工具能够在需要时使用自由模式138。
[0030] 本公开内容的一个或更多个实施例提供了自由模式138可对一般记录器单元有用,这是因为如果线程的执行线程在其最后组块结束的点未完成,则可能无限暂停线程。例如,考虑线程在其总执行中留有“N”个指令,这些指令均不促使组块终止,并且因此未由记录器日志文件通过另外的组块表示的情形。如果自由模式138不受重放器机器单元支持,则在重放器机器单元没有用于线程的组块时,能够无限暂停此类线程,由此无限延迟其进行。
[0031] 在一实施例中,自由模式138允许在重放的执行中任何点违反重放器机器单元的确定性执行。即使这可允许非确定性重放的执行(其中,重放的执行可偏离记录的执行),也存在仅希望重放的执行最多到其重新执行中的某个点是确定性的情形。自由模式138在至少这些情形中有利于执行随后由诸如数据竞争检测等另外的软件或硬件工具控制以重新创建并发违反。
[0032] 在示例中,在使用并发预测(CP)工具在重放模块之上运行时,一旦一个线程的CP条件已得到满足,则CP工具能够在重放模块中启用自由模式138以尝试再现并发违反。如果不支持自由模式138,则如果重放模块要求确定性执行,CP工具将不能暂停线程进行。这能够导致对所有可能并发违反的了解有限。
[0033] 本公开内容的一个或更多个实施例认识到非确定性执行能够导致并发违反。本公开内容的不同实施例认识到硬件辅助的存储器竞争记录器(MRR),并且将其考虑在内。MRR跟踪在程序内访问共享存储器的顺序,这是确切再现该程序的执行所需要的。点对点MRR方案通过修改微处理器的数据高速缓存结构并且更改高速缓存相干消息有效负载,跟踪每个单独共享的存储器访问。此类方法带来相当大的空间开销(高速缓存修改),使它们不可在硬件中实现,并且带来相当大的时间开销(高速缓存相干消息修改),使它们不可用于“始终启用”功能性,其中,MRR始终在主动记录程序执行。
[0034] 本公开内容的一个或更多个实施例认识到基于点对点的MRR并且将其考虑在内,其中,使用布隆滤波器和全局时间戳捕捉共享存储器访问。布隆滤波器由于是固定大小,因此,它们降低了由基于点对点MRR带来的记录空间开销。全局时间戳避免了修改相干消息。基于组块的MRR使用组块,其中,组块表示已执行而无冲突高速缓存相干消息的存储器操作的序列。
[0035] 不同于基于点对点的MRR,基于组块的MRR在一个线程访问另一线程的组块中存在的存储器时只可带来记录开销。在此类事件发生时,终止包含共享存储器访问的组块,并且记录其存储器访问的缩写形式。基于组块的MRR由于其小的硬件占用空间而在硬件内实际上是可实现的,并且由于其降低的记录计算开销,能够进行“始终启用”记录。
[0036] 本公开内容的一个或更多个实施例提供如何实现基于组块的MRR记录的执行的确定性重放;提供产生O(1)搜索时间,与产生O(N)搜索时间的其它重放模块设计相比改进的特定重放模块优化,其中,“N”是用于所有线程的总记录的组块的数量;提供用于处理确定性执行的极端情况的细节,如线程构造和自由模式,这允许扩展重放模块,使得它能够处理可能在重放模块之上堆积的重要问题,如调试在重放的执行。
[0037] 本公开内容的一个或更多个实施例认识到一些MRR使用点对点重放模块并且将其考虑在内,点对点重放模块通过跟踪和控制每个线程进行的每个共享存储器访问,重放程序的记录的执行。此类方案能够带来不可行的空间和时间开销,与在重放的程序的普通执行相比,将重放的执行时间降低了几个量级(> 100X)。这能够使一些点对点方案对于商业使用效率较低。
[0038] 本公开内容的一个或更多个实施例不使用点对点重放系统,而是提供足以用于基于MRR组块的重放模块的设计和高级组件。一实施例提供基于组块的重放器机器单元的可行设计。一实施例可介绍实现细节以处理确保重放的执行正确并且以最小运行时间开销进行动态检查的正确性准则。一实施例也可包括产生用于指令执行的O(1)搜索时间组块查找操作的特定重放模块优化,这与产生O(N)搜索时间的基于组块的重放模块设计相比是改进,其中,“N”是用于线程的总记录的组块的数量。此外,一实施例可提供足以重放基于组块的记录程序并且可对要通过动态仪器工具扩展的重放机器单元是必需的极端情况(线程构造和自由模式)。
[0039] 图2是根据一实施例的记录的日志数据库200的示例图示。记录的日志数据库200可以是如图1所示记录的日志数据库114的一个示例。记录的日志数据库200可以是存储装置。记录的日志数据库200可包括记录的日志文件202-206。另外,每个记录的日志文件可包括指令的组块。例如,记录的日志文件202可包括组块1、12和36,记录的日志文件204可包括组块2-4和35,并且记录的日志文件206可包括组块5-11和13-34。记录的日志文件202-206可每个对应于不同线程。
[0040] 在一示例实施例中,组块1可以是第一组块。组块1可包括一个或更多个指令。在组块1终止后,创建组块2。组块2可位于与组块1不同的线程中,并且因此在不同的记录的日志文件中,例如,记录的日志文件204中。在组块2终止后,可创建组块3。组块3也可位于记录的日志文件204中。组块创建和记录的进程重复进行,直至没有将促使创建组块的其它指令。
[0041] 在操作方面,并且具体而言,在一实施例中,MMR记录的日志文件包含来自每个线程的记录的组块。日志文件也用于捕捉共享存储器交织在记录的执行多线程程序中在线程之间发生的顺序。
[0042] 图3是根据一实施例,示出用于存储器竞争记录器重放的方法的简化流程图。流程300可在302在重放模块检索记录的日志文件时开始。记录的日志文件例如可以类似于如图2所示的记录的日志文件202-206。记录的日志文件可来自与程序一起使用的记录器单元。
[0043] 在304,重放模块按顺序放置记录的日志文件。重放模块可为记录的日志文件内的组块使用时间戳以确定顺序。重放模块的时间戳排序系统以递增的时间戳顺序跨所有线程排序组块。在306,重放模块可提供用于重放的执行的有序组块。重放模块可在内部存储有序组块以控制每个线程的前向执行。
[0044] 在308,虚拟机单元可启动程序的重放。重放器机器单元可使用虚拟化机器单元在指令执行前截取指令。在310,重放模块重放程序。在312,验证模块验证重放的正确性。
[0045] 在操作方面,并且具体而言,在一实施例中,重放模块可具有输入解析系统,输入解析系统在包含跨所有线程的记录的组块的记录的日志文件中读取并且解析文件。重放模块的时间戳排序系统可以递增的时间戳顺序跨所有线程排序组块。重放模块随后可在内部存储该顺序以控制每个线程的前向执行。重放模块使用虚拟机单元在每个指令由重放的程序执行前截取每个指令。重放模块开始记录的程序的执行。
[0046] 在接收待决指令的通知时,重放模块验证当前指令是活动组块的一部分,活动组块即基于组块的排序应执行的组块。如果当前指令是活动组块的一部分,则重放模块让指令执行。如果当前指令不是活动组块的一部分,则重放模块中止线程,并且将它置于暂停器循环中。重放模块可不断确定是否轮到当前指令恢复执行。
[0047] 在接收新线程的第一指令时,重放模块可创建在新重放线程标识与原线程标识之间的映射,以便重放模块能够识别哪个线程是活动的是活动的。这能够通过引用已时间排序的组块来处理,以识别来自记录的日志文件的哪个线程映射到重放模块中的新构建的线程。一旦线程映射已创建,重放模块便可将线程的地址绑定在一起,并且存储它们以供以后引用。如果此类线程是活动组块的线程,则通过使用从新重放线程标识到原线程标识的映射,这些技术允许重放模块确定哪个线程在执行。
[0048] 图4是根据一实施例,示出用于重放程序的方法的简化流程图。流程400可以是在程序的重放期间操作的进程。例如,流程400可以是如图3所示在框310期间执行的活动的更详细图示。
[0049] 流程400可在402在源程序二进制加载记录的程序的指令时开始。源程序二进制可在系统中操作,系统能够允许或不允许记录的程序的重放的执行的单独线程的进行。在404,虚拟机单元可在重放的程序执行指令前截取指令。虚拟机单元120可以是能够允许或不允许单独线程的进行的系统的示例。在406,重放模块执行重放进程。
[0050] 图5是根据一实施例,示出用于重放进程的方法的简化流程图。流程500可以是在重放进程期间操作的进程。例如,流程500可以是如图4所示在框406期间执行的活动的更详细图示。
[0051] 在502,重放模块可接收来自虚拟机单元的指令。在504,重放模块确定指令是否在新线程中。如果指令不在新线程中,则在508,重放模块确定指令是否在活动组块中。如果指令在活动组块中,则在510,重放模块执行指令。在504,如果指令是新线程,则重放模块映射线程。重放模块可将新重放线程ID映射到原线程ID。
[0052] 在514,重放模块确定指令是否在活动组块中。如果指令在活动组块中,则在510,重放模块执行指令。如果指令不在活动组块中,则在516,重放模块暂停指令,直至组块是活动的。在518,重放模块将周期性地确定指令是否在活动组块中。如果指令不在活动组块中,则在516,继续暂停指令。如果指令在活动组块中,则在510,重放模块执行指令。另外,在508,如果指令不在活动组块中,则在516,重放模块暂停指令,直至组块变成活动状态,如在
518确定的一样。
[0053] 在操作方面,并且具体而言,在一实施例中,在接收待决指令的通知时,重放模块验证当前指令是活动组块的一部分,活动组块即基于组块的排序应执行的组块。如果指令是活动组块的一部分,则重放模块让指令执行。如果它不是活动组块的一部分,则重放模块暂停线程,并且将它置于暂停器循环中,其中,它不断确定是否轮到当前指令恢复执行。
[0054] 在一实施例中,在接收新线程的第一指令时,重放模块创建从新重放线程ID到原记录的线程标识的映射,以便重放模块知道哪个线程是活动的。这通过引用已时间排序并且由记录单元记录的组块来处理,以识别哪个记录的线程映射到新构建的线程。一旦线程映射已识别,重放模块便可将这些地址绑定在一起,并且存储它们以供以后引用。通过使用从新重放线程ID到记录的线程ID的映射,并且如果此识别的线程是活动组块的线程,则这允许重放模块确定哪个线程在执行。
[0055] 图6是根据一实施例,示出用于重放进程的方法的简化流程图。流程600可以是在重放进程期间操作的进程。在602,重放模块可接收来自虚拟机单元的指令。在604,重放模块获得指令锁。指令锁能够确保重放模块一次执行一个指令。如果另一指令到达以便另一线程进行处理,则它被暂停,直至第一线程释放指令锁。
[0056] 在606,重放模块确定指令是否来自活动组块。如果指令不在活动组块中,则在608,重放模块确定用于指令的线程是否在自由模式中操作。如果线程不在自由模式中,则在610,重放模块释放锁,并且等待某个时间期。该时间期可以是几毫秒或为等待期间设置的任何其它适合时间。在等待期间截止后,在604,重放模块再次获得指令锁。604-610的进程流程可称为暂停器环路。在此时间期间,阻止指令执行,直至组块变成活动状态。
[0057] 如果指令在执行处的线程是在自由模式中,则在612,重放模块检索用于下一指令的组块。在614,重放模块确定指令是否为组块的最后指令。重放模块也可以能够通过识别下一指令是否在相同组块中,识别指令是否为组块的最后指令。在执行组块进程,如识别活动组块或者检索用于下一指令的组块时,重放模块可从当前指令开始查找进程。通过从指令开始,进程可只具有一个周期的开销。
[0058] 如果指令是组块的最后指令,则在616,重放模块输出组块信息的结束,并且验证模块可执行另外的调试检查。诸如图1所示验证模块136等验证模块可执行调试检查。如果指令不是组块的最后指令,则在618,重放模块释放指令锁并且执行指令。调试检查也可称为正确性检查或正确性验证。
[0059] 再次参照606,如果指令来自活动组块,则在620,验证模块可执行调试检查。调试检查可包括边界检查。在622,重放模块可检索用于下一指令的组块。在624,验证模块确定指令是否正确。如果指令正确,则在612,重放模块检索用于下一指令的组块。如果指令不正确,则在626,重放模块输出错误的指令信息。随后,流程转到614。
[0060] 在操作方面,并且具体而言,在一实施例中,重放模块可将迄今为止已执行的指令的运行总数保持为组块应执行到其中的引用。在一个实施例中,重放模块可能在每个新指令上执行组块查找操作,从而能够迭代经过所有组块,直至组块的指令的总数匹配当前执行指令。这在每次迭代时带来至少O(N)个时间开销,其中,“N”是用于所有线程的组块的总数,并且“O”是关于系统的开销。
[0061] 一个或更多个实施例存储对活动组块及其相关联指令范围的引用,因此,在每个新指令时能够对其进行O(1)比较。如果新指令在指令的范围外,则获取下一组块,将其设置成全局引用的活动组块,并且适当地将指令范围移位。此优化将用于每个线程的开销从O(N)降低到O(1)。此降低意味着随着组块的数量增大,重放模块的性能能够与不包括此类优化的设计相比有着多项式率的改进。
[0062] 可存在如果活动组块在用于特定组块的查找的指令的范围外,则可能不希望更改活动组块的极端情况。这些情况能够包括在重放模块在以前的分组上执行诊断分析或者在当前和下一分组上执行正确性验证时。这些极端情况可使用布尔标记处理,布尔标记在设置为真时将更新活动组块,并且在设置为假时将不更新活动组块。结果是实现能够使用复杂性增加极小的上述优化来执行。
[0063] 图7是根据一实施例,示出用于重放指令的进程的简化流程图。流程700可以是在程序的重放期间操作的进程。在702,重放模块启动程序的执行。程序可包括多个指令集。每个指令集可包括指令的许多组块。在一实施例中,程序在由虚拟机单元运行的虚拟环境中执行。
[0064] 在程序的执行期间,在704,虚拟机单元可在指令执行前截取多个组块的组块的指令。在706,重放模块确定组块是否为活动组块。在重放的执行期间,重放模块可以指令所属组块的顺序执行指令。活动组块可以是当前即将执行的组块。如果组块是活动组块,则在708,重放模块执行指令。如果指令不是活动组块,则重放模块暂停指令,直至组块是活动的。例如,以后在执行进程中,组块是活动的时,重放模块能够执行指令。
[0065] 图8是根据一实施例,示出用于映射线程标识的进程的简化流程图。流程800可以是在程序的重放期间操作的进程。在802,重放模块确定指令是否为线程中的第一指令。如果指令不是第一指令,则流程800终止。如果指令是第一指令,则在804,重放模块将新重放线程ID指派到记录的线程。在806,重放模块将新重放线程ID映射到用于记录的线程的原ID。原ID可以是线程原来在程序中执行并且由记录器单元记录时具有的ID。
[0066] 图9是根据一实施例,示出用于操作自由模式的进程的简化流程图。流程900可以是在程序的重放期间操作的进程。在902,重放模块确定组块是否为线程中许多组块的最后组块。如果组块不是最后组块,则流程900终止。如果组块是最后组块,则在904,重放模块在最后组块的执行后在自由模式中操作线程。
[0067] 图10是根据一个实施例的处理器的示例图示。处理器1000可以是用于任何类型的处理器的核,如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器或执行代码的其它装置。虽然图10中只示出一个处理器1000,但处理元件可备选包括不止一个图10所示的处理器1000。处理器1000可以是单线程核,或者对于至少一个实施例,处理器1000可以是多线程的,表现在它可每核包括不止一个硬件线程上下文(或“逻辑处理器”)。
[0068] 图10也示出耦合到处理器1000的存储器1002。存储器1002可以是如本领域技术人员知或以其它方式可用的范围广泛的多种存储器中的任何存储器(包括存储器分层结构的各种层)。存储器1002可包括要由处理器1000执行,可以是一个或更多个指令的代码1004。处理器1000遵循代码1004所示的指令的程序序列。每个指令进入前端逻辑1006并且由一个或更多个解码器1008处理。解码器可生成作为其输出的微操作,如预定义格式的固定宽度微操作,或者可生成其它指令、微指令或反映原代码指令的控制信号。前端逻辑
1006也包括寄存器重命名逻辑1010和调度逻辑1012,这两个逻辑通常分配资源并且将对应于转换指令的操作排队以便执行。
[0069] 处理器1000示为包括具有执行单元1016-1到1016-N的集合的执行逻辑1014。一些实施例可包括专用于特定功能或功能的集合的多个执行单元。其它实施例可只包括一个执行单元或执行特定功能的一个执行单元。执行逻辑1014执行代码指令指定的操作。
[0070] 在代码指令指定的操作的执行完成后,后端逻辑1018退出代码1004的指令。在一个实施例中,处理器1000允许失序执行,但要求指令的有序退出(in order retirement)。退出逻辑1020可如本领域技术人员熟知的多种形式(例如,重新排序缓冲器或诸如此类)。
这样,在代码1004的执行期间,至少在解码器生成的输出、寄存器重命名逻辑1010利用的硬件寄存器和表格及执行逻辑1014修改的任何寄存器(未示出)方面,变换了处理器1000。
[0071] 虽然图10中未示出,但处理元件可在带有处理器1000的芯片上包括其它元件。例如,处理元件可包括存储器控制逻辑及处理器1000。处理元件可包括I/O控制逻辑和/或可包括与存储器控制逻辑集成的I/O控制逻辑。处理元件也可包括一个或更多个高速缓存。
[0072] 图11示出根据本发明一实施例,以点对点(PtP)配置布置的计算系统1100。具体而言,图11示出处理器、存储器和输入/输出装置经多个点对点接口互连的一个系统。
[0073] 如图11所示,系统1100可包括几个处理器,为清晰起见,其中只示出两个处理器1102和1104。处理器1102和1104可每个包括一组核1103和1105以执行程序的多个线程。处理器1102和1104每个也可包括集成存储器控制器逻辑(MC) 1106和1108以便与存储器1110和1112进行通信。存储器1110和/或1112可存储各种数据,如参照存储器
1112讨论的那些数据。在备选实施例中,存储器控制器逻辑1106和1108可以是与处理器
1102和1104分开的离散逻辑。
[0074] 处理器1102和1104可以是任何类型的处理器,如参照图1的处理器102讨论的那些处理器。处理器1102和1104可分别使用点对点接口电路1116和1118,经点对点(PtP)接口1114交换数据。处理器1102和1104每个可使用点对点接口电路1126、1128、1130和1132,经单独的点对点接口1122和1124与芯片集1120交换数据。芯片集1120也可使用可以是PtP接口电路的接口电路1137,经高性能图形接口1136与高性能图形电路1134交换数据。在备选实施例中,图11所示任何或所有PtP链路能够实现为多点分支总线而不是PtP链路。
[0075] 如本文中公开的至少一个实施例可在处理器1102和1104内提供。然而,其它实施例可在图11的系统1100内的其它电路、逻辑单元或装置中存在。此外,其它实施例可分布在图11所示的几个电路、逻辑单元或装置内。
[0076] 芯片集1120可经接口电路1141与总线1140进行通信。总线1140可具有通过它进行通信的一个或更多个装置,如总线桥1142和I/O装置1143。经总线1144,总线桥1143可与其它装置进行通信,如键盘/鼠标1145(或诸如触摸屏等其它输入装置)、通信装置1146 (如调制解调器、网络接口装置或可通过计算机网络进行通信的其它类型的通信装置)、音频I/O装置1147和/或数据存储装置1148。数据存储装置1148可存储可由处理器1102和/或1104执行的代码1149。在备选实施例中,总线体系结构的任何部分能够通过一个或更多个PtP链路实现。
[0077] 图10和11所示的计算机系统是可用于实现本文中讨论的各种实施例的计算系统的实施例的示意图。将领会的是,图10和11所示系统的各种组件可在系统芯片(SoC)体系结构中或者在任何其它适合配置中组合。例如,本文中公开的实施例能够包含到系统中,例如,诸如智能蜂窝电话的移动装置、平板计算机、个人数字助理、便携式游戏装置等。将领会的是,在至少一些实施例中,这些移动装置可提供有SoC体系结构。
[0078] 要注意的是,在某些示例实现中,本文中概述的重放功能可通过在一个或更多个有形、非短暂性介质中编码的逻辑(例如,在专用集成电路(ASIC)、数字信号处理器(DSP)指令、要由处理器或其它类似机器等执行的软件[可能包括对象代码和源代码]中提供的嵌入式逻辑)实现。在这些实例的一些实例中,存储器元件能够存储用于本文中描述的操作的数据。这包括能够存储经执行以执行本说明书中所述活动的软件、逻辑、代码或处理器指令的存储器元件。处理器能够执行与数据相关联的任何类型的指令以实现在说明书中本文中详细描述的操作。在一个示例中,处理器能够将元件或物品(例如,数据)从一种状态或事物变换成另一状态或事物。在另一示例中,本文中概述的活动可通过固定逻辑或可编程逻辑(例如,处理器执行的软件/计算机指令)实现,并且本文中识别的元件能够是某一类型的可编程处理器、可编程数字逻辑(例如,FPGA、EPROM、EEPROM)或包括数字逻辑、软件、代码、电子指令或其任何适合组合的ASIC。
[0079] 程序代码或指令可存储在例如易失性和/或非易失性存储器中,如存储装置和/或相关联机器可读或机器可访问介质,包括但不限于固态存储器、硬驱动器软盘、光学存储装置、磁带、闪存存储器、记忆棒、数字视频盘、数字多功能盘(DVD)等及更不稳定的介质,如机器可访问生物状态保持存储装置。机器可读介质可包括用于存储,传送或接收机器可读形式的信息的任何机制,并且介质可包括程序代码可通过其传递的介质,如天线、光纤、通信接口等。程序代码可以分组、串行数据、并行数据等形式传送,并且可以压缩或解密格式使用。
[0080] 在一个示例实现中,重放器机器单元可包括软件以便实现本文中概述的重放活动。在一示例实施例中,基于组块的重放器机器单元118的组件可完全在软件中实现,减轻了对任何专用硬件的需要。如本文所述,重放器机器单元能够包括用于存储在实现重放活动中使用的信息的存储器元件。另外,如本说明书中公开的一样,重放器机器单元可包括能够执行软件或算法以执行重放活动的处理器。这些装置还可在任何适合的存储器元件(RAM、ROM、EPROM、EEPROM、ASIC等)、软件、硬件中,或者在适当和基于特定需要的情况下在任何其它适合的组件、装置、元件或对象中保持信息。本文中讨论的任何存储器项目(例如,数据库、表格、树、高速缓存等)应视为包括在广义词“存储器元件”内。类似地,本说明书中描述的任何可能处理元件、模块和机器应视为包含在广义词“处理器”内。
[0081] 要注意的是,通过上面提供的示例及本文中提供的许多其它示例,可能根据两个、三个或四个元件描述交互。然而,这只是为了澄清和作为示例。在某些情况下,通过只参照有限数量的元件,可更容易描述流的给定流的一个或更多个功能性。应领会的是,本文中讨论的重放器机器单元(及其教导)容易扩展,并且能够适应大量的组件及更复杂/成熟的布置和配置。相应地,如可能应用到很多其它体系结构一样,提供的示例不应限制重放器机器单元的范围或抑制其广义的教导。
[0082] 另外,前面流程图中的操作只示出可由重放器机器单元或在其内执行的一些可能情形和模式。在适当之处,可删除或消除,或者可大幅修改或更改这些操作的一些操作而不脱离本公开内容的范围。另外,多个这些操作已描述为与一个或更多个另外的操作同时或并行执行。然而,可大幅改变这些操作的定时。为便于理解示例和讨论,提供了前面的操作流程。重放器机器单元提供相当大的灵活性,表现在可提供任何适合的布置、时序、配置和定时机制,而不脱离本公开内容的教导。
[0083] 虽然已参照特定布置和配置描述本公开内容,但可大幅更改这些示例配置和布置而不脱离本公开内容的范围。虽然本公开内容已描述有限数量的实施例,但本领域的技术人员将领会由此产生的多种修改和变化。随附权利要求书旨在涵盖本公开内容的真正精神和范围内的所有此类修改和变化。
[0084] 下面的示例与根据本说明书的实施例有关。一个或更多个实施例可提供一种用于执行重放的方法。方法可包括:启动程序的执行,程序具有多个指令集,并且每个指令集具有多个指令组块;在执行前由在处理器上执行的虚拟机单元截取多个组块的组块的指令;由在处理器上运行的重放模块确定组块是否为活动组块;以及响应组块是活动组块,执行指令。
[0085] 一个或更多个实施例的示例可提供多个组块的活动组块当前在由重放模块执行。
[0086] 一个或更多个实施例的示例可规定每个指令集对应于线程。
[0087] 一个或更多个实施例的示例可提供:确定指令是否为线程中的第一指令;响应指令是第一指令,将新线程标识指派到线程;以及将新线程标识映射到用于线程的原标识。
[0088] 一个或更多个实施例的示例还可提供:响应组块不是活动组块,暂停指令,直至组块是活动组块。
[0089] 一个或更多个实施例的示例还可提供:识别组块是否为多个组块的最后组块;以及如果组块是最后组块,则在组块的执行后在自由模式中操作线程。
[0090] 一个或更多个实施例的示例还可提供:确定执行是否匹配记录的执行。
[0091] 一个或更多个实施例的示例可提供一种设备。设备可包括:在处理器上执行的虚拟机单元,虚拟机单元配置成在执行前截取多个组块的组块的指令;以及在处理器上执行的重放模块,重放模块配置成:启动程序的执行,程序具有多个指令集,并且每个指令集具有多个指令组块;确定块是否为活动组块;以及响应组块是活动组块,执行指令。
[0092] 一个或更多个实施例的示例可提供多个组块的活动组块当前在由重放模块执行。
[0093] 一个或更多个实施例的示例可提供每个指令集对应于线程。
[0094] 一个或更多个实施例的示例还可提供配置成执行以下操作的重放模块:确定指令是否为线程中的第一指令;响应指令是第一指令,将新线程标识指派到线程;以及将新线程标识映射到用于线程的原标识。一个或更多个实施例的示例还可提供配置成执行以下操作的重放模块:响应组块不是活动组块,暂停指令,直至组块是活动组块。
[0095] 一个或更多个实施例的示例还可提供配置成执行以下操作的重放模块:识别组块是否为多个组块的最后组块;以及如果组块是最后组块,则在组块的执行后在自由模式中操作线程。
[0096] 一个或更多个实施例的示例还可提供:在处理器上执行的验证模块,验证模块配置成确定执行是否匹配记录的执行。
[0097] 一个或更多个实施例的示例可提供其上面存储有指令的至少一种非短暂性机器可访问存储介质。指令在机器上被执行时,促使机器执行以下操作:启动程序的执行,程序具有多个指令集,并且每个指令集具有多个指令组块;在执行前截取多个组块的组块的指令;确定组块是否为活动组块;以及响应该组块是活动组块,执行指令。
[0098] 一个或更多个实施例的示例可提供每个指令集对应于线程。
[0099] 一个或更多个实施例的示例还可提供在机器上被执行时促使机器执行以下操作的指令:确定指令是否为线程中的第一指令;响应指令是第一指令,将新线程标识指派到线程;以及将新线程标识映射到用于线程的原标识。
[0100] 一个或更多个实施例的示例可提供在机器上被执行时促使机器执行以下操作的指令:响应组块不是活动组块,暂停指令,直至组块是活动组块。
[0101] 一个或更多个实施例的示例还可提供在机器上被执行时促使机器执行以下操作的指令:识别组块是否为多个组块的最后组块;以及如果组块是最后组块,则在组块的执行后在自由模式中操作线程。
[0102] 一个或更多个实施例的示例还可提供在机器上被执行时促使机器执行以下操作的指令:确定执行是否匹配记录的执行。
QQ群二维码
意见反馈