zicbom 提供的 cache 指令
Zicbom 指令 | 作用 |
---|---|
CBO.FLUSH | l1 & l2 cache 内容刷新到主存, 并将 cache line 状态置为无效, 下次访问该地址时, 会从主存 load 回来 |
CBO.CLEAN | cache line 处于修改状态, 会将 cache line 的内容刷新回主存, 不改变该 cache line 的状态 |
CBO.INVAL | 将 cache line 置为无效, 再次访问地址时, 会从主存上 load 回来 |
mcache
缓存操作用于控制操作,如初始化、失效、驱逐等。以下是缓存操作的简要描述:
- 索引写回失效(Index Writeback Invalidate):如果指定索引处的缓存行状态为有效且脏,该行将被写回到由缓存标记指定的内存地址。完成该操作后,缓存行的状态将设置为无效。如果行有效但不脏,则将行的状态设置为无效。
- 命中失效(Hit Invalidate):如果缓存包含指定地址,该缓存行的状态将设置为无效。
- 命中写回失效(Hit Writeback Inv):如果缓存包含指定地址且该行有效且脏,该行的内容将写回到主存。完成该操作后,缓存行的状态将设置为无效。如果行有效但不脏,则将行的状态设置为无效。
- 命中写回(Hit Writeback):如果缓存包含指定地址且该行有效且脏,该行的内容将写回到主存。完成操作后,行的状态保持有效,但脏状态被清除。
- 获取并锁定(Fetch And Lock):如果缓存包含指定地址,锁定该行。如果缓存不包含指定地址,从主存重新填充该行,然后锁定该行。 (只对 l2 cache 有效)
对比
对应于 cbo 指令:
- mcache Hit Invalidate 与 CBO.INVAL 等效
- mcache Hit Writeback 与 CBO.CLEAN 等效
- mcache Hit WriteBack Inv 与 CBO.FLUSH 等效
不同:
cbo 的三条指令针对的是所有 cache (l1 l2)等,
mcache 的这三条指令粒度更细, 需要分别指定 l1 和 l2 进行操作
如:
Hit Writeback 有 Hit_Writeback_D 和 Hit_Writeback_S 两个操作 type, 分别用来 writeback l1 cache 和 l2 cacheCBO 的三条指令是可以在 S-mode 及 M-mode 下执行的
而 mcache 指令只能在 M-mode 下执行, S-mode 需要 cache 相关操作只能通过陷入到 M-mode 的 opensbi 来完成.mcache 另外提供了 index 操作, 主要方便用来回写并清空所有 l1 l2 cache line(不需要知道具体地址, 只需要按 index 覆盖 cacheline 内存范围即可)
另外还提供了 Index invalidate icache Hit invalidate icache 和 fill icache 以及 fetch & lock l2 cache 的行为.