IO Coherence有了解的么?
从硬件上支持让外设也参与coherence
这样就不用软件维护CPU和外设间的一致性了
常见的情景包括DMA、GPU等外设和CPU间的一致性
有如下几个问题想跟大家讨论:
请问目前使用IO Coherence的系统有哪些?
目前常用的ARM系统是否支持?
支持IO Coherence的利弊各有哪些?
ARM Cortex-A系列多核都带有ACP端口,可以外挂最多8个AXI master,ACP端口接到ARM多核内部的Snoop Control Unit,由SCU负责监控和转发这些外部AXI master通过ACP端口发出的传输事务,然后维持L1 data cache和external memory的数据一致性
嗯,谢谢
SCU只能监控L1 data cache
如何监控L2 data cache呢?
是否是直接把ACP的请求发给L2
让L2决定是否再转发给下一层的external memory?
直接发给L2,由L2 conroller决定是否需要访问L3
A15/A7支持ACE协议了,不再是被动的接受数据,系统bus里也包含snoop unit。ARM推出支持ACE协议的bus fabric叫CCI-400,使用A15的SoC应该都要用这个。
其他公司也有做类似产品的,我了解的有Arteris。
嗯,明白
不过这样频繁对L2访问是否压力比较大?
毕竟多数DMA请求都是和Cache无关的
现在主流的ARM SOC是否都是这样实现的呢?
ARM SOC种类太多了。。。估计AP这么干的多,就像上面兄弟说的,A15/A7用ACE协议在总线级别完成cache一致性维护,因为AP有这需求。主要看你们做什么类型的SOC,跑什么应用,这需要你和软件的人一起确定了
A9 这代io coherence 通过 A9的ACP接口实现, 有一致性需求的master 连到A9的ACP上, 复用A9的SCU 和L2。 为了降低对A9的影响,A9支持配2个AXI端口。 但这总方案总觉得怪怪的。
A15这代,就不再使用ACP了。 而通过level3的 SCU实现 多个cluster的一致性, 也就是CCI-400,这种结构看着顺眼多了。对于io coherence master 是通过ACE-lite 连接到CCI上, 也就是他们内部没有“cache”,但是需要update/get from A15/A7 cache里的内容。
我了解下来某些应用是需要cache-based和dma-based的data movement,
具体情况还是需要分析算法流程,系统结构
即便某些算法属于frame Level的处理,因为数据源的问题,也可采用经acp获取数据
不知道哪些兄弟也做了类似的活
A9只支持一级的Snoop,A15/A7支持L1/L2两级的snoop。