CN116194893A - 用于在采用事务性存储器的系统中处理事务的技术 - Google Patents
用于在采用事务性存储器的系统中处理事务的技术 Download PDFInfo
- Publication number
- CN116194893A CN116194893A CN202180064077.3A CN202180064077A CN116194893A CN 116194893 A CN116194893 A CN 116194893A CN 202180064077 A CN202180064077 A CN 202180064077A CN 116194893 A CN116194893 A CN 116194893A
- Authority
- CN
- China
- Prior art keywords
- transaction
- abort
- exception
- event
- retry
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
- G06F9/467—Transactional memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
- G06F9/528—Mutual exclusion algorithms by using speculative mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
提供了一种用于在采用事务性存储器的系统中处理事务的装置和方法。该装置具有用于响应于指令而执行数据处理的处理电路,以及用于支持该处理电路在数据处理线程内执行事务的事务性存储器支持电路。该事务包括推测性地执行的指令序列,并且针对该指令序列,该处理电路防止提交那些指令的结果,直到该事务已经到达事务结束点。该事务性存储器支持电路包括中止事件检测电路,该中止事件检测电路用于在该事务已经到达该事务结束点之前检测到中止事件时使得该事务的执行被中止,并且该中止事件检测电路使得中止状态信息被存储以供以后在确定是否重试执行该事务时参考。当该中止事件由于给定类型的给定异常事件而出现时,该中止事件检测电路使得综合表征信息被捕获以供在寻求解决该给定异常事件时使用,并且至少在该给定异常事件被解决的情况下使得该中止状态信息识别建议重试该事务。
Description
背景技术
本公开涉及数据处理领域。更具体地,本公开涉及事务性存储器。
数据处理系统可以执行多个数据处理线程。该线程可以在同一处理单元上执行,或在数据处理系统内的独立处理单元上执行。有时,线程可能需要访问共享资源,并且数据处理操作的性质可能使得一旦线程开始与共享资源交互,就可能需要一组操作使用资源来原子地完成而同时没有另一个线程访问该资源。
在此类情况下,不是采用基于锁的机制来控制对至少一个目标资源的排他性访问,而是为了处理访问共享资源的线程之间的冲突而开发的技术,该技术涉及使用事务性存储器支持。具体地,数据处理系统可以设置有事务性存储器支持电路,该事务性存储器支持电路用于支持事务的执行,该事务包括推测性地执行的指令序列,并且针对该指令序列,处理电路被配置为防止提交推测性地执行的指令的结果,直到事务已经到达事务结束点。如果有必要在到达事务结束点之前中止事务,例如因为另一个线程正在执行冲突访问,则有必要能够将处理器的状态恢复到事务开始之前存在的状态。
与使用基于锁的机制的情况相比,通过使用事务性存储器支持,这可以提供一种更加乐观的方法来处理访问共享资源的线程之间的冲突。具体地,每个线程可以假设将不会与其它线程发生冲突,乐观地开始处理关键代码部分,并且随后如果到达该关键代码部分的结束而没有检测到任何冲突的情况下,可以提交事务的结果。在冲突很少的情况下,使用事务性存储器支持可以通过允许更多线程同时处理它们的关键代码部分来改善性能。
然而,通常认为有必要在数据处理系统上执行的软件内提供回退路径,使得在无法完成某些事务的情形下可以保证向前进展。例如,此类回退路径可以使用先前提及的基于锁的机制。然而,由于使用回退路径通常会导致线程序列化,并且因此导致性能降级,除非绝对必要,期望避免使用回退路径。
发明内容
在一个示例性布置中,提供了一种装置,该装置包括:处理电路,该处理电路用于响应于指令而执行数据处理;以及事务性存储器支持电路,该事务性存储器支持电路用于支持处理电路在数据处理线程内执行事务,该事务包括推测性地执行的指令序列,并且针对该指令序列,处理电路被配置为防止提交推测性地执行的指令的结果,直到事务已经到达事务结束点;事务性存储器支持电路包括中止事件检测电路,该中止事件检测电路用于在事务已经到达事务结束点之前检测到中止事件时使得事务的执行被中止,并且使得中止状态信息被存储以供以后在确定是否重试执行事务时参考;其中当中止事件由于给定类型的给定异常事件而出现时,中止事件检测电路被布置成:使得综合表征信息被捕获以供在寻求解决给定异常事件时使用,并且至少在给定异常事件被解决的情况下使得中止状态信息识别建议重试事务。
在另一个示例性布置中,提供了一种在装置中处理事务的方法,该方法包括:采用处理电路,该处理电路用于响应于指令而执行数据处理;采用事务性存储器支持电路,该事务性存储器支持电路用于支持处理电路在数据处理线程内执行事务,该事务包括推测性地执行的指令序列,并且针对该指令序列,处理电路被配置为防止提交推测性地执行的指令的结果,直到事务已经到达事务结束点;在事务已经到达事务结束点之前,当由事务性存储器支持电路检测到中止事件时,中止事务的执行;中止执行事务时,存储中止状态信息以供以后在确定是否重试执行事务时参考;并且当中止事件由于给定类型的给定异常事件而出现时,捕获综合表征信息以供在寻求解决给定异常事件时使用,并且至少在给定异常事件被解决的情况下使得中止状态信息识别建议重试事务。
在再一个示例性布置中,提供了一种用于控制主机数据处理装置来提供指令执行环境的计算机程序,该计算机程序包括:处理程序逻辑,该处理程序逻辑用于支持在数据处理线程内执行事务,该事务包括推测性地执行的指令序列,并且针对该指令序列,处理程序逻辑被配置为防止提交推测性地执行的指令的结果,直到事务已经到达事务结束点;以及中止事件程序逻辑,该中止事件程序逻辑用于在事务已经到达事务结束点之前检测到中止事件时使得事务的执行被中止,并且使得中止状态信息被存储以供以后在确定是否重试执行事务时参考;其中当中止事件由于给定类型的给定异常事件而出现时,中止事件程序逻辑被布置成:使得综合表征信息被捕获以供在寻求解决给定异常事件时使用,并且至少在给定异常事件被解决的情况下使得中止状态信息识别建议重试事务。
在又一个示例性布置中,提供了一种装置,该装置包括:处理装置,该处理装置用于响应于指令而执行数据处理;以及事务性存储器支持装置,该事务性存储器支持装置用于支持处理装置在数据处理线程内执行事务,该事务包括推测性地执行的指令序列,并且针对该指令序列,处理装置被配置为防止提交推测性地执行的指令的结果,直到事务已经到达事务结束点;事务性存储器支持装置包括中止事件检测装置,该中止事件检测装置用于在事务已经到达事务结束点之前检测到中止事件时使得事务的执行被中止,并且使得中止状态信息被存储以供以后在确定是否重试执行事务时参考;其中当中止事件由于给定类型的给定异常事件而出现时,中止事件检测装置用于使得综合表征信息被捕获以供在寻求解决给定异常事件时使用,并且至少在给定异常事件被解决的情况下使得中止状态信息识别建议重试事务。
附图说明
将参考如附图所示的本技术的示例,仅以例示的方式进一步描述本技术,其中:
图1是根据一个示例的数据处理系统的框图;
图2示出了示例性伪代码,其中未利用本文所述的技术;
图3示出了执行图2的伪代码的两个线程,以及这些线程之间发生的加载/存储冲突;
图4提供了根据不使用本文所述技术的实施方式的伪代码,该伪代码示出了寻求执行事务,但是然后由于导致事务中止的页错误问题而采用回退路径的线程T0;
图5A和图5B提供了根据一个示例性布置的示出数据处理系统的操作的流程图;
图6A是示出图5B的步骤160的一个示例性实施方式的流程图,并且图6B示出了根据一个示例性实施方式的随后在寻求确定是否重试事务时可以采取的步骤;
图7是示出根据一个示例性实施方式的用于实施图5B的步骤160的可选的机制的流程图;
图8示意性地示出了可以在一个示例性实施方式中提供的中止状态信息的格式;
图9示出了与图2类似的伪代码,但是示出了根据一个示例性实施方式可以被利用的附加机制,以便潜在地避免在存在页错误的情况下使用回退路径;并且
图10示出了可以被使用的模拟器示例。
具体实施方式
采用事务性存储器架构的数据处理系统允许形成事务的指令块的原子和强隔离执行。原子性确保其他线程(也可以称为代理)将事务视为一个操作,并且隔离确保事务性代码和非事务性代码之间的严格分离。因此,采用事务性存储器架构的系统可以允许以如下方式访问其组成本质上是动态的数据结构:使得一组操作能够使用数据结构原子地完成而无需使用锁定机制等。
通过避免使用锁定机制等,这可以显著改善性能,因为其可以允许线程同时处理关键代码部分,而不是那些线程依赖于锁的获取而被迫以串行方式执行。然而,通常仍有必要在数据处理系统上执行的软件内提供回退路径,使得在事务不能原子地完成并且因此被中止的情况下,仍然可以通过使用回退路径来保证向前进展,回退路径可以例如采用锁定机制(更一般地称为互斥(相互排除对象)机制)。
本文所述的技术寻求减少对回退路径的依赖,并且具体地提供一种机制,该机制在一些情况下可以寻求解决事务被中止的原因,使得事务可以被重试而不是立即依赖于回退路径。在成功重试事务的情况下,这可以显著改善性能。
具体地,根据本文所述的技术,提供了一种装置,该装置具有:处理电路,该处理电路用于响应于指令而执行数据处理;以及事务性存储器支持电路,该事务性存储器支持电路用于支持处理电路在数据处理线程内执行事务。该事务包括推测性地执行的指令序列,并且针对该指令序列,处理电路被配置为防止提交推测性地执行的指令的结果,直到事务已经到达事务结束点。
事务可以通过两种方式完成。首先,事务可以到达先前提及的事务结束点,意味着事务可以被提交,因为它的执行已经以原子方式并且以强隔离的方式执行。然而,可选地,在硬件不能确保事务性代码的原子性或强隔离的情况下,例如由于另一个线程对共享资源中的一个资源的冲突访问,事务可以被中止。
因此,事务性存储器支持电路可以设置有中止事件检测电路,该中止事件检测电路用于在事务已经到达事务结束点之前检测到中止事件时使得事务的执行被中止。该情况下的中止事件检测电路使得中止状态信息被存储以供以后在确定是否重试执行事务时参考。
此外,当中止事件由于给定类型的给定异常事件而出现时,该中止事件检测电路被布置成:使得综合表征信息被捕获以供在寻求解决给定异常事件时使用,并且至少在给定异常事件被解决的情况下使得中止状态信息识别建议重试事务。在由于给定类型的异常事件而发生中止的情况下,要捕获的综合表征信息可以用于寻求解决该异常事件,这使得能够采取主动步骤来寻求改善如果重试则事务将成功完成的机会,从而允许某些事务被成功重试。通过避免触发可选的、较低性能的机制以寻求执行事务所需的数据处理,这可以显著改善性能。
取决于实施方式,上述技术可以被布置成使得中止状态信息识别总是推荐重试事务,并且因此可以在不寻求确定给定异常事件是否已经解决的情况下尝试重试。然而,在可选的实施方式中,可以尝试寻求解决给定异常事件,并且在确定给定异常事件已经被解决的情况下,中止状态信息识别建议重试事务。
可能导致需要中止事务的异常事件可以采取各种形式。例如,那些异常事件可以是由于由处理电路的指令执行而发生的异常,或者可以是由与系统内与指令执行异步发生的活动相关的装置接收到的中断。此外,此类异常事件可以由于需要处理电路的特权级别的改变(也称为异常级别的改变)的事件而发生,因为此类特权级别改变在处理电路处于事务性状态内时(即,在处理电路正在执行事务时)通常不被允许。
此外,本文所述的技术可以应用于各种不同类型的异常事件,并且具体地应用于任何类型的异常事件,其中预计通过捕获合适的综合表征信息,有可能解决异常事件,从而可以成功地重试事务。已经发现可以通过采用本文所述的技术来实现显著的性能益处的一个特定示例性情况是关于页错误。具体地,虽然页错误可以表示永久故障,例如因为由处理电路执行的进程不具有合适的安全/许可权限来访问存储器中特定范围的地址,但是常见的情况是,页错误由于更加良性的原因而发生,具体是因为由地址参考的存储页面还没有被映射到处理器的页表中。
此类良性页错误异常事件可以被解决,例如通过使用操作系统软件来更新所需的映射,使得当恢复执行时,页错误不再出现。然而,在典型的事务性存储器技术中,不同类型的异常事件之间可以不进行区分,并且因此通常改为采用回退路径的使用来寻求向前进展。例如,在此类实施方式中,中止状态信息可以仅仅捕获由于在事务性状态中尝试操作而发生的中止,该操作在事务性状态中在架构上被禁止。因此,可以预期重试事务是不适当的,并且相反应当使用回退路径。然而,通过使用本文所述的技术,有可能允许采取步骤来寻求解决某些类型的异常事件,从而提高可以成功重试事务的可能性,并由此避免在此类实例中使用任何回退机制。
在一个示例性实施方式中,当中止事件由于给定类型以外的类型的异常事件而出现时,中止事件检测电路被布置成使得中止状态信息识别不推荐重试事务。因此,在认为不适合为了寻求解决异常事件而寻求使用本文所述的技术的情况下,可以避免重试事务。具体地,认识到存在某些类型的异常事件,对于这些异常事件,不存在解决该异常事件的希望,并且因此对于这些异常事件,重试事务将不会实现任何有用的结果。因此,本文所述的技术可以限于某些特定异常事件类型,诸如先前提及的页错误异常。
在一个示例性实施方式中,处理电路可以被布置成在中止事务后参考中止状态信息,以便确定是否重试事务,或者是否改为采用由在处理电路上执行的软件提供的回退路径,该回退路径提供用于执行事务所需的数据处理的基于非事务的机制。如先前所讨论,回退路径可以用于确保使得向前进展。纯粹以举例的方式,如果多个线程正在寻求彼此同时执行事务,并且由那些线程执行的访问一致地引起冲突,导致需要中止事务,则可以通过使用采用先前所述的基于锁的机制的回退路径来向前进展,以便允许顺序地执行那些事务中的每一个事务所需的处理。
可以通过多种不同的方式捕获综合表征信息,并且可以尝试寻求解决异常事件。在一个示例性实施方式中,中止事件检测电路被布置成通过使得该综合表征信息被存储在综合表征寄存器内来捕获综合表征信息,并且随后被布置成通过布置中止状态信息以便识别中止事件是由于给定类型的异常而引起的,使得中止状态信息识别建议重试事务。然后,处理电路可以被布置成在参考中止状态信息检测到由于给定类型的异常而引起中止事件时,执行解决函数,该解决函数参考综合表征寄存器以便使用综合表征信息来寻求解决异常。然后,在完成解决函数后,处理电路还可以被布置成寻求重试事务。
因此,考虑先前的具体示例,其中感兴趣的异常事件类型是页错误异常,综合表征寄存器可以用于将引起页错误的地址捕获为综合表征信息,该地址可以例如为由正在执行的相关指令指定的虚拟地址。此外,中止状态信息可以被布置成具体地识别中止事件是由于页错误而引起的。处理电路(例如作为在处理电路上执行的软件的结果)然后可以检测到页错误引起事务的中止,并且可以采取步骤使用在综合表征寄存器内捕获的地址来寻求解决页错误。由于此类功能是在寻求作为事务执行的关键代码部分之外实现的,因此可以采用任何合适的函数以便寻求调用和解决页错误。作为特定示例,可以使用辅助函数来寻求从存储在综合表征寄存器中的地址加载值,并且随后将该值存储回到相同位置。通常该活动将调用页错误,并且先前所述的步骤(例如通过分支到操作系统软件)可以用于更新所需的页面映射,使得此类页错误将不再发生。在已经采取此类步骤之后,可以使重试事务的成功机会增加。
然而,存在可以用于捕获所需的综合表征信息的其他机制,并且使用该信息来解决异常。例如,作为中止事务的活动的一部分,中止事件检测电路可以被布置成触发异常处理例程的执行,而不是在综合表征寄存器中捕获所需的综合表征信息,并且随后确保在处理系统上执行的软件已经适用于寻求解决异常事件。在该过程期间,可以通过将综合表征信息传递到异常处理例程来捕获该检验子信息。处理电路对异常处理例程的执行然后寻求使用综合表征信息来解决异常。当采用此类机制时,一旦异常处理例程已经完成,则中止事件检测电路还可以被布置成使得中止状态信息被存储。此类方法避免了需要在架构上暴露特定的综合表征寄存器,但在一些实施方式中,如果需要,仍可以提供此类综合表征寄存器。此外,这意味着可以根据异常处理例程的结果来调整中止状态信息。
在一个示例性实施方式中,中止状态信息被布置成当异常处理例程的执行使得异常被解决时,识别建议重试事务。相反地,中止状态信息被布置成当异常处理例程的执行使得异常仍未解决时,识别不推荐重试事务。
应当指出的是,当使用该可选的机制时,不需要中止状态信息识别引起中止事件的异常类型,因为寻求解决异常的尝试是作为中止过程的一部分,通过直接触发合适的异常处理例程来进行的。然而,如果需要,中止状态信息还可以被布置用于识别中止事件是由于给定类型的异常而引起的,因为在一些实施方式中,捕获该信息仍可以被认为是有用的。
如先前所提及,应用本技术的给定类型的异常可以根据实施方式而变化,但是在一个示例性实施方式中是页错误异常。在由于给定异常是页错误异常而中止事务后,通过使得中止状态信息识别建议重试事务,使得该装置能够在页错误异常是瞬态异常的情况下成功地重试事务,从而避免需要采用由在处理电路上执行的软件提供的回退路径。瞬态异常是在重试事务的情况下不一定会再次发生的异常,并且在本文中也可以被称为可解决异常,因为如上所讨论,可以实现某些步骤以解决先前引起异常的问题,并且因此避免在重试事务的情况下再次发生异常。此类瞬态异常应当与不能解决的永久异常形成对比,并且因此永久异常不适合使用本文所述的技术,因为预期重试事务不会比先前尝试执行事务更可能成功。
程序内的事务性代码可以用各种方式识别,但在一个示例性实施方式中,形成事务的指令序列由事务开始指令和事务结束指令界定。可以在执行事务开始指令时实施多个过程。例如,可以进行检查以确定是否可以成功地进入事务性状态,这将允许事务的代码随后被执行。此外,假设可以成功地进入事务性状态,则事务性存储器支持电路可以包括恢复状态存储电路,该恢复状态存储电路用于存储响应于事务开始指令而捕获的事务恢复状态数据,此类事务恢复状态数据捕获关于系统的足够的状态数据,以使得该状态能够在事务适时需要被中止的情况下被恢复。
在中止事件的处理直接导致异常处理例程被触发的实施方式中,然后在一个示例性实施方式中,事务性存储器支持电路可以被布置成:在异常处理例程被触发之前使得事务恢复状态数据被恢复。因此,在触发异常处理程序时,然后处理将沿着非推测性代码路径进行。
在事务中止的情况下,可以通过多种方式更新中止状态信息。在一个示例性实施方式中,响应于中止事件的检测,中止事件检测电路被布置成使得由处理电路重新执行事务开始指令,以便使得中止状态信息被存储以供以后在确定是否重试执行事务时参考。因此,在此类实施方式中,事务开始指令的执行可以被用作捕获所需的中止状态信息的机制,并且在这种情况下,事务开始指令的重新执行将确定不能进入事务性状态,并且中止状态信息将被更新以识别原因。
在发生先前提及的事务结束指令时,可以采取多个步骤。然而,概括地说,当到达事务结束指令时,这意味着可以成功地完成事务。因此,处理电路可以被配置为防止提交推测性地执行的事务指令的结果,直到到达事务结束指令。
虽然数据处理的线程可以直接在装置的主机硬件上执行,但在可选的布置中,可以提供用于控制主机数据处理装置的对应的计算机程序以提供用于执行数据处理线程的指令执行环境。计算机程序可以包括处理程序逻辑以支持在数据处理线程内执行事务(以类似于上文所讨论的针对硬件实现的对事务的支持方式)。还可以提供中止事件程序逻辑,该中止事件程序逻辑用于在事务已经到达事务结束点之前检测到中止事件时使得事务的执行被中止,并且该中止事件程序逻辑使得中止状态信息被存储以供以后在确定是否重试执行事务时参考。当中止事件由于给定类型的给定异常事件而出现时,中止事件程序逻辑可以使得综合表征信息被捕获以供在寻求解决给定异常事件时使用,并且还可以至少在给定异常事件被解决的情况下使得中止状态信息识别建议重试事务。
因此,可以提供计算机程序,向在计算机程序上执行的软件呈现与具有如上所讨论的特征的实际硬件装置所提供的指令环境类似的指令环境,即使在执行计算机程序的主计算机中可能没有提供这些特征的任何实际硬件。相反,计算机程序可以例如是模拟器或虚拟机,计算机程序可以通过提供程序逻辑(诸如指令集或数据结构)来仿真硬件架构的功能,该程序逻辑使得通用主机数据处理装置能够以与将在具有事务性存储器支持的装置上实现的结果兼容的方式执行旨在用于在具有事务性存储器支持的装置中执行的代码。计算机程序可以存储在存储介质上,并且该存储介质可以是非暂态存储介质。
现在将参考附图描述特定示例。
图1示出了具有硬件事务性存储器(HTM)支持的数据处理装置2的示例。该装置具有用于实施指令以执行数据处理操作的处理逻辑4。例如,处理逻辑4可以包括用于执行各种类型的处理操作的执行单元,诸如用于实施算术或逻辑运算(诸如加法、乘法、AND、OR等)的算术/逻辑单元(ALU);用于对浮点值操作数执行运算的浮点单元;或者用于对包括多个数据元素的矢量操作数执行矢量处理的矢量处理单元。一组架构寄存器6,其被提供用于存储由处理逻辑4执行的指令的操作数以及用于存储所执行的指令的结果。指令解码器8,其对从指令高速缓存10提取的指令进行解码以生成用于控制处理逻辑4或数据处理装置2的其它元件以执行相关操作的控制信号。还提供加载/存储单元12以执行加载操作(响应于由指令解码器8解码的加载指令)以将数据值从数据高速缓存14或较低级别的高速缓存/主存储器16加载到架构寄存器6中,并且执行存储操作(响应于由指令解码器8解码的存储指令)以将数据值从架构寄存器6存储到数据高速缓存14或较低级别的高速缓存/主存储器16。
装置2也具有事务性存储器支持电路20,其提供用于支持硬件事务性存储器(HTM)的各种资源。事务性存储器支持电路20中的HTM资源可以包括例如用于存储事务的推测性结果的推测性结果存储装置22、用于跟踪由事务访问的地址的地址跟踪电路24,以及用于检测需要中止事务的中止事件的中止事件检测电路26。此类中止事件可以采取各种形式。例如,中止事件可以由于在事务期间发生的异常事件而出现,或者由于由事务进行的数据访问与由其它线程进行的数据访问之间的冲突而出现。事务性存储器支持电路20还可以包括恢复状态存储电路28,该恢复状态存储电路用于在事务开始时存储来自架构寄存器6的架构状态数据的快照,使得该状态可以被恢复以在事务被中止时重写该事务的推测性结果。
在装置2上执行的软件可以被布置成识别将作为事务被执行的关键代码部分。在一个示例性实施方式中,此类关键代码部分由事务开始指令和事务结束指令界定,但是可选地,可以使用用于识别将作为事务被执行的代码块的任何合适的机制。然而,如先前所讨论,不能保证在所有情况下都有可能将所需的代码部分作为事务来执行,这是因为例如同时寻求执行事务的多个线程之间的数据访问冲突可能导致需要中止事务。因此,程序代码将通常包括后退路径,可以使用该回退路径以便提供用于执行事务所需的数据处理的基于非事务的机制,并且在事务中止的情况下,可以调用该回退路径以便向前进展。
然而,如先前所讨论,期望仅在绝对必要时使用回退路径,因为此类回退路径通常将需要线程的序列化,并且因此可能导致性能降级。根据本文所述的技术,中止事件检测电路26被布置成使得当由于给定类型的异常事件而需要中断事务时,采取某些步骤来寻求解决异常发生的原因。然后可以重试该事务,并且如果成功,则因此可以在该场景下避免使用回退路径。
使得中止事件检测电路26采取此类步骤的异常事件类型可以根据实施方式而变化,但是就如下讨论而言,将假设感兴趣的异常事件类型是页错误异常。当发生页错误时,已经发现在许多情况下可以解决页错误。具体地,虽然页错误可以有效地表示永久异常,例如因为正在执行的进程不具有访问寻求被寻址的存储器区域所需的安全或许可权限,但是相当常见的是,页错误实际上是瞬态的,例如由于所需的存储器页还没有被映射到处理器的页表中。这可以通过标准机制来解决,例如通过将异常转变为操作系统级代码,该操作系统级代码具有适当的特权级别来处理该瞬态的页错误,并且因此可以更新相关映射,使得当恢复执行时,页错误不再发生。
然而,此类特权级别的转变通常不能在事务内发生,并因此相反该事务被中止。根据本文所述的技术,可以将由于页错误异常而导致的事务中止与已引起事务中止的其它类型的异常事件区分开,从而使得能够针对此类页错误异常采取不同的动作过程。具体地,如下所讨论,可以采取步骤来寻求解决页错误异常出现的原因,然后重试事务,而不仅仅是决定改为使用回退路径来实现事务所需的处理。在确实解决了页错误的情况下,这可以通过减少发生需要利用回退路径的情况来产生显著的性能益处。
根据本文所述的技术,当由于页错误异常而出现中止事件时,中止事件检测电路26可被布置成:使得综合表征信息被捕获以供在寻求解决页错误异常时使用,并且此外还可以在中止发生时使得中止状态信息被捕获以识别建议重试事务。中止状态信息中的该信息实际上是提示,指示重试事务是否被认为是适当的。如何利用中止状态信息可以根据实施方式而变化,但是基于该提示,至少在某些情况下,处理电路(或者更具体为在其上执行的软件)可以重新尝试执行事务。
可以通过各种方式捕获综合表征信息,并且实际上该信息将取决于采用上述技术的异常事件的类型而采取不同的形式。然而,对于页错误异常的特定示例,则综合表征信息可以采取识别引起页错误异常的处理电路正在寻求访问的地址的页错误地址的形式。这将例如指定虚拟地址,并且可以是在执行时由于处理电路不能访问适当的页面映射信息而导致该虚拟地址不能被映射到物理地址。在一个示例性实施方式中,可以在系统内提供综合表征寄存器40,在检测到导致需要中止事务的页错误异常的情况下,中止事件检测电路26可以将页错误地址写入综合表征寄存器中。
上文提及的中止状态信息(在本文中也被称为事务状态信息)可以被存储在各种位置中,并且在一个示例性实施方式中被存储在形成架构寄存器6中的一个寄存器的寄存器35内。该事务状态寄存器35可以填充有可以用于识别事务故障原因的各种信息,但根据本文所述的一个示例性实施方式适用于特定地识别由于页错误异常引起的事务失败的情形。寄存器35内的事务状态信息还可以提供重试字段,该重试字段可以被设置或清除以区分建议重试事务的情况和不推荐重试事务的情况,例如因为预期不会成功地重试事务。然后,在确定是否重试事务或者是否改为采用回退路径机制时,该信息可以由在处理电路上执行的软件使用。
图2示出了用于程序代码片段的示例性伪代码,其中未使用本文所述的技术。在该特定示例中,目标是使线程原子地执行函数“my_work()”,即,通过在事务内执行该函数的代码。在处理电路上执行的线程因此将尝试在事务性状态中执行“my_work()”,并且如果执行失败,则然后将使用回退机制(在此情况下为基于锁的机制)回退到执行该函数。在事务内执行的处理可以采取各种形式,但在该示例中涉及设置变量x和变量y以识别两个寄存器,并且随后分别将在地址A和地址B处找到的数据加载到这两个寄存器中。然后,寄存器y中保存的数据递增1,并且将寄存器x中的数据与寄存器y中更新的数据值相乘。然后,寄存器x的内容被存储回地址A,同时寄存器y的内容被存储回地址B。如果原子地成功完成所有这些操作,则推测性结果存储装置22将包含所有结果,并且当到达提交点时,可以提交这些结果,在一个示例中,当遇到事务结束指令时到达该提交点。
然而,如果事务失败,则存储装置28中的恢复状态将用于将处理器状态恢复到在事务开始之前存在的状态。此外,事务状态信息(即,先前提及的中止状态信息)将被更新为非零值,并且因此将使得图2中所示的代码的“else”部分被执行,从而导致函数“my_work()”仅在线程已经获取锁时被执行。当该锁被该线程获取时,没有其他线程可以获取该锁,并且因此不能寻求同时执行函数my_work(),或者访问与函数相关联的存储器地址。
图3是示出了同时寻求执行图2的伪代码的两个线程(T0和T1)的图。在该示例中,两个线程均设法进入事务性状态,并且因此开始执行事务。然而,如图3中所示,当线程T1尝试从地址A加载时,发生加载/存储冲突,此时注意到地址A正由线程T0写入(地址A在用于事务的地址的写入集内)。这种交互作用是不允许的,因为它引起竞态条件,并且因此微架构检测到这种情况并迫使T1的事务中止。当执行用于T1的事务开始指令时,T1将其架构状态恢复到作为恢复状态28存储的检查点数据。在事务中止过程期间,重新执行事务开始指令,但在这种情况下仅仅检测到不能进入事务性状态,并且更新中止状态信息35以识别事务的失败。由于处理器检测到事务状态信息现在为非零值的事实,因此针对线程T1采用回退路径,并且因此控制流将程序计数器值引导到回退路径,其中在锁的相互排除下执行my_work函数所需的功能。
异常事件可以采取各种形式,例如由于指令执行而发生的异常、指令执行时异步地发生的中断以及由于特权级别改变而发生的异常,并且通常在处理电路处于事务性状态时不允许发生这些类型的异常事件中的任何一种类型。因此,如果在事务内部发生页错误,则通常将中止事务,并且事务开始指令的重新执行将返回非零值以形成中止状态信息。该中止状态信息可以例如指示在架构上被禁止的事务性状态中尝试操作,并且重试提示可以指示如果重试则事务不太可能成功。然而,有了此类信息,可能无法检测失败的形式可能是瞬态的,并且因此如果异常的原因可以被解决,则可以成功地重试事务。在不使用本文所述的技术的情况下,通常可能不知道哪个指令引起了该失败以及该失败是由于页错误异常还是一些其它类型的异常。
虽然在一些系统中在架构上允许重新尝试执行事务,但预期这将可能导致相同的失败,并且因此通常情况是程序然后将程序计数器引导朝向回退路径。这反过来将使得其他线程中止它们的事务,因为锁地址通常将被添加到那些事务的读集,并且因此锁的获取将使得其他事务中止。那些其他线程然后将需要在它们能够恢复代码的执行之前等待锁被释放。这可能最终意味着在事务内发生的单个页错误可能使得除了一个线程以外的整个系统停止。实际上,已经观察到,对于某些程序,这可能意味着由于在事务内发生大量的页错误,当寻求在那些程序内执行事务时,经历病态的性能降级。
图4示出了尝试执行事务内的函数my_work的线程T0。在该示例中,当从地址B加载时发生页错误。这使得事务中止,并且控制流将程序计数器引导到回退路径。即使其它线程T1不运行任何代码,其仍然在架构上不被允许(也不安全)处理事务内的页错误。本文所述的技术提供了避免该病态行为的机制。
具体地,图5A和5B提供了示出在一个示例性实施方式中执行的步骤的流程图,可以避免在事务内可能发生的可解决页错误发生时需要使用回退路径。在步骤100处,处理电路寻求发起事务。存在各种方式发起事务,并且在一些HTM系统中,特定指令被用于开始和结束事务。因此,在一个示例性实施方式中,事务的发起作为执行事务开始指令(在本文中也被称为TSTART指令)的结果而发生。响应于寻求发起事务,在步骤105处确定是否可以成功地进入事务性状态。具体地,可以执行多个检查以便确定是否可以进入事务性状态,并且如果不能进入事务性状态,则在步骤110处保存中止状态信息以供以后在决定是否重试事务时参考。该中止状态信息可以捕获各种信息,但在一个示例性实施方式中,寻求捕获识别事务失败原因的信息,并且可以提供重试字段用于关于是否建议重试事务进行提示。
如果确定可以成功地进入事务性状态,则在步骤115处初始化中止状态信息。该步骤可以以各种方式完成,但在图1所示的实施方式中是通过清除中止状态信息来实现的,例如通过将该信息设置为全零。在步骤120处,然后通过检查点处理器的相关架构状态来捕获恢复状态,该恢复状态例如被存储在HTM资源20的先前提及的恢复状态存储电路28内。
中止状态信息可以采取各种形式,但在一个特定示例性实施方式中包括通过执行TSTART指令产生的64位信息,以识别是否已经成功进入事务性状态,或者捕获未成功进入事务性状态的原因(在到达步骤110的情况下)。如图5A所示,在通过执行TSTART指令来寻求发起事务的示例性实施方式中,则可以响应于执行TSTART指令来执行步骤105、步骤110、步骤115、步骤120中的所有步骤。
假设成功地进入事务状态,则在步骤120后,处理电路在步骤125处开始执行事务指令。在进行执行事务的同时,在步骤130处确定是否已经到达事务提交点,这在一个示例性实施方式中在遇到事务结束指令(在本文中也被称为事务提交(TCOMMIT)指令)时发生。然而,在没有到达事务提交点的情况下,在步骤135处确定是否需要中止事务。如先前所讨论,各种场景可以导致需要中止事务,但是假设不需要中止事务,则该过程返回到步骤130。
应当理解,在某一时刻,将到达事务提交点,或者将确定需要中止事务。如果到达事务提交点,则在步骤140处提交在事务期间创建的推测性状态(即,存储在推测性结果存储装置22内的信息),并且因此恢复状态可以然后被移除或允许被重写。此时,事务的处理已经成功完成。
然而,如果在步骤135处确定有必要中止事务,则在步骤145处确定中止是否是由于异常事件。如先前所讨论,存在其他原因可能导致需要中止事务,例如先前提及的加载/存储冲突(参考图3所讨论)。如果中止不是由于异常事件,则该过程继续进行到步骤150,其中恢复在恢复状态存储装置28内的恢复状态,并且随后更新中止状态信息以捕获关于事务失败原因的某些信息。这可以包括先前提及的重试提示信息,以及指示事务失败原因的各种信息。
如果在步骤145处确定中止是由于异常事件,则在步骤155处确定异常事件是否是确定的类型。在本文所讨论的示例中,将假设所确定的类型为页错误异常,但还应当理解,本文所述的技术不限于与页错误异常相关联地使用,并且也可以以本文所述的方式处理任何其它合适形式的异常。如果异常事件不是由于所确定的异常类型,则过程进行到步骤150,其中再次恢复该恢复状态并且更新中止状态信息。对于异常事件,在中止状态信息内捕获的信息通常可以识别不推荐重试事务,因为可以预期事务的此类重试也将导致失败。
然而,如果在步骤155处确定异常事件是所确定的类型,例如是页错误异常,则至少在异常事件被解决的情况下,在步骤160处再次恢复该恢复状态,但是另外采取步骤以允许异常事件被解决,并且中止状态信息被更新以识别建议重试事务。可以通过各种方式采取步骤以寻求解决异常事件,并且本文将参考图6A、图6B和图7论述两个可选的示例(第一个示例涉及在综合表征寄存器中捕获综合表征信息以供后续参考,并且第二个示例涉及触发异常处理器,该异常处理器寻求自动地解决异常事件而不需要提供架构上暴露的综合表征寄存器来保存综合表征信息)。此外,可以通过各种方式更新中止状态信息以建议重试事务,并且再次将参考以下附图论述这些方式。
图6A是示出在一个示例性实施方式中可以执行以便实施图5B的步骤160的流程图。在步骤200处,恢复该恢复状态。此外,在步骤205处,用允许寻求解决所确定的异常事件类型所需的信息填充综合表征寄存器40。对于先前提及的页错误异常,引起该页错误异常的地址可以存储在综合表征寄存器内,并且该地址例如可以是由正在执行的指令指定的虚拟地址。
在步骤210,中止状态信息被更新以识别事务失败是由于所确定的异常事件类型。因此,考虑到页错误异常的示例,修改作为重新执行TSTART指令的结果而创建的中止状态信息,使得明确地识别事务失败是由于页错误而非任何其它类型的异常。
图6B是示出当考虑是否应当重试事务时执行的步骤的流程图。这些步骤通常不通过微架构实现,而是可以通过合适的算法来实现,例如可以在系统上执行的用户代码中提供。在步骤215,确定是否要考虑重试由于异常事件而失败的事务。在一个示例性实施方式中,在事务被中止之后可以立即发生重试的考虑,但在可选的实施方式中,中止事务与被评估的考虑重试事务之间可能存在一些延迟。
当在步骤215处确定适合考虑重试事务时,则在步骤220处确定事务状态信息是否识别失败是由于所确定的异常事件类型,即对于以上给出的示例,事务失败是否是由于页错误异常。如果事务失败不是由于页故障异常,则在步骤225处,采用回退而不是重试执行作为事务。
然而,如果从事务状态信息确定失败是由于所确定的异常事件类型,则在步骤230处执行代码以寻求解决异常事件。该代码可以采取各种形式,并且实际上可以是寻求重新调用页错误的任何辅助函数,并由此使得页错误被解决。应当指出的是,此时正在执行的代码在由事务定义的关键代码部分之外,并且因此关于可以用于寻求解决异常事件的机制存在很大的灵活性。此时,参考存储在综合表征寄存器40内的信息,因为如先前所讨论,该信息将识别相关信息。具体地,对于页错误异常,它将识别引起页错误异常发生的虚拟地址,并且因此对该虚拟地址的进一步访问可以被用作用于重新调用页错误并且寻求解决页错误异常的机制。以后将参考图9进行讨论,可以使用的一种合适的机制仅仅是为了寻求加载来自综合表征寄存器中所识别的地址的数据,并且此后将该数据存储回存储器,并且在该过程期间,可用于处理电路的页映射通常可以被更新,使得随后将不会出现页错误。
在步骤230处执行代码后,在步骤235处尝试重试事务。在一个示例性实施方式中,这是通过返回到图5A顶部的处理,即通过在步骤100处寻求发起事务来实现的。此时,可能将成功地开始事务,并且当遇到使用先前已经引起页错误的虚拟地址的相关指令时,预期这一次不会遇到此类页错误异常。因此,假设没有其它原因导致需要中止事务,则预期现在将成功完成事务。
图7是示出在一个示例性实施方式中可以用于实施图5B的步骤160的可选的机制的流程图。在步骤250处,恢复该恢复状态,并且此后,触发异常处理程序(作为中止处理的一部分)以寻求解决所确定的异常事件类型。在该过程期间,所需的综合表征信息可以被传递到异常处理程序以提供关于异常的必要信息,例如页错误地址(即引起页错误异常的地址)。应当指出的是,因为现在已经恢复了恢复状态,因此在步骤255处,现在正在遵循非推测性代码路径,并且因此异常处理程序在定义事务的代码外部。
在步骤260处,确定是否已经通过执行异常处理器解决异常,并且因此确定异常是否是瞬态异常。如果异常不是瞬态异常,则在步骤265处更新事务状态信息以识别错误已经发生,并且清除重试位。具体地,预期不太可能成功重试事务,并且因此通过清除重试位,可以指示不推荐重试事务。
然而,如果在步骤260处确定已经解决异常,则在步骤270处可以更新事务状态信息以识别事务失败,但是应当重试事务。具体地,推荐重试事务,因为预期将成功重试事务。
当采用图7的方法时,不需要事务状态信息来识别事务失败是由于特定类型的异常(即,在如上所讨论的示例中,不需要识别事务失败是由于页错误异常),因为已经在步骤255处通过调用异常处理器采取了寻求解决事务失败的步骤。然而,如果需要,则在步骤265、步骤270中的任一者处,可以更新事务状态信息以识别失败是由于页错误异常,因为在一些实施方式中,捕获该信息可以被认为是有用的。
不管采用上述方法中的哪一种(即,是使用图6A/6B的方法还是使用图7的方法),应当理解,该技术允许寻求解决页错误的原因并且允许重试事务,而不是立即将程序计数器引导到回退路径。这可以避免需要在大量情形中使用回退路径,并且因此允许在系统中有更多的并发性,从而改善性能。
图8示出了保存在事务状态寄存器35内的中止状态信息的示例性形式。包括多个位的字段310可以用于捕获用于识别事务失败原因的各种信息,并且根据一个示例性实施方式,提供页错误子字段以特定地识别何时事务失败是由于页错误。在一个示例性实施方式中,该子字段315可以为单个位,其被设置用于识别失败是由于页错误,并且其被清除用于识别失败不是由于页错误。如先前所讨论,当使用图7的可选的方法时,可以不需要捕获该页错误信息。
又如图8所示,提供重试字段320以提供关于期望事务重试是否成功的提示。因此,重试字段320可以被看作提供重试建议,例如被设置用于识别建议重试事务,并且被清除用于识别不推荐重试事务。如先前所讨论,可以在引起事务失败的异常是页错误异常的情况下,设置重试字段。在图6A/6B的方法的示例中,每当失败是由于页错误异常而发生时,可以设置重试字段,而当使用图7的方法时,在一个示例中,可以仅在异常处理例程的执行表现为已经解决页错误问题的情况下设置重试字段。
又如图8所示,可以提供多个保留位305,从而允许在中止状态信息内捕获感兴趣的任何其它附加信息,但该信息与本文所述的技术无关。
图9示出了与如先前所讨论的参考图2的伪代码类似的伪代码,但包括结合先前所讨论的特征的修改后的机制。如果事务失败,则现在存在附加检查以确定是否这是由页错误引起的。如果是这种情况,则在综合表征寄存器(其在图9中被称为TME_PAGE_FAULT_ADDR_REG)内找到故障地址。通过使用该附加检查,可以在由事务定义的关键代码部分之外,以编程者偏好的任何方式重新调用页错误。在图9中所示的特定示例中,这通过从页错误地址加载值并且随后将该值存储回到相同位置而发生。在该过程期间,预期将重新调用页错误,并且操作系统软件然后将在所需地址映射中进行分页,以便允许将指定的虚拟地址映射到存储器中的物理地址中。具体地,加载指令或存储指令中的一者可以使得异常被触发,以便解决页错误。在该过程之后,可以使重试事务的成功机会增加。在图9所示的示例中,这是用“GOTO”语句实现的。
利用图9中示意性地示出的技术,则当事务首次失败时,瞬态的页错误异常(即,可以被解决的那些页错误)不需要使得回退路径被利用。相反,尝试寻求解决此类页错误,并且随后重新尝试该事务。在不存在使得事务失败的任何进一步问题时,则事务将成功完成,避免了需要使用回退路径。然而,如果事务失败是由于其他原因,则仍然提供回退路径,并且可以使用该回退路径。
此外,如果页错误是永久的并且因此不能被解决(例如由于寻求访问所考虑的存储器地址的代码具有不足的安全/许可权限),则程序通常将失败并且按照正常的预期行为退出。
图10示出了可以使用的模拟器具体实施。虽然先前所述的示例具体实施在用于操作支持所涉及技术的特定处理硬件的装置和方法方面实现了本技术,但是也可能提供根据本文所述的示例通过使用计算机程序实现的指令执行环境。此类计算机程序通常被称为模拟器,在一定程度上是因为此类计算机程序提供硬件架构的基于软件的具体实施。模拟器计算机程序的种类包括仿真器、虚拟机、模型和二进制转换器,其包括动态二进制转换器。通常,模拟器具体实施可以在支持模拟器程序405的主机处理器415上运行,该主机处理器任选地运行主机操作系统410。在一些布置中,在硬件和所提供的指令执行环境和/或在同一主机处理器上提供的多个不同指令执行环境之间可存在多个模拟层。在历史上,需要强大的处理器来提供以合理速度执行的模拟器具体实施,但这种方法在某些情况下可能是合理的,诸如当出于兼容性或重复使用原因而希望运行另一个处理器本地的代码时。例如,模拟器具体实施可向指令执行环境提供主机处理器硬件不支持的附加功能,或者提供通常与不同硬件架构相关联的指令执行环境。模拟概述在以下文献中给出:“一些有效的架构模拟技术(Some Efficient Architecture Simulation Techniques)”,Robert Bedichek,Winter 1990USENIX Conference,第53至63页。
就先前已参考特定硬件构造或特征描述的示例性实施方式而言,在模拟的具体实施中,等效功能可由合适的软件构造或特征提供。例如,特定电路系统可以在模拟的具体实施中被实现为计算机程序逻辑。类似地,存储器硬件诸如寄存器或高速缓存可以在模拟的具体实施中被实现为软件数据结构。在先前描述的示例中参考的硬件元件中的一个或多个硬件元件存在于主机硬件(例如,主机处理器415)上的布置中,在合适的情况下,一些模拟的实施方式可以利用主机硬件。
模拟器程序405可以存储在计算机可读存储介质(其可以为非暂时性介质)上,并且向目标代码400(其可以包括应用程序、操作系统和管理程序)提供虚拟硬件接口(指令执行环境),该虚拟硬件接口与由模拟器程序405建模的硬件架构的硬件接口相同。因此,可以使用模拟器程序405从指令执行环境内执行目标代码400的程序指令,使得实际上不具有上文所讨论的装置2的硬件特征的主计算机415可以仿真这些特征。模拟器程序405可以包括处理程序逻辑420,该处理程序逻辑用于支持数据处理线程内的事务的执行,以及中止事件程序逻辑425,该中止事件程序逻辑用于在事务已经到达事务结束点之前检测到中止事件时使得事务的执行被中止。中止事件程序逻辑将使得中止状态信息被捕获以供以后在确定是否重试事务的执行时参考,并且可以实现如前所讨论的功能以便使得综合表征信息被捕获,并且至少在给定异常事件被解决的情况下使得中止状态信息识别建议重试事务。因此,各种程序逻辑函数可以提供与图1中所示对应的硬件块等效的功能。
在本申请中,字词“被配置为…”用于意指装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,该装置可以具有提供所限定的操作的专用硬件,或者可以对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。
虽然本文已结合附图详细描述了本发明的示例性实施方案,但应当理解,本发明并不限于那些精确的实施方案,并且在不脱离所附权利要求书所限定的本发明的范围和实质的前提下,本领域的技术人员可以在其中实现各种变化、增加和修改。例如,在不脱离本发明的范围的情况下,从属权利要求的特征可以与独立权利要求的特征一起进行各种组合。
Claims (18)
1.一种装置,包括:
处理电路,所述处理电路用于响应于指令而执行数据处理;和
事务性存储器支持电路,所述事务性存储器支持电路用于支持所述处理电路在数据处理线程内执行事务,所述事务包括推测性地执行的指令序列,并且针对所述指令序列,所述处理电路被配置为防止提交所述推测性地执行的指令的结果,直到所述事务已经到达事务结束点;
所述事务性存储器支持电路包括中止事件检测电路,所述中止事件检测电路用于在所述事务已经到达所述事务结束点之前检测到中止事件时使得所述事务的执行被中止,并且使得中止状态信息被存储以供以后在确定是否重试执行所述事务时参考;
其中当所述中止事件由于给定类型的给定异常事件而出现时,所述中止事件检测电路被布置成:使得综合表征信息被捕获以供在寻求解决所述给定异常事件时使用,并且至少在所述给定异常事件被解决的情况下使得所述中止状态信息识别建议重试所述事务。
2.根据权利要求1所述的装置,其中:
其中当所述中止事件由于所述给定类型以外的类型的异常事件而出现时,所述中止事件检测电路被布置成使得所述中止状态信息识别不推荐重试所述事务。
3.根据权利要求1或权利要求2所述的装置,其中:
所述处理电路被布置成在中止所述事务后参考所述中止状态信息,以便确定是否重试所述事务,或者是否改为采用由在所述处理电路上执行的软件提供的回退路径,所述回退路径提供用于执行所述事务所需的所述数据处理的基于非事务的机制。
4.根据权利要求3所述的装置,其中:
所述中止事件检测电路被布置成通过使得所述综合表征信息被存储在综合表征寄存器内来捕获所述综合表征信息,并且被布置成通过布置所述中止状态信息以便识别所述中止事件是由于所述给定类型的异常而引起的,使得所述中止状态信息识别建议重试所述事务;并且
所述处理电路被布置成在参考所述中止状态信息检测到由于所述给定类型的异常而引起所述中止事件时,执行解决函数,所述解决函数参考所述综合表征寄存器以便使用所述综合表征信息寻求解决所述异常,所述处理电路还被布置成在所述解决函数完成后,寻求重试所述事务。
5.根据权利要求3所述的装置,其中:
所述中止事件检测电路被布置成触发所述处理电路对异常处理例程的执行,在所述异常处理例程的执行期间,通过将所述综合表征信息传递到所述异常处理例程来捕获所述综合表征信息,其中所述处理电路对所述异常处理例程的执行寻求使用所述综合表征信息来解决所述异常;并且
一旦所述异常处理例程已完成,则所述中止事件检测电路还被布置成使得所述中止状态信息被存储。
6.根据权利要求5所述的装置,其中所述中止状态信息被布置成当所述异常处理例程的执行使得所述异常被解决时,识别建议重试所述事务。
7.根据权利要求5或权利要求6所述的装置,其中所述中止状态信息被布置成当所述异常处理例程的执行使得所述异常仍未解决时,识别不推荐重试所述事务。
8.根据权利要求5至7中任一项所述的装置,其中所述中止状态信息还被布置成识别所述中止事件是由于所述给定类型的异常而引起的。
9.根据任一前述权利要求所述的装置,其中所述给定类型的异常是页错误异常。
10.根据权利要求9所述的装置,其中,在由于所述给定异常是页错误异常而中止所述事务后,通过使得所述中止状态信息识别建议重试所述事务,使得所述装置能够在所述页错误异常是瞬态异常的情况下成功地重试所述事务,从而避免需要采用由在所述处理电路上执行的软件提供的回退路径,其中所述回退路径提供用于执行所述事务所需的数据处理的基于非事务的机制。
11.根据任一前述权利要求所述的装置,其中形成所述事务的所述指令序列由事务开始指令和事务结束指令界定。
12.根据权利要求11所述的装置,其中所述事务性存储器支持电路包括恢复状态存储电路,所述恢复状态存储电路用于存储响应于所述事务开始指令而捕获的事务恢复状态数据。
13.根据权利要求12所述的装置,其中所述事务性存储器支持电路被布置成:响应于所述中止事件而使得所述事务恢复状态数据被恢复。
14.根据从属于权利要求5的权利要求13所述的装置,其中所述事务性存储器支持电路被布置成:在所述异常处理例程被触发之前使得所述事务恢复状态数据被恢复。
15.根据权利要求11至14中任一项所述的装置,其中响应于所述中止事件的检测,所述中止事件检测电路被布置成使得由所述处理电路重新执行所述事务开始指令,以便使得所述中止状态信息被存储以供以后在确定是否重试执行所述事务时参考。
16.根据权利要求11至15中任一项所述的装置,其中所述处理电路被配置为防止提交所述推测性地执行的指令的结果,直到到达所述事务结束指令。
17.一种在装置中处理事务的方法,所述方法包括:
采用处理电路,所述处理电路用于响应于指令而执行数据处理;
采用事务性存储器支持电路,所述事务性存储器支持电路用于支持所述处理电路在数据处理线程内执行事务,所述事务包括推测性地执行的指令序列,并且针对所述指令序列,所述处理电路被配置为防止提交所述推测性地执行的指令的结果,直到所述事务已经到达事务结束点;
在所述事务已经到达所述事务结束点之前,当由所述事务性存储器支持电路检测到中止事件时,中止所述事务的执行;
中止执行所述事务时,存储中止状态信息以供以后在确定是否重试执行所述事务时参考;以及
当所述中止事件由于给定类型的给定异常事件而出现时,捕获综合表征信息以供在寻求解决所述给定异常事件时使用,并且至少在所述给定异常事件被解决的情况下使得所述中止状态信息识别建议重试所述事务。
18.一种用于控制主机数据处理装置来提供指令执行环境的计算机程序,所述计算机程序包括:
处理程序逻辑,所述处理程序逻辑用于支持在数据处理线程内执行事务,所述事务包括推测性地执行的指令序列,并且针对所述指令序列,所述处理程序逻辑被配置为防止提交所述推测性地执行的指令的结果,直到所述事务已经到达事务结束点;和
中止事件程序逻辑,所述中止事件程序逻辑用于在所述事务已经到达所述事务结束点之前检测到中止事件时使得所述事务的执行被中止,并且使得中止状态信息被存储以供以后在确定是否重试执行所述事务时参考;
其中当所述中止事件由于给定类型的给定异常事件而出现时,所述中止事件程序逻辑被布置成:使得综合表征信息被捕获以供在寻求解决所述给定异常事件时使用,并且至少在所述给定异常事件被解决的情况下使得所述中止状态信息识别建议重试所述事务。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2014867.2A GB2601105B (en) | 2020-09-21 | 2020-09-21 | A technique for handling transactions in a system employing transactional memory |
GB2014867.2 | 2020-09-21 | ||
PCT/GB2021/051993 WO2022058704A1 (en) | 2020-09-21 | 2021-08-02 | A technique for handling transactions in a system employing transactional memory |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116194893A true CN116194893A (zh) | 2023-05-30 |
Family
ID=73005640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180064077.3A Pending CN116194893A (zh) | 2020-09-21 | 2021-08-02 | 用于在采用事务性存储器的系统中处理事务的技术 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230315510A1 (zh) |
CN (1) | CN116194893A (zh) |
GB (1) | GB2601105B (zh) |
WO (1) | WO2022058704A1 (zh) |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9740549B2 (en) * | 2012-06-15 | 2017-08-22 | International Business Machines Corporation | Facilitating transaction completion subsequent to repeated aborts of the transaction |
US9361041B2 (en) * | 2014-02-27 | 2016-06-07 | International Business Machines Corporation | Hint instruction for managing transactional aborts in transactional memory computing environments |
-
2020
- 2020-09-21 GB GB2014867.2A patent/GB2601105B/en active Active
-
2021
- 2021-08-02 WO PCT/GB2021/051993 patent/WO2022058704A1/en active Application Filing
- 2021-08-02 CN CN202180064077.3A patent/CN116194893A/zh active Pending
- 2021-08-02 US US18/245,659 patent/US20230315510A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230315510A1 (en) | 2023-10-05 |
GB2601105B (en) | 2022-12-07 |
GB202014867D0 (en) | 2020-11-04 |
GB2601105A (en) | 2022-05-25 |
WO2022058704A1 (en) | 2022-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2549112C2 (ru) | Выполнение вынужденной транзакции | |
CN109891393B (zh) | 使用检查器处理器的主处理器错误检测 | |
CN111133418B (zh) | 在例外屏蔽更新指令之后允许未中止的事务处理 | |
US8225139B2 (en) | Facilitating transactional execution through feedback about misspeculation | |
TWI812750B (zh) | 交易式比較及丟棄指令 | |
CN106030532B (zh) | 用于事务存储器程序的软件回放器 | |
TWI801603B (zh) | 處理獨佔式載入指令的資料處理設備、方法及電腦程式 | |
US10853223B2 (en) | Simulation of transactions | |
CN111164572B (zh) | 数据处理装置和方法 | |
US20230315510A1 (en) | A technique for handling transactions in a system employing transactional memory | |
CN112639728A (zh) | 用于事务存储器的设备和数据处理方法 | |
JPS60142747A (ja) | 命令再実行制御方式 |
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 |