CN117687744A - 一种硬件事务内存中对事务进行动态调度的方法 - Google Patents

一种硬件事务内存中对事务进行动态调度的方法 Download PDF

Info

Publication number
CN117687744A
CN117687744A CN202311539849.1A CN202311539849A CN117687744A CN 117687744 A CN117687744 A CN 117687744A CN 202311539849 A CN202311539849 A CN 202311539849A CN 117687744 A CN117687744 A CN 117687744A
Authority
CN
China
Prior art keywords
transaction
conflict
confidence
state
core
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
CN202311539849.1A
Other languages
English (en)
Inventor
韩军
万力
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.)
Fudan University
Original Assignee
Fudan University
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 Fudan University filed Critical Fudan University
Priority to CN202311539849.1A priority Critical patent/CN117687744A/zh
Publication of CN117687744A publication Critical patent/CN117687744A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明属于片上多处理器技术领域,具体为硬件事务内存中对事务进行动态调度的方法。本发明主要对原有的内存子***进行增强,在私有缓存中引入本地调度模块,在共享缓存中引入全局调度模块,两者组成分层的事务动态调度***。本地调度模块主要负责部分事务的调度,以便让一部分冲突友好的事务能够迅速启动,具体包括本地事务冲突预测器模块和扩展的私有缓存控制器逻辑;全局调度模块负责剩余事务的调度,在综合全局冲突信息的基础上,仅允许概率较小与正在运行事务发生冲突的事务启动,具体包括全局事务冲突预测器模块和扩展的共享缓存控制器逻辑。本发明作为硬件事务内存的扩展,在对软件透明的情况下动态控制事务的启动,减少冲突的再次发生。

Description

一种硬件事务内存中对事务进行动态调度的方法
技术领域
本发明属于片上多处理器技术领域,具体涉及硬件事务内存中对事务进行动态调度的方法。
背景技术
随着多核处理器的兴起,多线程编程成为充分利用现代计算机硬件性能的关键。然而,多线程编程往往伴随着复杂的并发控制问题,如数据竞争和死锁,使得开发和调试多线程应用程序变得复杂和困难。传统的使用锁进行同步的机制,如互斥锁和信号量,用于控制多线程访问共享数据,但它们可能会成为多核性能的瓶颈,同时容易出现死锁和饥饿等问题。事务内存是一种并发编程范例,旨在提供更简单、更安全的并发控制,使得开发人员更容易编写并发程序,同时由于无锁化特性展现了更高的性能潜力。相较于软件实现的事务内存,硬件事务内存以增加一定的硬件复杂度为代价取得更高的性能,获得了广泛科研工作者和硬件厂商的青睐。尽管学术界对硬件事务内存的性能进行了长时间的全方面探索,硬件厂商最终还是采用了一种被称为尽最大努力的硬件事务内存(Best-EffortHardware Transactional Memory)实现,以折衷实现的复杂性和验证的难度。
如参考文献1,Intel实现了一种尽最大努力的硬件事务内存,通过核心(CPU)执行事务开始和提交指令来标识事务的开始和结束。事务的结束除了核心正常运行到事务提交指令将事务成功提交,还有可能是运行过程中遇到内存冲突等因素导致事务中途失败提前结束。核心(CPU)的私有缓存接收到CPU发过来的事务开始的请求进入到事务状态,后续该核心(CPU)发出的访存请求会被其私有缓存记录在读写集中。当私有缓存收到来自其他核心(CPU)的访存请求时,需要通过读写集进行冲突检测,冲突仲裁策略采用请求者始终获胜的策略,即如果检测到冲突,收到请求的事务直接失败,发出请求的事务正常运行。事务失败后需要清除私有缓存的读写集合,核心(CPU)回滚到事务开始时建立的检查点处。
实践中发现这种简洁的实现方式会极大可能导致事务之间互相终止对方,一段时间内没有事务能够顺利提交,是硬件事务内存性能表现不稳定的主要原因之一。
发明内容
为了减轻硬件事务内存中事务之间可能互相终止对方,导致性能下降和不稳定的问题,本发明提出一种对硬件事务内存中的事务进行动态调度的方法,在不修改原有的冲突管理策略下,有选择地暂停可能会造成再次冲突的事务,并在未来合适的时候唤醒它们。
本发明提出的对硬件事务内存中的事务进行动态调度的方法,作为一种扩展,可以实现在类似尽最大努力的硬件事务内存架构(参考文献1)之上;在此基础上,通过驻留在缓存中的硬件调度器来实现对软件透明的事务动态调度;具体地,本发明主要对原有的内存子***进行增强,在私有缓存中引入本地(局部)调度模块,并在共享缓存中引入全局调度模块,两者组成本发明的分层的动态调度***。所述本地(局部)调度模块主要负责部分事务的调度,以便让一部分冲突友好的事务能够迅速启动;具体包括本地事务冲突预测器模块和扩展的私有缓存控制器逻辑。全局调度模块则主要负责剩余事务的调度,在综合全局冲突信息的基础上,仅允许概率较小与正在运行事务发生冲突的事务启动;具体包括全局事务冲突预测器模块和扩展的共享缓存控制器逻辑。
本发明提出的驻留在私有缓存的本地(局部)调度模块,其包括:本地事务冲突预测器模块和扩展的私有缓存控制器逻辑;其中:
所述本地事务冲突预测器模块,根据在当前核心历史上运行事务的提交情况,给出当前事务是否会与其他正在运行的事务产生冲突的初步预测。为了尽可能小的开销和尽可能快的响应速度,本发明仅采用两比特来存储当前的冲突状态。只需要简单地对这两比特的冲突状态译码就可以得到冲突预测的结果。具体为采用00编码初始化状态,表示低置信度无冲突;01编码高置信度无冲突;10编码低置信度有冲突;11编码高置信度有冲突。状态机的跳转逻辑如下:在低置信度无冲突状态下如果接收到事务提交的事件,则下一个周期跳转到高置信度无冲突状态,如果接收到事务终止的事件,则下一个周期跳转到低置信度有冲突状态;在高置信度无冲突状态下,如果接收到事务提交的事件,则保持状态不变,如果接收到事务终止的事件,则下一个周期跳转到低置信度无冲突状态;在低置信度有冲突状态下,如果接收到事务提交的事件,则下一个周期跳转到低置信度无冲突状态,如果接收到事务终止的事件,则下一个周期跳转到高置信度有冲突状态;在高置信度有冲突状态下,如果接收到事务提交的事件,则下一个周期跳转到低置信度无冲突的状态,如果接收到事务终止的事件,则状态保持不变。当冲突状态处于低置信度无冲突或者高置信度无冲突状态时被称为冲突友好的状态,在这个状态下启动的事务被认为是冲突友好的事务,可以快速启动。
所述扩展的私有缓存控制器逻辑,主要扩展在对CPU发过来的事务开始和事务提交的访存请求的处理。当缓存控制器收到的不是事务相关的请求时,按照原有的逻辑进行处理即可。但是当缓存控制器收到事务开始的请求时,需要根据上述本地事务冲突预测器模块的结果做出不同的动作。具体来说如果本地事务冲突预测器的结果是无冲突,处理流程跟之前一致,设置缓存为事务模式,唯一不同的是需要向下一级共享缓存发送事务开始的消息,用于更新全局调度器的相关表项。如果本地事务冲突预测器的结果是有冲突,就类似普通请求在缓存缺失,需要把请求发送给下一级缓存,等待下一级缓存响应的结果。在这里需要向下一级缓存发送获取开始事务权限的请求,如果接收到下一级缓存的响应是同意授权,则设置缓存为事务模式后,按照原有的逻辑给CPU响应,至此完成了事务开始的请求的处理全过程;如果接收到下一级缓存的响应是拒绝授权,不修改缓存状态,即还是处于非事务状态,给CPU回一个表示事务开始的请求被拒绝的响应。CPU接收到事务开始请求被拒绝的响应,进入休眠状态等待唤醒。
本发明提出的驻留在共享缓存的全局调度模块,其主要包括:全局事务冲突预测器模块和扩展的共享缓存控制器逻辑;其中:
所述全局事务冲突预测器模块,根据当前各个核上运行的事务之间的冲突置信度,核心的事务状态以及配置的冲突置信度阈值,预测当前核心上事务的运行是否会跟正在运行的事务产生冲突。全局事务冲突预测器模块的输入为核心ID,输出为0,表示接受事务开始,输出为1,表示拒绝事务开始。全局事务冲突预测器需要维护一个拥有(N*(N-1))/2个表项的冲突置信度表,其中N表示***中的核心数。每个表项需要32比特,存储的是<i,j>核心对上的事务冲突置信度。此外还需要维护两个拥有N个表项的表,分别为核心事务状态表和核心等待状态表,前者每个表项只需要一个比特,存储的是当前核心是否正在运行事务(1表示正在执行事务);后者每个表项也只需要一个比特,存储当前核心是否被拒绝执行事务,处于等待的状态(1表示处于等待状态)。还有一个可配置的参数表,一共有五个表项,分别是冲突置信度阈值,历史占比系数,冲突制造者系数,冲突见证者系数和提交见证者系数。具体的逻辑为,假设输入的核心ID为x,而***中剩余的核心ID为1,2,3,4。首先从冲突置信度表中选出<x,1>,<x,2>,<x,3>,<x,4>对应的表项,同时从事务状态表中选出1,2,3,4对应的表项,对两者一一对应的元素进行与操作得到对应的四个结果(冲突置信度表中<x,1>表项的值为a,如果核心1处于非事务状态,符号位扩展后两者相与后的结果将是零,反之两者相与的结果为冲突置信度a)。将相与后的四个结果依次与置信度阈值进行比较(如果大于冲突置信度阈值则输出1,反之输出0),比较后的四个结果进行或操作得到最终的输出(只要有一个正在运行的事务,且其与请求的事务之间的冲突置信度大于冲突置信度阈值,输出就会为1)。
进一步地,全局事务冲突预测器的表项更新流程如下:
(1)当收到申请事务开始的请求:如果全局事务冲突预测器给出的结果是1,即拒绝事务开始,不用更新事务状态表,只需要给上级缓存发送一个指示事务需要暂停开始的响应;如果全局调度器给出的结果是0,即接受事务开始,更新事务状态表的对应表项为1,同时给上级缓存发送一个指示事务可以开始的响应;
(2)当收到告知事务开始的请求:更新事务状态表的对应表项为1;
(3)冲突置信度更新的公式为:
I(n)xy=AI(n-1)xy+(1-A)TT,
其中I(n)xy表示核心x和核心y之间更新后的冲突置信度,而I(n-1)xy表示核心x和核心y之间更新之前的冲突置信度;其中A是一个大于等于0,小于等于1的系数,表示冲突置信度受历史的影响程度,如果越接近于1,那么受历史信息影响占比更大,冲突置信度的变化更加平滑;如果越接近于0,那么受当前事件影响占比更大,冲突置信度的变化更加崎岖;TT表示特定事件的激励;本发明一共归纳了三种与冲突预测有较大关系的事件:当一个核心上的事务提交时,其他核心也在运行事务,这时TT的数值为可配置参数表中的提交见证者系数;当一个核心上的事务终止且终止原因是发生了访存冲突,且该核心正好是造成冲突的核心,这时TT的数值为可配置参数表中的冲突制造者系数;当一个核心上的事务终止且终止原因是发生了访存冲突,且该核心正在运行事务但不是造成冲突的核心,这时TT的数值为可配置参数中的冲突见证者系数;
(4)当收到告知事务结束的请求且是成功提交:更新事务状态表的对应表项为0;根据当前事务状态表,对那些正在运行事务的核心采取TT=提交见证者系数,进行冲突置信度的更新;
(5)当收到告知事务结束的请求且是失败终止:更新事务状态表的对应表项为0;对造成冲突的核心采取TT=冲突制造者系数,进行冲突置信度的更新;对剩余的且事务状态表显示正在运行事务的核心采取TT=冲突见证者系数,进行冲突置信度的更新。
所述扩展的共享缓存控制器逻辑,主要扩展在跟事务有关请求的处理上,其余请求的处理逻辑保持不变。当收到申请事务开始的请求时,需要询问全局事务冲突预测器的结果。如果预测结果是有冲突,则以拒绝事务的开始作为响应,保持事务状态表不变,将事务等待表中对应表项置为1;如果预测结果是没有冲突,则以接受事务开始作为响应,更新事务状态表对应表项为1。当收到告知事务开始的请求时,更新事务状态表对应表项为1。当收到告知事务结束的请求时,需要按上述描述更新对应的冲突置信度表和事务状态表,同时尝试唤醒被拒绝开始的核心。
进一步地,所述机制对事务动态调度的流程如下:
(1)位于私有缓存的第一级调度模块收到CPU发送过来的事务开始的请求,局部事务冲突预测器开始工作;如果预测结果为无冲突,则事务正常启动,同时通知下一级共享缓存事务的开始,用于更新第二级调度模块的相关表项;如果预测器结果为有冲突,则需要向下一级共享缓存申请事务开始的权限;
(2)位于共享缓存的第二级调度模块收到申请事务开始权限的请求时,全局事务冲突预测器开始工作;如果预测结果为无冲突,则返回一个接受事务开始的响应,同时记录请求的核心处于事务状态;如果预测结果为有冲突,返回一个拒绝事务开始的响应,同时记录请求的核心处于等待状态;当私有缓存收到下级缓存的响应后,根据响应的结果返回对应的响应给CPU;
(3)位于共享缓存的第二级调度模块,如果收到通知事务开始的请求,更新事务状态表对应表项为非事务状态;如果收到通知事务结束的请求时,更新事务状态表对应表项为非事务状态,并调用全局冲突预测器,预测所有正在等待的核心是否还会产生冲突,唤醒所有不再与正在运行的事务产生冲突的核心;
(4)为了避免在高冲突的应用中有些等待的核心出现饥饿,在第二级调度模块中对每个等待的核心设置一个计数器;当计数器归零时等待的核心还没有被唤醒,则强制唤醒该等待的核心。
与现有技术相比,本发明具有如下主要特点和优势:
(1)相较于现有的尽最大努力的硬件事务内存,使用本发明提出的动态调度方法进行扩展,能够显著减少冲突再次发生的可能性;在原有***中,事务互相终止的场景相当常见,而本发明动态调度方法在这种常见场景下发挥关键作用,极大提高***性能的稳定性;
(2)本发明提出的事务动态调度方法采用简单而高效的硬件实现,极大地降低事务调度的性能开销;同时,本发明在软件层面完全透明,无需修改原有的软件框架,从而减轻部署的负担;此外,作为一个扩展,本发明通过可配置的参数提供更加灵活的事务调度选项。
附图说明
图1为硬件事务内存中事务动态调度方法的整体架构图。
图2为本地事务冲突预测器的架构示意图。
图3为扩展的私有缓存控制器的处理流程图。
图4为全局事务冲突预测器的架构示意图。
图5为扩展的共享缓存控制器的处理流程图。
具体实施方式
本发明的硬件事务内存中事务动态调度方法的整体架构如图1所示。为了方便描述,图中仅仅绘制了两个核心,即CPU#0和CPU#1,每个核心有一个私有的缓存,私有缓存搭载有本地事务冲突预测器;此外每个私有缓存通过一个互联网络连接到共享的下一级缓存中,即图中的L2缓存。共享缓存L2采用目录结构的缓存一致性协议,其上搭载有全局事务冲突预测器。
首先,如图1所示,按照原有的逻辑,当核心执行标识事务开始的指令时,该指令带有访存属性,会向缓存侧发送开始事务的请求。首先接收到请求的是第一级的私有缓存,即图中的L1缓存,L1的缓存控制器会向本地事务冲突预测器发起请求。本地事务冲突预测器本质上是一个两比特的状态机,具体状态机的状态转换逻辑如图2所示。如果当前冲突状态为低置信度无冲突或者高置信度无冲突,则输出为0表示没有冲突;如果当前冲突状态为低置信度有冲突或者高置信度有冲突,则输出为1表示有冲突。
图3展示了在加入事务动态调度扩展支持后的私有缓存控制器的处理逻辑,当本地事务冲突预测器的预测结果为无冲突时,处理流程同之前的一致,将缓存状态设置为事务状态并给CPU回一个事务正常开始的响应,唯一不同的是需要发送一种特殊的消息给下一级缓存,用于通知下一级缓存该核心进入了事务状态;当本地事务冲突预测器的预测结果为有冲突时,需要向下一级共享缓存发送获取事务开始权限的请求,收到下一级的响应时才能确认是否真的还存在冲突。此过程类似普通的访存请求在缓存缺失,需要向下一级缓存发送请求,等待下一级的响应后才能接着处理本次请求。当收到来自下一级缓存的请求事务开始权限的响应时,若响应结果为接受事务开始,则处理流程与本地冲突预测器给出无冲突结果的处理流程相同;若响应结果为拒绝事务开始,则保持缓存状态为非事务状态,同时向CPU发送一个事务开始失败的响应。
图4为共享缓存中全局冲突预测器架构的示意图,其中有四张主要的表格,分别是冲突置信度表,记录了核心之间事务的冲突概率;核心事务状态表记录了核心是否正在运行事务;核心等待状态表记录了核心是否正在等待唤醒;可配置参数表有冲突置信度,历史占比系数,冲突制造者系数,冲突见证者系数还有提交见证者系数,用于更新冲突置信度表和给出冲突预测的结果。其中核心的冲突置信度初始值设置为0,核心的事务状态表和等待状态表初始化都为0,分别表示没有核心正在进行事务和没有核心正在等待唤醒。当图中共享的L2缓存收到来自L1缓存#0的事务开始请求时,从核心冲突置信度表中找到核心0与***中剩余核心的冲突置信度,从核心事务状态表找到***中剩余核心的事务状态,将这两组数据两两进行与操作。与操作后的结果分别跟可配置的冲突置信度阈值进行大小比较,最后将比较的结果或起来就是预测的最终结果。如果所有正在运行事务的核心与请求开始事务的核心的冲突置信度都低于或者等于冲突置信度阈值,说明该核心可以运行事务,大概率不会造成冲突;反之如果至少有一个正在运行事务的核心与请求开始事务的核心的冲突置信度高于冲突置信度阈值,说明该核心不可以运行事务,因为大概率会与正在运行的事务发生冲突。
图5为在加入事务动态调度扩展支持后的共享缓存控制器的处理逻辑。如果共享缓存收到事务开始的请求,全局冲突预测器开始工作并给出冲突预测的结果。L2缓存需要根据该结果给上一级缓存发送对应的响应。某个时候L2缓存收到了L1缓存#0的事务开始请求,如果预测的结果为没有冲突,则修改图4中事务状态表core0对应的表项为1,同时回一个接受事务开始的响应给L1缓存#0;如果预测的结果为有冲突,则不需要修改事务状态表,直接回一个拒绝事务开始的响应给L1缓存#0,并修改图4中等待状态表core0对应的表项为1。
假设L1缓存#0收到来自L2缓存接受事务开始的响应,某个时候CPU#1发起了开始事务的请求,L1缓存#1的本地事务冲突预测器预测没有冲突,向CPU#1回一个事务正常启动的响应的同时向下一级缓存发送事务开始的通知。当共享的L2缓存收到事务开始的通知,把事务状态表core1对应的表项为1。一段时间后如果L1缓存#0收到了来自L1缓存#1的冲突请求,则按照请求者获胜的冲突仲裁策略,CPU#0上的事务需要终止掉自己,并把事务原始的数据作为正常的响应给到CPU#1。当CPU#0向内存子***发送终止事务的请求,L1缓存#0向本地事务冲突预测器发出事务终止的事件,冲突状态从低置信度无冲突跳转为低置信度有冲突,同时向下一级缓存发送事务结束的请求,并在消息中携带冲突制造者CPU#1的ID。当共享的L2缓存收到CPU#0事务失败的通知后,修改图4中核心事务状态表core0对应的表项为0。同时采取TT=冲突制造者系数对冲突置信度表格中<core0,core1>表项进行更新。如果此时core2也处在事务中,则采取TT=冲突见证者系数对冲突置信度表格中<core0,core2>表项进行更新。一段退避时间后CPU#0重新启动事务,这时L1缓存#0的本地冲突预测器的冲突状态为低置信度有冲突,输出结果为1表示有冲突,则需要向下一级共享缓存发送请求事务开始的请求。当L2共享缓存收到来自L1缓存#0的事务开始请求时,全局冲突预测器开始工作。假设预测结果为1即表示有冲突,则L2缓存会给L1缓存#0回复一个拒绝事务开始的响应,同时在核心等待状态表中记录core0是等待状态。一段时间后CPU#1事务执行完成,开始提交事务,发送请求给L1缓存#1。L1缓存接收到事务提交的请求,向本地冲突预测器发送提交事件,下一个周期冲突状态从低置信度无冲突状态变成高置信度无冲突状态。同时向下一级缓存通知事务结束,L2共享缓存收到事务结束的通知后,把核心事务状态表中core1对应的表项设置为0。由于此时core0不在事务中,不需要更新<core1,core0>的冲突置信度,如果core2在事务中,那么采用TT=提交见证者系数对冲突置信度表格中的<core1,core2>进行更新。同时还需要查看核心等待状态表中是否有等待状态的核心,在本例中由于core0处于等待状态,而core1已经执行完成当前没有正在执行的核心,所以可以唤醒core0。为了避免核心饥饿的问题,在全局冲突预测器中为每个核心绑定一个计数器,保证一定时间后如果等待的核心还没有被唤醒,则强制唤醒这些核心。
参考文献
[1]Rajwar,Ravi,and Martin Dixon.”Intel transactional synchronizationextensions.”In Intel Developer Forum San Francisco,vol.2012。

Claims (3)

1.一种硬件事务内存中对事务进行动态调度的方法,其特征在于,通过驻留在缓存中的硬件调度器来实现对软件透明的事务动态调度;具体地,主要对原有的内存子***进行增强,在私有缓存中引入本地调度模块,并在共享缓存中引入全局调度模块,两者组成本发明的分层的动态调度***;所述本地调度模块主要负责部分事务的调度,以便让一部分冲突友好的事务能够迅速启动,具体包括本地事务冲突预测器模块和扩展的私有缓存控制器逻辑;所述全局调度模块主要负责剩余事务的调度,在综合全局冲突信息的基础上,仅允许概率较小与正在运行事务发生冲突的事务启动,具体包括全局事务冲突预测器模块和扩展的共享缓存控制器逻辑;其中:
所述本地事务冲突预测器模块,根据在当前核心历史上运行事务的提交情况,给出当前事务是否会与其他正在运行的事务产生冲突的初步预测;其中,采用两比特来存储当前的冲突状态;对这两比特的冲突状态译码即得到冲突预测的结果;具体地,采用00编码初始化状态,表示低置信度无冲突;01编码高置信度无冲突;10编码低置信度有冲突;11编码高置信度有冲突;状态机的跳转逻辑如下:在低置信度无冲突状态下如果接收到事务提交的事件,则下一个周期跳转到高置信度无冲突状态,如果接收到事务终止的事件,则下一个周期跳转到低置信度有冲突状态;在高置信度无冲突状态下,如果接收到事务提交的事件,则保持状态不变,如果接收到事务终止的事件,则下一个周期跳转到低置信度无冲突状态;在低置信度有冲突状态下,如果接收到事务提交的事件,则下一个周期跳转到低置信度无冲突状态,如果接收到事务终止的事件,则下一个周期跳转到高置信度有冲突状态;在高置信度有冲突状态下,如果接收到事务提交的事件,则下一个周期跳转到低置信度无冲突的状态,如果接收到事务终止的事件,则状态保持不变;当冲突状态处于低置信度无冲突或者高置信度无冲突状态时被称为冲突友好的状态,在这个状态下启动的事务被认为是冲突友好的事务,可以快速启动;
所述扩展的私有缓存控制器逻辑,主要扩展在对CPU发过来的事务开始和事务提交的访存请求的处理方面;当缓存控制器收到的不是事务相关的请求时,按照原有的逻辑进行处理;当缓存控制器收到事务开始的请求时,需要根据上述本地事务冲突预测器模块的结果做出不同的动作;具体地,如果本地事务冲突预测器的结果是无冲突,处理流程跟之前一致,设置缓存为事务模式,唯一不同的是需要向下一级共享缓存发送事务开始的消息,用于更新全局调度器的相关表项;如果本地事务冲突预测器的结果是有冲突,就类似普通请求在缓存缺失,需要把请求发送给下一级缓存,等待下一级缓存响应的结果;在这里需要向下一级缓存发送获取开始事务权限的请求,如果接收到下一级缓存的响应是同意授权,则设置缓存为事务模式后,按照原有的逻辑给CPU响应,至此完成事务开始的请求的处理全过程;如果接收到下一级缓存的响应是拒绝授权,不修改缓存状态,即还是处于非事务状态,给CPU回一个表示事务开始的请求被拒绝的响应;CPU接收到事务开始请求被拒绝的响应,进入休眠状态等待唤醒;
所述全局事务冲突预测器模块,根据当前各个核上运行的事务之间的冲突置信度,核心的事务状态以及配置的冲突置信度阈值,预测当前核心上事务的运行是否会跟正在运行的事务产生冲突;全局事务冲突预测器模块的输入为核心ID,输出为0,表示接受事务开始,输出为1,表示拒绝事务开始;全局事务冲突预测器维护一个拥有(N*(N-1))/2个表项的冲突置信度表,其中N表示***中的核心数;每个表项需要32比特,存储的是<i,j>核心对上的事务冲突置信度;此外还维护两个拥有N个表项的表,分别为核心事务状态表和核心等待状态表,前者每个表项只需要一个比特,存储的是当前核心是否正在运行事务(1表示正在执行事务);后者每个表项也只需要一个比特,存储当前核心是否被拒绝执行事务,处于等待的状态(1表示处于等待状态);还有一个可配置的参数表,一共有五个表项,分别是冲突置信度阈值、历史占比系数、冲突制造者系数、冲突见证者系数和提交见证者系数;具体的逻辑为,假设输入的核心ID为x,而***中剩余的核心ID为1,2,3,4;首先从冲突置信度表中选出<x,1>,<x,2>,<x,3>,<x,4>对应的表项,同时从事务状态表中选出1,2,3,4对应的表项,对两者一一对应的元素进行与操作得到对应的四个结果:冲突置信度表中<x,1>表项的值为a,如果核心1处于非事务状态,符号位扩展后两者相与后的结果将是零,反之两者相与的结果为冲突置信度a;将相与后的四个结果依次与置信度阈值进行比较,如果大于冲突置信度阈值则输出1,反之输出0,比较后的四个结果进行或操作得到最终的输出;
所述扩展的共享缓存控制器逻辑,主要扩展在跟事务有关请求的处理方面,其余请求的处理逻辑保持不变;当收到申请事务开始的请求时,需要询问全局事务冲突预测器的结果;如果预测结果是有冲突,则以拒绝事务的开始作为响应,保持事务状态表不变,将事务等待表中对应表项置为1;如果预测结果是没有冲突,则以接受事务开始作为响应,更新事务状态表对应表项为1;当收到告知事务开始的请求时,更新事务状态表对应表项为1;当收到告知事务结束的请求时,按上述描述更新对应的冲突置信度表和事务状态表,同时尝试唤醒被拒绝开始的核心。
2.根据权利要求1所述的硬件事务内存中对事务进行动态调度的方法,其特征在于,所述全局事务冲突预测器中,表项更新流程如下:
(1)当收到申请事务开始的请求:如果全局事务冲突预测器给出的结果是1,即拒绝事务开始,不用更新事务状态表,只需要给上级缓存发送一个指示事务需要暂停开始的响应;如果全局调度器给出的结果是0,即接受事务开始,更新事务状态表的对应表项为1,同时给上级缓存发送一个指示事务可以开始的响应;
(2)当收到告知事务开始的请求:更新事务状态表的对应表项为1;
(3)冲突置信度更新的公式为:
I(n)xy=AI(n-1)xy+(1-A)TT,
其中,I(n)xy表示核心x和核心y之间更新后的冲突置信度,I(n-1)xy表示核心x和核心y之间更新之前的冲突置信度;A是一个大于等于0,小于等于1的系数,表示冲突置信度受历史的影响程度,如果越接近于1,那么受历史信息影响占比更大,冲突置信度的变化更加平滑;如果越接近于0,那么受当前事件影响占比更大,冲突置信度的变化更加崎岖;TT表示特定事件的激励;一共有三种与冲突预测有较大关系的事件:当一个核心上的事务提交时,其他核心也在运行事务,这时TT的数值为可配置参数表中的提交见证者系数;当一个核心上的事务终止且终止原因是发生了访存冲突,且该核心正好是造成冲突的核心,这时TT的数值为可配置参数表中的冲突制造者系数;当一个核心上的事务终止且终止原因是发生了访存冲突,且该核心正在运行事务但不是造成冲突的核心,这时TT的数值为可配置参数中的冲突见证者系数;
(4)当收到告知事务结束的请求且是成功提交:更新事务状态表的对应表项为0;根据当前事务状态表,对那些正在运行事务的核心采取TT=提交见证者系数,进行冲突置信度的更新;
(5)当收到告知事务结束的请求且是失败终止:更新事务状态表的对应表项为0;对造成冲突的核心采取TT=冲突制造者系数,进行冲突置信度的更新;对剩余的且事务状态表显示正在运行事务的核心采取TT=冲突见证者系数,进行冲突置信度的更新。
3.根据权利要求1所述的硬件事务内存中对事务进行动态调度的方法,其特征在于,所述扩展的共享缓存控制器逻辑中,所述机制对事务动态调度的流程如下:
(1)位于私有缓存的第一级调度模块收到CPU发送过来的事务开始的请求,局部事务冲突预测器开始工作;如果预测结果为无冲突,则事务正常启动,同时通知下一级共享缓存事务的开始,用于更新第二级调度模块的相关表项;如果预测器结果为有冲突,则向下一级共享缓存申请事务开始的权限;
(2)位于共享缓存的第二级调度模块收到申请事务开始权限的请求时,全局事务冲突预测器开始工作;如果预测结果为无冲突,则返回一个接受事务开始的响应,同时记录请求的核心处于事务状态;如果预测结果为有冲突,则返回一个拒绝事务开始的响应,同时记录请求的核心处于等待状态;当私有缓存收到下级缓存的响应后,根据响应的结果返回对应的响应给CPU;
(3)位于共享缓存的第二级调度模块,如果收到通知事务开始的请求,更新事务状态表对应表项为非事务状态;如果收到通知事务结束的请求时,更新事务状态表对应表项为非事务状态,并调用全局冲突预测器,预测所有正在等待的核心是否还会产生冲突,唤醒所有不再与正在运行的事务产生冲突的核心;
(4)为了避免在高冲突的应用中有些等待的核心出现饥饿,在第二级调度模块中对每个等待的核心设置一个计数器;当计数器归零时等待的核心还没有被唤醒,则强制唤醒该等待的核心。
CN202311539849.1A 2023-11-19 2023-11-19 一种硬件事务内存中对事务进行动态调度的方法 Pending CN117687744A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311539849.1A CN117687744A (zh) 2023-11-19 2023-11-19 一种硬件事务内存中对事务进行动态调度的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311539849.1A CN117687744A (zh) 2023-11-19 2023-11-19 一种硬件事务内存中对事务进行动态调度的方法

Publications (1)

Publication Number Publication Date
CN117687744A true CN117687744A (zh) 2024-03-12

Family

ID=90127505

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311539849.1A Pending CN117687744A (zh) 2023-11-19 2023-11-19 一种硬件事务内存中对事务进行动态调度的方法

Country Status (1)

Country Link
CN (1) CN117687744A (zh)

Similar Documents

Publication Publication Date Title
US6226717B1 (en) System and method for exclusive access to shared storage
US9158597B2 (en) Controlling access to shared resource by issuing tickets to plurality of execution units
US8881153B2 (en) Speculative thread execution with hardware transactional memory
US7966459B2 (en) System and method for supporting phased transactional memory modes
US7861042B2 (en) Processor acquisition of ownership of access coordinator for shared resource
CN108572876B (zh) 一种读写锁的实现方法及装置
JPH06222936A (ja) 共用変数の値を更新する方法
WO2018018611A1 (zh) 一种任务处理方法以及网卡
CN110704112B (zh) 在区块链中并发执行交易的方法和装置
JPH07191944A (ja) 多重プロセッサによる多数の資源への命令におけるデッドロックを防止するためのシステムおよび方法
US11449241B2 (en) Customizable lock management for distributed resources
US9164793B2 (en) Prioritized lock requests to reduce blocking
WO2011096163A1 (ja) 情報処理システム、排他制御方法および排他制御用プログラム
Zhang et al. Scalable adaptive NUMA-aware lock
Singh et al. A non-database operations aware priority ceiling protocol for hard real-time database systems
US8219762B1 (en) Computer system and method for leasing memory location to allow predictable access to memory location
CN117687744A (zh) 一种硬件事务内存中对事务进行动态调度的方法
JP7346649B2 (ja) 同期制御システムおよび同期制御方法
US8918798B2 (en) Shared object lock under state machine control
Correia et al. AKARA: A flexible clustering protocol for demanding transactional workloads
US8250580B2 (en) Multi-core SOC synchronization component
CN114327828B (zh) 一种共享数据的无锁并发访问方法、装置、设备及介质
Haritsa et al. Real-time commit processing
CN117407182B (zh) 一种基于Poll指令的进程同步方法、***、设备及介质
CN114816678B (zh) 一种虚拟机调度的方法、***、设备和存储介质

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