[A-17]ARMv8/ARMv9-Memory-内存屏障机制(Observer & Barrier)
ver0.1
[看前序文章有惊喜,关注“浩瀚架构师”,可以解锁全部文章]
前言
坚持读到这篇文章的伙伴们已经很了不起了,因为现在大家已经是了解了ARM的弱内存排序架构的人了。现在的你,不仅了解内存的类型、内存的共享机制、内存一致性机制,还了解了CPU架构以及处理器的微架构了,这些都为我们讲解今天的主题打下了坚实的基础。处理器的升级换代三个方向:更快、更高、更强。“更快”就是主频更高,单时钟周期内执行的指令会更多;“更高”就是处理器PE-Core引入了更多的硬件机制保证“更快”的性能能够得到充分发挥,比如我们前文提到的ARM弱排序内存模型;“更强”则是功能层面、更加丰富的处理能力,比如浮点计算、向量计算等等。从PE-Core的层面看过去,更多的硬件能力提升意味着更加高效的代码执行效率,这些优化的机制就像一只无形的手控制着程序的指令流的执行,但是这些机制会给计算机的世界带来一定的不确定性。这些不确定性的直接表现就是对内存的重排序,有些情况下这不是我们希望看到的。比如汽车的功能安全领域,系统和对手件的交互,就是必须严丝合缝不能出现任何不一致的地方。这个时候就需要ARM架构提供相应的机制给到码农使用,让他们设计出相应的程序使自己放心。这个机制就像一只有形的手一样控制着整个系统的执行,下面我们就进入本文的主题:内存屏障机制。
正文
1.1 Observer
在介绍内存屏障机制之前,我们需要先了解一个重要的概念:Observer。尽管我们前序文章中对本文相关的背景知识做了很多介绍,但是还是有必要花费一点时间对Observer做一下明确的解释,这个对我们直接理解ARM的内存屏障机制有很大的帮助。
1.1.1 Observer的概念
首先看一下ARM手册中对Observer的介绍:
Observer: A PE or mechanism in the system, such as a peripheral device, that can generate reads from or writes to memory.
• An Observer refers to either a Processor Element (PE) or some other mechanism in the system, such as a peripheral device, that can generate reads from, or writes to, memory. Observers can observe memory accesses.
• The ARM Architecture Reference Manual defines certain key words, in particular, the terms observe and must be observed. In typical systems, this defines how the bus interface of a master, for example, a core or GPU and the interconnect, must handle bus transactions. Only masters are able to observe transfers. All bus transactions are initiated by a master.
The architecture considers the following as separate Observers:
• The instruction interface of the core, typically called the Instruction Fetch Unit (IFU)
• The data interface, typically called the Load Store Unit (LSU)
• The MMU table walk unit
As described in Who is an Observer?, an Observer is something that can make memory accesses. For example, the MMU generates reads to walk translation tables.
在写这篇文章的时候,看了很多资料就想搞一个确切的说法到底啥是ARM架构体系下的Observer。挺苦恼的的,不过后来想开了都搬上来,大家自己看,群众中肯定是有聪明人的,哈哈。
通过手册的描述,结合图1-1,我们来简单归纳一下一个ARM体系下的Observer需要具备的特征。
(1) Observer必须是SOC系统内部的一个功能单元,比如PE、GPU、VPU、DMA控制器等等。
(2) Observer还可以继续细分PE内部的一个前端或者后端的更加精细的功能单元,比如MMU或者LSU等等。
(3) Observer必须要和系统的内存模型产生关联,它观察的内存空间的Device和Normal两种类型的内存。
(4) Observer可以理解我SOC总线架构下Master这个概念的别名,只是它更侧重内存操作的相关总线事物。
(5) Observer之间是有关联的,必要的时候要做一致性处理(可以是硬件的方式,也可以是软件的方式)。
我们可以简单理解具备上述特征的SOC中的功能单元,其实都可以认为是ARM体系下的Observer。这里,我们可以延伸一下到SOC外面的设备,从某种层面上说其实它们也算是ARM体系下的Observer,因为它们是通过外围接口间接的链接到SOC总线上的节点,它们的行为也会间接的产生总线事物。
1.1.2 Observability
上面一个小节我们介绍了ARM体系下的Observer,原来他们就是一圈围绕这内存转悠的Master。这里就会产生一个问题,就是这些观察者们到底在这个系统运行过程中都在干啥?到底在观察什么?什么时候观察的?先看一下手册中的描述。
The order that a master performs transactions in is not necessarily the same order that such transactions complete at the slave device, because transactions might be re-ordered by the interconnect unless some ordering is explicitly enforced.
A write to memory is observed when it reaches a point in the memory system in which it becomes visible. When it is visible, it is coherent to all the Observers in the specified Shareability domain, as specified in the memory barrier instruction. If a PE writes to a memory location, the write is observable if another PE would see the updated value if it read the same location. For example, if the memory is Normal cacheable, the write is observable when it reaches the coherent data caches of that Shareab
原文地址:https://blog.csdn.net/timyu007/article/details/143449246
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!