原文地址:Extended System Coherency - Part 1 - Cache Coherency Fundamentals
原作者:neilparris
TechCon 2013 的主题是“智能互联”,而在许多方面,硬件系统一致性是 SoC 中智能互联的一个重要部分。我在今年的演讲“移动等平台的扩展系统一致性”中介绍了缓存一致性的基本信息,探讨了相关实施,也研究了一些用例。 本文是系列博文中的第一篇,首先介绍缓存一致性的基本信息。
我们先回到起点,了解一致性意味着什么。 一致性意味着确保系统中所有处理器或总线主控器看到相同的内存视图。 例如,如果我有一个处理器创建数据结构,再传递到 DMA 引擎以移动它,那么处理器和 DMA 必须看到相同的数据。 如果该数据曾在 CPU 中缓存过,而 DMA 从外部 DDR 中读取,那么 DMA 将读取到过时、陈旧的数据。
维护一致性的机制有三种:
· 禁用缓存是最简单的机制,但可能牺牲大量 CPU 性能。 为获得最高的性能,处理器采用管线结构以在高频率上运行,并从延迟性非常低的缓存运行。 数据缓存可以被多次访问,从而大大提高性能,同时减少 DRAM 访问次数并降低功耗。 将数据标记为“非缓存”可能会影响性能和功耗。
· 软件管理一致性是数据共享问题的传统解决方案。 此处软件通常指的是设备驱动程序,它们必须从缓存中清理或清空脏数据,使旧数据失效,从而与系统中的其他处理器或主控器实现共享。 这将占用处理器周期、总线带宽和功耗。
· 硬件管理一致性提供可简化软件的替代方式。 使用这一解决方案时,任何标记为“共享”的缓存数据将始终自动保持最新。 该共享域中的所有处理器和总线主控器看到完全相同的值。
缓存将外部内存内容存储到靠近处理器的位置,从而缩短访问延迟并降低功耗。 片上内存访问的功耗要远低于外部 DRAM 访问。
软件管理一致性通过两个主要机制管理缓存内容:
· 缓存清理(清空):
o 如果缓存中存储的任何数据被修改,它会标记为“脏”,必须在未来某一时点写回到 DRAM。 这种清理或清空缓存的过程将强制脏数据写入到外部内存。
· 缓存失效:
o 如果处理器拥有数据的本地副本,但外部代理更新了主内存,那么缓存内容将过期或变得“陈旧”。 在读取这一数据前,处理器必须从缓存删除陈旧的数据,这称为“失效”(缓存线标记为无效)。 例如,某一内存区域用作网络流量的共享缓冲区,网络流量可能会被网络接口 DMA 硬件更新;想要访问这一数据的处理器必须先使任何陈旧副本失效后才能读取新的数据。
来自应用处理器供应商的一位系统架构师的声音:
“50% 的调试时间花在了软件一致性问题上,因为它们难以发现和查明”
软件一致性难以进行调试,而缓存清理和失效必须在正确的时间执行。 如果过于频繁,这会浪费功耗和 CPU 资源。 如果频率太低,它将导致数据陈旧,并可能引起不可意料的应用程序行为甚至崩溃。 对此进行调试的难度很高,因为偶尔会引起数据损坏。
“我们希望通过硬件一致性连接更多设备,以简化软件并加快产品计划”
上述话语来自某一应用处理器供应商,他们寻求在一致互联结构中连接更多的硬件加速器和接口,帮助缩短新产品的上市时间。
来自网络和调制解调器合作伙伴的声音:
“我们软件部门中只有少数人懂得处理器和无线电子系统之间共享数据所需的谨慎定时。 将此放大为强大百倍的软件团队是非常困难的!”
另一家制造配备 Cortex-A CPU 的调制解调器系统的合作伙伴也希望通过硬件一致性简化软件。
如果请求程序之间存在大量共享,软件缓存维护的代价就会很高,而且可能会限制性能。 例如,ARM 基准测试发现处理每一数据包标头的联网应用程序可能会将超过三分之一的 CPU 周期花在缓存维护上。 难点的一部分在于找出哪些数据需要进行维护。 在最糟糕的情形中,必须清空整个缓存内容,这可能会移走需要从 DRAM 读回的有用数据。
下表显示了硬件一致性与软件一致性 DMA 传输性能对比的简单示例。 在这一示例中,随着处理器缓存中脏数据量的增加(命中率),硬件一致性的性能也在提高。 这是因为,在拥有更多脏数据时,软件一致性版本将花费更多时间来清理缓存并使之失效。
硬件一致性并非新概念。 实际上,ARM 对其的第一次实施是在 ARM11 MPCore 处理器中。 在这一处理器中,最多 4 个处理器核心集成到一个群集中,作为“对称多重处理器”(SMP) 运行,它们可以互相看到对方的 L1 缓存和共享 L2 缓存。 这一技术受到了所有最新 ARM Cortex 应用处理器的支持。
将硬件一致性扩展到系统需要一致总线协议。ARM 在 2011 年发布了 AMBA 4 ACE 规格,在流行的 AXI 协议基础上推出了“AXI 一致性扩展”。 完整的 ACE 接口允许处理器群集之间实现硬件一致性,并且允许 SMP 操作系统扩展到更多核心。 以两个群集为例,任何对内存的共享访问可以“监听”另一群集的缓存,以了解数据是否已在芯片上;如果没有,则从外部内存 (DDR) 中获取。
AMBA 4 ACE-Lite 接口的设计面向 IO(或单向)一致系统主控器,如 DMA 引擎、网络接口和 GPU。 这些设备可能没有自己的缓存,但可以从 ACE 处理器读取共享数据。 另外,它们可能也有缓存,但不缓存可共享的数据。
虽然硬件一致性可能为互联和处理器增加一些复杂性,但它可以大大简化软件,实现凭借软件一致性无法实现的应用。 例如,big.LITTLE 全局任务调度。
缓存一致性是共享数据时需要理解的重要概念。 禁用缓存可能会影响性能;软件一致性会增加开销和复杂性;而硬件一致性可以自动管理共享,从而简化软件。 AMBA 4 ACE 总线接口使硬件缓存一致性超越处理器群集范围,扩展到系统层面。
本系列博文中的下一篇将探索硬件一致性的实施,并且列举各种各样的应用,如 big.LITTLE 处理和 GPU 计算等移动应用,以及联网和服务器等企业应用。
单击此处阅读第 2 部分: 扩展系统一致性 - 第 2 部分 - 实施、big.LITTLE、GPU 计算和企业级应用
单击此处阅读第 3 部分: 扩展系统一致性 - 第 3 部分 - 性能提升和 CoreLink CCI-500 简介