Linux RCU队列(2)树形RCU队列实现

本文介绍了Linux中为解决多处理器系统锁竞争问题的树形RCU队列实现。通过层次化的锁结构,降低锁竞争,确保在grace period期间处理器进入QS状态。详细阐述了RCU队列的组织方式、grace period的发现过程,以及处理处理器休眠状态对RCU更新的影响,最后讨论了RCU状态转换的状态机机制和时间顺序图。
摘要由CSDN通过智能技术生成

因为只用一个全局锁在多处理器系统中会造成很严重的锁竞争问题,一种有效的途径是将锁竞争关系变为一种层次关系(如图1)。图中四个rcu_node结构体都有自己的锁,因此处理器0和处理器1之间将会先竞争底层的锁然后在竞争高层的锁,其他处理器也一样。在grace period期间,只有获取了底层的锁的处理器才有机会获取高层的锁,也就是说只有每对处理器中的最后一个才能够记录相应的grace period转入到QS(quiescentstate)。这样在高层锁的竞争只有一半,而底层锁的竞争只有1/3。


从图一可以看到,rcu是嵌入到rcu_state结构体中的,不过从图中只能看出这个结构体存在层次结构,rcu_node实际并不是以树形结构存储的,而是以队列形式存储(因为这是一个满树,所以可以以队列方式存储在rcu_state中)。每一个rcu_node包含一个本节点所能够保护的处理器范围,最底层的rcu_node为NULL表明无父亲节点。Rcu_node队列是以静态方式在编译时确定的,队列的大小是由NR_CPUS决定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值