潮声隔雨深 · 2020年02月14日

L2cache禁止,为什么cpu运行会比恒miss要慢?

按以下流程测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 快一些?

1 个回答 得票排序 · 时间排序
一知半解 · 2020年02月14日

你的想法是用0xfc000000开始的数据填充整个L2 cache, 但是你没法完全做到,比如instruction 可能有部分在里面,也许还有部分其它Data。可能对都后面的memcpy带来好处。

可以看一下这两种情况下cache miss有什么不同。

另外PL310支持prefetch。 即使所有的cache被lock, 这个行为依然有效。假如刚好L1 memory sysyem来了数据请求,预取的数据会直接传到L1, 这样有可能对性能有提升。

你的回答