我有一个A53内核,并做了一些测试。
在收集了pmu之后,我发现第一种方法获得的L1缓存丢失比第二种方法少。我想这可能是因为地址转换使得“遥远”的数据被定位在"neer“物理地址中成为可能。这有利于L1缓存。
我还发现,当我在Linux模式(没有虚拟地址)和Linux用户模式(使用虚拟地址)进行测试时,用户模式可以获得更少的L1缓存丢失。
是对的吗?
发布于 2021-07-01 10:03:18
ARM缓存通常是VIVT,它代表“虚拟索引,虚拟标记”。这意味着缓存索引使用虚拟地址来计算集合和方式。由于您的代码运行在相同的虚拟地址上,物理映射对于缓存效果并不重要。
可能Cortex-A53有一个PIPT数据缓存,然后它将直接有意义,因为您可能已经根据缓存结构更改了设置/方式计算。一种更常见的技术是对齐数据以获得类似的效果。当然,MMU映射会影响PIPT缓存模式。
DDR通常在银行之间具有更快的模式等。一些代码可能会被延迟,推测执行可能会导致不同的内存访问模式,而这反过来又会导致L1缓存行为。
因此,您的观察可能是正确的,但可能不是MMU和缓存的直接结果,而是底层的内存技术。这也可能涉及L2缓存系统,通常是PIPT。
请参阅:维基百科页面着色
https://stackoverflow.com/questions/68205838
复制