因为只用一个全局锁在多处理器系统中会造成很严重的锁竞争问题,一种有效的途径是将锁竞争关系变为一种层次关系(如图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决定的。