分类: LINUX
2008-10-12 11:25:34
本文是高性能集群系列文章的第三部分。在本文中,笔者以IBM eServer Cluster 1300为例介绍了Beowulf集群中硬件和网络体系结构和组成部分。
1 Beowulf集群软件结构
图1 是Beowulf集群的软件体系机构。一般来说,Beowulf集群由如下几个软件部分组成:
操作系统:勿容置疑,操作系统是任何计算机系统的软件基础。相对于桌面系统而言,集群系统对操作系统的任务调度和文件管理方面的要求更高。
并行开发库:只要是指用于集群中进程通信的软件库。消息传递和线程是两种基本的通信方法。但是对于Beowulf集群而言,消息传递更适合一些。Beowulf集群常用的开发库是MPI和PVM。
作业管理:调度作业并管理集群系统的资源,是集群系统的资源得到最大的利用。
系统管理:管理和监控整个集群系统。
开发环境:开发和调试高效能应用的开发工具。
标准应用:一些标准的高性能应用如CFD。
客户应用:客户特别定制的应用。
2 操作系统
并不是每种操作系统都适合高性能集群系统。理论上说,硬件的体系结构、操作系统的任务调度方式和IPC的方式是决定应用并行化效果的主要因素。根据这三个因素,我们可以归纳出如下5种实施应用并行化的平台:
单任务操作系统:CPU同时只处理任务队列中的一个任务。MS DOS是这类系统的代表。
多任务操作系统:基于分时技术的多任务操作系统。虽然在同一时间段,所有的进程都在运行,但是在某一时间点,CPU只执行一个进程。这类操作系统可分为抢占式和非抢占式。单CPU的Unix和NT属于这种类型。
多CPU多任务操作系统:和单CPU的多任务操作系统不同的是,由于有多个CPU,所以在某个时间点上,可以有多个进程同时运行。多CPU的Unix和NT属于这种类型。
多CPU多任务操作系统+线程:某些任务当把它分为若干并行的子任务同时在多个 CPU上执行时,它会运行的更快,尽管运行这个任务占有的总CPU时间变长了。由于采用多个CPU而使任务结束的时间缩短了。由于应用本身的特性,随着 CPU个数的增加,性能并不会线性增加。Amdal法则说明了这种情况。运行在同一主板上多个CPU的Unix和NT+线程属于这一类型。SMP系统合适 采用这种方法。
多CPU多任务操作系统+消息传递:在SMP系统中,由于采用共享内存,所以 CPU通信的时间几乎可以忽略。但是在象集群这种系统中,通信时间成为不得不考虑的因素。这时,使用线程是一种很奢侈的方法。这种情况下,消息传递是一种 比较好的方法。(本系列文章的第二部分解释了这种情况)。同一个主板或多个主板上的多个CPU+Unix和NT+消息传递属于这种类型。
Beowulf集群使用第5种类型平台。它可以由SMP和PC服务器组成,以Linux为操作系统,以MPI或PVM这种消息传递方式作为通信方法。
3 文件系统
文件系统是操作系统的重要组成部分,用于存储程序和数据。如何在各节点间高效、一致和简捷的实现数据共享是集群系统对文件系统提出的挑战。
3.1 集群和文件系统
很明显,那种仅能管理本地存储的文件系统(如EXT和FAT)是无法满足集群系统对文件共享的要求的。在集群环境下,最容易想到,也是最容易实现的文件系统就是分布式文件系统。相当于本地文件系统,分布式文件系统有如下优点:
网络透明:对远程和本地的文件访问可以通过相同的系统调用完成。
位置透明:文件的全路径无需和文件存储的服务绑定,也就是说服务器的名称或地址并不是文件路径的一部分。
位置独立:正是由于服务器的名称或地址并不是文件路径的一部分,所以文件存储的位置的改变并不会导致文件的路径改变。
分布式文件系统可以使集群的节点间简捷地实现共享。但是为了提供性能,分布式文件系统通常需要使用本地的缓存(Cache), 所以它很难保证数据在集群系统范围的一致性。而且往往分布式文件系统中只有一份数据,所以很容易发生单点失效。
建立在共享磁盘(Share-Disk)上的并行文件系统可以克服分布式文件系统的这些缺点。通过使用在节点共享的存储设备,并行文件系统具有很多优点:
高可用性:克服了分布式文件系统中那种服务器端的单点失效的缺点,提高了文件系统的可用性。
负载均衡:有多个访问点,彼此可以协调负载。
可扩展性:容易扩展容量和访问的带宽。
3.2 集群中的数据共享形式
下面通过给出几个集群中使用具体的数据共享的方法。其中rsync是建立在本地文件 系统之上,NFS和Inteemezzo属于分布式文件系统(确切的说,NFS只是网络文件系统),GFS属于并行文件系统,而Backend- database则属于不同于文件共享的另一种形式的共享。
3.2.1 rsync
rsync是一种简单的文件共享实现方式。集群中的每个节点都有一份数据复本,复本间使用rsync进行同步。因为节点需要的数据就在本地,所以这种方法具有很高的可用性,不会出现单点失效现象。
如果需要的共享的数据量很小,而且很少更新时,可以采用这种方式。静态网页和小的FTP站点的可以使用这种共享方式。
3.2.2 NFS
这也是一种容易实现的方式。存储节点通过NFS将自己本地的文件输出,其他节点则把存储节点输出的文件系统mount到本地文件系统。NFS方式的存在两个很大的缺点:
性能差:因为所有的文件访问都必须经过网络和NFS服务器,所以在访问流量比较大的情况下,网络带宽和NFS服务器都会成为系统的瓶颈。
单点失效:如果NFS服务器的系统失效或者网络失效都会使得其他节点无法得到数据,从而使整个集群系统瘫痪。
当然使用多个互为备份的NFS服务器可以改善性能和避免单点失效,但是这样又会带来如何实时保持备份服务器间数据一致性的问题。 NFS方式适合于共享访问数据量不大的小型集群系统。
3.2.3 GFS
GFS(Global File System)实现了存储设备的网络共享。这些存储设备可以是共享SCSI(Shared SCSI)和共享通道(Fibre Channel - FC)。GFS包装这些存储设备使得它们好像节点本地的文件系统。GFS的主要优点在于:
高可用性:如果一个GFS客户失效,数据还可以通过其他GFS客户访问。
扩展性:因为不需要中心服务器,所有很容易扩展存储容量和访问带宽。
GFS可以将物理上分离的存储设备虚拟为一个存储而且能平衡访问负载。GFS还实现了文件锁和实时文件系统。
3.2.4 Intermezzo
Intermezzo实现了一个分布式的文件系统。它采用客户/服务器模式。服务器 拥有权威的数据,客户节点仅有本地缓冲的版本。它们通过普通的网络进行同步。Intermezzo支持断开连接下文件操作。在下次恢复连接时,它会集成本 地的改动到服务器上。Intermezzo拥有象GFS一样的可用性和可扩展性。但是它无法保证数据的实时一致性。
3.2.5 Backend Database
基于后端数据库的共享是完全不同于文件共享的方式。后端数据库系统解决了数据的一致性、性能、可用性和可扩展性问题。但是数据库的访问方法要比文件访问复杂的多。
4 并行化应用程序
并行化应用程序,使其更高效的运行是使用Beowulf集群系统的最终目的。一般说,并行化应用程序分为三个步骤:
确定应用程序的并发部分;
估计并行的效率;
实现应用程序的并发。
在并行化应用程序的过程中,需要开发环境、并行开发库和各种工具的支持。这些软件都是Beowulf集群软件体系结构中重要的组成部分。
4.1 确定应用程序的并发部分
从实用的角度说,应用程序有两种类型的并发:计算和I/O。尽管在多数情况下这两者是正交的,但是也存在一些应用同时需要这两种并发性。有一些工具可以用来帮助分析应用程序的并发,而且通常这些工具都是专门为Fortran设计的。
4.2 分析并行的效率
分析并行的效率是并行化应用程序中很重要的一个步骤。正确的分析并行的效率可以帮助 你在有限的经费下最大化应用的执行效率。往往Beowulf集群的需要和应用的需要有些许的差别。比如,CPU消耗型的应用往往需要的是稍微快一点的 CPU和高速低延迟的网络,而I/O消耗型的应用需要的是稍微慢一点的CPU和快速以太网。
如果没有分析工具,你只能使用猜测和估计的办法完成这一步骤。一般来说,如果在应用的一部分中,计算的时间是分钟级而数据传输的时间是秒级,那么这一部分可以并行执行。但是如果并行后计算时间降到秒级,你就需要实际测量一下再做权衡。
另外,对于I/O消耗型的应用,Eadline-Dedkov法则对你做决定有些帮助:如果两个并行系统具有相同的CPU指标,慢CPU和相应具有低速CPU间通信网络的系统反而具有较好的性能。
4.3 实现应用程序的并发
有两种方法去实现应用程序的并发:显式并发和隐式并发。显式并行化是指由开发者决定 程序的并行。开发者通过在程序中增加PVM或MPI消息,或者增加程序执行的线程从而达到程序的并行化。显式并行化通常难以实现和调试。为了简化显式并行 化,某些开发库中增加了一些函数用于简化标准并行方法的实现。