免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3914 | 回复: 7
打印 上一主题 下一主题

[内核同步] linux中conntrack 使用rcu锁的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-15 14:57 |只看该作者 |倒序浏览
linux中ct的遍历使用了锁,但是释放却没有用call_rcu 和 sync_rcu(简写),而rcu_read_lock rcu_read_unlock是用于开抢占和关抢占的,
问题1:那么我释放ct用引用计数,不用rcu的两个函数,那么为啥遍历还用加rcu锁呢?
问题2:rcu_dereference 这个用于加内存屏障什么的,为甚要用时也要加rcu_read_lock锁呢?
问题3:3.17的linux内核,ct在confirm时为什么加local_bh_disable,插入hash表时有加hash锁啊?

求推荐关于锁的文章或者资料,不胜感激!!!

论坛徽章:
0
2 [报告]
发表于 2015-01-15 17:03 |只看该作者
我的理解:
问题1:这个可以参考一下skb释放,是一个道理。
问题2:这两个保护的对象不同
问题3:同2,表需要保护,插入的元素也需要保护。

论坛徽章:
0
3 [报告]
发表于 2015-01-15 17:25 |只看该作者
回复 2# breakCU


    感谢你回答问题,但你能说出点原理性的根据吗

论坛徽章:
0
4 [报告]
发表于 2015-01-15 18:08 |只看该作者
原理啊,就是同步呗。为了同步就这么干了。
lunixwh 发表于 2015-01-15 17:25
回复 2# breakCU

论坛徽章:
0
5 [报告]
发表于 2015-01-15 18:35 |只看该作者
回复 4# breakCU


    你还是出去溜达溜达吧

论坛徽章:
0
6 [报告]
发表于 2015-01-15 19:21 |只看该作者
呵呵,我只是不想打那么多字了,自己去找你认为的原理。
lunixwh 发表于 2015-01-15 18:35
回复 4# breakCU

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
7 [报告]
发表于 2015-01-18 22:58 |只看该作者
linux中ct的遍历使用了锁,但是释放却没有用call_rcu 和 sync_rcu(简写),而rcu_read_lock rcu_read_unlock是用于开抢占和关抢占的,
问题1:那么我释放ct用引用计数,不用rcu的两个函数,那么为啥遍历还用加rcu锁呢?

释放时候不需要用call_rcu和sync,因为ct是从slab分配的(而且有SLAB_DESTROY_BY_RCU标记),
ct对应的内存不会真的被释放,只会被下一个新分配的ct继续使用,而__nf_conntrack_find_get对重复使用的内存有判断。

PS,问问题要有问问题的态度,即使别人可能没有解决你的问题。就这样了,你自己揣摩去吧,能不能搞明白就看你自己了。

论坛徽章:
0
8 [报告]
发表于 2015-01-24 15:32 |只看该作者
回复 7# goter


    你说ct内存没释放就是早早有个内存池,用完了还回去不释放,我理解,但我疑惑的是不用call_rcu的函数那么我还用read_lock干什么,这个就是确定临界区的,完全只互斥写端就可以了。
    第二个问题你怎么看?

    我觉得楼上那个人就是个不求甚解的人,一下午回复问题这么快,还是上班时间,又不是好好回答问题,纯粹跟我吓扯淡。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP