容错计算,就是在系统存在故障的情况下,仍能正确地执行给定的算法。为了实现这一点,必须使系统具有
故障检测与诊断、功能切换与系统重组(reconfiguration)、系统恢复与重新运行、系统的重构(reintegration)与可扩展等功能,而且这些功能不能影响系统的正常运行或至少不能使系统的性能下降到不能容忍的程度。
定义
容错计算,就是在系统存在故障的情况下,仍能正确地执行给定的算法。容错计算技术随计算技术发展而发展,特别是与VLSI的发展密切相关。早期50~60年代,计算机硬件由分立元件组成,与之相应,容错计算技术集中在器件级和基本功能部件级(运算器、控制器、寄存器等)进行研究,提出了大量的方法来提高逻辑电路的可靠性,大部分检错、纠错码也在这期间广泛应用。
基本技术
计算机系统的RAM技术主要就是容错计算(Fault-Tolerant Computing)技术。所谓容错计算,就是在系统存在故障的情况下,仍能正确地执行给定的算法。为了实现这一点,必须使系统具有故障检测与诊断、功能切换与系统重组(reconfiguration)、系统恢复与重新运行、系统的重构(reintegration)与可扩展等功能,而且这些功能不能影响系统的正常运行或至少不能使系统的性能下降到不能容忍的程度。对非容错系统,当故障导致系统发生算法执行错误并被发现后,系统要停止运行,由专门的维修人员进行检测、诊断,找到故障发生的原因。维修人员根据系统的构成将故障部件拆除,将剩下的正常部件构成一个功能有所降低的系统继续运行或将备用的正常部件装入,重新起动系统运行。但此时,发生故障时执行的算法(程序)已被破坏,系统重起后必须重新运行算法(程序)甚至重新装入算法(程序)。而容错系统中上述人的工作绝大部分由系统自行完成。
容错的基本技术是冗余(redundancy)及其管理、故障检测与诊断和系统状态的维护与恢复。冗余概念中,从方式上可分为静态、动态冗余;从种类上可分为时间、空间冗余,从对象上可分为器件、部件、模块、系统、数据冗余。图1出容错计算技术的基本分类:
故障检测与诊断
故障检测与诊断就是当系统部件的故障引起算法执行发生错误时,能发现并确定其具体位置的技术,它是容错系统首先要解决的问题。故障检测与诊断技术的主要内容有三个:故障检测、故障隔离(在故障导致系统不可恢复的损坏之前,将故障的影响封闭起来)和故障诊断。其技术评估的主要标准有:故障的复盖率、诊断率和对故障的反应时间(平均值)。它们分别代表故障检测能力、故障的定位能力和检测与诊断的实时性。这项技术分为联机或脱机方式,可以用硬件、软件或固件实现。
静态冗余
静态冗余又称故障屏蔽,其基本思想是利用多个部件或系统以固定的结构和运行方式同时执行相同的功能,利用多个一致的结果来屏蔽掉某些故障部件或系统的错误结果。其基本的模型如图2:
从系统容错运行和可靠性的角度来说,静态冗余不需要其它容错功能(如检测与诊断、恢复等等)就可满足要求。静态冗余技术的难点在它的表决机构可靠性与同步问题。而它的最大缺点就是当系统运行一定的时间后由于故障子系统多于正常子系统使系统的可靠性小于单个子系统的可靠性,因此静态冗余一般要与其它容错技术结合使用。静态冗余的主要优点是系统在故障条件下对外界的快速响应性,对于某些极快速响应要求的实时应用要采用静态冗余技术。
静态冗余技术的实现方式主要有双重冗余和TMR(三重冗余)。均可以在系统的任何层次上用任何方法实现。
动态冗余
由于静态冗余的固有缺陷,大部分应用领域都采用动态冗余技术。动态冗余的基本思想是:系统不仅能保证故障的屏蔽,而且还要定位并自动切换故障子系统或改变系统的结构,不让故障部分的积累造成一系统的错误动作。动态冗余以高覆盖率、快响应时间的故障检测与诊断技术为基础。其关键技术是重组、恢复和重构。动态冗余为联机修复(系统运行中修复)提供了必要条件。
动态冗余不仅使系统的可靠性大大提高,而且极大地缩短了故障部件的修复时间,使系统的可用性也大大提高。所以动态冗余是容错计算技术中最主要最常用的技术,也是最复杂的技术。对于新型系统结构和分布式处理动态冗余又具有新的内容。
容错方法
软件容错方法
70年代中期出现了新的容错方法。它采用多处理器和特别设计的操作系统来达到容错。避免了上一代容错系统处理器的主从关系及连接至所有子系统的双路径。更重要的是.新方法在商业应用中第一次提供联机修理功能,即故障部分的移出和更换都不影响正在运行的应用程序。具有这种性能的系统的主要结构特点包括处理器重复、双存取输入输出控制器、
冗余电源系统和一个以信息为基础的操作系统。
这种以软件为基础的容错系统以检查点为最基本的恢复机能。每一个运行中的进程都在另一处理器上备有完全相同但并不活动的后备进程。如原进程内发现不能恢复的故障,则后备进程可用来替换它。原进程定时将关键计算点通过消息方式送到后备进程。若操作系统发现原进程失效。则“唤醒”后备进程,后备进程可从最后一个检查点开始恢复计算。
检查点是一个简单概念,但其有效地在应用系统中使用则需有高度的编程技巧和对系统的详细了解,而且对计算机系统的资源消耗比正常大25%。
硬件容错方法
由于软件的费用越来越高,停机时间造成的损失越来越大,维修投资越来越多,而硬件的成本越来越低,故以Stratus为代表的硬件容错技术在80年代初开始出现。
某些计算机厂商为了提高产品可靠性,采用了如“磁盘镜象”、“数据重读”等一些容错技术,但这些产品都还不能称作是容错系统。真正意义上的硬件容错系统应该具有以下5个特性:
(1)双总线体系结构;
(2)双重冗余部件:CPU、内存、通讯子系统、磁盘、电源……;
(3)自检逻辑排除故障;
(4)自动隔离故障部件;
(5)联机更换故障部件。
具体地说就是,双总线及双重冗余部件确保了系统在某一部分发生故障时仍能“生存”下去并不会降低或失去其处理性能;每个模块在运行时都不断检查自身的状态,如果发现任何部件发生故障,系统会将该部件自动隔离。并立即将故障信息自动通过远程服务网,转达到用户服务中心,此时其余部件仍将会继续运行;能在线更换或扩充部件,而不影响系统的正常运行。
当系统发生故障时,硬件容错结构不需要从故障中恢复。任何故障元件都自动退出操作,而系统则利用冗余部分继续运行,用户不需要设计恢复程序。对用户来说,硬件容错计算机和传统计算机一样,并不必为容错而特别编程。
技术发展
计算机系统的可靠性一直为人们所关注。早期由继电器和真空管构成的计算机经常不能正常工作。随着人们对计算机依赖程度的不断提高,系统的可靠性就显得更为重要。提高计算机的可靠性有避错和容错两种方法。避错实际上是不容错的,乃是保守设计方法的产物,它以采用高可靠性零件、优化路线等质量控制管理的方法,来减低出错的可能性,但即使是最仔细的避错设计,故障也总有一天会出现,从而导致系统失效。容错是指在硬件或软件故障产生的情况下,仍能将指定的算法准确地完成,同时不使性能降低,即用冗余的资源使计算机具有容忍故障的能力。冗余一般可分为暂存性和物理性两种,前者通过重复执行来实现,后者则使用重复的硬件和软件。
1965年美法合作的公共电话网络开始使用计算机控制的电子交换系统。由于服务的特性,系统要求在每40年内中断运行时问不能超过2小时。为了达到这样高的技术指标,生产商讨所有的关键性元件,如处理器和存储体等,进行重复配置。系统运行时使用一组子系统,而重复的一组则处于“热备份”状态或和联机的一组子系统同步运行。系统检测出故障的方式有两种:比较子系统产生的结果;或每一组都由自检模块组成(自检模块是自重复和能够互相比较结果的)。
计算机系统发展到今天,已走出条件优越的机房,进入各种复杂的环境之中。航天、航空、过程控制、银行商业事务处理、军事工程等领域的应用,使计算机系统的可靠性问题成为整个大系统能否生存的关键问题。因此,人们对计算机系统的可靠性(reliability)、可用性(availability)和可维护性(maintainability)(简称RAM)进行了深入、细致的研究,提出种类繁多的RAM技术和理论,开发出多种高RAM的计算机系统。
容错计算技术随计算技术发展而发展,特别是与VLSI的发展密切相关。早期50~60年代,计算机硬件由分立元件组成,与之相应,容错计算技术集中在器件级和基本功能部件级(运算器、控制器、寄存器等)进行研究,提出了大量的方法来提高逻辑电路的可靠性,大部分检错、纠错码也在这期间广泛应用。用冗余的思想解决容错问题在这期间也提了出来。70年代VLSI技术的出现及迅猛发展,推动了整个计算机工业的发展,改变了人们对计算机的许多基本观念,也使容错技术发生了大转变。计算机器件功能愈加复杂,其内部的冗余逻辑和功能的容错设计使它的可靠性和可测试性有所提高。容错的重点转向处理机、子系统甚至系统级。同时,硬件价格的下降使得人们有能力更多地应用冗余技术来获得高RAM的系统。此外,并行处理、多机系统、分布式系统等的发展给容错计算提供了新的研究领域和课题。