免费注册 查看新帖 |

Chinaunix

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

请教spin_lock/spin_unlock效率 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-22 15:30 |只看该作者 |倒序浏览
我想在netfilter的pre_route处使用自旋锁:

spin_lock()
进行一些操作
spin_unlock()

但是当收到包速率很大时,pre_route会被频繁调用(假设每秒30000次),那么spin_lock/spin_unlock将会影响多少效率?
稍后我会做个实验,并附上实验结果,但是我想同时听听大家的经验和理论上的结论。

========================================
各位不好意思,我提的问题有点弱智,刚看了LDD3,才发现问题所在。

[ 本帖最后由 springtty 于 2009-3-22 20:49 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-03-22 16:18 |只看该作者
原帖由 springtty 于 2009-3-22 15:30 发表
我想在netfilter的pre_route处使用自旋锁:

spin_lock()
进行一些操作
spin_unlock()

但是当收到包速率很大时,pre_route会被频繁调用(假设每秒30000次),那么spin_lock/spin_unlock将会影响多少效率 ...

只要在执行期间没有其它人在竞争锁就没啥影响。

论坛徽章:
0
3 [报告]
发表于 2009-03-22 16:44 |只看该作者
原帖由 zx_wing 于 2009-3-22 16:18 发表

只要在执行期间没有其它人在竞争锁就没啥影响。

确实,我刚试了,有竞争就死机了。
我在另一个线程T里也使用了自选锁,操作同一块内存,这个线程每两秒会查看共享内存中有没有消息,有消息的就把消息写入文件。
其实这是一个生产者和消费者问题,要访问同一个内存,所以要做互斥,但是我刚才的测试,发现死机了。
这是不是所谓的buttom panic问题?

如果不错互斥,就不能保证数据完整性,但是用了互斥,却可能导致系统崩溃,我现在唯一能想到的就是在线程T(线程T会调用vfs_write可能会阻塞)准备访问共享内存时,禁止中断(但禁止中断也不能保证多处理器的情况),不知道可不可以?

论坛徽章:
0
4 [报告]
发表于 2009-03-22 23:16 |只看该作者
为什么要禁止中断?你在终端中对这个全局变量进行读写啦?
一般都是只需要禁止软中断就行了。

要不然就加锁就行了,不过要注意在软中断中不能加自旋锁。

论坛徽章:
0
5 [报告]
发表于 2009-03-23 01:03 |只看该作者
原帖由 emmoblin 于 2009-3-22 23:16 发表
为什么要禁止中断?你在终端中对这个全局变量进行读写啦?
一般都是只需要禁止软中断就行了。

要不然就加锁就行了,不过要注意在软中断中不能加自旋锁。

呵呵,就是在软中断中加了自旋锁,同时另一个线程也使用了自旋锁,产生了竞争,就崩溃了,我是菜鸟
我现在打算使用环形队列来避免使用互斥机制,刚刚看了kfifo的算法,理解了之后打算贴出来。

论坛徽章:
0
6 [报告]
发表于 2009-03-25 13:21 |只看该作者
spin_try_lock

论坛徽章:
0
7 [报告]
发表于 2009-03-25 21:23 |只看该作者

回复 #4 emmoblin 的帖子

软中断中只能使用spinlock吧?
是不是用户线程占用了临界资源,然后cpu执行软中断,软中断中得不到锁,就一直盲等,所以这个cpu也就死了

论坛徽章:
0
8 [报告]
发表于 2009-03-25 22:53 |只看该作者
原帖由 wuasiam 于 2009-3-25 21:23 发表
软中断中只能使用spinlock吧?
是不是用户线程占用了临界资源,然后cpu执行软中断,软中断中得不到锁,就一直盲等,所以这个cpu也就死了


差不多就是这个意思,现在我改用环形缓冲区规避互斥了问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP