多核系统资源延迟回收锁的实现方法及系统技术方案

技术编号:7611928 阅读:195 留言:0更新日期:2012-07-26 17:59
本发明专利技术公开了一种多核系统资源延迟回收锁的实现方法及系统,涉及数据共享技术领域,本发明专利技术通过设置由数据单元组成的环形链表,来标识CPU的状态,使得在垃圾回收期间,在垃圾回收的CPU进入静默状态时,能够使得其他CPU同时进行垃圾回收,解决了在资源突发大量集中回收,造成此类资源耗竭而影响业务正常运行的问题。

【技术实现步骤摘要】

本专利技术涉及数据共享
,特别涉及一种多核系统资源延迟回收锁的实现方法及系统
技术介绍
众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁 (rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来越大,而这种锁使用了原子操作指令,它需要原子地访问内存,也就说获得锁的开销与访存速度相关,因此它的开销相对于CPU速度而言就越来越大,并且这种锁机制的另一个问题在于其可扩展性,在多处理器系统上,可扩展性非常重要,否则根本无法发挥其性能。自旋锁和读写锁的锁着核增加的理论性能并不理想。正是在这种背景下,一个高性能的锁机制RCU被提出,具有很好的扩展性,但是这种锁机制的使用范围比较窄,它只适用于读多写少的情况,如网络路由表的查询更新、设备状态表的维护、数据结构的延迟释放等。Linux的RCU锁实现方法为RCU (Read-Copy Update)顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读数据者不需要获得任何锁就可以访问它,但写数据者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。因此RCU实际上是一种改进的读写锁(rwlock),读数据者几乎没有什么同步开销,它不需要锁,不使用原子指令,因此不会导致锁竞争,内存延迟以及流水线停滞。不需要锁也使得使用更容易,因为死锁问题就不需要考虑了。写数据者的同步开销比较大,它需要延迟数据结构的释放,复制被修改的数据结构,它也必须使用某种锁机制同步并行的其它写数据者的修改操作。读数据者必须提供一个信号给写数据者以便写数据者能够确定数据可以被安全地释放或修改的时机。有一个专门的垃圾收集器来探测读数据者的信号,一旦所有的读数据者都已经发送信号告知它们都不在使用被RCU保护的数据结构,垃圾收集器就调用回调函数完成最后的数据释放或修改操作。读数据者在访问被RCU保护的共享数据期间不能被阻塞,这是RCU机制得以实现的一个基本前提,也就说当读数据者在引用被RCU保护的共享数据期间,读数据者所在的 (PU不能发生上下文切换,自旋锁(spinlock)和读写锁(rwlock)都需要这样的前提。写数据者在访问被RCU保护的共享数据时不需要和读数据者竞争任何锁,只有在有多于一个写数据者的情况下需要获得某种锁以与其他写数据者同步。写数据者修改数据前首先拷贝一个被修改元素的副本,然后在副本上进行修改,修改完毕后它向垃圾回收器注册一个回调函数以便在适当的时机执行真正的修改操作。等待适当时机的这一时期称为宽限时期 (grace period),而CPU发生了上下文切换称为经历一个静默状态(quiescent state),宽限时期就是所有CPU都经历一次静默状态所需要的等待的时间。垃圾收集器就是在宽限时期之后调用写数据者注册的回调函数来完成真实的数据修改操作或数据释放操作的。现有技术的RCU的主要缺点为由于RCU在垃圾回收期间(下一个宽限时期内包括垃圾回收期间),无法让CPU进入静默状态,当需要回收的资源很多,会造成下一个宽限时期很长,在较长的宽限时间内,因为回收不及时造成对内存资源消耗很大,严重情况下资源耗竭而影响业务正常运行。另一个缺点是RCU为了记录和访问判断宽限时期是否结束, 采用的是自旋锁保护共享数据的方式来实现,对于RCU锁在对于垃圾回收及时性上有略微的性能损耗。
技术实现思路
(一 )要解决的技术问题本专利技术要解决的技术问题是如何在垃圾回收期间让CPU进入静默状态,以解决在资源突发大量集中回收,造成此类资源耗竭而影响业务正常运行的问题。( 二 )技术方案为解决上述技术问题,本专利技术提供了一种多核系统资源延迟回收锁的实现方法, 所述方法包括以下步骤SI :设置由η个数据单元所构成的环形链表,并将多核系统中的每个CPU分别对应数据单元中的一位数据;S2 :在当前CPU发生了上下文切换后,进入资源回收处理过程中,获取当前CPU进入宽限时期的次数,根据所述次数选择相应的当前数据单元,并将所述当前数据单元中与当前CPU对应的一位数据进行置位;S3:根据所述当前数据单元中的值判断当前宽限时期是否已经结束,若没有结束, 则执行步骤S4,否则执行步骤S5 ;S4:退出此次的资源回收处理过程,等待其它CPU发生上下文切换,再执行步骤 S2 ;S5 :选择环形链表中所述当前数据单元的下一个单元;S6 :将当前CPU记录的宽限时期的次数加I ;S7 :通过回调函数进行X个资源的资源回收,所述X为正整数;S8 :判断资源是否都已经回收完毕,若是,则执行步骤S4,否则执行步骤S9 ;S9 :将步骤S5中选择的下一个数据单元中与当前CPU对应的一位数据进行置位;SlO :根据步骤S5中选择的下一个数据单元中的值判断当前宽限时期是否已经结束,若是,则执行步骤S5,否则执行步骤S7。优选地,步骤SI中,η取值为大于I的奇数。优选地,步骤S2中,根据所述次数选择相应的当前数据单元是通过以下公式进行选择C = v mod η其中,C为环形链表中数据单元的序号,V为所述次数,mod为取模运算,η为环形链表中数据单元的个数。本专利技术还公开了一种多核系统资源延迟回收锁的实现系统,所述系统包括链表构建模块,用于设置由η个数据单元所构成的环形链表,并将多核系统中的每个CPU分别对应数据单元中的一位数据;置位模块,用于在当前CPU发生了上下文切换后,进入资源回收处理过程中,获取当前CPU进入宽限时期的次数,根据所述次数选择相应的当前数据单元,并将所述当前数据单元中与当前CPU对应的一位数据进行置位;宽限结束判断模块,用于根据所述当前数据单元中的值判断当前宽限时期是否已经结束,若没有结束,则执行退出等待模块,否则执行选择模块;退出等待模块,用于退出此次的资源回收处理过程,等待其它CPU发生上下文切换,再执行置位模块;选择模块,用于选择环形链表中所述当前数据单元的下一个单元;次数自加模块,用于将当前CPU记录的宽限时期的次数加I ;资源回收模块,用于通过回调函数进行X个资源的资源回收,所述X为正整数;回收完毕判断模块,用于判断资源是否都已经回收完毕,若是,则执行退出等待模块,否则执行再置位模块;再置位模块,用于将选择模块中选择的下一个数据单元中与当前CPU对应的一位数据进行置位;宽限结束再判断模块,用于根据选择模块中选择的下一个数据单元中的值判断当前宽限时期是否已经结束,若是,则执行选择模块,否则执行资源回收模块。优选地,链表构建模块中,η取值为大于I的奇数。优选地,置位模块中,根据所述次数选择相应的当前数据单元是通过以下公式进行选择C = v mod η其中,C为环形链表中数据单元的序号,V为所述次数,mod为取模运算,η为环形链表中数据单元的个数。(三)有益效果本专利技术通过设置由数据单元组成的环形链表,来标识CPU的状态,使得在垃圾回收期间本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:陈天航王博
申请(专利权)人:汉柏科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术