2.1组件系统搭建起来后,会有cache一致性的问题
cache一致性的问题是什么呢?还是之前那个图,cpu,cache给标了一个号
假设现在所有的cache都没有数据
–cpu0从DDRC读了一个数据到L00,这个数据地址是0x0010,数据是0x1111。那么L2,L10,L00都有这个数据了!
–然后CPU0对这个地址数据改写了,把这个地址数据改成0x2222,写回到L00 。那么现在,L00里面地址0x0010的数据是0x2222. L10,L2,DDRC里面这个地址的数据是0x1111.
–然后现在!我CPU1也要读一个数据,地址还是这个0x0010,请问!!我CPU读到这个地址的数据是什么呢,应该是L10里的0x1111,还是L00里面的0x2222呢!
–CPU2,CPU3读这个地址应该读到什么数据呢
先说目标:cache一致性的目标,是要让所有的CPU都读到最新更新的0x2222这个数据,而不是0x1111这个旧数据
再来说cache一致性问题是什么:不同的cpu(或者是其他的模块),读同一个地址,读到的数据不一样,这就是cache一致性的问题(的最简单的理解)。反正也不考试,大概能领会到这玩意是个啥就行吧!
再来说导致这个问题的原因:是因为多个cache的存在! 同一个物理地址只能存一个数据,多级cache的存在造成了同一个物理地址的数据在不同的cache中可能有不同的数据。
其实已经说的很好理解了,强行解释一下多个cache:
在图中就有L0,L1,L2三级cache,假设L0,L1 cache没有了,只剩下L2了,那就不叫做多个cache了,那是不是就没有这个问题了?
诶~是的。
那实际中,可不可以去掉这些L0,L1 cache呢?
诶~可以。不过会影响soc的性能
在图中就有L0,L1,L2三级cache,假设L2,L1 cache没有了,只剩下L0了,那是不是就没有这个问题了?
额~L0不是有3个吗,照样有这个问题哟
可能有小许人看完这,脑子还是觉得CHI跟AXI差不多,都是用来传输数据的,你这Cache有一致性问题,跟我CHI有啥关系,难道我CHI还得帮你解决cache一致性吗?
啊哈,是啊!不然我这是讲故事催你睡觉吗?不确切地说来CHI应该跟ACE比较像(ACE我没搞过)
那怎么解决这个问题呢,不着急,我们先看cache state model