您的位置:首页 > 运维架构 > Linux

Linux kernel Memory Barrier

2011-05-04 11:18 288 查看
Reports
on the Barrier in Linux

 
Reporter: Harold Wang http://blog.csdn.net/hero7935/ Kernel
Edition: 2.6.37.3

 
Abstract:

本报告介绍
Linux


Memory
Barrier

使用环境、分类与典型应用举例,分析了
Memory
Barrier

在多处理机环境下对于维持指令按序执行的意义。

 
Key
Word:

内存屏障
Memory
Barrier;

对称多处理机
SMP;

 
Explanations
of Abbreviations used in this paper:

 
MB——Memory
Barrier

OOO——Out-Of-Order

Load
and Store——L&S

Linux
MB Brief Preview


独立的内存操作是高效的,它提供了多处理机环境下指令执行的并发性;各自独立的内存操作同时意味着指令的执行可能导致
OOO

,在
CPU

之间交互、
I/O

设备中可能带来问题,于是我们需要一种机制,在需要的时候,来确保编译器和
CPU

按序存取内存——这种机制就是:内存屏障
MB



Linux
MB Analysis In Depth


MB

使用情景描述

每个CPU

执行程序中具有独立访问内存的操作,这种独立地访问操作是非常宽松的,理论上可能以任意次序执行;同时编译器处于优化的目的也可能将指令以任意次序重新编排。本文中对MB

的探讨是基于以上所描述的环境展开的。
 
 

MB

四种

变体

Write(Store)
MB:

指定点前所有Store

操作的完成在这个点之后的所有Store

之前

Data
dependency MB:

同一数据对象的前后读写操作在同一CPU

上是编译器自保证的,但是在不同CPU

上需要MB

提供保证。

Read(Load)
MB:

指定点前所有Load

操作的完成在这个点之后的所有Load

之前

General
MB:

指定点前所有L&S

操作的完成在这个点之后的所有L&S

之前

Lock
Operation
:

Lock

点后任何内存操作的发生必须在这个点之后才开始

UnLock
Operation: Lock

点前任何内存操作的完成必须在这个点之前发生

Lock/UnLock


操作概念上类似其他操作系统中

Barrier

的概念

MB

使用场景

Data
dependency:

同一
CPU

上由编译器、
CPU

可以自保证,不同
CPU

上使用
Data
dependency MB

提供支持。

Control
dependency:

可能需要使用
Read
MB

提供支持

SMP
Pairing: CPU

之间交互时往往需要成对使用两种
MB



 

Analysis



Write
MB

目的是确保
d

不会读到
a

的旧值
(1)



Read
MB

目的是确保
c

不会读到
b

的旧值
(4)



我们先来看看如果没有
MB

可能的结果:

c=2;
d=1

c=4;
d=1

c=2;
d=3

                         c=4;
d=3

 
如果我们的本意是第四个,那么使用
MB

机制就可以确保结果是第四种情况。

 



 

Analysis



Write
MB

目的是确保
b

不会读到
*pp

的旧值
(0)

Data
dependency MB

目的是确保
pp

不会读到
p

的旧值
(2)

 

同理,
MB

机制就可以确保最终
b

读到
pp

新值
(1)

;而
pp

读到
p

的新值
(1)

 

Conclusion

内存屏障仅在
CPU

之间、
CPU

与外设之间交互时用到。当处理多处理器之间或硬件设备之间的同步问题时,可能存在以指定的顺序发出读内存和写内存的需求;在和硬件交互时,也需要确保一个给定的读操作发生在其他读或写操作之前;在多处理上,可能需要按写数据时的顺序读数据(通常确保后来以同样的顺序进行读取)。但是编译器和处理器为了提高效率,可能对读和写重新排序。指示编译器不要对给定的点周围的指令进行重新排序,这些确保顺序的指令由内存屏障
MB

机制提供保证。

Author: Harold Wang 
http://blog.csdn.net/hero7935

 
 

Reference:

linux-2.6.37.3/Documentation/memory-barriers.txt

linux-2.6.37.3/arch/barrier.h
9fe3

Robert
Love. Linux Kernel Development 3rd Edition [M]. US:
Addison-Wesley


2010:203-206

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息