非共享存储多处理器
共享存储多处理器
工作站机群(COW)
• 每个节点是一套完整的计算机系统(SMP或Workstation),拥有本地
磁盘和独立完整的OS;
• 使用低成本的商用互联网络实现节点间的互联
• 作业通常由大量服务组成,服务有各自的私有地址空间
• 服务间采用RPC或Resful API互相调用,通过消息队列来协调工作流程
• 企业级应用,廉价、大规模、扩展性,MapReduce@Hadoop
三高系统目标
大规模并行处理机(MPP)
• 使用高宽带低延时的通信网络实现节点间的互联
• 具有较好的可扩放性,支持数百/千万级别的处理器规模
• 作业通常由大量进程组成,进程有各自的私有地址空间
• 进程采用消息传递机制,常采用阻塞报文交互方式
• 一个OS管理所有的硬件 超算
集中式共享存储多处理器
• CSM:Centralized Shared-Memory Multiprocessor
• SMP:Symmetric Shared-Memory Multiprocessor
• UMA:Uniform Memory Access Multiprocessor
• 处理器访问存储器的时间是一样的(均匀的)
分布式共享存储多处理器
• DSM: Distributed Shared-Memory Multiprocessor
• AMP:Asymmetric Shared-Memory Multiprocessor
• NUMA:Non-Uniform Memory Access Multiprocessor
• 处理器访问存储器的时间是不一样的(非均匀)
原有的多处理器是指多个CPU,每个CPU是单核的。多核技术是对多处理器技术的进一步扩展,多核技术是指在一枚处理器中集成两个或多个完整的计算内核,从而提高计算能力的技术。多核CPU采用了与原来的单CPU相同的硬件体系结构,显著提升计算能力的同时无需进行硬件技术的变更。
多核架构的研究内容
典型多核结构:专用L1-Cache结构
早期多核处理器的一种组织架构,现在在嵌入式芯片中仍能见到。在这种组
织方式中,只有一级片内Cache,每个核带有自己的专用L1 Cache,分成指令Cache和数据Cache。这种组织的一个典型实例是ARM11 MPCore。
典型多核结构:专用L2-Cache结构
专用L2 Cache多核系统结构无片内共享Cache,在这种结构里,片内有
足够的可用面积容纳多个L2 Cache。这种组织的一个典型实例是AMD Opteron。
典型多核结构:共享L2-Cache结构
共享L2 Cache多核系统结构采用了和专用L2 Cache多核结构类似的存储空间分配,不同的是该处理器架构拥有共享L2 Cache,Intel的Core Duo处理器就是这种结构。
典型多核结构:共享L3-Cache结构
共享L3 Cache多核系统结构出于性能上的考虑,分离出一个独立的三级
Cache,每个CPU计算内核除了拥有专用的一、二级Cache外,还共享L3
Cache; Intel Core i7就是这种结构。
基于Cache结构的优点
共享数据在共享存储多处理器结构中,只供一个处理器使用的数据称为私有数据,多个处理器共同使用的数据称为共享数据,各个处理器通过对共享数据的读写来实现通信。
缓存一致性问题
• 数据进入Cache,可减少平均访存时间和减轻对存储器的带宽要求。
• 私有数据进入Cache,不会引入新的问题
• 共享数据进入Cache,则同一存储块在多个处理器的Cache中有副本,当某个处理器对其Cache中的副本修改后,该副本与其他副本中的数据不一致,称为多处理机的Cache一致性问题
Cache一致性协议的分类
Cache一致性协议的两种实现方式
监听式协议
• 基于总线传递信息:1vN
• 存储器中数据块的共享状态信息分散保存在各个Cache中,物理上分布的各个存储器拼合成逻辑上统一的大存储器,物理上分布的cache状态信息拼合成逻辑上统一的Cache Hot状态。
目录式协议
• 基于互联网络传递信息:1v1
• 存储器中数据块的共享状态信息集中保存在本地目录中,物理上分布的各
个存储器拼合成逻辑上统一的大存储器,物理上分布的目录拼合成逻辑上
统一的大目录。
写更新 vs 写作废
• 占用总线进行状态信息传输的次数、内容和数据量
• 占用总线进行数据传输的次数、内容和数据量
• 对同一个数据,从对它的写操作到它的读操作之间的延迟
监听协议的实现保存信息
• 替换写回法Cache的修改位可直接实现一致性(修改位置1的必然是系统中唯一最新副本)
• Cache原有的有效位可以直接实现作废操作
• Cache原有的Tag可直接实现监听(地址Tag比对)
• 给每个Cache块增设一个共享位(独占为0共享为1)
监听协议的实现传递信息
RdMiss/WtMiss/Invalidate
监听协议状态、操作、时序
• 每个Cache控制器内嵌入有限状态机
• 操作包括:改变Cache状态,通过总线访问存储器,通过总线发送Cache作废
• 写访问串行化通过总线控制权的竞争来保证
每个cache包含四个部件
• Cache控制器
• Cache地址表(lookup table)
• Cache数据表(data table)
• Cache状态表
每个cache中的数据块只有三种状态:
• Invalid(无副本)
• Shared(至少1副本且存储器中的值是最新值,clean,只读)
• Modified(唯一副本且存储器中的值是旧值,dirty,读写)
Cache控制器有两个探针
• 一个探针监听本地CPU
• 一个探针监听共享总线
每个CPU只与本地cache控制器交互
• CPU不连入共享总线,所有远程访问均经过本地cache控制器实现
本地Cache控制器监听本地CPU的数据请求地址
本地Cache控制器通过总线监听其他远程Cache
监听式协议小结
• 两种情况下cache块写回存储器:发生M块替换,以及M变S之前
• 两种情况下Invalidate:收到Invalidate,以及收到WtMiss
• 调入新块时,优先从远程cache调,没有才从存储器调;多个远程cache可能都有share状态的副本,多个cache要竞争
• 直接利用系统中已经存在的总线和Cache状态位,实现容易,成本 较低
• 一个cache在总线上广播,其他cache监听,系统规模变大时,广播 操作将成为系统瓶颈,因此该协议的可扩放性较差
目录:一种逻辑上集中的数据结构。对于存储器中的每一个可以调入Cache的数据块,在目录中设置一条目录项,用于记录该块的状态以及哪些Cache中有副本等相关信息。 对于任何一个数据块,都可以快速地在唯一的一个位置中找到相关的信息。
物理上分布式:适用分布式共享存储多处理器,目录与存储器均分布在各节点中,每个目录中仅保存对应本地存储器的cache状态信息,对不同目录的访问可以在不同节点上并行
节点分类及关系
• 请求节点A(发出访问请求地址K)
• 目录节点B(维护地址K对应的唯一存储器的目录,不分本地还是远程)
• 远程节点C(其cache中拥有对应副本,逻辑上的远程)
宿主
系统各部件状态
每个cache为本地缓存的数据块记录状态,共有三种状态
• Invalid(无副本)
• Shared(至少1副本且存储器中的值是最新值,clean,只读模式)
• Modified(唯一副本且存储器中的值是旧值,dirty,读写模式)
每个cache为本地缓存的数据块记录状态,共有三种状态:
• Invalid(无副本)
• Shared(至少1副本且存储器中的值是最新值,clean,只读模式)
• Modified(唯一副本且存储器中的值是旧值,dirty,读写模式)
目录状态信息
• 目录状态信息是一种数据结构,用于记录哪些cache拥有数据块的副本。
• 最常用的实现技术是采用位向量:为被缓存的设置是每个主存块设置一个位向量,向量中的每一位对应于一个处理器,其长度与处理器的个数成正比。由位向量指定的处理机的集合称为共享集G。
• 处理器个数N,每个本地存储块个数m,则信息量m x N x N,O(N^2) • 可以仅对进入cache的块设置目录(动态法),也可以让目录项的位向量长度固定(静态法)
本地Cache控制器监听本地CPU的数据请求地址,根据该地址查询本地数据cache
远程节点C响应目录节点B
目录节点B响应A
目录节点B响应C
目录结构分为3类
• 全映像:每一个目录项都包含一个位向量,N个处理机,位向量N位,每一位对应于一个处理机,目录所占用的空间与N^2成正比。
• 有限映像:每一个目录项存放一个处理机号码,共有m个目录项,m为常数,N个处理机,则号码位数log_2^N,目录所占空间Nm log_2^N。(替换策略)
• 链式目录:每一个目录项存放一个指针链表项,链表的长度随着副本数的增减动态变化,平均长度m为常数级,N个处理机,目录所占空间Nm log_2^N。(单向链表 双向链表)
目录式协议小结
• 目录式协议中,cache的基本状态,cache块的状态转换规则,与
监听式协议在实质上是相同的
• 当对cache块进行写操作时,该cache块必须处于独占状态
• 对于任何一个处于共享态的块,目录节点的存储器的内容是更新过的最新值
• 监听式协议中的“消息广播”,改为“点对点通信”
• 当出现某cache块被替换写回时,被写回的旧块有唯一目录节点B1,被调入的新块有唯一目录节点B2,cache和B1、B2都是单线联系,B1和B2在逻辑上是不同的节点,当然地址分布重合也可能导致B1和B2落在相同的物理节点中