1 概念:SMP和MP
在讲SMP之前需要先了解下MP系统的概念以及其分类
SMP(Symmetric multiprocessing,对称多处理器技术)是提高系统处理能力的一种方法。单CPU同时只能处理一个线程,如果有许多线程需要执行,PU数量必然是一个瓶颈,只能通过提高CPU频率提高处理性能。MP技术(Multi-Processing,多处理技术)使用多个CPU能够协同工作,并行处理,每个CPU在执行队列中选取一个线程执行。MP系统依据资源共享方式,有多种类型:
1.1.松耦合的多处理技术
许多不同系统通过网络通信技术进行互联,通常通过软件技术实现,例如IBM的SP系统(System Parallel,并行系统)、使用群集软件HACMP的并行版(PSSP),建立起松耦合的多处理架构。不同的系统被称为节点,可以互相共享文件、存储,但并不共享CPU和内存,通过专用高速网络进行节点间通信(SP系统专用的交换网络,或者Infinity Band网络等),利用软件控制任务分发和并行处理。
1.2.紧耦合的多处理技术
多个CPU之间共享部分内存,但每个CPU都有自己的独立内存和总线结构,通过一个操作系统控制不同处理器之间协同工作,一般有一个主处理器,管理其他从处理器,如果此主处理器不能工作,则由第二候选处理器升级为主处理器。
1.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 SMPSMP是一种紧耦合、共享存储的系统模型,特点是多个CPU使用共同的系统总线,因此可访问共同的外设和存储器资源。(所有处理器通过一条高速总线或者一个转换器在同一机器中紧密耦合。处理器共享同样的全局内存、磁盘和 I/0 设备。只有一份操作系统的副本跨所有处理器运行,并且操作系统必须设计为能利用这种体系结构(多线程操作系统))
2.1 构建SMP 系统的条件
首先,关键的是需要支持SMP 的硬件:CPU 和主板。
要实现SMP功能,我们使用的CPU必须具备以下要求: