cache read system memory vs cpu read system memory

时间:2017-04-26 01:44:56

标签: memory arm cpu-architecture cpu-cache

在运行Android / Linux的基于ARM的ARM上,我发现了以下内容:

  1. 为设备DMA输入分配未缓存的内存区域。 DMA完成后,此内存区域的内容将复制到另一个系统内存区域。
  2. 为设备DMA输入分配内存区域缓存。 DMA完成后,使存储器范围无效,然后将该存储区的内容复制到另一个系统存储区。
  3. 分配的内存区域大小约为2MB,大于缓存大小(L2缓存大小为256KB)。

    方法2比方法1快x10

    即:方法2的存储器复制操作比方法1

    快x10

    我推测方法2在复制时使用来自系统内存的缓存行大小读取缓存,方法1需要从系统内存中读取总线事务大小的cpu绕过缓存硬件。

    但是,我找不到明确的解释。我很感激谁能提供详细的解释。

1 个答案:

答案 0 :(得分:0)

涉及的硬件项目太多,很难给出细节。 SOC确定了很多这个。但是,您观察到的是现代ARM系统的典型性能。

主要因素是SDRAM。所有DRAM都采用'行'和'列'。 DRAM history 在DRAM芯片上,整个'行'可以一次阅读。即,存在晶体管矩阵,并且存在可以读取整行的物理点/布线(实际上可能存储用于将ROW存储在芯片上的SRAM)。当您阅读其他“'”列时,您需要“免费充电/预充电”。用于访问新行的接线'。这需要一些时间。重点是DRAM可以在大块中非常快速地读取顺序存储器。此外,由于存储器随每个时钟边沿流出而没有命令开销。

如果将内存标​​记为未缓存,则CPU / SOC可能会发出单次读取。通常这些都会预先充电'在单次读/写期间消耗额外的周期,并且必须将许多额外的命令发送到DRAM设备。

SDRAM还拥有'银行'。银行有一个单独的“行”。缓冲器(静态RAM /多晶体管存储器),允许您从一个库读取到另一个库,而无需重新充电/重新读取。银行往往相隔很远。如果您的操作系统已经物理分配了“未缓存的”'与2 nd '缓存'不同的存储库中的存储器区域,那么这也将增加额外的效率。在OS中常见的是分别管理缓存/未缓存的内存(对于MMU问题)。内存池通常足够远,可以在不同的库中。

相关问题