• 正文
  • 相关推荐
申请入驻 产业图谱

CPU cache维护指令——DC、IC

09/04 08:50
173
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

ARM AArch64指令集中有两条关于缓存维护(cache maintenance)的指令,分别是IC和DC。IC用于指令缓存操作,DC用于数据缓存操作。

IC和DC指令都属于系统指令(system instruction),系统指令还包括AT,BRB,CFP,CPP,DVP和TLBI等。

cache的管理主要有如下3种情况:

无效(invalidate)操作:使整个cache或者某个cacheline失效,这可能会丢弃cache中的更改。其实就是修改valid bit,让cache无效。

清理(clean)操作:把标记为脏的整个cache或者某个cacheline写回下一级cache或者内存中,然后清除cacheline中的dirty bit。这使得cacheline的内容与下级cache或者内存中的数据保持一致。

清零(zero)操作:在某些情况下,用于对cache进行预取和加速。例如,当程序需要使用较大的临时内存时,如果在初始化阶段对这块内存进行写零操作,cache控制器就会主动把这些零数据写入cacheline中。若程序主动使用cache的清零指令,那么将大大减小系统内部总线的带宽。

另外,ARM还正常清理并失效 (clean and invalidate)操作:它会先执行清理操作,然后再使cacheline失效。

对cache的操作可以指定如下不同的范围:

整块cache。

某个虚拟地址。

特定的cacheline或者组(set)和路(way)。

DC和IC指令的格式如下:

DC <operation>, <Xt>IC <operation>, <Xt>

DC和IC指令包含两个参数:一个是操作码;另一个是通用寄存器Xt,用于传递参数,例如虚拟地址等。

操作码可以分成以下4部分:

功能:表示cache维护指令的功能(I、C、CI、Z)。

类型:表示指令操作的范围,例如VA是针对单个虚拟地址的操作,SW表示针对cache中的路和组进行操作,ALL表示针对整个cache。

观察点:表示站在哪个角度对cache进行操作,U表示站在PoU角度,C表示站在PoC角度。

共享:IS表示内部共享属性。

IC指令格式中的U还可以和共享属性IS结合来表示属于同一个内部共享域的一组处理器。例如,“ic ialluis”指令表示使内部共享域中所有处理器的指令cache都失效。

ARMv8架构支持的高速缓存指令如下表所示。

另外,补充介绍一下PoC/PoU/PoP的概念:

PoC(Point of Coherency):在此处,确保所有可以访问内存的观察者都能看到相同的副本,这些观察者是系统中所有可以访问内存的模块,例如CPU、GPU、DMA设备等。在使用CHI总线的系统中,PoC一般是HNF节点。

PoU(Point of Unification):在此处,确保PE的I-cache、D-cache以及MMU(TLB)能够看到相同的副本(具体描述见ARM spec)。对于单核处理器来说,PoU就是系统内存;对于多核处理器,PoU取决于共享域(shareability domain)属性。

PoP(Point of Persistence): 持久节点,它是Memory系统中的一个节点,当系统电源断开时,对Memory的写入会被维持,当电源恢复到Memory中受影响的位置时,写入会被可靠地恢复。

参考:

ARM64体系结构编程与实践

ARM系列 -- 缓存维护指令

相关推荐