前言
该文章主要描述ARM中对于memory 类型的定义,以及概述该类型在核上发出的操作类型和在总线协议(AXI/ACE/CHI)的行为体现。(个人理解有误的地方请在评论区指出)
一、memory的定义
在ARMv8的架构中对应memory类型,Memory type 主要分为2类,Device和Normal memory类型,对应不同类型又携带着Shareabiliy和Cacheabiliy不同的能力。
Shareabiliy:指的是可共享数据的区域,对于ACE协议中,明确Shareabiliy为none shareable和shableable属性(Inner/outer Shareable,system),被划分为以下4个domain
- Non-shareable:该domain只包含一个master
- Inner Shareable:该domain包含了几个master
- Outer Shareable:该domain包含了Inner domain和其它master
- System:该domain包含了系统中的所有domain
备注
- 最新的ACE协议中不存在Inner Shareable和Outer Shareable的概念,统一为Shareable属性,个人理解能更好的和CHI协议进行转换,因为在CHI的协议中没有Shareable概念,与该属性对应的是SnpAttr属性,另外在CHI的架构中会引入HNF节点来更好的管理可共享性,所有其不需要该属性值。
- ARMv8架构中不存在System的属性,认为System和Outer Shareable的属性是同一个,即在ARMv8-a的图中,Device的shareable属性为Outer Shareable,其实该属性定义为system更加合理
Cachebiliy:对cache操作的一种属性,被划分成三种
- Non-cacheable:不会对cache进行任何操作
- Write-Through cacheable:对cache和cache下级memory都会操作,会操作到end point
- Write-Back cacheable:对cache进行操作,不会操作到end point
备注:
- Cachebiliy主要是对memory属性来说的,来表征该地址是否会有cache的操作,对应Device的属性都是None-cacheable的属性
Device属性:在定义中会存在以下属性
- Reordering, R and nR:是否需要保序
- Gathering and non-Gathering attributes:对应操作是否可以合并
- Early Write Acknowledgement, E and nE:写操作是否可以提前回响应
问题1:为什么会存在Shareabiliy和Cacheabiliy的属性?
Shareabily的属性主要用来体现在多master的系统中cache数据可见的访问范围,也是实现硬件cache一致性的主要属性,Cacheabiliy的属性主要是用来体现对多级cache数据的操作行为。
问题2:Shareabiliy和Cacheabiliy的属性对cache一致性的影响?
在硬件cache一致性中Shareabily必然存在,用于体现cache一致性范围,Cacheabiliy的属性,相比硬件或软件一致性而言,使用Write-Through cache或non -cacheable能提供更好的机制来控制一致性,保证最终数据让所有master可见。
二、核中memory的定义
该图为R52中对应4G内的地址段的memory默认属性定义
Normal, Non-shareable, Write-Back, Write-Allocate Cacheable
- Normal memory的属性,并且不可共享的Non-shareable属性,硬件不保证数据的一致性,对cache数据的操作是将数据更新到cache,并不更新到内存,在cache内miss时,数据先要从内存把数据读到cache,再更新cache
Normal, Non-shareable, Write-Through Cacheable
- Normal memory的属性,并且不可共享的Non-shareable属性,硬件不保证数据的一致性,对cache数据的操作是将数据更新到cache和内存
Normal, Shareable, Non-cacheable
- Normal memory的属性,一种场景,shareable的属性,硬件要保证数据的一致性,读写数据时,可能会从其他master的cache内读数据,另一种场景shareable的属性是system domain,没有一致性,只有ddr,像ACE协议中描述的场景。(sharable属性划分,shareable:inner/outer shareable,system, none_shareable属性:none_shareable)
Device-nGnRE
- 这种地址不需要保序,操作不能合并,支持EWA,可以提前返回写响应。
Device-nGnRnE
- 这种地址不需要保序,操作不能合并,不能支持EWA,即从endpoint节点返回写响应。
三、总线协议memory的定义
ACE协议中对memoey的操作主要体现在axcache和axdomain的信号上面
ACE协议中memoy的定义
- 对于Device的属性,其是在system domain下,即系统中的所有的master都可配置
- 对于none-cacheable的memory属性,同样对于系统中的所有master都是可见的,所有会在system domain,可以理解为在soc中的ddr,对于所有的核访问数据都是一致的(软件要保证多core操作一致性)
- 对于cacheable(Write-Through和Write-Back)的memory属性,Non-shareable时,对应cache操作的作用域被限制在私有的cache内,及其他的master对该地址段不可见,硬件上不能保证多core的数据一致性inner shareable 对应cache操作的作用域被限制在inner domain域内的cache,该doamin内的所有master均可见并且硬件保证数据一致性 outer shareable对应cache操作的作用域被限制在outer domain域内的cache,该doamin内的所有master均可见并且硬件保证数据一致性
- Deivce 中的order通过axid通道的值来保证保序性,EWA的属性通过axcache[0]bit来体现
CHI协议中memoy的定义
在CHI协议中相关的属性有MemAttr、Order和SnpAttr,Order来表征是否保序,SnpAttr来表征shareable的属性。MemAttr的属性包括
- Device:1为device,0为normal memory的属性
- Allocate:包括cache在miss时是否需要data被allocate进cache
- Cacheable:请求是否需要执行cache lookup,即查找cache内容
- EWA:和bufferable一个属性,写响应是否需要提前返回
ACE和CHI对应memoey的转换关系
CHI | ACE |
---|---|
Device | Axcache[1] |
Allocate | awcache[3] for writes,arcache[2] for read |
Cacheable | Axcache[1] and Axcache[3] or Axcache[2] |
EWA | Axcache[0] |
Order | Axid value |