cache一致性意味着确保系统中所有处理器或总线主控器看到相同的内存视图。 例如,如果我有一个处理器创建数据结构,再传递到 DMA 引擎以移动它,那么处理器和 DMA 必须看到相同的数据。 如果该数据曾在 CPU 中缓存过,而 DMA 从外部 DDR 中读取,那么 DMA 将读取到过时、陈旧的数据。
维护一致性的机制有三种:
· 禁用缓存是最简单的机制,但可能牺牲大量 CPU 性能。 为获得最高的性能,处理器采用管线结构以在高频率上运行,并从延迟性非常低的缓存运行。 数据缓存可以被多次访问,从而大大提高性能,同时减少 DRAM 访问次数并降低功耗。 将数据标记为“非缓存”可能会影响性能和功耗。
· 软件管理一致性是数据共享问题的传统解决方案。 此处软件通常指的是设备驱动程序,它们必须从缓存中清理或清空脏数据,使旧数据失效,从而与系统中的其他处理器或主控器实现共享。 这将占用处理器周期、总线带宽和功耗。
· 硬件管理一致性提供可简化软件的替代方式。 使用这一解决方案时,任何标记为“共享”的缓存数据将始终自动保持最新。 该共享域中的所有处理器和总线主控器看到完全相同的值。
软件一致性的挑战
缓存将外部内存内容存储到靠近处理器的位置,从而缩短访问延迟并降低功耗。 片上内存访问的功耗要远低于外部 DRAM 访问。
软件管理一致性通过两个主要机制管理缓存内容:
· 缓存清理(清空):
o 如果缓存中存储的任何数据被修改,它会标记为“脏”,必须在未来某一时点写回到 DRAM。 这种清理或清空缓存的过程将强制脏数据写入到外部内存。
· 缓存失效:
o 如果处理器拥有数据的本地副本,但外部代理更新了主内存,那么缓存内容将过期或变得“陈旧”。 在读取这一数据前,处理器必须从缓存删除陈旧的数据,这称为“失效”(缓存线标记为无效)。 例如,某一内存区域用作网络流量的共享缓冲区,网络流量可能会被网络接口 DMA 硬件更新;想