我正在开发一个可以使用特殊DMA引擎的uboot测试应用程序。 DMA引擎将在没有“通知”缓存的情况下在存储器之间传输数据。因此,我希望如果我继续将不同的数据传输到同一目的地,我应该得到陈旧的数据。
然而,我发现我总是得到DMA引擎发送的正确数据。这让我觉得可能没有启用dcache。所以我尝试了uboot内置cmd - dcache。它显示我的数据缓存已启用。我检查了TLB表,所有页面都标记为“回写写分配”。那么这意味着缓存已启用吗?
我发现更有趣的是,我写了一个简单的程序,只是继续阅读相同的地址。我发现通过使用dcache cmd禁用dcache,运行测试的时间只增加了三倍。我在Linux上尝试了在相同硬件上进行类似的简单测试,缓存可以实现超过15倍的性能提升。所以这绝不是硬件问题。
总之,我发现我的缓存在某种程度上起作用但没有完全发挥作用。这可能是一个配置问题。有什么理论可以解释我发现了什么吗?我该如何继续调试...谢谢
答案 0 :(得分:0)
我自己回答一下......
Uboot中的代码有点误导......它运行
set_section_dcache(i,DCACHE_WRITEBACK_WRITETHROUGH)
但是在检查MMU之后,事实证明存储器类型被设置为设备。