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
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
相关文章推荐
- Feature: High Memory In The Linux Kernel
- Kernel Memory Layout on ARM Linux
- Linux Kernel Memory Management (1)
- VMware: linux起步提示 memory for crashkernel(0*0 to 0*0)not within permissible
- Linux Memory Mapping--mmap kernel 2.6
- Memory access ordering part 2 - barriers and the Linux kernel
- Linux Memory Barrier 内核屏障
- Linux Memory Mapping--mmap kernel 2.6
- Kernel Memory Layout on ARM Linux
- Linux Kernel Shared Memory 剖析
- High Memory In The Linux Kernel(Cited)
- linux memory barrier
- Linux kernel memory management (ARM)
- Linux kernel High memory
- Kernel Memory Layout on ARM Linux
- Linux Kernel Shared Memory 剖析
- Linux Kernel Memory Management (2)
- Memory Allocation API In Linux Kernel && Linux Userspace、kmalloc vmalloc Difference、Kernel Large Section Memory Allocation
- 《LINUX KERNEL MEMORY BARRIERS》
- Linux Kernel Shared Memory 剖析