按以下流程测L2cache,发现一个现象,请教一下大家。
芯片是xilinx的zynq,L2 size = 512K。
程序本身加载到0x100000。
关闭所有中断。
使能L1和L2。
把0xfc000000开始的512K数据lock到L2中。
反复读写0x140000开始的64K内存。这样,L2虽使能,但却恒定miss,程序能跑890遍/秒。
跑一段时间后,执行DisableL2Cache。程序能跑865遍/秒。
为什么,L2 enable时,即使恒定miss,也比L2 disable 快一些?
不好意西,我没说清楚。
该段代码运行在 0~1M,该空间在mmutable中完全禁止cache了,因此L2cache的填充,肯定是有效的。
您的意思是,即使miss,PL310还是会执行prefetch,因此提高了些许速度?
有这个可能性, 具体CPU的行为需要仿真一下才知道。但这样查的话比较耗时间。要是你有ARM 的support服务的话,可以发邮件到support@arm.com