基于MPI并行程序的容错系统设计

时间:2022-10-01 09:48:45

基于MPI并行程序的容错系统设计

摘要:为了确保并行程序能够在并行环境下准确地运行,须提高系统的可靠性,将容错技术应用到并行计算中。该文针对MPI并行程序提出一种容错系统的设计方法,采用检查点/卷回恢复技术、并添加故障检测功能,能够有效地处理节点失效故障和进程失效故障,在一定范围内实现容错,为MPI环境下进行大规模计算提供一个可使用的应用模型。

关键词:MPI并行程序;容错;检查点/卷回恢复;故障检测

中图分类号:TP302文献标识码:A文章编号:1009-3044(2011)04-0817-03

The Design of Fault-Tolerant System for Parallel Program Based on MPI

LI Fei-fei

(Northeast Dianli University, Jilin 132012, China)

Abstract: In order to ensure that the parallel program accurately runs on parallel environment, system reliability must be enhanced, so fault-tolerant technology is applied to parallel computing. In this paper, a design method of fault-tolerant system is proposed for parallel program based on MPI, which adoptes checkpoint/rollback recovery technology and adds a function of detecting failure. The fault-tolerant system can effectively handle node failure and processes failure in a certain range, which provide a practical model for large-scale calculation under MPI environment.

Key words: parallel program; MPI; fault-tolerant; checkpoint/rollback recovery; detecting failure

并行计算从本质上讲就是将多任务映射到多处理机上执行,或将多任务映射到具有特定拓扑结构的多节点机上求解,每台节点机启动一个进程。MPI(Message Passing Interface)消息传递接口[1]用于开发基于消息的并行程序,通过传递消息来协调各个并行执行的进程的步伐,并且利用交换信息和数据去控制执行并行计算任务,广泛应用于集群系统的并行程序开发环境。随着集群规模的不断扩大和节点机数的增加,异常关机、节点故障虽然不会经常但极有可能发生,但是现行的MPI标准中不包括任何机制去恢复意外失效的进程,系统发生故障时程序必须从头开始重新执行,从而引起计算时间的大量浪费[2]。因此,需要将容错技术引入到并行计算中,保证在发生各种异常事件或故障时,为用户提供持续的服务。

目前,并行程序的容错通常是基于检查点技术,再加入故障探测、处理以及自动恢复等辅助功能而形成的完整容错机制,在全局一致性状态下将进程的运行状态进行保存,当程序运行出现故障时,利用保存的进程状态对出错进程进行恢复,使计算任务从检查点处恢复执行,以减少计算损失,提高程序运行的可靠性和可用性。

1 容错相关内容

1.1 检查点技术

检查点技术[3]是指在程序运行时选择适当的时刻设置检查点,进行检查点操作,保存各个进程的运行状态到存储器中,系统如果在随后的运行过程中发生故障,所有进程停止计算卷回到上一次最近的检查点处,利用检查点处保存的正确状态去恢复出错的进程,从该检查点处重新计算。其过程如图1所示,这样可以避免由于故障而导致程序从头重新执行,因而能有效地减少计算损失。

在设置检查点时要保证所有进程处于全局一致性状态[4],所谓全局一致性状态,就是一个并行程序在无错执行期间所有进程的某种状态集合,当某个进程的状态表现为发送了一条消息时,在相对的另一个进程状态必须反映为接收该消息。为了发生故障时正确地卷回恢复,设置检查点时必须保证记录的状态是所有进程处在全局一致性状态下,避免产生多米诺效应。

如图2所示,黑色方块代表各个进程独立设置的检查点,当进程P2发出消息m7后发生故障,则卷回到检查点C处,卷回过程中P2取消发送m7,因此P1必须回退到检查点B以取消对m7的接收。同理P1发送的消息m6无效,进程P0卷回到检查点A处,依次类推,P1卷回到D处,导致P1卷回到E处,P0卷回到F处,最后所有进程又卷回到起点,重新开始计算所有任务,这种现象称为多米诺效应[5]。

1.2 故障

一个系统是容错的[6],是指并行程序在发生逻辑故障的情况下仍然能够正确地运行,故障模型[7]一般分为两类:Byzatine故障模型和Fail-stop故障模型。本文针对Fail-stop故障模型进行研究,可描述为并行计算中进程的挂起或崩溃情况,是并行计算领域常见的硬件故障模型。fail-stop故障可分为节点失效故障和进程失效故障两大类。节点失效故障一旦发生,进程执行中断不对任何请求做出响应,比如进程崩溃故障、系统掉电故障等;而进程失效故障是指某个进程异常退出,其它进程或运行环境无法感知,并行程序成为悬空程序。两种情况的发生都会导致并行程序计算失败,因此,容错系统应及时检测出出错的故障类型,以便系统进行卷回恢复处理。

1.3 卷回恢复

卷回恢复技术[8]把一个并行系统看作是一个应用进程的集合,各进程相互之间通过网络通讯。在进程无错执行到检查点处将进程的运行状态保存到稳定存储器中来实现容错,当出现错误时,一个出错进程可从检查点处所保存的一个状态中进行重启恢复,这样就可以尽量减少计算的损失。在卷回恢复过程中,可以通过进程迁移来实现,将在出错进程上执行的任务迁移到另外一个进程上,执行同样的计算得到结果。还可以重构并行环境,发生故障后,所有进程卷回到上一次最近的检查点处,利用保存的进程状态重构并行环境,重新分配任务进行计算。本文研究的容错系统采用后一种方法,将出错进程剔除,剩余节点机重构并行环境,实现负载平衡重新执行计算任务。

2 容错系统的设计

本MPI并行程序的容错系统可分为三个模块:用户界面模块、总控模块和检测模块。用户界面模块:是容错系统和用户的通讯接口,用户在界面上完成所有准备工作,然后启动容错系统运行并行程序,并且在计算的过程中,系统运行状态会输出显示在用户界面上,方便用户了解各个节点机的状况;总控模块:掌握整个系统的运行过程,系统初始化、调用执行并行程序、负责检查点操作、卷回恢复处理,以及协调检测模块与总控模块的配合;检测模块:监听各个进程运行状况,一旦发现某个进程发生故障则向总控模块报告。

本容错系统的模块结构图,如图3所示。

2.1 检查点的生成

本文针对MPI并行程序而设计的容错系统,设计的出发点是在容错系统上调用并行程序,然后启动后台并行环境执行并行计算。用户必须将并行程序进行粒度划分,使得每一个粒度成为一个.exe的可执行程序,并将所有的.exe可执行程序交给容错系统。用户可以根据MPI的特点以及需要自由地对并行程序进行粒度划分,并规定.exe可执行程序被容错系统调用的顺序。

容错系统通过依次调用所有粒度的.exe可执行程序完成计算任务,将粒度连接点默认为检查点,作为卷回恢复的参考点,在每个检查点处保存进程的运行状态,利用这些状态去恢复出错的故障。此检查点方法可以避免产生多米诺效应,如图4所示,当进程P1或是P2发生故障时,所有进程停止计算任务,卷回到上一次最近的检查点B或是C处,由主进程P0根据故障类型对出错进程进行恢复,重新执行计算任务。

2.2 用户界面模块

用户界面是用户与程序交互的窗口,比较直观,方便用户与容错系统的交流,在界面上用户进行相应的操作,完成所有准备工作,然后启动系统开始运行并行程序,在计算的过程中各个节点机的运行情况会输出显示在用户界面上,方便用户了解各个节点机的状况。用户的准备工作如下:

1) 依次保存要运行的.exe可执行程序;

2) 存储机器信息文件,用于判断可用于并行计算的节点机以及故障检测的依据;

3) 登记用户名和密码,用于并行计算的节点机的用户名和密码。

在容错系统界面上操作以上三个步骤,即可启动系统执行并行计算。

2.3 总控模块

总控模块是容错系统的核心,由主进程调用执行,主要包括三个部分的内容,系统初始化、检查点操作以及卷回恢复处理,系统功能示意图如图5所示。

1) 系统初始化。主进程进行初始化工作,获得使用的机器信息和初始化各类系统资源,系统将初始化设定为第一个检查点,在此处保存所有进程运行状态,即得到本局域网中可用于并行计算的所有节点机,并将相关的信息(即可计算节点机的机器名和IP地址)保存在本地磁盘上的检查点文件中,这些信息用于总控模块给符合条件的节点机分配任务执行.exe可执行程序,同时这些信息也是检测模块执行的原始数据。

2) 检查点操作。当系统执行到检查点处主进程调用总控模块进行一次检查点操作,任务是保存此时进程的运行状态到本地磁盘上的检查点文件中,用于执行下一个.exe可执行程序为各个进程分配任务以及发生故障时进行卷回恢复处理的依据。进程的运行状态包括节点机的机器名和IP地址,执行并行计算时将任务平均分配给这些机器名对应的节点机,在这些节点机上分别启动一个进程执行并行计算的任务,IP地址用于检测模块监听进程时判断参与计算的进程是否正常运行。

3) 卷回恢复。当参与计算的某一节点机上的进程发生故障时,总控模块执行卷回恢复任务,所有进程停止一切计算任务卷回到上一次检查点处,主进程读取该检查点处的检查点文件内容,得到所有符合运行条件的进程,根据所发生的故障类型进行恢复处理,如图4所示,当发生进程失效故障时,重新启动所有进程再一次进行相同的计算任务,相应的,当发生节点机失效故障时,主进程去掉出错进程,为检查点文件中保存的其他剩余进程重新分配任务,然后进行相同的计算。

2.4 检测模块

检测故障是实现并行程序容错的重要环节之一,保证实现容错功能的先决条件,探知发生故障及其类型并交由总控模块判断进行哪种处理。检测模块由守护进程来实现,周期性地检测进程运行状况是否良好,如发生故障及时通知主进程的总控模块。

利用java提供的异常(Exception)处理实现故障检测的功能。除了标准异常,根据容错功能的需要扩展java.lang.Exception类来实现特定的异常,如在表达故障类型时事先定义每种故障发生对应的异常,将某节点机网络不在线定义为节点失效故障,MPI并行环境的wmpiconfig.exe进程不在线定义为进程失效故障。当抛出异常时总控模块得知发生故障,提供了一种在并行程序容错中实现错误捕捉的机制。

3 系统测试

以基于MPI的P-Q法潮流并行程序为测试用例,验证容错系统的有效性。此并行程序被划分为四个粒度,容错系统依次调用四个粒度的.exe可执行程序。实验方法:在执行计算的过程中断开一台用于并行计算的节点机的网络连接制造节点机失效故障,另一种方法是手动杀死一台节点机上的MPI进程制造进程失效故障。测试结果如表1所示。

实验结果表明,本容错系统能够检测出并行程序计算过程中发生的节点机失效故障和进程失效故障,并且能够对故障进行相应的处理,最终得到并行计算的结果,实现了一定范围内的容错功能。

4 总结

本文将容错技术应用到并行计算中,在不修改原并行程序代码的情况下设计出一个容错系统,利用守护进程实现故障的检测及时发现故障,并结合检查点/卷回恢复技术对出错的进程进行恢复,为并行计算的过程提供保障。本文设计的容错系统实现了对除主机之外的其他节点机故障的恢复,一旦主进程发生故障,则所有计算都白费。本文下一步的研究工作是解决此问题,可以将生成的检查点文件进行备份,保存在另外一台计算节点机上,主机发生故障后将此节点机上的进程转为主进程,负责重构并行环境和启动并行程序重新计算。

参考文献:

[1] 任波,王乘.MPI集群通信性能分析[J].计算机工程,2004,30(11):71-73.

[2] 崔丽青,徐炜民.MPI容错问题的研究及实现[J].计算机应用,2003,23(12):236-238.

[3] 周恩强,卢宇彤,沈志宇.一个适合大规模集群并行计算的检查点系统[J].计算机研究与发展,2005,42(6):987-992.

[4] 万国伟.消息传递系统容错技术研究[D].长沙:国防科学技术大学研究生院,2006:15-21.

[5] 薛瑞尼.面向集群系统的MPI并行程序容错技术研究[D].北京:清华大学,2005:12-23.

[6] 丁俊,童维勤.群机系统的容错和恢复[J].计算机应用,2001,21(06):90-92.

[7] 孙峻朝,王建莹,杨孝宗.故障和容错机制的层次模型[J].计算机工程与应用,1999(10):5-7.

[8] 周军海.基于回卷恢复的MPI程序容错[D].长沙:湖南大学,2004:32-38.

上一篇:基于IPv6校园网过渡技术的研究 下一篇:IPv6过渡技术在校园网中的应用研究