我看到技术文档上说,MSM默认状态时cache enable的,而且在MSM上cache一致性的工作需要用户完成。
基于以上两点,我举个例子,假如core0向0x0c000000地址写入一个数据,随后core1读取这个地址的数据,此时这个地址应该映射到core1的L1D中,然后我再次在core0中改变这个地址的数据,在core1上是无法表现出来的,因为core1只会在L1D cache中获取之前已经缓存了的数据。
为了避免上述现象发生,是不是表示要在core1使用MSM中的数据之前,先用cache_inv使L1D cache中这个地址的数据无效?
如果这样做的话,在使用这个数据的时候,L1D cache会重新刷新这个地址位的数据,这样不是就达不到cache高速数据吞吐的目的了么?
Andy Yin1:
对的,MSM需要应用程序维护cache一致性,写端进行cache flush,读端进行cache invalid。
如果每次处理时都是cache invalid会导致cache miss确实会影响效率,所以如果是大量的数据建议把数据通过EDMA或Navigator等直接存到LL2处理,LL2的cache一致性是由硬件维护。
yun xu:
回复 Andy Yin1:
L2是通过snoop命令维护cache一致性的,请问snoop命令会带来额外的时间开销么
yun xu:
回复 Andy Yin1:
谢谢