内存缓存无法正常工作

时间:2014-11-19 03:14:24

标签: caching u-boot

我正在开发一个可以使用特殊DMA引擎的uboot测试应用程序。 DMA引擎将在没有“通知”缓存的情况下在存储器之间传输数据。因此,我希望如果我继续将不同的数据传输到同一目的地,我应该得到陈旧的数据。

然而,我发现我总是得到DMA引擎发送的正确数据。这让我觉得可能没有启用dcache。所以我尝试了uboot内置cmd - dcache。它显示我的数据缓存已启用。我检查了TLB表,所有页面都标记为“回写写分配”。那么这意味着缓存已启用吗?

我发现更有趣的是,我写了一个简单的程序,只是继续阅读相同的地址。我发现通过使用dcache cmd禁用dcache,运行测试的时间只增加了三倍。我在Linux上尝试了在相同硬件上进行类似的简单测试,缓存可以实现超过15倍的性能提升。所以这绝不是硬件问题。

总之,我发现我的缓存在某种程度上起作用但没有完全发挥作用。这可能是一个配置问题。有什么理论可以解释我发现了什么吗?我该如何继续调试...谢谢

1 个答案:

答案 0 :(得分:0)

我自己回答一下......

Uboot中的代码有点误导......它运行

set_section_dcache(i,DCACHE_WRITEBACK_WRITETHROUGH)

但是在检查MMU之后,事实证明存储器类型被设置为设备。