多重处理
来自EEWiki.
所谓多处理器系统,它是一台使用多个处理器来处理工作负荷的计算机。目前常见的是现成多处理器系统。购买支持Intel处理器的母板需要几百美元。多数网络操作系统现在支持多处理。超级服务器可能包括处理器阵列,以及一条商用高性能总线、数十个吉字节的纠错内存、RAID(廉价磁盘的冗余阵列)系统和类似多电源供应的冗余功能。图M-15显示了多处理系统配置。在左边,4个处理器共享一条总线;在右边,6个多处理器系统通过一条高速交换架构互连。
图M-15单节点和多节点多处理配置
在多处理系统中利用处理器的方式有两种,它们分别是非对称方式和对称方式:
非对称多处理系统 各个处理器同等地使用系统中的所用资源,但分别处理专门的任务,任务和资源由不同处理器进行管理。例如,可能一个处理器处理系统I/O(输入/输出),而另一个则进行应用程序处理。非对称多处理系统不进行工作负荷平衡。可能处理某个任务的处理器负载过重,而其他处理器却闲置着。
对称多处理系统 在这种设计中,操作系统将工作负荷均匀地分布到各处理器,这样避免了有的闲置有的负荷过重的情形。处理器共享内存和磁盘I/O等系统资源。工作负载能够均匀地分配到所有可用处理器之上。随着处理器增多,对称多处理系统对所有任务的性能都会提高。使用对称多处理系统的操作系统更加复杂,但目前多数网络操作系统都支持对称多处理。
在SMP系统中增加更多处理器的难点是系统不得不消耗资源来支持处理器抢占内存,以及内存同步两个主要问题。抢占内存是指当多个处理器共同访问内存中的数据时,它们并不能同时去读写数据,虽然一个CPU正读一段数据时,其他CPU可以读这段数据,但当一个CPU正在修改某段数据时,该CPU将会锁定这段数据,其他CPU要操作这段数据就必须等待。
Beowulf HOWTO用一个有趣的超级市场的类比来解释多处理。单任务操作系统就像只有一个收银机的超级市场。所有的顾客必须穿过同一条结帐过道。而多任务操作系统则像具有多条结帐过道的超级市场。商店生意繁忙时需要更多的出纳员。不过,每个出纳员仍然一次为一个顾客服务,因此每个顾客等待结帐的时间仍然相同。为减少每个顾客的等候时间,可将他们购买的商品分发到多个出纳员。如果有四个出纳员同时为一个顾客结帐,则每个顾客的结帐时间就减少到原来的四分之一。不过,将各件商品分发给不同的出纳员后必须再将它们汇总起来。
请注意,多处理并不保证性能。还是以超级市场作为类比。如果我们使用几个收银机来给一个顾客购买的物品记帐,那么,物品的件数必须足够多,这样的办法才值得使用。只有几件物品的情况下,在一台收银机前结帐比分发到几个收银机的效率要高得多。
SMP和并行体系结构
目前有各种多处理系统。它们之间的区别包括这几个方面:在处理器和计算机间如何分配资源,系统是否支持基本的负载均衡,是否支持分割处理任务到处理器并由处理器并行处理(或者两者都支持)。目前存在两种基本的模型:
松散耦合、不共享模型 每个处理器有它自己专用的内存空间和磁盘空间。在这种模型的变体中,每个处理器访问专用内存,但可共享磁盘。
紧密耦合模型 在这种模型中,所有处理器共享内存和磁盘空间。该模型还可能在群集中的系统中实现。
多线程是一种先将单个任务拆分成片段(线程),然后在多个处理器上同时处理这些片段的过程。多线程也称为并行处理。可完成多线程的有群集或特大型系统中的服务器。这样,有以下系统类别:
SMP计算机 这种系统将多个处理器放进一个机箱中;这些处理器运行支持SMP的操作系统,即将工作负荷分发给多个处理器处理。现成SMP系统基本上是为多用户环境设计的负荷平衡系统。来自多个用户或应用程序的请求被均匀地分发到各个处理器。某些应用程序能从多线程中获益。SMP系统由一个可支持SMP的操作系统控制,因此所有的处理器共享相同的内存和磁盘空间(紧密耦合)。这带来SMP系统的扩展问题。当越来越多的处理器加入时,通信会使共享总线达到饱和;如果其中一个处理器发生故障,整个系统也会停止运转。
基本群集 群集是一组可提供高可用性、容错和负载平衡等功能的计算机。另外,群集还可能支持SMP,在下面将要讨论到这一点。群集(或群集系统)由两个或更多的节点组成,每个节点运行各自的操作系统拷贝;每个节点运行各自的应用拷贝;节点共享其它公用资源池。基本群集是用于Web站点理想配置。另外还安装一台单独的负载平衡设备用于在服务器之间分发请求。群集可能执行基本的并行处理。例如,多个服务器可能在多个数据库中执行同一个搜索。通常,所有的服务器访问共同的存储设备。如果其中一个服务器停止运行,其他服务器会分担它的工作负荷(高可用性)。在使用容错的情况下,还要对每个服务器进行备份;这样,如果主服务器停止运行,它的备份可以继续它的工作。在容错配置中,服务器对必须随时并行运行,即每时每刻对对方的内存、缓存和磁盘状态进行备份。
SMP群集 在群集中支持SMP/并行处理要求特殊的操作系统或者OS扩展。Beowulf是其中之一,这种系统自20世纪90年代早期就开始成熟。Beowulf被形容为“一种可以用于并行计算的多计 算机体系结构”。另一种体系结构是NUMA (将在后面讨论)。协调多台计算机之间的并行活动并非易事。其中包括同步和滞后问题,因此必须保证互连速度足够高,才值得在多个系统间分发处理,而不是在单个SMP计算机上运行。
MPP (大规模并行处理)系统 MPP 系统,也称为“松耦合的(loosely coupled)”或者“无任何共享”的系统。这是真正超级计算机类的系统,它通常专用于在多个处理器中快速单个任务。MPP系统通常是自定义建立的, 而且使用专用的操作系统。MPP 系统的特性是:有很多处理器,每个处理器都有用于自己的操作系统的内存,可以同时处理同一程序的不同部分。系统使用一个消息接口和一组数据通路来使处理器彼此通信。最多可以有 200 个处理器从事同一任务。建立 MPP 系统可能会较复杂,因为当涉及到包装系统资源以及在处理器间分配任务时,需要制定很多计划(记住,没有东西是共享的)。MPP系统的优势在于用户用来同时搜索数量极多的数据库的应用程序。
在Beowulf系统中,服务器控制节点管理服务器群集并将任务分配到从属节点。Beowulf群集看上去像一台单个机器,而且可以随时插入新的从属节点来扩展系统。Beowulf实际上是一个术语,适用于在 Linux 内核上运行的一组公共软件工具。其中包括流行的软件消息传递 API,如“消息传送接口”(MPI) 或“并行虚拟机”(PVM),对 Linux 内核的修改,以允许结合几个以太网接口、高性能网络驱动器,对虚拟内存管理器的更改,以及分布式进程间通信 (DIPC) 服务。公共全局进程标识空间允许使用 DIPC 机制从任何节点访问任何进程。Beowulf 还在节点间支持一系列硬件连通性选件。Beowulf系统用运行Linux操作系统的商用硬件建立并与以太网交换机互连。
其中牵涉的一个重要概念是机器如何通信。在单个SMP计算机中,处理器通过共享内存通信。共享内存速度快,效率高。如果一个处理器需要向另一个处理器发送信息,它将信息置于内存,然后另一个处理器取出信息。多计算机群集要求分布式内存通信,即需要某种消息传送方案来将内存的内容从一个节点传到另一个节点。常见的并行系统消息传送API包括PVM并行虚拟机)和MPI(息传送接口)。PVM允许UNIX和/或windowsNT/Windows 2000计算机通过网络勾连在一起,成为一个大型的单一并行计算机。PVM和MPI Web站点在后面列出。
消息传送方案效率不高,因此高性能SMP群集将需要共享内存系统。NUMA(非统一内存访问)体系结构可实现分布式内存,即共享内存对群集中的所有处理器好像是单一的连续内存块。它定义标准的内存管理方法,允许各个系统协调内存访问。基本上,组系统上的所有可用内存可供任何系统使用。如果一个节点需要访问另一系统上的内存,则由NUMA管理其中的交换。
NUMA范畴包含若干种不同体系结构,从广义上来讲,以下结构均可以视为拥有非均匀存储器访问延迟:RMC、MPP、CCNUMA以及COMA,但它们之间的差异却相当大。RMC和MPP有多个节点,属于“NUMA”的部分是节点间的软件一致性。至于CNUMA和COMA,其硬件一致性是在节点内部,其“NUMA”组件是在一个节点内。
在群集化环境中,VI体系结构对于提高吞吐率和缩短响应时间起着重要作用。VI有助于消除传统网络中向CPU引入过量负荷以及产生滞后等问题。在群集中运行的服务器应用程序使用VI可以绕过操作系统和协议栈而直接与在其他服务器中运行的应用程序通信。据Giganet,Inc.称,这将使系统管理降低40%的系统管理费用,提高吞吐率,缩短响应时间并增强用户可伸缩性。Giganet搜集了大量关于VIA以及群集化和多处理系统的文献。中写到,世界上最快的计算机的执行速度可到万亿次的数量级,即每秒万亿次浮点操作。今天,最大的Beowulf系统操作速度可达200Gflops,而某些最快的微处理器的运行速度可到1G次。Sterling预计用这些微处理器建立的并行系统在近几年内将达到10G次。他认为,到2010将出现拍(1015)级的系统。
美国政府和大量研究机构正在研究HPC(高性能计算)。该研究的重点是与大规模并行系统和超级计算机相关的硬件和软件方面的问题。有关更多信息,请参考后面列出的站点。大规模并行处理要求复杂的管理系统来处理可能跨越数百台甚至数千台计算机和处理器的任务。
请注意,在Web内容交换和负载均衡领域中也用到了并行处理。Alteon Web Systems已设计出一系列Web交换机,它们可以安装最多可达20个的RISC网络处理器来同时处理通信。
可靠服务器池通过使用池中的一组服务器提供高可用性服务。TETF可靠服务器池(rserpool)工作组正开发一种体系结构和协议,它可用于管理和操作支持高可靠度应用程序的服务器池,并提供对服务器池的客户机访问机制。该组的工作集中在网络容错机制、高可用性服务、抗恶意攻击能力和可伸缩性等方面。

