【ARM Cache 系列文章 2 -- Cache Coherence及内存顺序模学习】

news2024/12/28 2:44:32

文章目录

    • Cache Coherence 背景
    • 1.1 内存顺序模型简介(Memory Model)
      • 1.1.1 Normal Memory
      • 1.1.2 Device Memory
    • 1.2 Cache 一致性问题解决方案
      • 1.2.1 Shareability 属性
      • 1.2.2 Non-Shareable 属性
      • 1.2.3 Inner-Shareable 属性
      • 1.2.4 Out-Shareable 属性
    • 1.3 Shareability 和 PoC/PoU 关系
      • 1.3.1 PoU(处理器缓存一致性角度度)
      • 1.3.2 PoC(全局缓存一致性角)

上篇文章:ARM Cache 系列文章 1 – Cache基础概念学习
下篇文章:ARM Cache 系列文章 3 – Cache 与 MPU关系学习

Cache Coherence 背景

所谓的 Cache 一致性问题, 主要指的是由于 Cache 存在时,当在有多个 Master(典型的如 MCU 的 Core, DMA 、PCIE、I2C2APB 等)访问同一块内存时, 由于数据会缓存在 Cache 中而没有更新实际的物理内存,导致的问题。在了解缓存一致性前需要先了解内存顺序模型。

1.1 内存顺序模型简介(Memory Model)

arm memory 类型分为 normal memory 和 device memory。
内存顺序模型更详细内容

1.1.1 Normal Memory

Normal memory就是我们平常所说的内存,对该种memory访问时无副作用(side effect),即第n次访问与第n+1次访问没有任何差别。

1.1.2 Device Memory

device memory 是外设对应的物理地址空间,对该部分memory访问时,可能存在副作用(side effect),比如:

  • 某些状态寄存器可能 read clear;
  • 某些寄存器有写入顺序(否则写入不成功);
  • 设备fifo地址固定不变,但是每次访问,内部的移位寄存器就会将下一个数据移出来[1],因此访问同一地址第n次访问与第n+1 次访问结果是不同的。

1.2 Cache 一致性问题解决方案

一.所有的共享存储器都定义为共享属性(Shareability),共享意味着需要硬件保证一个内存位置中的内容对一定范围内可访问该位置的多个处理器是一致。
二.通过软件进行cache的维护, 如使用 cache invalidate 和 cache clean进行维护。

1.2.1 Shareability 属性

Shareability 的由来为了支持数据一致性协议,需要增加硬件很多开销,会降低系统的性能,同时也会增加系统的功耗。但是,很多时候并不需要系统中的所有模块之间都保持数据一致性,而只需要在系统中的某些模块之间保证数据一致性就行了。因此,需要对系统中的所有模块,根据数据一致性的要求,做出更细粒度的划分。

1.2.2 Non-Shareable 属性

配置为 non-shareable 属性的内存位置一般只能被唯一处理器访问, 如果还有其他处理器能访问该位置,需要软件用缓存一致性指令来保证缓存一致性。

比如:在单核的场景下,cpu 往某一块配置为non-shareable (同时配置了cacheable)属性的内存写一段数据,由于这段内存只对cpu可见,所以如果当使用DMA来搬运这块内存中的数据时,需要先进行 cache clean 将缓存中的数据刷入memory中,否者dma搬运的数据可能会有一些stale data。

1.2.3 Inner-Shareable 属性

该内存位置可以被 Inner Shareability domain 中的所有处理器访问,并且硬件保证该位置在这些处理器间的数据一致性,Inner Shareability domain中的处理器一般被同一个虚拟机监视器或操作系统控制,如下图中的两个 cluseter 都在 inner shareability domain中。一般不同的cluseter会共享L2 cache。
在这里插入图片描述

1.2.4 Out-Shareable 属性

能被外部共享的观察者(cpu, gpu, dma) 观察到,它适用于内部可共享和外部可共享域。一个outer shareable domain 可以由一个或多个 inner shareable domain组成,并且当一个操作影响到outer shareable domain时,也会影响到其下所有的 inner shareable domain。

note: 只有配置为 Normal Memory 内存属性的内存才能设置 inner 和 outer shareability,device memory 是不能设置 Shareability。

1.3 Shareability 和 PoC/PoU 关系

1.3.1 PoU(处理器缓存一致性角度度)

是指对于某一个核Master,附属于它的指令,数据缓存和 TLB,如果在某一点上,它们能看到一致的内容,那么这个点就是PoU。如下图右侧,MasterB包含了指令,数据缓存和TLB,还有二级缓存。指令,数据缓存和TLB的数据交换都建立在二级缓存,此时二级缓存就成了PoU。

而对于下图左侧的MasterA,由于没有二级缓存,指令,数据缓存和TLB的数据交换都建立在内存上,所以内存成了PoU。

还有一种情况,就是指令缓存可以去监听数据缓存,此时,不需要二级缓存也能保持数据一致,那一级数据缓存就变成了PoU。

1.3.2 PoC(全局缓存一致性角)

是指 对于系统中所有Master(注意是所有的,而不是某个核),如果存在某个点,它们的指令,数据缓存和TLB能看到同一个源,那么这个点就是PoC。如下图右侧,二级缓存此时不能作为PoC,因为MasterB在它的范围之外,直接访问内存。所以此时内存是PoC。在左图,由于只有一个Master,所以内存是PoC。
在这里插入图片描述

简而言之,PoU/PoC定义了指令和命令的所能抵达的缓存或内存,在到达了指定地点后,Inner/Outer Shareable定义了它们被广播的范围。

上篇文章:ARM Cache 系列文章 1 – Cache基础概念学习
下篇文章:ARM Cache 系列文章 3 – Cache 与 MPU 关系学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/783046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MATLAB第59期】基于MATLAB的混沌退火粒子群CSAPSO-BP、SAPSO-BP、PSO-BP优化BP神经网络非线性函数拟合预测/回归预测对比

【MATLAB第59期】基于MATLAB的混沌退火粒子群CSAPSO-BP、SAPSO-BP、PSO-BP优化BP神经网络非线性函数拟合预测/回归预测对比 注意事项 不同版本matlab 不同电脑 加上数据集随机,BP权值阈值随机,进化算法种群随机,所以运行结果不一定和我运行…

20.matlab数据分析极限(matlab程序)

1.简述 计算极限 MATLAB提供计算极限的limit函数。在其最基本的形式中,limit函数将表达式作为参数,并在独立变量为零时找到表达式的极限。 例如,要计算函数f(x)(x^3 5)/(x^4 7)的极限,因为x趋向于零。 syms xlimit((x^3 5)/…

设计模式 ~ 职责链、策略、适配器、MVC、MVVM

职责链模式 一种行为型设计模式,它允许多个对象按照特定的顺序处理请求,直到其中一个对象能够处理该请求为止; 一个流程,需要多个角色处理,通过 一个“链”串联起来,各个角色相互分离,互不干扰…

使用 Cpolar 内网穿透实现 Windows 远程 WebDAV 访问

文章目录 windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透,将WebDav服务暴露在公网3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户…

机器学习术语解析与应用(一)

文章目录 🍀引言🍀数据集🍀特征工程(Feature Engineering)🍀模型(Model)🍀算法(Algorithm)🍀训练(Training)&a…

【广州华锐互动】VR汽车故障维修模拟系统

随着汽车行业的发展,汽车机械检修技术也变得越来越重要。传统的教学方式已经不能满足现代汽车维修的需求,因此VR汽车故障维修模拟系统应运而生。这个平台具有许多实用的功能,可以帮助学生更好地学习和掌握汽车机械检修技能。 VR汽车故障维修模…

【Linux】无法获得dpkg前端锁的解决方法

问题如下: 解决方法如下: sudo rm /var/lib/dpkg/lock sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/cache/apt/archives/lock经过证明,输入以上三个命令即可解除占用。 解除后,继续运行apt命令,已经顺利运行了…

2023-07-19-Ubuntu火狐浏览器不能播放视频

layout: post # 使用的布局 title: Ubuntu火狐浏览器不能播放视频 # 标题 subtitle: linux系统 #副标题 date: 2023-07-19 # 时间 author: BY ThreeStones1029 # 作者 header-img: img/no_found_html5.jpg #这篇文章标题背景图片 catalog: true # 是否归档 tags: Ubuntu #标签 …

vue实现excel数据下载,后端提供的list由前端转excel并下载

前言,因为项目需求需要,我们需要把后端传来的list转成excel模板,并且下载下来) 之前有用的插件,但是会有少0的情况,如下 所以采用另一个项目用过的方法,最终完美实现效果,如下: 1,首先我们来看下后端提供的数据结构 2,具体前端代码如下 封装的组件,需要的同学直接copy就行(这…

【Linux】VMware 安装 Centos7 超详细

1、下载✈ VMware链接:https://pan.baidu.com/s/1DnleWeV-JHjZiV9_ENwFmg?pwdb1tj 提取码:b1tj 阿里云镜像:centos安装包下载_开源镜像站-阿里云 CentOS官网镜像: Download 2、虚拟机准备 2.1、打开VMware选择新建虚拟机…

vector 容器相关的练习

目录 一、只出现一次的数字 二、只出现一次的数字 II 三、只出现一次的数字 III 四、删除有序数组中的重复项 五、杨辉三角 六、数组中出现次数超过一半的数字 七、电话号码的字母组合 一、只出现一次的数字 class Solution { public:int singleNumber(vector<int&g…

springboot()—— springboot整合mybatis

总结&#xff1a; 和SSM相比&#xff0c; 1&#xff09;导入的包不同 2&#xff09;不再有mybatis的核心配置文件了&#xff0c;也不同单独写db.properties了&#xff0c;以前“开启二级缓存&#xff0c;起别名”等在核心配置文件里的配置全都配置到application.properties里…

前端实现文件上传的方式

这个文章总结了四种前端上传文章的方式 <inputtype"file"multipleonChange{(e) > {const c [].slice.call(e.target.files);console.log(e.target.files, e.target.files);console.log(e.target.files.arrary, c);const v new FormData();v.append(file, c[…

K8S初级入门系列之九-共享存储

一、前言 Pod里面的容器都有自己独立的文件系统&#xff0c;来自容器镜像&#xff0c;用于保存容器运行的数据&#xff0c;但容器的文件存储有两个弊端&#xff0c;一个是无法持久化&#xff0c;其生命周期与容器一致&#xff0c;一旦容器销毁&#xff0c;相关的数据也就随之一…

0134 数据的表示和运算3

目录 2.数据的表示和运算 2.3浮点数的表示与运算 2.3部分习题 2.数据的表示和运算 2.3浮点数的表示与运算 2.3部分习题 1.下列关于对阶操作&#xff0c;正确的是&#xff08;&#xff09; A.在浮点加减运算的对阶操作中&#xff0c;若阶码减小&#xff0c;则尾数左移 …

pytorch工具——认识pytorch

目录 pytorch的基本元素操作创建一个没有初始化的矩阵创建一个有初始化的矩阵创建一个全0矩阵并可指定数据元素类型为long直接通过数据创建张量通过已有的一个张量创建相同尺寸的新张量利用randn_like方法得到相同尺寸张量&#xff0c;并且采用随机初始化的方法为其赋值采用.si…

数值线性代数:知识框架

记录数值线性代数研究的知识框架。 软件包线性方程组直接法Guass消元法/LU分解、Cholesky分解 LAPACK oneAPI MKL ARPACK Octave 迭代法Jacobi迭代、SOR迭代、共轭梯度法最小二乘特征值/特征向量非对称幂法、QR、Arnoldi分解对称QR、Jacobi、二分法、分治法、SVD 参考资料 G…

【C语言day03】

参数a是指针&#xff0c;要接收地址&#xff0c;BD错误。参数b可以接收的是char*&#xff0c;而&c的类型是char(*)[10]&#xff0c;C错误全局变量i&#xff0c;在main()中修改为5&#xff0c;第一次在prt()中执行循环输出三次*&#xff0c;i被修改为8&#xff0c;回到main(…

MyBatis学习笔记——3

MyBatis学习笔记——3 一、MyBatis小技巧1.1、#{}和${}1.2、typeAliases1.3、mappers1.4、插入数据时获取自动生成的主键 二、MyBatis参数处理2.1、单个简单类型参数2.2、 Map参数2.3、实体类参数2.4、多参数2.5、 Param注解&#xff08;命名参数&#xff09;2.6、 Param源码分…

网络安全(黑客)就业分析指导

一、针对网络安全市场分析 市场需求量高&#xff1b;则是发展相对成熟入门比较容易。所需要的技术水平国家政策环境 对于国家与企业的地位愈发重要&#xff0c;没有网络安全就没有国家安全 更有为国效力的正义黑客—红客联盟 可见其重视程度。 需要掌握的知识点偏多 外围打点…