免费注册 查看新帖 |

Chinaunix

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

[CPU及多核] 何时使用内核屏障? [复制链接]

论坛徽章:
5
处女座
日期:2014-10-15 11:57:302015年亚洲杯之中国
日期:2015-03-04 17:05:552015亚冠之西悉尼流浪者
日期:2015-07-31 12:14:2915-16赛季CBA联赛之同曦
日期:2015-12-10 18:14:0615-16赛季CBA联赛之北京
日期:2016-07-07 17:01:53
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-25 11:07 |只看该作者 |倒序浏览
        对于内存屏障,一直没搞明白,虽然知道是有防止指令重排序的作用,按照《现代体系结构上的UNIX系统一书》的说法,由于SPARC体系结构含有store缓冲,并不保证store是FIFO的,这时需要内存屏障。
        比如linux的顺序锁,我一直不明白,
  1. static __always_inline unsigned read_seqbegin(const seqlock_t *sl)
  2. {
  3.         unsigned ret = sl->sequence;
  4.         smp_rmb();
  5.         return ret;
  6. }
复制代码
这里为什么要使用内存屏障,我也知道他是保证++sl->sequence要先执行,如果
  1. u64 get_jiffies_64(void)
  2. {
  3.         unsigned long seq;
  4.         u64 ret;

  5.         do {
  6.                 seq = read_seqbegin(&xtime_lock);
  7.                 ret = jiffies_64;
  8.         } while (read_seqretry(&xtime_lock, seq));
  9.         return ret;
  10. }
复制代码
这里不使用内存屏障,会有什么问题?
        我的疑惑在于判断何时需要使用内存屏障?是怎样判断的?
写的不明白和有误的地方,望见谅(我菜鸟一个)。望高手指点啊。

论坛徽章:
0
2 [报告]
发表于 2013-01-25 11:22 |只看该作者
                seq = read_seqbegin(&xtime_lock);
                ret = jiffies_64;

这里保证  seq 一定是先 比 jiffies_64 先读出来。

这个循环确保拿到的是最新的值,如果你不保证这个顺序,那么你这个jiffies_64 先读出来,
已经是上一次的值了,及时别的地方更新了jiffies_64 的值了(对应的seq也被更新了。)

但你顺序乱了之后,读到的seq也是新的,但jiffies_64  确是久的,这个循环就不起作用了。

论坛徽章:
5
处女座
日期:2014-10-15 11:57:302015年亚洲杯之中国
日期:2015-03-04 17:05:552015亚冠之西悉尼流浪者
日期:2015-07-31 12:14:2915-16赛季CBA联赛之同曦
日期:2015-12-10 18:14:0615-16赛季CBA联赛之北京
日期:2016-07-07 17:01:53
3 [报告]
发表于 2013-01-25 11:48 |只看该作者
谢谢答复,是不是可以这样理解,假设jiffies初始值为1000,seq序列号为0,如果没有内存屏障,
是不是会有这样的序列:
cpu0                                   cpu1
读端获取值1000                    获取锁
------------                            写端更新seq++; //1
-----------                             更新jiffies++;//1001
-------------                           写端更新seq++;//2
-------------                          释放锁
两次读取序列号,
发现相同,得到
过时的值

不知以上理解是否正确。

另外这里需要屏障,是因为jiffies和seq有隐示的依赖关系? 跟缓存一致性有没关系?

+回复 2# hmsghnh


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP