cortex-a9,把一段尺寸为512K的内存lock 到L2中,然后访问它,用cp15,0,r0,c9,c13,2可以看到,能够 cache hit
然后执行L2flush,再访问,用cp15,0,r0,c9,c13,2,发现 cache miss。
why?
你所说的Flush指的是clean and invalidate吗。如果是的话,其中invalidate部分就清除了cache line的valid位。这样肯定是会miss的。 L2 cache controller TRM DDI0246C (http://infocenter.arm.com/help/topic/com.arm.doc.ddi0246c/DDI0246C_l2cc_pl310_r2p0_trm.pdf )173页对invalidate的解释力提到了flush,并且说flush之后所有的cache line都是invalidate的。
如此的话,只会miss一次啊,可我看到的是,只要flush一次,以后就永远miss了,就像L2cache没有了。
如果不lock,就只miss一次。
原来是这样,不好意思,不知道你遇到的情况是一直miss。实际应用中我也没真正的lockdown过cache,所以也不是很清楚。能想到一种情况就是在有Security Extension的情况下在一个world中lockdown了所有的cache,然后另一个world访问同样virtual address的时候八成会一直miss吧。不过我也是新手,也不确定对不对,还是问问专家吧。