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

文档序号:37296980发布日期:2024-03-13 20:45阅读:10来源:国知局
一种硬件事务内存中对事务进行动态调度的方法

本发明属于片上多处理器,具体涉及硬件事务内存中对事务进行动态调度的方法。


背景技术:

1、随着多核处理器的兴起,多线程编程成为充分利用现代计算机硬件性能的关键。然而,多线程编程往往伴随着复杂的并发控制问题,如数据竞争和死锁,使得开发和调试多线程应用程序变得复杂和困难。传统的使用锁进行同步的机制,如互斥锁和信号量,用于控制多线程访问共享数据,但它们可能会成为多核性能的瓶颈,同时容易出现死锁和饥饿等问题。事务内存是一种并发编程范例,旨在提供更简单、更安全的并发控制,使得开发人员更容易编写并发程序,同时由于无锁化特性展现了更高的性能潜力。相较于软件实现的事务内存,硬件事务内存以增加一定的硬件复杂度为代价取得更高的性能,获得了广泛科研工作者和硬件厂商的青睐。尽管学术界对硬件事务内存的性能进行了长时间的全方面探索,硬件厂商最终还是采用了一种被称为尽最大努力的硬件事务内存(best-efforthardware transactional memory)实现,以折衷实现的复杂性和验证的难度。

2、如参考文献1,intel实现了一种尽最大努力的硬件事务内存,通过核心(cpu)执行事务开始和提交指令来标识事务的开始和结束。事务的结束除了核心正常运行到事务提交指令将事务成功提交,还有可能是运行过程中遇到内存冲突等因素导致事务中途失败提前结束。核心(cpu)的私有缓存接收到cpu发过来的事务开始的请求进入到事务状态,后续该核心(cpu)发出的访存请求会被其私有缓存记录在读写集中。当私有缓存收到来自其他核心(cpu)的访存请求时,需要通过读写集进行冲突检测,冲突仲裁策略采用请求者始终获胜的策略,即如果检测到冲突,收到请求的事务直接失败,发出请求的事务正常运行。事务失败后需要清除私有缓存的读写集合,核心(cpu)回滚到事务开始时建立的检查点处。

3、实践中发现这种简洁的实现方式会极大可能导致事务之间互相终止对方,一段时间内没有事务能够顺利提交,是硬件事务内存性能表现不稳定的主要原因之一。


技术实现思路

1、为了减轻硬件事务内存中事务之间可能互相终止对方,导致性能下降和不稳定的问题,本发明提出一种对硬件事务内存中的事务进行动态调度的方法,在不修改原有的冲突管理策略下,有选择地暂停可能会造成再次冲突的事务,并在未来合适的时候唤醒它们。

2、本发明提出的对硬件事务内存中的事务进行动态调度的方法,作为一种扩展,可以实现在类似尽最大努力的硬件事务内存架构(参考文献1)之上;在此基础上,通过驻留在缓存中的硬件调度器来实现对软件透明的事务动态调度;具体地,本发明主要对原有的内存子系统进行增强,在私有缓存中引入本地(局部)调度模块,并在共享缓存中引入全局调度模块,两者组成本发明的分层的动态调度系统。所述本地(局部)调度模块主要负责部分事务的调度,以便让一部分冲突友好的事务能够迅速启动;具体包括本地事务冲突预测器模块和扩展的私有缓存控制器逻辑。全局调度模块则主要负责剩余事务的调度,在综合全局冲突信息的基础上,仅允许概率较小与正在运行事务发生冲突的事务启动;具体包括全局事务冲突预测器模块和扩展的共享缓存控制器逻辑。

3、本发明提出的驻留在私有缓存的本地(局部)调度模块,其包括:本地事务冲突预测器模块和扩展的私有缓存控制器逻辑;其中:

4、所述本地事务冲突预测器模块,根据在当前核心历史上运行事务的提交情况,给出当前事务是否会与其他正在运行的事务产生冲突的初步预测。为了尽可能小的开销和尽可能快的响应速度,本发明仅采用两比特来存储当前的冲突状态。只需要简单地对这两比特的冲突状态译码就可以得到冲突预测的结果。具体为采用00编码初始化状态,表示低置信度无冲突;01编码高置信度无冲突;10编码低置信度有冲突;11编码高置信度有冲突。状态机的跳转逻辑如下:在低置信度无冲突状态下如果接收到事务提交的事件,则下一个周期跳转到高置信度无冲突状态,如果接收到事务终止的事件,则下一个周期跳转到低置信度有冲突状态;在高置信度无冲突状态下,如果接收到事务提交的事件,则保持状态不变,如果接收到事务终止的事件,则下一个周期跳转到低置信度无冲突状态;在低置信度有冲突状态下,如果接收到事务提交的事件,则下一个周期跳转到低置信度无冲突状态,如果接收到事务终止的事件,则下一个周期跳转到高置信度有冲突状态;在高置信度有冲突状态下,如果接收到事务提交的事件,则下一个周期跳转到低置信度无冲突的状态,如果接收到事务终止的事件,则状态保持不变。当冲突状态处于低置信度无冲突或者高置信度无冲突状态时被称为冲突友好的状态,在这个状态下启动的事务被认为是冲突友好的事务,可以快速启动。

5、所述扩展的私有缓存控制器逻辑,主要扩展在对cpu发过来的事务开始和事务提交的访存请求的处理。当缓存控制器收到的不是事务相关的请求时,按照原有的逻辑进行处理即可。但是当缓存控制器收到事务开始的请求时,需要根据上述本地事务冲突预测器模块的结果做出不同的动作。具体来说如果本地事务冲突预测器的结果是无冲突,处理流程跟之前一致,设置缓存为事务模式,唯一不同的是需要向下一级共享缓存发送事务开始的消息,用于更新全局调度器的相关表项。如果本地事务冲突预测器的结果是有冲突,就类似普通请求在缓存缺失,需要把请求发送给下一级缓存,等待下一级缓存响应的结果。在这里需要向下一级缓存发送获取开始事务权限的请求,如果接收到下一级缓存的响应是同意授权,则设置缓存为事务模式后,按照原有的逻辑给cpu响应,至此完成了事务开始的请求的处理全过程;如果接收到下一级缓存的响应是拒绝授权,不修改缓存状态,即还是处于非事务状态,给cpu回一个表示事务开始的请求被拒绝的响应。cpu接收到事务开始请求被拒绝的响应,进入休眠状态等待唤醒。

6、本发明提出的驻留在共享缓存的全局调度模块,其主要包括:全局事务冲突预测器模块和扩展的共享缓存控制器逻辑;其中:

7、所述全局事务冲突预测器模块,根据当前各个核上运行的事务之间的冲突置信度,核心的事务状态以及配置的冲突置信度阈值,预测当前核心上事务的运行是否会跟正在运行的事务产生冲突。全局事务冲突预测器模块的输入为核心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)。

8、进一步地,全局事务冲突预测器的表项更新流程如下:

9、(1)当收到申请事务开始的请求:如果全局事务冲突预测器给出的结果是1,即拒绝事务开始,不用更新事务状态表,只需要给上级缓存发送一个指示事务需要暂停开始的响应;如果全局调度器给出的结果是0,即接受事务开始,更新事务状态表的对应表项为1,同时给上级缓存发送一个指示事务可以开始的响应;

10、(2)当收到告知事务开始的请求:更新事务状态表的对应表项为1;

11、(3)冲突置信度更新的公式为:

12、i(n)xy=ai(n-1)xy+(1-a)tt,

13、其中i(n)xy表示核心x和核心y之间更新后的冲突置信度,而i(n-1)xy表示核心x和核心y之间更新之前的冲突置信度;其中a是一个大于等于0,小于等于1的系数,表示冲突置信度受历史的影响程度,如果越接近于1,那么受历史信息影响占比更大,冲突置信度的变化更加平滑;如果越接近于0,那么受当前事件影响占比更大,冲突置信度的变化更加崎岖;tt表示特定事件的激励;本发明一共归纳了三种与冲突预测有较大关系的事件:当一个核心上的事务提交时,其他核心也在运行事务,这时tt的数值为可配置参数表中的提交见证者系数;当一个核心上的事务终止且终止原因是发生了访存冲突,且该核心正好是造成冲突的核心,这时tt的数值为可配置参数表中的冲突制造者系数;当一个核心上的事务终止且终止原因是发生了访存冲突,且该核心正在运行事务但不是造成冲突的核心,这时tt的数值为可配置参数中的冲突见证者系数;

14、(4)当收到告知事务结束的请求且是成功提交:更新事务状态表的对应表项为0;根据当前事务状态表,对那些正在运行事务的核心采取tt=提交见证者系数,进行冲突置信度的更新;

15、(5)当收到告知事务结束的请求且是失败终止:更新事务状态表的对应表项为0;对造成冲突的核心采取tt=冲突制造者系数,进行冲突置信度的更新;对剩余的且事务状态表显示正在运行事务的核心采取tt=冲突见证者系数,进行冲突置信度的更新。

16、所述扩展的共享缓存控制器逻辑,主要扩展在跟事务有关请求的处理上,其余请求的处理逻辑保持不变。当收到申请事务开始的请求时,需要询问全局事务冲突预测器的结果。如果预测结果是有冲突,则以拒绝事务的开始作为响应,保持事务状态表不变,将事务等待表中对应表项置为1;如果预测结果是没有冲突,则以接受事务开始作为响应,更新事务状态表对应表项为1。当收到告知事务开始的请求时,更新事务状态表对应表项为1。当收到告知事务结束的请求时,需要按上述描述更新对应的冲突置信度表和事务状态表,同时尝试唤醒被拒绝开始的核心。

17、进一步地,所述机制对事务动态调度的流程如下:

18、(1)位于私有缓存的第一级调度模块收到cpu发送过来的事务开始的请求,局部事务冲突预测器开始工作;如果预测结果为无冲突,则事务正常启动,同时通知下一级共享缓存事务的开始,用于更新第二级调度模块的相关表项;如果预测器结果为有冲突,则需要向下一级共享缓存申请事务开始的权限;

19、(2)位于共享缓存的第二级调度模块收到申请事务开始权限的请求时,全局事务冲突预测器开始工作;如果预测结果为无冲突,则返回一个接受事务开始的响应,同时记录请求的核心处于事务状态;如果预测结果为有冲突,返回一个拒绝事务开始的响应,同时记录请求的核心处于等待状态;当私有缓存收到下级缓存的响应后,根据响应的结果返回对应的响应给cpu;

20、(3)位于共享缓存的第二级调度模块,如果收到通知事务开始的请求,更新事务状态表对应表项为非事务状态;如果收到通知事务结束的请求时,更新事务状态表对应表项为非事务状态,并调用全局冲突预测器,预测所有正在等待的核心是否还会产生冲突,唤醒所有不再与正在运行的事务产生冲突的核心;

21、(4)为了避免在高冲突的应用中有些等待的核心出现饥饿,在第二级调度模块中对每个等待的核心设置一个计数器;当计数器归零时等待的核心还没有被唤醒,则强制唤醒该等待的核心。

22、与现有技术相比,本发明具有如下主要特点和优势:

23、(1)相较于现有的尽最大努力的硬件事务内存,使用本发明提出的动态调度方法进行扩展,能够显著减少冲突再次发生的可能性;在原有系统中,事务互相终止的场景相当常见,而本发明动态调度方法在这种常见场景下发挥关键作用,极大提高系统性能的稳定性;

24、(2)本发明提出的事务动态调度方法采用简单而高效的硬件实现,极大地降低事务调度的性能开销;同时,本发明在软件层面完全透明,无需修改原有的软件框架,从而减轻部署的负担;此外,作为一个扩展,本发明通过可配置的参数提供更加灵活的事务调度选项。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1