【发布时间】:2017-04-26 01:44:56
【问题描述】:
在运行 Android/Linux 的基于 arm 的 SoC 上,我观察到以下情况:
- 将内存区域分配为未缓存用于设备 DMA 输入。 DMA 完成后,这个内存区域的内容被复制到另一个系统内存区域。
- 为设备 DMA 输入分配一个内存区域作为缓存。 DMA完成后,使内存范围无效,然后将此内存区域的内容复制到另一个系统内存区域。
分配的内存区域大小约为 2MB,大于缓存大小(L2 缓存大小为 256KB)。
方法 2 比方法 1 快 10 倍
即:方法2的内存复制操作比方法1快10倍
我推测方法 2 在复制时使用 cache line size 从系统内存读取缓存,而方法 1 需要通过 bus transaction size 从系统内存读取 cpu 绕过缓存硬件。
但是,我找不到明确的解释。感谢谁能帮忙提供详细的解释。
【问题讨论】:
-
问题不仅仅在于“缓存”版本能够通过缓存访问服务所有后续请求,而未缓存版本必须一直通过内存获取数据。
标签: memory arm cpu-architecture cpu-cache