文章目录
-
- [CCI Family](#CCI Family)
- [CCI-550 简介](#CCI-550 简介)
-
- [CCI-550 功能](#CCI-550 功能)
- [CCI-550 Interfaces](#CCI-550 Interfaces)
- [Snoop filter 使用背景](#Snoop filter 使用背景)
- [CCI-550 Snoop filter](#CCI-550 Snoop filter)
上篇文章:ARM CoreLink 系列 2 -- CCI-400 控制器简介
CCI Family
CCI-550 简介
Arm CoreLink CCI-550 Cache Coherent Interconnect 扩展了 CoreLink CCI-500。它在 big.LITTLE 处理器集群之间提供完整的缓存一致性,并为其他代理(如 Mali GPU、网络接口或加速器)提供 I/O 一致性。
CoreLink CCI-550 提供可扩展和可配置的互连,使 SoC 设计人员能够以尽可能小的面积和功耗满足性能目标,并且还增加了可降低整体系统延迟的监听滤波器。
CCI-550 功能
CCI-550 主要功能:
-
ACE masters 之间的数据一致性;
-
QoS 服务,用于配置transaction优先级;
-
输入和输出(I/O) 与 ACE-Lite master的一致性;
-
master 和s laver之间的交叉开关互连功能;
-
性能监控单元(PMU),用于对与性能相关的事件进行计数;
-
用于MMU 之间通信的主设备之间的DVM 消息传输;
-
侦听过滤器(核心功能),可降低侦听功率并提高侦听未命中的性能;
-
支持 Arm TrustZone 技术以提供安全、非安全和受保护状态。
CCI-550 Interfaces
CCI-550 是高度可配的,你可以在系统中配置多个master 和 slave, 下图是一个基于CCI-550配置的系统框图:
上图中可以看到 支持ACE 协议的 S5 和 S6 接口连接了 Cortex-A53 和 Cortex-A72 ,CCI-550 可以管理 L1 Cache 和 L2 Cache之间数据共享和数据同步。
在CCI-550 中可以使用ADB-400(AMBA Domain Bridge)集成多个 power domain 和 clock domian;
-
S0-S4 连接了支持 ACE-Lite 的 Mali-T860 GPU 或者 Mali-T880 GPU,或者支持 ACE-Lite + DVM 的 MMU;
-
CCI-500 提供了 APB Salve 接口,可以通过 APB 接口来对CCI-550 进行配置;
-
M5-M2 连接了 Memory controller,从而可以支持LPDDR4 和 LPDDR3;
-
对于 CCI-500 clock 和 power的控制可以通过 Q-channel 和 P-channel。
Snoop filter 使用背景
CPU从内存中读取数据到 cache line 的操作被称为 "load" ,而将cache line中的数据写回到内存对应位置的操作则被称为 "store" 。在硬件设计中,cache属于CPU的一部分,而CPU和内存之间是通过bus(总线)相连的,因此不管是"load"还是"store"操作,都需要经过总线的传输,总线的一次传输被称为 "transcation"。
总线被多个CPU所共享,某个CPU对总线的访问,都能被挂接在同一总线上的其他 CPU "看到"。
怎样看到?
实现的方式一般来说来有两种,其中一种就是是"Snooping",
Snooping 机制采用广播的形式,也就是当一个CPU 修改了cache line之后,将广播通知到总线上其他所有的CPU。收听广播是需要耳朵 的,对于CPU来说这个"耳朵"就是一个硬件单元,它会负责监听总线上所有 transactions 的广播。
广播的方式虽然简单,但要时刻监听总线上的一切活动,可得累个够呛,而且CPU之间共享的内存数据毕竟只占少数,大部分监听可以说都是白费力气,所以才引入了一个用于过滤的 snoop filter ,过滤的标准就是看自家的CPU有没有缓存这个transaction涉及到的内存位置,或者说有没有对应的cache line。
那怎么判断有没有呢?
答: 识别 cache line的标准,自然是 Tag 比对:
过滤之后接收方的工作减轻了,可广播还一直在那儿呢,每个CPU产生的总线transaction,都要广播给其他的每个CPU,这得多消耗总线带宽(bandwidth)啊。假设CPU的个数是N,那么需要的总线带宽就是: N * (N-1) = N^2^ - N
所以,如果总线上CPU的数目比较少还好(2到8个),这按平方的增长速度,多了总线可就吃不消了。
CCI-550 Snoop filter
如上文所述,CCI-550 包含一个监听过滤器(snoop filter),用于记录存储在ACE master cache中数据的地址。
如果 coherency总线发起一个 snoop transaction 之后,但是这个时候,在其他master中并不存在所需的数据,snoop filter 就会给snoop transaction返回一个respons。