ar app是什么:Cache Controller的基本组成部件

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 02:07:54

在一个处理器系统中,存储器子系统是一个被动部件,由来自处理器的存储器读写指令和外部设备发起的DMA操作触发。虽然在存储器子系统中并无易事,DMA操作依然相对较易处理。在多数设计中,一个设备的DMA操作最先看到的是LLC,之后在于其他Cache进行一致性操作。通常处理器系统的LLC控制器将首先处理这些DMA操作。

随着通用处理器集成了更多的智能外部设备,这些智能设备已经直接参与到处理器系统的Cache Coherency中,这些设备可以直接访问原来属于处理器系统的存储器子系统。最典型的设备就是Graphic Controller。从Sandy Bridge微架构开始,x86处理器内部集成了Graphic Controller,Graphic Controller可以与处理器共享存储器子系统。这使得NVDIA无法继续参与这个内部集成,以获得许多显而易见的优点时,义无反顾地投奔ARM阵营。

本篇不再关注这些与外部设备相关的Cache一致性,也不再讲述与DMA操作相关的细节,重点关注来自指令流水线的存储器指令的执行,以及在这些存储器指令的执行过程中,通过Cache Controller时所进行的对应操作。

从实现的角度上看,任何一个复杂的处理器系统都是由数据缓冲,连接这些数据缓冲的通路和控制逻辑组成。其中与Cache Controller相关的通路,数据缓冲和控制逻辑是最重要的组成部件,也是处理器系统的数据通路的主体。

这些Cache Controller及其数据缓冲通过横向和纵向连接,组成一个基本的CMP系统,而后这些CMP通过各类拓扑结构进一步连接,形成复杂的ccNUMA处理器系统,如图4?1所示。本篇所重点关注的是,在一个CMP处理器系统之内的Cache Controller组成与结构,并简单介绍ccNUMA处理器系统的互连方式。

在一个ccNUMA处理器系统中,Cache Controller由FLC/MLCs/LLC Cache Controller,DMA Controller和Directory Controller,共同组成。其中FLC Cache Controller与LSU和指令流水线直接相连,管理第1级分离的指令与数据Cache;MLCs Cache Controller可能由多级MLC Controller组成,上接FLC下接LLC Controller,管理中间层次的Cache。在多数CMP处理器中,FLC与MLCs Controller在一个CPU Core之内,属于私有Cache,并且与CMP处理器中的其他处理器的FLC/MLCs保持一致。

LLC Controller管理CMP处理器的最后一级Cache。在一个CMP处理器中,LLC通常由多个CPU Core共享,其组成结构可以是集中共享,也可以分解为多个Distributed LLC。Directory Controller是实现ccNUMA结构的重要环节,该Controller通常设置在Home Agent/Node中,并与主存储器控制器直接关联在一起。当一个数据请求在LLC中Miss后,将到达Home Agent,之后在进行较为复杂的CMP间的Cache Coherency/Memory Consistency处理。

我们首先讨论在一个CMP系统内,FLC,MLCs,LLC的连接拓扑结构,即Cache通路互连结构。在这个通路设计中,需要重点关注的依然是Throughput和Latency,同时实现处理器系统所约定的Memory Consistency模型。

在一个CPU Core内,FLC大多为Private Cache,当然我们需要忽略SMT这类典型的共享FLC的拓扑结构。MLCs可以被多个CPU Core Share,也可以为Private。如在Intel的Nehalem微架构[12]和Sandy Bridge微架构[69]中,MLCs为Private。最初Power系列处理器对多CPU Core共享MLCs情有独钟,Power4和Power5都采用了这种架构[75][76],而后出现的Power6和Power7放弃了Share MLCs这种方式,也采用了Private MLCs的方式[77][78]。

AMD最新的Bulldozer微架构采用了两个CPU Core共享一个MLC(L2 Cache)的方式,而且出人意料的使用了NI/NE (Non-inclusive and Non-Exclusive)和Write-Through组成结构[74],与之前微架构Cache的组成方式相比,唯一坚持的只有VIPT。

在有些CMP中,LLC为多个Core共享,也有部分CMP将LLC作为Victim Cache,如Power6和Power7[77][78]。为增加LLC的带宽和Scalability,一些CMP采用了Distributed LLC方式。我们首先讲述CPU Core与LLC之间的连接关系。在一个CMP系统中,多个CPU Core与LLC通常使用Share Bus,Ring或者Crossbar三种方式进行连接,如图4?5所示。


其中Share Bus结构最为直观,在处理Memory Consistency时也最为便捷,所存在的问题也显而易见,即Share Bus所能提供的最大带宽有限,很难挂接更多的CPU Core。多个CPU Core在争用同一条总线时,不仅降低了有效带宽,也进一步加大了Latency。

目前许多CMP处理器使用了Ring Bus的组成结构,如Intel的Sandy Bridge[69],IBM的Power4[75],Power5[76],Cell处理器[79]和XLP832[80]。与Share Bus相比,Ring Bus能够提供的带宽相对较大,处理Memory Consistency也相对较为容易。

当使用Ring Bus时,每一个CPU Core通过Ring Node与Ring Bus互连,而每一个Ring Node与其相邻的两个Node采用点到点的连接方式。在一个实现中Ring Bus可以是单向的,也可以是双向的。由于Coherency的要求,Ring Bus通常由多个Sub-Ring组成,分别处理数据报文与Coherent Message报文。其设计难点主要集中在Ring Bus的Ordering处理和Ring-Based的Token Coherence模型。在某种程度上说,Share Bus与Ring Bus是一致的,尤其是在Snoop Message的处理器中。

与Share Bus和Ring Bus两种连接方式相比,使用Crossbar Switch方式可以提供较大的物理带宽,而且可以获得较小的Latency,然而在Memory Consistency层面需要付出更大的努力。在有些处理器中,联合使用了Crossbar和Ring结构。如Power4使用Crossbar连接两个L1 Cache和L2 Cache,而使用Ring连接L2 Cache,L3 Cache,L3 Directory和存储器控制器[75]。采用Crossbar Switch的一个重要的微架构是UltraSPARC系列处理器,目前UltraSPARC T1和T2(Niagara和Niagara 2)[81]采用了这种结构。在Niagara 2处理器中含有8个CPU Core,每一个Core中含有8个Thread。

T2微架构的Crossbar采用Non-Blocking,Pipelined结构,上接8个L1 Cache,下与8个Bank的L2 Cache相连,可以同时处理8个Load/Store数据请求和8个Data Return请求。L1 Cache采用Write-Through方式,L2 Cache采用Write-Back,Write-Allocate方式。使用Crossbar方式并不易处理Cache Coherent, T2微架构专门设置了L2 Directory[81],占用了较多的Die Size,以至于T2包括之后的SPARC64 VIIIfx(Venus) L3 Cache的容量较小,这对BLAS和其他用于科学计算的实现并没有太大影响。采用Venus微架构的K Computer集成了68,544个CPU Core,LINPACK的最终Benchmark结果达到了8.162 petaflops,跃居TOP500处理器之首[82]。

这些CMP处理器可以进一步通过互连网络,组成更为复杂的ccNUMA处理器系统,更为复杂的Supercomputer处理器系统,如K Computer,Tianhe-1A,Jaguar和Roadrunner等。此时的连接通路已在处理器芯片之外,这是Infiniband,QPI和HT这些连接方式的用武之地。连接上万个PE(Processor Element)的Interconnection令人惊叹。这些Interconnection所使用的数据通路,通信协议和状态机组成了一个夺目的奇观。

对Performance,Performance,Performance的渴望使得Supercomputer的设计无所不用其极。每一个子设计都异常重要,任何一个疏忽都会极大降低一个系统整体的Stability。而对Scalability的无限追求更加增大了系统的设计复杂度。这一切极大降低了Supercomputer的Programmability。

每念及此都会放弃画出使用几个CMP,组成2S,4S和8S系统的连接通路图,这张连接通路图甚至没有一个CMP内部使用的Cache Hierarchy的连接关系复杂。而且这些连接通路仅是Cache Hierarchy设计的一部分,在FLC,MLCs和LLC之间还存在各类的Buffer。经过多番考量,我决定首先介绍LSU,FLC与MLCs之间存在的Buffer,如图4?6所示。


这张图依然不能反映CPU与其下Cache Hierarchy间的关系,一个实际的CPU Core与其下的存储器子系统间的连接异常复杂。不同的处理器架构其存储器子系统的实现也有较大的差别。但是对于一个存储器子系统而言,其所担负的主要任务依然明晰。

存储器子系统的首要任务是将所访问的数据经由各级Cache,最后传递到距离CPU Core最近的一级缓冲,即进行数据传送;另外一个任务是使用合适的机制管理与这些数据相关的状态信息,包括Cache的Tag,MSHR和其他复杂状态信息;最后可能也是需要额外关注的是,存储器子系统需要考虑本系统所使用的Consistency Model和Coherence Protocol。

在一个存储器子系统中,依然存在若干级子系统。其中每一个子系统大体由数据单元包括Data Array和相关Buffer,Cache控制器和连接通路这三大部分组成。这个子系统与其上和其下的子系统通过各类Buffer进行连接,协调有序地完成存储器子系统的三大任务。

上文已经多次提及LSQ和MSHR,而图4?6中的RSHR(Request Status Handling Register)与MSHR并不等同,MSHR的主要功能是处理来自CPU Core访问引发的Cache Miss请求,而RSHR主要处理来自存储器控制器的Coherence请求。在有些微架构中并没有设置RSHR,而采用了其他类似的部件实现。

Fill Buffer和MSHR协调工作暂存来自其下Cache Hierarchy的数据,在其中可能只保存了部分Cache Block;Store through Queue主要用于Defer Write和Write Combining请求。Writeback Buffer暂存Evicted Cache Line,其主要目的是Defer Writeback这个总线Transaction,保证其下的Cache Hierarchy可以优先处理Cache Miss请求。

上文提及的Buffer绝非FLC/MLCs Controller使用的全部Buffer,还有许多Buffer与Cache的预读,Cache Block的替换状态,以及Cache Read/Write/Evict Policy相关。不同的微架构采用了不同的实现策略。在这些不同的实现策略中所关注的重点依然是Bandwidth,Latency和Consistency。

为实现以上任务,Cache Controller需要处理几大类数据请求和消息。首先是Data Transfer请求,即进行数据块的搬移;其次是Data Transfer Replies,这个Reply报文可以带数据如存储器读请求使用的应答报文,也可以不带数据;之后是State Inquiry/Update Requests和State Inquiry/Update Replies,该类报文为保证数据缓冲间的状态信息的Consistency。

在一个实际的处理器系统中,进一步考虑到多级Cache Controller和外部设备,这几大类数据请求与消息会进一步分为更多的子类,以维护Cache协议与状态机的正常运行。不同的处理器系统使用了不同的Cache协议与状态机,使用了不同的组成结构,进一步加大了Cache Controller的设计难度。在ccNUMA处理器系统中,包含许多与Coherence相关的Data和Message。这些内容与Cache Memory的控制逻辑和协议状态机相关。

另外一个与控制逻辑和协议状态机直接相关的是Cache Block状态,MOESIF只是其中的部分状态,还有许多用于Cache层次结构互连,用于Consistency层面的Base状态,还有一些Transient状态用于处理Cache Block状态切换时出现的Race Condition条件。

在不同的Cache Controller中,如FLC/MLCs/LLC和Directory Cache Controller,这些状态即便名称类似,其定义依然有所差异。这些状态位之间相互关联也相互影响,进一步提高了Cache Controller的设计复杂度。

我们暂时忽略Cache Controller使用的其他状态位,重点关注其中一个较为特殊的状态位,Inclusion Property[83]。Inclusion Property的发明者Wen-Hann Wang先生最后加入了Intel,影响了Intel从P6直到Sandy Bridge微架构的多级Cache Hierarchy设计。Wen-Hann先生的这一发明使得多级Cache Hierarchy间的组成结构除了Inclusive,Exclusive之外,多了另外一个选择NI/NE结构。