走入IBM小型机世界
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.4 SMP和群集

2.4.1 SMP对称多处理器的概念

SMP(Symmetric multiprocessing,对称多处理器技术)是提高系统处理能力的一种方法。单CPU同时只能处理一个线程,如果有许多线程需要执行,CPU数量必然是一个瓶颈,只能通过提高CPU频率提高处理性能。MP技术(Multi-Processing,多处理技术)使用多个CPU能够协同工作,并行处理,每个CPU在执行队列中选取一个线程执行。MP系统依据资源共享方式,有多种类型:

1.松耦合的多处理技术

许多不同系统通过网络通信技术进行互联,通常通过软件技术实现,例如IBM的SP系统(System Parallel,并行系统)、使用群集软件HACMP的并行版(PSSP),建立起松耦合的多处理架构。不同的系统被称为节点,可以互相共享文件、存储,但并不共享CPU和内存,通过专用高速网络进行节点间通信(SP系统专用的交换网络,或者Infinity Band网络),利用软件控制任务分发和并行处理。

2.紧耦合的多处理技术

多个CPU之间共享部分内存,但每个CPU都有自己的独立内存和总线结构,通过一个操作系统控制不同处理器之间协同工作,一般有一个主处理器,管理其他从处理器,如果此主处理器不能工作,则由第二候选处理器升级为主处理器。

3.对称多处理技术

多个CPU之间没有区别,平等地访问内存、外设、一个操作系统。操作系统管理着一个队列,每个处理器依次处理队列中的进程。如果两个处理器同时请求访问一个资源(例如同一段内存地址),由硬件、软件的锁机制去解决资源争用问题。

pSeries采用的就是SMP结构。在AIX中,每个处理器依据其物理位置,依次标记为:proc0,proc1,…不同处理器在正常运行的时候没有区别,但是在机器启动的时候,通常由proc0控制引导过程,如果必要,也可以控制系统内核从其他的处理器引导系统。

由于SMP需要协调各个处理器之间的工作,因此当处理器数量很多,或者执行任务的并行度差(任务之间有复杂的逻辑关联)时,CPU数量增加,则系统性能提高的比例递减,也就是所谓的线性度不好。线性度与CPU设计、操作系统架构及任务类型关系密切,每个计算机厂商都有自己的一套理论来支持自己的设计体系,并没有哪一种理论可以占据绝对优势。例如Sun走的是“群殴”路线,用数量众多的CPU、内存来提高总体性能,尽管最后将近满配的时候,每个CPU所带来的性能提升非常有限。Sun服务器中动辄几十颗,甚至一百多颗CPU并行!IBM则走向另一个极端,甚至曾经建议客户不要使用12颗以上的CPU运行一个操作系统映像(当然也有人说这是因为当时IBM的最高端服务器S70只能支持12颗CPU,作者则觉得两种原因都有)。现在呢,IBM的UNIX服务器仍然是采用少而精的策略,最高端服务器也只可以配到64颗CPU(在IBM只支持最多32颗CPU的时候,HP和Sun的服务器就有可以支持到128颗的配置了,当然可能当时的操作系统并不支持这么多,需要分区后才能使用,一个分区最多64颗CPU)。IBM的一种解释是这样可以降低软件License的费用(因为现在大部分UNIX服务器软件都是按照CPU数量收费的);另一方面,IBM的POWER 5 CPU确实拥有很高的处理能力,可以以一敌二(至少现在的TPCC测试结果是这样),能够让IBM的销售代表理直气壮地任意解释。

2.4.2 Cluster群集技术

群集技术是实现并行(MP)的另一种方法,通常指多个操作系统内核通过群集管理软件或者并行计算应用软件进行并行处理,实现高性能计算或者故障恢复。而SMP技术则使用单一操作系统映像(内核),由支持SMP的操作系统进行任务分配和调度。

由于SMP需要特别的硬件设计,Cluster则一般使用软件编程就可以实现,所以从实现成本考虑,Cluster技术在深度计算(deep computing)/高性能计算HPC(high performance computing)上占据非常高的市场份额,越来越多的高性能计算机不是采用数量少,CPU数多的高端SMP计算机,而是采用只有少量CPU的廉价机进行叠加,依靠数量众多的计算机组成的群进行计算,由应用软件切分任务,通过网络进行任务发送和结果回收,例如Linux群集。这一类群集技术的缺点是要求软件能对任务进行很好地切分,否则无法实现并行计算的能力。

随着CPU之间的耦合程度不同,从最紧的SMP到最松的软件群集技术,中间还有一类过渡技术,典型的代表被称为NUMA(Non-Uniform Memory Access)。与共享everything(CPU、内存、存储、网络对程序完全对等,没有区别)的SMP技术不同,也与什么都不共享(share nothing)的软件群集技术不同,NUMA将内存分为几个层次:第一层内存被单一CPU独占,第二层内存被2~4个CPU共享,第三层内存被更多的CPU共享,不同层次内存之间依靠类似Cache控制的机制进行协调。与SMP的L1/L2/L3 Cache机制的最大不同在于,对于同一块内存,和不同CPU的“远、近”是不同的,而SMP则不存在这种远近的差别。现在已经没有多CPU计算机是纯粹的SMP架构了,都或多或少引入(或借鉴)了NUMA的机制。

提高系统的性能有多种方式,首先是提高单一CPU的性能(一般是提高主频或CPU更新换代)、然后通过SMP(增加操作系统中CPU个数),之后是NUMA(可以称为多核+SMP技术的组合),再之后是(软件)群集,系统的性能提高线性度越来越差,但是实现成本越来越低,允许的并行节点(CPU)数也越来越多。

除了负载分担,群集的另外一个作用是提高系统的冗余度,实现更高的可用性。高可用是另外一个比较复杂的技术,IBM小型机采用的是HACMP软件实现双(多)机之间进行故障保护,HACMP的技术综合利用了AIX操作系统的各种功能,作者将在另一本书《解密IBM群集技术》中专题讨论。