RCU 原理( kernel 2.6 )

RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它 时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时 机就是所有引用该数据的CPU都退出对共享数据的操作。

因此RCU实际上是一种改进的rwlock,读者几乎没有什么同步开销,它不需要锁,不使用原子指令,而且在除alpha的所有架构上也不需要内存 栅(Memory Barrier),因此不会导致锁竞争,内存延迟以及流水线停滞。不需要锁也使得使用更容易,因为死锁问题就不需要考虑了。写者的同步开销比较大,它需要 延迟数据结构的释放,复制被修改的数据结构,它也必须使用某种锁机制同步并行的其它写者的修改操作。读者必须提供一个信号给写者以便写者能够确定数据可以 被安全地释放或修改的时机。有一个专门的垃圾收集器来探测读者的信号,一旦所有的读者都已经发送信号告知它们都不在使用被RCU保护的数据结构,垃圾收集 器就调用回调函数完成最后的数据释放或修改操作。 RCU与rwlock的不同之处是:它既允许多个读者同时访问被保护的数据,又允许多个读者和多个写者同时访问被保护的数据(注意:是否可以有多个写者并 行访问取决于写者之间使用的同步机制),读者没有任何同步开销,而写者的同步开销则取决于使用的写者间同步机制。但RCU不能替代rwlock,因为如果 写比较多时,对读者的性能提高不能弥补写者导致的损失。

读者在访问被RCU保护的共享数据期间不能被阻塞,这是RCU机制得以实现的一个基本前提,也就说当读者在引用被RCU保护的共享数据期间,读者所 在的CPU不能发生上下文切换,spinlock和rwlock都需要这样的前提。写者在访问被RCU保护的共享数据时不需要和读者竞争任何锁,只有在有 多于一个写者的情况下需要获得某种锁以与其他写者同步。写者修改数据前首先拷贝一个被修改元素的副本,然后在副本上进行修改,修改完毕后它向垃圾回收器注 册一个回调函数以便在适当的时机执行真正的修改操作。等待适当时机的这一时期称为grace period,而CPU发生了上下文切换称为经历一个quiescent state,grace period就是所有CPU都经历一次quiescent state所需要的等待的时间。垃圾收集器就是在grace period之后调用写者注册的回调函数来完成真正的数据修改或数据释放操作的。

 http://www.ibm.com/developerworks/cn/linux/l-rcu/  ----Linux 2.6内核中新的锁机制--RCU

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RCU stall的机制原理主要涉及到RCU的核心概念和实现方式。下面是RCU stall的机制原理的解释: RCU(Read-Copy-Update)是一种用于实现并发读写数据结构的机制。其核心思想是通过复制数据结构,并使用多版本并发控制来实现读操作的并发性,从而避免锁竞争。 RCU机制的主要原理如下: 1. 读操作:当一个线程进行读操作时,它可以自由地访问数据结构,而不需要获取锁或同步机制。这是因为RCU使用了多版本并发控制,每个版本都是一个瞬时快照。 2. 写操作:当一个线程进行写操作时,它会创建一个新的数据版本,并将更新后的数据写入新版本中。然后,它将原来的数据版本标记为废弃,并等待所有正在进行读操作的线程完成后,才会释放废弃版本的内存资源。 RCU stall的机制原理涉及到RCU机制中的一些问题和限制: 1. 长时间的更新操作:如果写操作非常耗时,那么正在进行读操作的线程需要等待更新操作完成,从而导致RCU stall。 2. 读写冲突:当一个线程正在进行读操作时,如果另一个线程正在进行写操作,读操作线程需要等待写操作完成才能继续进行读操作,也可能导致RCU stall。 3. 延迟回收:在RCU机制中,内存资源的释放是通过延迟回收来实现的。如果回收操作被延迟,可能会导致内存占用过高,进而影响系统性能。 总结来说,RCU stall的机制原理主要是由于长时间的更新操作、读写冲突和延迟回收等因素导致的。为了解决或减轻RCU stall问题,需要合理设计数据结构、控制更新频率、使用适当的同步机制以及增加系统资源等措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值