3.1 Beowulf集群硬件和网络
Beowulf集群硬件和网络层次需要解决的问题是如何组织硬件使其达到最高的性价比。为了达到很好的性价比,Beowulf通常采用廉价的COTS硬件。当然有时为了提供某些关键的性能,也会使用一些特殊的设备。
从硬件组织的角度说,Beowulf集群中的节点都是非共享内存的计算机,它们通过消息传递进行通信。实际上,我们还有其他组织硬件完成并行计算的方式。
简单地说,有两种组织硬件完成并行计算的方法:
• 通过消息传递通信的本地内存(非共享内存)计算机系统 (Beowulf集群)
• 通过内存访问通信的共享内存计算机系统 (SMP计算机)
当然也存在将多个本地或共享内存计算机相连并创造一个混和的共享内存计算机系统的可能。但在最终用户看来,这种计算机系统就好像一个大型的共享内存计算机。这种技术被我们叫做非一致内存访问NUMA(Non Uniform Memory Access)。但是从底层说,一个NUMA计算机系统必须在节点间传递消息。
当然也可以将共享内存计算机作为一个本地内存的计算机连入一个Beowulf集群系统。由于Linux系统支持SMP计算机,所以Linux系统本身能够在SMP中的多个CPU上调度作业。所以Beowulf集群本身就没有必要识别集群的节点是不是共享内存计算机了。
和SMP系统相比,集群系统有明显的优点。关于这一点请参阅本系列文章的第一篇。
因为Beowulf集群采用消息传递完成并行程序间通信,所以网络传输成了系统的瓶颈。在实际的系统中,通常采用有两套彼此的独立的网络设备。一套是普通的以太网,用于象系统管理和文件服务等普通的网络通信。另一套网络是用于进程间通信的高速网,象Myrinet和Giganet。和100M以太网相比,这类网络具有低延迟和高带宽的特性。
还有三类设备虽然不是必须,但是对于集群管理却是非常重要的:
• KVM Swither:KVM是指Keyboard、Video和Mouse。这个设备可以让系统管理员用一套KVM管理系统中的所有节点。
• 远程电源管理设备(如ASM):这类设备使得管理员可以在管理节点Power on/off其他节点。
• Terminal Server:这种设备通过串口将节点连接起来。通过这个设备,管理员可以在管理节点上虚拟出其他节点上的控制终端。和KVM相比,这种方法不需要硬件的切换。
3.2 Beowulf集群软件
Beowulf集群在软件层次面临的问题是如何在硬件层次上获得最大的性能。通常,Beowulf集群采用Linux+MPI的方式支持并行计算。MPI是采用消息传递的方式实现并行程序间通信。虽然也可以采用其他的通信方法,但是消息传递模式是最适合于集群系统的。简单地说,有两种在并行程序间传递并发的方法:
• 使用处理器间的消息传递(MPI)
• 使用操作系统的线程(Thread)
其他的方法也存在,但是这两种方法应用得最广泛。虽然存在效率和移植的问题,这两种方法都可以在SMP,NUMA和Cluster上实现。
消息传递需要在CPU间拷贝数据,而线程却可以在CPU间共享数据。数据拷贝的速度和延迟是影响消息传递效率的最关键的因素。PVM和MPI是最常用的两种消息传递API。消息传递也可以在线程上实现,并且消息传递即可以用于集群系统,也可以用于SMP系统。和线程相比,在SMP系统上使用消息传递的优点在于可以很方便的把SMP上的应用移植到集群系统上。
线程的最大特点是,线程间是共享数据。因此它在SMP系统上工作的更好。而且Linux本身也是支持Posix线程的。但是使用线程的最大缺点在于,很难将线程扩展到SMP系统以外。虽然NUMA技术可以高效的做到这一点,但是那非常昂贵而且Linux本身也不支持。
下表概括了线程和消息传递在SMP和集群系统上的比较:
*需要昂贵的NUMA技术
SMP系统性能
集群系统性能
扩展性
消息传递
好
很好
很好
线程
很好
差*
差
3.3 Beowulf集群应用
Beowulf集群的应用层次位于硬件和软件层次之上。它要解决的问题是如何在实际的集群系统中并行化(PARALLEL)应用中的并发(CONCURRENT)部分,从而使集群上的应用达到最好的性能。
在阐述这部分之前,我们需要区分两个概念: PARALLEL和CONCURRENT。程序的并发(CONCURRENT)部分是指程序中可以独立计算的部分。程序的并行(PARALLEL)部分是指程序中在同一时间被分别执行的并发(CONCURRENT)部分。
它们的区别是很重要的。并发是程序本身的属性,而并行是计算机系统的属性。并行的目的是获得很好的性能。限制并行性能的因素是计算节点间通信的速度和延迟。大部分的Benchmark都有很高的并行性并且通信和延迟不是什么瓶颈。但是其他应用却没有这么简单。对于这些应用,有时候使并发部分并行执行反而可能使应用性能更低。简单的说,除非附加的通信时间代价小于并发节约的计算时间,否则并行执行反而会降低效率。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieRXuoNfErVJcMfF1xg_-B-4GJGK8kikaA9BD6MSq1YVljANy-RhVThjRXWxMRA1MEaFPHob30Wc8EVILJ4LDbWVyIuACeOhqYNg7huPIJxvYwED4QfFlk4MCYgBbckwho0JHdDacGuOMe/s400/image006.gif)
程序员的任务就是决定哪些并发的部分需要并行执行,而哪些不应该并行执行。这些决定最终会影响应用程序的执行效率。图3描述了实际应用中程序并发部分和通信计算时间比的关系。
在理想的系统中,通信计算时间比应该是恒定的。任何并发部分都应该实现为并行。不幸的是,实际的系统,包括SMP系统,都是图3所示的那样。所以在设计 Beowulf集群应用时,必须认识到并发带来的效率依赖于在该系统上通信处理时间比。也正是因为这个原因,虽然可以把应用移植到另一个并发系统上,但是并不能保证应用在被移植的系统上仍然是高效的。一般来说,不存在可移植的且高效的应用程序。
同样的道理,使用更快的CPU也可能使你的应用变慢。
没有评论:
发表评论