多处理机系统介绍(翻译)

多处理机系统介绍(翻译)
多处理机系统介绍(翻译)

多处理机系统介绍

随着用户计算需求的增长,多处理系统能够提供一个自然地、不断提高的升级途径。只要核心的用户程序能够提供线程级并行,给系统添加处理器,或者将较小的系统替换为较大的、包含更多处理器的系统,都能给用户提供一个直接增加计算能力的途径。其次,多处理机系统使系统供应商能够将单个微处理器的设计代价分摊到多种设计方案中,这些设计方案能够提供不同层次的性能和扩展能力。最后,使用一致共享存储器的多处理机系统能够提供与分时共享的但处理机兼容的编程模式,便于用户使用以前已经存在的应用程序,也便于开发新的应用程序。在这些系统中,硬件和操作系统软件综合起来提供给用户和程序员的功能界面,实际上是基于以下4点多处理机理想假设:

完全共享存储器即系统中所有处理机对所有物理存储器的访问都是平等的。

单位延迟即所有的访存请求都能在一个周期内满足。

无竞争即一个处理机的访存不会受到另一个处理机访存的影响。

写的瞬间船舶即某个处理机写存储器导致的更新立刻对所有的处理机可见。

系统及处理机的设计者必须努力使系统尽量接近这些理想假设,从而满足用户对于性能和正确性的要求。显然,在实现这些目标时,诸如造价以及可扩展性等因素起着重要作用,但是一个优秀的系统必须很好的满足这些假设。

完全共享存储器,单位延迟以及无竞争

诸如图9.4所示,大多数提供一致存储器访问(UMA,Uniform Memory Access)的传统共享存储器多处理机系统使用一种“dancehall”的组织结构,一组存储器模块或者存储体通过交叉开关互联网络与另一组处理机连接起来,并且每个处理机通过交叉开关访问存储器的延迟是相通的。这种方法的弊端在于交叉开关的价格,该价格会随着处理机和存储器的总数按平方增长,同时每次访存都必须穿过交叉开关,另一种方法是非一致存储访问(NUMA,Nonuniform Memory Access),许多系统供应商现在都按照这种方法构造系统,在这种方法中,处理机仍然通过一个交叉开关互联网络连接在一起,但是每个处理机有一个本地的存储器,它的访问延迟要低得多,在NUMA结构中,只有对远程存储器的访问才存在穿越交叉开关的延迟开销。

在UMA和NUMA系统中,与单处理机系统一样,都是通过cache来近似满足单位延迟的理想假设,cache能够同时满足对本地和远程存储器(NUMA)的访问,类似的,可以使用cache 对访存流量进行过滤减轻存储体之间的竞争。因此,对于在单处理机系统中不可缺少的cache,

在多处理机系统中同样非常有用,然而,cache的存在个处理存储器写操作带来了一定的困难,因为存储器写操作必须对其他处理机可见,或者传播给其他处理器机。

写操作的瞬时传播

在一个分时共享的单处理机系统中,如果一个线程改写了存储器某个单元的值,该线程以及任何其他线程都会立刻查看新的值,因为这个值会存放在处理机的cache中。遗憾的是,对于多处理机系统,不再具备这个立即可见的特性,因为对同一地址的访问可能有其他处理机发出,由于这些处理机有了自己的cache,可能包含同一cache行的私有副本,它们可能看不到其他处理机的更新。例如,在图9.5(a)中,处理机P1向存储器地址A写入值1。由于并没有一致性的支持,在P2的cache中,存储器地址A的副本并没有被更新,P2读取A将会得到以前的值0。这就是经典的cache一致性问题。要解决这一问题,系统必须提供cache 一致性协议,保证系统中所有的处理机能够察看到其他处理机的更新,这样每个处理机拥有一致的存储器视图。实现cache一致性有两种基本的方法:更新协议和作废协议,我们将在后面的章节中简要的讨论这两个协议。图9.5(b)和图9.5(c)分别对这两种协议进行了说明

一致的共享存储器

对于共享存储器的多处理机系统,一致的存储器视图很难实现。但如果不能实现一致的视图,共享存储器程序的行为将不可预测,因为不同的处理机从存储器读到的值各不相同。我们已经论述过,一致性问题是由于写操作不能立刻自动地传播给其他处理机的cache造成的。有两类一致性协议可以保证写操作的结果对于其他处理机是可见的。

更新协议

早期提出的多处理机系统采用一个相当直接的办法来维护cache一致性,在这些系统中,处理机的cache采用写直达策略,所有的写操作不仅写入执行写操作的处理机cache,同时也写入存储器。这种协议如图9.5(b)所示,由于所有的处理机都连接在一条共享的总线上,这条总线还将所有的处理机与存储器相连,所以所有其他处理机可以在共享总线上监听新的值,并更新它们的数据副本(如果有这样的副本)。这样就能够得到写直达的结果。实际上,这种更新协议是基于广播写直达策略的,即每个处理机的每次写操作都是写直达,不仅写入存储器,还写入任何拥有这个数据副本的处理机cache。显然,这种协议扩展性较差,仅限于数量较少的处理机,否则大量处理机的写直达流量会很快将存储器总线的可用带宽占用完。

可以对该协议进行简单的优化,对数据采取写回策略,即写操作只是将数据写入处理机的本地cache,当这一行被替换出cache时,才将结果写回存储器。然而,在这样的协议中,任何对共享cache行(存在于任何其他处理机cache中的行)的写操作仍然需要在总线上广播,以使包含共享副本的处理机能更新它们的副本。而且,一个远程读操作所读的行如果恰好是修改过的,那么在满足读请求之前,要将这一行先写回存储器。

遗憾的是,更新协议对于带宽的苛刻要求使得这种协议几乎消失,因此没有一个现代多处理机系统采用更新协议来维护cache一致性。

作废协议

现代共享存储器多处理机系统都采用作废协议来维护cache一致性,作废协议的基本前提很简单:任何时候只允许一个处理机执行写操作(这样的协议经常称为single-writer协议)在该协议中,试图对cache中某一行写数据的处理机必须使该行成为系统中唯一有效的副本,而其他处理机cache中的副本都要作废掉(所以称为作废协议)。该协议如图9.5(c)所示。简单地说,处理机执行写之前,首先要检查系统中是否还存在其他副本。如果有,处理机发

出消息将其他副本作废。然后,处理机向其私有(专用)副本中写入数据。后续的、对同一行的写操作可以流水化,因为不需要检查是否存在其他副本。和单处理机的协会cache一样,修改过的行知道被替换出去的时候才协会存储器。然而,一致性协议必须记住存在这样一个修改过的副本,以防止其他处理机到存储器读取以前的值。而且,还必须能够从处理机cache 中读出修改过的数据,以满足其他处理机对这个唯一副本的远程访问。

作废协议要求cache目录至少要为每行维护两个状态:修改(M)状态和作废(I)状态。如果某一行处于作废状态,那么这一行的数据无效,必须从存储器中读取数据。如果处于修改状态,处理机知道系统中没有别的副本(即本地的副本是专有副本),因此处理机能够对这一行进行读写。注意,如果被替换出去的行处于修改状态,必须写回存储器,因为处理机可能对它进行了写操作。简单的办法是在cache行的状态中加入一个dirty位,使得处理机能够区分哪些是处理机的专有行(通常称为E状态),哪些是专有并且修改过的行(M状态)。Macintosh桌面系统使用的IBM/Motorola PowerPC G3处理器实现了这种作废协议。

注意,如果只有这三种状态(MEI),cache行不能同时出现在多个处理机中。因此,需要解决这一问题,允许可读的副本能够出现在多个处理机的cache中。多数作废协议还包括一个共享状态(S),这个状态表明,系统中可能存在多个可读的副本。如果一个处理机要向处于S状态的cache行写数据,必须首先将这一行提升到M状态并作废其他远程的副本。

图9.6显示了一个简单的MESI一致性协议的状态表个转换图。每一行代表4种状态(M,E,S或者I)中的一种,针对每种类型的总线事件,每一列总结了一致性控制器必须执行的动作。引起cache行发生状态转换的事件包括本地访存(读或写)、远程访存(总线读、总线写或者总线状态生机)以及本地的cache行转换。Cache目录或者标识阵列维护每一个cache 行的MESI状态。注意,此时允许每个cache行在不同时刻可以具有不同的状态,并使包括私有数据的cache行保持为E状态或者M状态,而包含共享数据的行处于S状态并且可以同时存在于多个cache中。MESI一致性协议支持single-writer并保证了一致性,同时还支持只读数据的共享,以及在发生本地写实,从专有状态(E)提升到修改状态(M)(不需要总显得状态升级消息)。

实现cache一致性

维护cache一致性需要有一套记录cache行状态(即MESI)的机制,从而能够正确处理对这些行的访问。保存一致性状态最方便的场所是在cache的标识存储器中,因为必须在cache 中对状态信息进行维护。然而,cache行的本地一致性状态要对系统中其他处理机可见,以满足它们对这些行的访问。因此,实现cache一致性时必须提供一种分布访问方式。主要有两种实现方法:监听实现和目录实现。

监听实现

实现一致性的最简单的方法是利用监听机制:在监听实现中,所有由一致性协议引起的片外地址事件(即作废协议中的cache失效和作废)将共享总线,这对系统中所有其他处理机都是可见的。在规模较小的系统中,地址总线是电路共享的,当这些命令放到总线上时,每个处理机都能察看到所有其他处理机的命令。更先进的点到点互联机制也能实现监听,它通过层次化的监听互联机制,将所有命令反映给所有的处理机。为简单起见,我们将只讨论地址总线的机制。

在监听实现中,一致性协议规定了一个处理机是否响应总线命令以及如何响应总线命令。例如,一个远程处理机对当前被修改过的cache行发出读请求,这将导致cache控制器将这一行从本地cache中直接传送给发出请求的处理机,也许还需要写回存储器,以这种方式请求

将能够得到最新的副本。同样,一个远程处理机对当前处于共享状态的行发出作废请求,将导致控制器更新目录表项并将这一行标记为作废。这将防止本地处理机以后从cache中读取是小的数据。

监听实现的主要缺点在于可扩展性较差。假设系统中每个处理机以一定的速率产生地址总线事务,可以看到,必须监听的输入地址总线事务直接和系统的处理机数目成正比。

也就是说,如果每个处理机每秒产生s0个总线事务(包括cache失效导致的读请求和对共享行写操作导致的作废请求),系统中有n个处理机,那么每个处理机每秒必须监听ns0个事务,每次监听都要查找本地的cache目录并判断处理机是否需要作出反应(参见图9.6),对于较大的n,查找总带宽是不可接受的,同样,对于将系统中的处理机连接在一起的互联网络,其带宽可能很快就被事务流量占用完。实际上,许多基于监听的多处理机系统的性能都受限于地址总线的带宽,基于监听的实现只能扩展到几十个处理机(最大为64个,如Sun Enterprise 10000),如果超过这个数字,就要为提高地址总线带宽付出昂贵的代价。

大规模的、基于监听的多机系统相对于处理机数目较少的系统,还存在访存延迟动态增加的问题,因为访存延迟决定于一致性响应的延迟,而不是DRAM的延迟,换句话说,对于较大的n,进行监听和从所有处理机收集监听响应的时间要比从DRAM读取数据的时间长,甚至对于具有较长远程访存延迟的NUMA结构系统也是如此,如果访存的数据通过推测的方式传给请求方,那么需要一直等到所有的处理机都报告它们不包含改写过的副本后,这些数据才能被认为是有效的。因此,在解决cache失效时,对性能起到决定作用的不是本地或者远程访存延迟,二十监听响应延迟。

目录实现

对于解决监听实现的可扩展性和访存延迟问题,常用的方法是使用目录,在目录实现中,通过从存储器中分配空间来记录cache行的一致性状态,一致性状态存放在目录中,而目录和存储器放在一起,一致性状态表明某一行当前是否在某个cache中,另外还包括了指向所有位于cache中的副本的指针,这些指针存放在一个称为共享列表或者共享向量的结构中。共享列表可以是精确的(每一个共享副本都被单独指出),也可以是粗略的(多个处理机共享表中的一个表项,该表项表明这些处理机拥有这一行的副本),可以存储为链表或者大小固定的向量,精确共享向量的缺点是巨大的存储开销,特别是对于处理机数目很大的系统,因为共享向量的存储空间与处理机数目成正比,对于一个cache行为64字节、包含512个处理机的大型系统,共享向量的开销将达到100%

带宽扩展目录实现的主要好处是,目录的带宽随着存储器的带宽而增长:增加一个存储体以支持更大的数据带宽同时也增加了目录的带宽。另一个好处是,通过在目录中过滤掉一些命令,减少了对于地址总线带宽的需求。在目录实现中,地址命令首先送到目录,只有必要时才传给远程的处理机(即当这一行在远程cache中为脏时,或者向远程cache中的共享行写数据时)。因此,每个处理机需要接受地址命令的频率不再与处理机的数目成正比,但是与数据共享的程度成正比,因为只有当处理机拥有所请求的cache行的副本是,它才接收地址命令。因此,目录实现可以用于建立包含几十到几百个处理机的系统。

访存延迟最后,cache失效的延迟能够显著地减小,因为一旦存储器完成对目录的检查,就能提供非推测的数据。特别是对于NUMA系统,这一点显得尤为突出。在NUMA系统中,操作系统已经进行了优化并将私有数据或者非共享数据放置在本地存储器中。由于对本地存储器的访问延迟很低,cache失效能够在几十纳秒中解决,而不是几百纳秒。

通信失效延迟基于目录系统的主要缺点是,当发生cache失效而所请求的行在远程cache 中试dirty时(这种情况称为通信失效或dirty失效),会带来额外的延迟。在基于监听的系统中,通信失效能够直接得到满足,因为读请求能被直接传递给拥有数据的cache。在目录

实现中,请求先被送到目录,然后再传递给当前的拥有者。这增加了一次处理机/存储器之间的移动,因此增加了延迟。一些数据共享非常集中的应用,如数据库事务处理,对于通信失效延迟非常敏感,在基于目录实现的系统中性能可能会很差。

人们还提出并建立了监听/目录混合系统。例如,Sequent NUMA-Q系统在其4处理机集合中使用了传统的、基于总线的监听协议来维护一致性,但是多个集合之间的一致性是通过建立在可扩展一致性接口(SCI,Scalable Coherent Interface)标准上的目录协议实现的。混合机制具有目录机制的可扩展的优点,同时,对于能够在本地监听域满足的通信失效,保持了较低的平均延迟。

相关主题
相关文档
最新文档