首页 > 代码库 > ARMV8 datasheet学习笔记4:AArch64系统级体系结构之系统级存储模型
ARMV8 datasheet学习笔记4:AArch64系统级体系结构之系统级存储模型
1.前言
关于存储系统体系架构,可以概述如下:
存储系统体系结构的形式 |
VMSA |
存储属性 |
2. 存储系统体系结构
2.1. 地址空间
指令地址空间溢出 |
指令地址计算((address_of_current_instruction) + (size_of_executed_instruction))超过0xFFFF FFFF FFFF FFFF,PC变成不可知 |
2.2 Cache支持
- Caches的一般行为
(1)Cache中已解锁的项不会一直驻留在cache;
(2)Cache中锁定的项会保证会一直在cache中;
(3)任何时候具有cacheable属性的内存在当前异常级别或更高异常级别都可以分配到cache;
(4)不具有cacheable属性的内存不会分配到cache;
(5)一个cache项的释放会写回内存;
- Cache identification
Cache维护指令
|
(1) 影响整个cache,如IC IALLU; (2) 对某个地址的操作,如IC IVAU; (3) 对set/way的操作,如DC ISW |
Cache identification registers
|
(1) Cache type寄存器(CTR_EL0) 定义了最小的指令cache line长度; 定义了最小的数据cache line长度; L1 Cache索引和tag策略 (2) single cache level ID寄存器(CLIDR_EL1) 实现了哪几级cache; 待续 (3) single cache size selection寄存器 待续 (4) cache size identification寄存器 是否支持写透、回写、读分配和写分配; 映射方式、sets/ways等 |
- Cacheablity,cache分配,cache瞬态
Cacheablity |
cacheablity只适用于normal memory,内存位置可定义为内部cache(如各PE内部的L1)或外部cache(各PE共享的L2);所有的device memory都作为non-cacheablity; cacheablity属性包含non-cacheablity;写透;写回。 |
Cache allocate hints |
待续 |
Cache transient hints |
待续 |
- Enable/disable内存的caching访问
- Reset的cache行为
(1)reset到自定义状态的所有cache可能是未知的;
(2)cacheablity控制域强制所有内存作为non-cacheablity
(3)在cache被使能前,cache初始化时必须被invalidate
(4)如(2)所述,reset所有的内存都被作为non-cacheablity,如果仍然允许cahce hit,则需:(1)提供确保cache正确初始化的机制;(2)清楚记录cache初始化;
(5)ARM建议任何时候需要无效cache时都要基于ARMV8 cache维护指令???
- Non-cacheable访问和指令cache
- 关于ARMV8的cache维护
术语 |
Level:cache的级别; |
Set:由多个连续的cache line组成一个组(set); Way: 每个set中冲突的备选表项的数目; |
|
(1)Clean:为确保更新到cache中的内容flush到内存; (2)Invalidate:确保内存中的修改,能够重新加载到cache; (3)Clean and invalidate:clean指令后跟一个invalidate指令,针对的是同一访问地址; |
|
(1)PoU(Point of Unification):对所有的PE可以观察到一致拷贝的点; (2)PoC(Point of Coherence):对系统中所有的agent可以观察到一致拷贝的点; |
|
(1)LoC(Level of Coherence):定义了 整个系统 clean或invalidate PoC时所要clean或invalidate的最后一级cache级别号,如:PoU为Level4,则LoC为3,执行clean和invalidate后会清空L1,L2, L3; (2)LoUU(Level of Unification, uniprocessor):定义了 PE clean或invalidate PoU时所要clean或invalidate的最后一级cache级别号; (3)LoUIS(Level of Unification, Inner Shareable):定义了 内部共享域 clean或invalidate PoU时所要clean或invalidate的最后一级cache级别号; |
|
ARMV8 cache层级抽象 |
操作VA的cache维护指令 |
操作set/way的cache维护指令 |
- Cache维护指令
指令cache维护指令 |
|
数据cache维护指令 |
|
EL0 cache维护指令的使能配置 |
|
Cache维护指令的行为 |
没有限制cache维护指令的行为,每个cache位置都可能被清空或无效 |
操作VA到PoU的影响 |
会影响共享域内的其它PE |
所有set/way维护指令的影响 |
只影响到运行指令的PE |
虚拟化和安全性维护指令的影响 |
每个安全状态有自己的物理地址空间,cache与物理地址关联 |
边界条件 |
维护指令会强制所有的内存访问为non-cache??? |
数据和指令cache维护指令的执行顺序和完成 |
|
运行cache维护指令 |
|
- Data cache zero指令
- cache lockdown
一个cache lock 可保证cache 中的内容一直被保留
- System level caches
不是体系结构定义的cache,不受体系结构定义的维护指令管理,主要包括三类: |
|
- 分支预测
ARMV8没有定义任何分之预测指令,如果体系结构中分支预测指令对所有agent是可见的,则cache维护指令也要与之适配 |
2.3 External abort
External abort |
存储系统中MMU和debug逻辑检测到的错误除外的其它错误,主要位于SOC外部 |
取指abort |
|
Data read/write abort |
|
External abort分类 |
|
奇偶校验错误/ECC错误报告 |
|
3. 参考文档
[1] DDI0487A_k_armv8_arm_iss10775.pdf
ARMV8 datasheet学习笔记4:AArch64系统级体系结构之系统级存储模型