IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM 的 缓存一致性 -> 正文阅读

[嵌入式]ARM 的 缓存一致性

简介

缓存一致性 关注的是 "同一个数据""高速缓存1""高速缓存2" ..."内存" 中的 一致性 问题

存在 不一致的 这种问题 ,该如何解决.有三种解决方案:
1. 关cache,不用cache
2. 硬件提供cache维护指令	,软件调用指令维护缓存一致性
3. 硬件维护缓存一致性 	,软件不需要任何操作

arm 提供了cache ,自然不会建议 使用者关闭cache 来解决这些问题
arm 采用  23 来解决以下问题

arm mmu 话题 中的 “内存属性(Shareability & Cacheability)” 与 “muti core 和 multi cluster” 的 缓存一致性 强相关

P134
In the Armv8 memory model, the Shareability memory attribute indicates the degree to which hardware must ensure
memory coherency between a set of observers, see Memory types and attributes on page B2-143.
在Armv8内存模型中,可共享性内存属性表示硬件必须确保一组观察者之间的内存一致性的程度,请参阅第B2-143页的内存类型和属性。


The cacheability and shareability memory attributes

Cacheability and shareability are two attributes that describe the memory hierarchy in a multiprocessing system:
可缓存性和可共享性是描述多处理系统中内存层次结构的两个属性:
注意 : shareability 在多核中才有意义 , 在单核中设置为什么值效果都一样


Cacheability 
This attribute defines whether memory locations are allowed to be allocated into a cache or not.
Cacheability is defined independently for Inner and Outer Cacheability locations.
该属性定义是否允许将内存位置分配到缓存中。
可缓存性是为内部和外部可缓存性位置独立定义的。

Shareability
This attribute defines whether memory locations are shareable between different agents in a system.
Marking a memory location as shareable for a particular domain requires hardware to ensure that
the location is coherent for all agents in that domain. Shareability is defined independently for Inner
and Outer Shareability domains.
此属性定义系统中不同代理之间是否可以共享内存位置。

将内存位置标记为特定域的可共享位置需要硬件来确保该位置对于该域中的所有代理都是一致的。

可共享性是为内部和外部可共享性域独立定义的。

For more information about Cacheability and Shareability, see Memory types and attributes on page B2-143.

在这里插入图片描述

共享性
	ARM引入了一个概念,共享域(shareability domains.)包含以下几种:
	Inner shareable,意味着它适用于整个内部可共享域。
		这表示该domain内的处理器之间可以相互share数据。
		一个系统可以有多个inner shareable domains,并且当某个操作影响到其中一个inner shareable domain时,它并不会影响到其它的inner shareable domain。
	Outer shareable,意味着它适用于内部可共享和外部可共享域。
		一个outer shareable domain可以由一个或多个inner shareable domain组成,
		并且当一个操作影响到outer shareable domain时,
		也会影响到其下所有的inner shareable domain。
	Non-shareable,表示相关区域只能给指定的处理器访问。
	Full System,包含全部处理器。
system with 2 clusters: // 范围 等同于 图片中的红框部分
	cluster0 : cpu0(L1cache) cpu1(L1cache) L2cache
	cluster1 : cpu2(L1cache) cpu3(L1cache) L2cache
	L3cache

no-share
	对于cpu0 来说 , no-share 	为 cpu0的L1cache 和 cluster0的L2cache
inner share
	对于 cpu0 来说, inner share 	为 cpu0的L1cache 和 cluster0的L2cache 和 cpu1的L1cache
outer share
	对于 cpu0 来说, outer share 	为 cpu0的L1cache 和 cluster0的L2cache 和 cpu1的L1cache 和 cluster1 的所有cache 和 两个cluster共有的L3cache

Full System
	等同于 outer share

问题


aarch64

1.
shareability domains 把 cache 分成了 多个域
但是我们用 "shareability" 来设置内存属性
一个是内存,一个是cache ,有什么关系呢?
	
	mmu page table walk的时候 好像会根据 这个  内存属性 "shareability" 来 将其缓存到 对应的 cache域
	shareability是cci读取并做解释的
	应该和 arm 如何 实现 这些 域 有关系


2.
MMU translation table walk 时, 遇到 不同的 "shareability"的内存 就会缓存到对应的 "shareability domains",我在内核中找到 linux 只会用到 inner-share, 为什么?
	
	linux是cacheable,inner的
	因为smp共享的可缓存的,都会走l1l2再到l3,arm的cluster内部有一层cci,默认总线的事务不要出去,到下一个层级的
	如果miss l3兜底.这个主要为了节省硬件的总线流量和功耗


3.
shareability  和 PoC/PoU 有什么关系
PoC/PoU 也是限定了范围,看起来和 "shareability domains" 限定的范围 相同,是不是可以 不同?

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

	https://aijishu.com/a/1060000000112237

4.
PoC/PoU 除了 可以用在 cache维护指令中 限定cache 范围,还可以做什么
	没了


5. shareability 会在哪里被用到
	1. 叶子页表中的值
	2. 屏障指令中的参数
	3. cache 维护指令的广播域


arch cache PoC PoU 话题中的PoC和PoU

"muti core 和 multi cluster" 的缓存等级 // PoC + PoU 的关注内容
可以控制 是否缓存 			// Cacheability 的关注内容
可以控制 缓存是否失效 		// cache 维护指令 + PoC + PoU 的关注内容
可以控制 缓存 到哪一级别吗? 	// Shareability + PoC + PoU 的关注内容

single core的 缓存一致性问题

DMA 和 高速缓存 一致性问题

问题描述
解决方案

自修改代码问题

问题描述
指令高速缓存和数据高速缓存不一致
数据高速缓存为新代码,指令高速缓存为老代码. 导致无法执行新代码
解决方案
2. 硬件提供指令,软件维护缓存一致性

软件调用高速缓存维护指令 : dc ic 

修改页表

问题描述
tlb 保存的数据过时,导致索引到错的物理地址
解决方案
2. 硬件提供指令,软件维护缓存一致性
刷新tlb

multi core 新增问题

cpu0 和 cpu1 一致性问题

问题描述
cpu0    读 了内存地址A的值 , 缓存到 cpu0 的 l1 cache , 并修改了 该值 // 造成了内存地址A的两个副本
之后
cpu1    要读内存地址A的值 , 从哪里读


解决方案
3. 硬件维护缓存一致性,软件不需要任何操作

什么硬件:
	基于 MESI 协议 的 SCU(Snoop control unit)

multi cluster 新增问题

cluster0 和 cluster1 一致性问题

问题描述
cluster0    读 了内存地址A的值 , 缓存到 cluster0    的 l1 cache , 并修改了 该值 // 造成了内存地址A的两个副本
之后
cluster1    要读内存地址A的值 , 从哪里读


解决方案
3. 硬件维护缓存一致性,软件不需要任何操作

什么硬件:
	多cluster:基于 (AMBA4)ACE 协议 的 CCI控制器
	众cluster:基于 (AMBA5)CHI 协议 的 CCN控制器
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-06-26 17:01:57  更:2022-06-26 17:02:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:45:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码