我想在一个链表中使用rcu,这个链表在进程和软中断上下文都会访问。要求支持smp,多核 看了一些文档,对rcu能否如下操作: 1,写者: 对于进程上下文则使用 spin_lock_bh 对于软中断上下文使用 spin_lock 加入链表用 hlist_add_head_rcu, 受到rcu_assign_pointer 原子保护。 删除链表用 hlist_del_rcu,这个直接__hlist_del, 感觉和rcu没有关系呀?不懂 2,读者: 对于进程上下文则使用 r...
by wan3610425 - 内核源码 - 2014-06-05 08:59:09 阅读(1741) 回复(3)
本文详细地介绍了 Linux 2.6 内核中新的锁机制 rcu(Read-Copy Update) 的实现机制,使用要求与典型应用。 一、 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效 的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因 很简单,CPU的速度与访问内存的速度差距越来...
五、rcu 典型应用 下面部分将就 rcu 的几种典型应用情况详细讲解。 1.只有增加和删除的链表操作 在这种应用情况下,绝大部分是对链表的遍历,即读操作,而很少出现的写操作只有增加或删除链表项,并没有对链表项的修改操作,这种情况使用rcu非 常容易,从rwlock转换成rcu非常自然。路由表的维护就是这种情况的典型应用,对路由表的操作,绝大部分是路由表查询,而对路由表的写操作也仅仅是 增加或删除,因此使用rcu替换原来...
[code] static struct list_head xfrm_km_list = LIST_HEAD_INIT(xfrm_km_list); static DEFINE_RWLOCK(xfrm_km_lock); void km_policy_notify(struct xfrm_policy *xp, int dir, struct km_event *c) { struct xfrm_mgr *km; //read_lock(&xfrm_km_lock); rcu_read_lock(); //list_for_each_entry(km, &xfrm_km_list, list) list_for_each_entry_rcu(km, &xfrm_km_list, list) if (km->notify_policy) km->notify_pol...
前几天写的模块代码,发现读多写少,查了资料说是rcu比较适合这样的同步。 不过对rcu现还不太了解,我修改了部分代码 -- 只是读的部分,写操作部分目前不敢下手。 spin_lock_bh(&lock); read_code_fragment; spin_unlock_bh(&lock); /* 改为 */ rcu_read_lock_bh(); read_code_fragment; rcu_read_unlock_bh(); 我的问题是,这样改对吗? 还有就是,我发现内核代码有的地方是 在 read_lock_rcu() 里面还会使用 spin_lock这些...
本文详细地介绍了 Linux 2.6 内核中新的锁机制 rcu(Read-Copy Update) 的实现机制,使用要求与典型应用。 一、 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来...
本文详细地介绍了 Linux 2.6 内核中新的锁机制 rcu(Read-Copy Update) 的实现机制,使用要求与典型应用。 一、 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来...
众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来越大,而这种锁使用了原子操作指令,它需要原子地访问内存,也就说获得锁的开销与访存速度相关,另外在大部分非x86...
Linux 2.6内核中新的锁机制--rcu 文档选项 未显示需要 JavaScript 的文档选项 打印本页 将此页作为电子邮件发送 级别: 初级 杨燚 ( [email=yang.yi@bmrtech.com?subject=Linux%202.6%E5%86%85%E6%A0%B8%E4%B8%AD%E6%96%B0%E7%9A%84%E9%94%81%E6%9C%BA%E5%88%B6--rcu]yang.yi@bmrtech.com[/email] ), 计算机科学硕士 2005 年 7 月 01 日 本文详细地介绍了 Linux 2.6 内核中新的锁机制 rcu(Read-Copy Update) 的实...
本文详细地介绍了 Linux 2.6 内核中新的锁机制 rcu(Read-Copy Update) 的实现机制,使用要求与典型应用。 [color="#000000"]一、 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效 的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因 很简单,CPU的速度与访问...
五、rcu 典型应用 在 linux 2.6 内核中,rcu 被内核使用的越来越广泛。下面是在最新的 2.6.12内核中搜索得到的rcu使用情况统计表。 表 1 rcu_read_lock 的使用情况统计 表 2 rcu_read_unlock 的使用情况统计 表 3 rcu_read_lock_bh 的使用情况统计 表 4 rcu_read_unlock_bh 的使用情况统计 表 5 call_rcu 的使用情况统计 表 6 call_rcu_bh 的使用情况统计 表 7 list API 的使用情况统计 表 8 synchronize_rc...