免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5369 | 回复: 5

[内核同步] spinlock在up和smp机器下的区别 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2014-08-04 15:23 |显示全部楼层
之前记得有一篇文章讲过,spin_lock()在up下只是禁止抢占,并不会让cpu自旋停顿;而spin_lock()在smp下才会实现真正的自旋停顿。有位兄弟在这个帖子里也提到过:http://bbs.chinaunix.net/thread-1927929-1-1.html,本来我对这一点也是深信不疑的,但是我自己做了一个小测试,发现并不是这样子的,测试过程如下:
http://www.linux2web.net/?p=716
希望精通的朋友能解释一下



论坛徽章:
0
发表于 2014-08-04 17:05 |显示全部楼层
因为是UP,只会启动一个CPU,第一个程序关了抢占,第二个程序再执行就得不到调度了吧?
你说的系统死掉是什么现象, 有什么打印不, softlockup? rcu_tall? hung task?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
发表于 2014-08-04 23:35 |显示全部楼层
jinxinxin163 发表于 2014-08-04 15:23
之前记得有一篇文章讲过,spin_lock()在up下只是禁止抢占,并不会让cpu自旋停顿;而spin_lock()在smp下才会 ...

死机可能不是spin_lock导致的。需要具体看看死机的原因,这种问题通常是代码的编写的问题,需要看看死机时,控制台上的打印,如果可以,部署kdump更好。。

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
发表于 2014-08-04 23:36 |显示全部楼层
回复 1# jinxinxin163

你的深信令我恐惧,出现问题应该去定位查找跟因。

内核代码放在这为什么不去看呢?
spinlock.h:175行
#define spin_lock(lock)                        _spin_lock(lock)

-->spinlock_api_up.h:051行
#define _spin_lock(lock)                        __LOCK(lock)

-->spinlock_api_up.h:021行
/*
* In the UP-nondebug case there's no real locking going on, so the
* only thing we have to do is to keep the preempt counts and irq
* flags straight, to supress compiler warnings of unused lock
* variables, and to add the proper checker annotations:
*/
#define __LOCK(lock) \
  do { preempt_disable(); __acquire(lock); (void)(lock); } while (0)

你的测试用列问题大得去了,那有加着spinlock返回用户态去的。spinlock是用于保护很小的范围的。



   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2014-08-05 09:00 |显示全部楼层
回复 2# chenyu105
系统死掉,就是界面不动,不能输入任何信息,键盘不起作用,看起来就是虚拟机死掉

   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2014-08-05 09:10 |显示全部楼层
回复 4# Tinnal
我知道这里用互斥锁最好
用spinlock只是测试,望兄台知道

感谢你提供的code,其实,spinlock会不会禁止抢占,这一点,在不同系统上实现是有差异的,我要讨论的重点,在于说spinlock会不会让当前cpu自旋停顿(假如得不到锁的情况下),你给的代码我之前也看过,确实是不会lock cpu。
但是,我写了这段代码做测试,发现,系统死掉了,我是在虚拟机测试,单核cpu,执行第二个openTest后,系统直接死了,无法输入,无法切换界面。只能重新启动虚拟机。现象上看起来cpu是lock了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP