cache基本概念
cache管理的操作
-
无效(invalidata) 整个高速缓存或某个缓存行。高速缓存上的数据会被丢弃
-
清除(clean)整个高速缓存或者某个高速缓存行。相应的高速缓存行会被标记为脏,数据会写回到下一级高速缓存中或者主存器中。
-
清零(zero)操作,通常作用预取和加速,比如程序需要一大块内存,内存需要被清零,通常cache控制器会把零数据写入到对应的cache line上,如果程序主动使用清零指令,则会大大减少内部总线的带宽。
cache管理的对象
-
ALL: 整块高速缓存
-
VA: 某 个虚拟地址
-
set/way: 特定的高速缓存行或者组和路
cache管理的范围
-
PoC
-
PoU
shareability
-
inner
cache的指令格式
cache的枚举(cache discovery)
当我们在做cache指令管理的时候,需要知道如下信息:
-
系统支持多少级cache?
-
cache line是多少?
-
每一级的cache,它的set和way是多少?
-
对于zero操作,我们需要知道多少data可以被zeroed
armv8对应的cache寄存器
-
cache level ID register(CLIDR, CLIDR_EL1): 列出有多少level的cache
-
cache type register(CTR, CRT_EL0):cache line大小
-
sets and ways:需要访问寄存器来获取
-
告诉cache size selection register(CSSELR, CSSELR_EL1),要查询哪个cache
-
从cache size id register(CCSIDR, CCSIDR_EL1)中读取相关的信息
-
-
data cache zero id register(DCZID_EL0)