缓存一致性协议
1. 集中式与分布式存储器的多处理器架构
1.1 集中式存储器的多处理器架构 centralized shared-memory multiprocessor (SMP)
- 此类架构的特点是所有核心共享一个集中式的存储器,SMP结构有时也被称为uniform memory access(UMA)一致性存储访问多处理器,也就是说所有的存储器访问时间都是一致的。
- 多个处理器缓存(Cache)子系统共享相同的物理内存,通常具有一级共享缓存(LLC)和一级或多级每核私有缓存。
- 关键的架构属性是所有处理器对所有内存的访问时间是统一的,通常此类架构核心数较少,因为集中式的存储器接口带宽难以支持大量核心的访问需求。
- 在多芯片(chiplet)版本中,共享缓存将被省略,将处理器连接至内存的总线或互连网络,在芯片之间运行而不是在单个芯片内运行。
1.2 分布式存储器的多处理器架构 distributed-memory multiprocessor (DSM)
- 为了支持更大的处理器数量,内存必须分布在处理器之间,而不是集中式,否则,memory系统将无法支持带宽需求更大数量的处理器,以致于产生过长的访问延迟。
- 随着处理器性能的快速提高以及相关的增加处理器的内存带宽要求,多处理器的大小首选分布式多核处理器
- 处理器数量的增加也提出了对高带宽互连的需求。
2. 一致性协议基本实现方式
2.1 什么是缓存一致性 What Is Multiprocessor Cache Coherence?
- 在多核处理器架构,memory中存储着两类数据:专用数据(private data),共享数据(shared data)。专用数据是供单个处理器使用的数据,共享数据是由多个处理器使用,其读写实现了处理器之间的通信。
- 缓存(cache)数据可以降低处理器对memory的带宽需求,在缓存专用数据时,不会出现一致性问题。但是在缓存共享数据时,可能会在多个cache中存在共享数据的copy,从而产生一致性问题。
存在一致性问题是因为数据既有全局状态(存储在共享的储存器中)又有本地状态(由各个cache专用)。
实现缓存一致性协议的关键是在于跟踪cache data block的所有共享状态,目前有两类跟踪共享状态的方法,目录和监听。
2.2 目录式一致性协议简介 Directory based Cache Coherence
特定物理内存块(memory block)的共享状态保存在一个称为目录的位置。
有两种非常不同的基于目录的高速缓存一致性。
- 在SMP中,我们可以使用一个集中的目录,与内存或一些其他单个串行化点(例如多核中的LLC)关联。
- 在DSM中,拥有单一目录是没有意义的,因为那将创建一个争用点,并且在满足具有八个或更多核心的多核芯片的内存需求的情况下,难以扩展。
分布式目录比单一目录更复杂,在本专栏的其他的文章会具体介绍。(下图中的广播协议是监听协议的一种实现方式)
2.3 监听式一致性协议简介 Snooping Cache Coherence
- 监听(Snooping)式的方式与共享状态保存在单个目录中不同,每个缓存都可以跟踪来自物理内存块的数据的共享状态。
- 在SMP中,这些缓存通常都可以通过某种广播介质访问(例如,总线将每个核心的缓存连接到共享缓存或内存),所有缓存控制器都监听该介质,以确定它们是否拥有被请求的内存块的副本。监听也可以作为多芯片多处理器的一致性协议,一些设计在每个多核内还支持在目录协议之上的监听协议!
对于监听式一致性协议,主流的实现方式是写失效或者写广播,在本专栏的其他的文章会具体介绍。
2.4 监听式+目录式简介 Snooping over Directory
对于一些带有Core Cluster的设计,可以使用本地目协议维护Core Cluster内的一致性,而这些Cluster之间的一致性是通过全局监听协议实现。例如:
A Novel Hybrid Cache Coherence with Global Snooping for Many-core Architectures