- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
利用冗余处理器提高系统可靠性
对于通信与无线设备而言,可靠性不能是设计完成之后才去考虑的事情,如果因可靠性而引起停机将为运营商造成巨大损失,所以高可靠性设计已成为一种必须。本文以双处理器工作模式为例,介绍利用冗余设计提高系统可靠性。
提高使用性能的关键是使可靠性达到99.999%,要取得这样高的目标不仅要有可靠的硬件、能够热插拔维修及周密进行软件设计,还应有一些冗余元件,包括冗余处理器、转换结构、电源以及带有冗余转接卡的通信设备。特别是对载波通信系统而言,设计时不能留下任何可能导致整个系统操作中断的硬件与软件错误。
设计人员要考虑的一个主要问题,是在中央处理器中加入冗余设计,弥补系统结构的不足。然而冗余处理器结构设计异常复杂,要进行全面的考虑和仔细分析,以确保当一个处理器停止工作时系统还能正常运行。
许多工程师错误地认为可将冗余的实现交给将来的软件部分去处理,但后面就会发现他们会被最初的选择束缚手脚,因为此时只有一些受到限制的解决方案,要不然就得采取成本高昂的软硬件重新设计。因此要有效实现处理器冗余,从最初第一天的最底层设计时就要考虑好。为了说明这一点,让我们一起来看看设计一个带冗余处理器系统设计人员所面临的挑战,我们主要讨论通信和无线设备结构中常用的双处理器工作/备用冗余模式(通常称为2N冗余模式)。
发现错误
设计冗余处理器系统的最大困难是如何精确地检测出硬件和软件错误。在设计复杂性和错误覆盖范围间存在一个平衡点,有人认为100%覆盖所有错误不可能也没必要,因为这样需要很多额外的硬件和软件来检测所有可能发生的错误,而这些硬软件本身也极有可能出错。
不过可以在处理器板上增加一些简单功能来检测硬件错误,包括所有电源电压监测、CPU温度监测、重要时钟和定时器输入测试、内存奇偶校验以及为外部接口提供回路。当检测到严重硬件错误时,电路设计应使系统功能失效并处于复位状态,而且软件的设计也应能够触发使硬件复位。
必须用大量软件诊断来弥补硬件错误检测的不足,软件测试可以检测外围错误(如读写临时寄存器)。外围设备任何意外响应都会触发恢复过程,包括外设复位及测试,而软件通过校验和计算,可对非易失性存储器中的内容进行验证,并在空闲时运行非破坏性核对和诊断程序。
另外让所有功能调用都返回一系列可检测的状态代码能使操作更加可靠,错误的调用必须用局部恢复功能立即处理或沿调用链重新传送;还应采用超时设定检测没有响应的模块,以及跳出死循环;如果可能的话可用内存管理单元针对不同任务和应用保护内存空间。处理器故障需小心对待,一个致命错误将导致处理器立即失效,在处理器重新启动过程中应让备用处理器接管它的工作。
广泛进行错误检测和代码恢复的重要性怎么强调都不过分,通常软件代码中有50%只是为了测试和处理运行过程中出现的错误、故障和意想不到的情况而编写。
保留看门狗功能
应有硬件看门狗计时电路帮助监测处理器及其软件,看门狗计时器选通代码应该是分布式的,这样执行多任务时看门狗才会起作用。很多软件设计将看门狗选通设定为高优先级计时器中断,并把它从低优先级任务中去掉。
此外还需要有错误管理代码分析失效,以确定适当的本机复原动作,判定是否要关掉处理器(执行处理器转换)。严重的失效需要对硬件复位,但没有备用处理器时,非严重故障只要热启动即可。
错误检测和关闭处理器的决定最好在局部执行,不要影响其它处理器,这样可以避免以后设计人员更改硬件或软件设计时产生不兼容问题,而且即使没有冗余处理器,这种系统的运行也很稳定。
互锁很重要
在2N冗余处理系统中,必须采用互锁机制以保证在任何时候有一个并且只有一个处理器在起作用。每个处理器都必须知道另一个处理器的工作状态(运行或关闭)和当前保护模式(有效或备用)。
互锁可以利用两个处理器间的硬件状态信号,处理器间带有超时设定的脉冲信号也可作为软件替代方式。不过这些也许很复杂,而且对某些错误转换时间相当长。互锁信号必须在失效时也是可靠的,这可以通过将复位和出错都默认为处理器“无效”的指示来实现。
检测到错误信号之后或者由于管理的原因(如维护时)都可以使工作处理器变为无效,无效的处理器不能参与系统控制,因此其保护模式也不再有用。根据硬件结构不同,无效或备用处理器需要用专门的硬件将其从系统总线中隔开,防止它影响正在工作的处理器。
系统正常工作过程中,每个处理器都监测另一个处理器的操作状态和保护状态。当一个正在运行的处理器停止工作时,备用处理器将开始运行,引发处理器转换(见图1)。如果有两个处理器都想运行,要预先制定其中哪一个优先,另一个则回到备用模式。必须要用到这种方法,以免形成死锁。
系统可以用备用处理器探测工作处理器一些其它错误,工作处理器本身并没有检查这些错误,此时备用处理器可以请求工作处理器将其设为无效,以便进行转换。但假如允许备用处理器对没有响应的工作处理器复位而强迫进行转换,情况会变得复杂,因为这时处理器可以互相复位,一个小小错误都有可能使两个处理器都变成无效。
状态信息更新
当检测到错误且处理器发生转换之后,设计者应确保原先备用的处理器拥有当前系统活动的所有信息,这样转换才不会出错。有三种方法使备用处理器保持同步,分别是同时处理、存储器镜像和通信链接(图2)。
同时处理如图2a所示,它将工作处理器的输入信号都送一份到备用处理器中,备用处理器并行处理输入信号,跟踪工作处理器的情况。
如果备用处理器重新启动而初始状态与工作处理器不同时,同时处理的方法就会有问题;假如备用处理器能根据输入迅速回到正确状态,这种方法还是很有用的,其优点是不需要在处理器间作复杂的更新动作。
采用存储器镜像法时(图2b),一块镜像内存用来在工作和备用处理器之间传递状态数据,共享相关信息。镜像通过特殊的硬件来完成,它自动将工作处理器的信息在备用处理器存储器中做一个备份。
这种方法将两个处理器的硬件紧密结合起来,从而减轻了软件的负担。根据实现的具体内容不同,一些要保留的数据也许还需要明确声明,以便留在镜像内存中。
第三种传递状态信息的方法是通信链接(图2c),它在两个处理器间采用一种专门的连接通路。工作处理器的软件找出状态数据变化情况,然后用通信链接发送到备用处理器中。每一个状态变化都可以事件驱动的方式发送更新,一组状态变化则以周期方式发送,所有状态数据都变化时则根据需要大量发送。
通信链接法使系统耦合更加松散,它允许两个处理器装载不同的软件甚至用不同的硬件结构,而将兼容性问题放在负责通信链接的软件里。
值得注意的是通信系统处理器在出现错误时通常只保留稳定的链接,因而只有稳定的状态信息才会传到备用处理器。在转换时,位于处理器底层的通信链接可能需要重新启动,而正在进行的操作可能会被终止。
多数通信信令协议都设计得非常灵活,可以对付因处理器转换之类的事件引起的瞬时中断。有些数据网络协议(如IP路由边界网关协议)对链接重启很敏感,在处理器转换期间需要更具体的状态信息来维持传输控制协议链接。由于保留的状态信息越来越多,设计的复杂度也日益增加,设计人员在选择转换过程保留状态信息时要小心注意应用需求和系统结构。
转换和恢复
在设计转换恢复策略时,开发人员要考虑两类转换。首先是自由转换,它发生在备用处理器没有得到警告的情况下突然发现运行处理器失效时,此时失效的处理器不能帮助系统恢复,备用处理器必须开始运行,独自恢复系统。
第二类转换称为受控转换,发生在工作的处理器还能与备用处理器通信的情况下。这类转换通常比较平稳,因管理维护或非严重错误引起的处理器转换可使系统中断降到最低程度。
受控转换时,工作处理器首先处理完瞬时状态,然后通过数据流控制接口,暂时延缓后续外部事件的处理。系统稳定后,所有未决状态的更新信息都发送给备用处理器,这时两个处理器同步运行并开始转换。备用处理器运行起来后,系统开始恢复。
系统恢复的复杂性很大程度上取决于系统应用和新运行处理器得到的可用状态信息数量。以下是一些典型的恢复任务:
* 将所有对保护状态敏感的软件任务操作模式转换* 向其它需要知道是哪一个处理器正在运行的系统部分发出通知
* 将每一个中断或暂停连接重新启动
* 由于状态在转换过程中正在变换,因此需要检查系统是否同步或存在混乱的信息(可能在其它板上)
* 通知管理系统开始转换
* 如果没有成功重启,采用报警方式报告另一个处理器的错误
* 待另一个处理器修复或重启之后,用当前系统状态对其更新
处理器转换通常是不可恢复的,即新开始工作的处理器会继续运行至出错为止,已修复的处理器则担当备用处理器的角色。
冗余处理器测试
很多系统只是从用户的角度对冗余处理器进行一次测试,方法是突然将运行的处理器从被测系统中取出来,如果系统不能通过测试,那么它就不能称为“冗余”系统。然而有大量方案都不能通过这个测试,因为它们建立的结构原先并没有打算支持冗余处理器,例如冗余CompactPCI主机就要求在备用板上有一个工作桥。
因此还需要进行更多测试,至少要在实验室里测过。下面是对运行处理器的几个附加测试:
* 使板上电源无效
* 使处理器时钟无效
* 在数据总线上制造一个中断
* 将通向其它处理器的通信链接收发器设为无效
* 强迫外设进入硬件重设
* 修改内存分配软件模仿存储器溢出
* 加入代码强迫处理器出现异常
* 加入代码强迫将重要任务锁住
很难确定实际的出错范围,设计人员可以采用建模技术来评估出错率,分析设计并评估系统实用性。计算实用性和以统计模型为基础计算平均无故障工作时间的可靠性软件包很有用,可以省去很多不必要的工作,这种软件现在都能买得到。
在线更新
处理器冗余和另一种非常实用的技术在线软件更新的联系十分密切,这种更新要求保留系统转换过程的运行代码状态。为了有效做到这点,已经装载的软件必须能够在已知位置识别和存储稳定状态,然后再逐步转换成新代码。状态数据要标明当前软件的版本号,以便新版本代码能正确翻译与转换数据。
为了对冗余处理器系统进行在线更新,备用处理器先被隔离出来,转换也被管理系统锁住。先将备用处理器升级为新的硬件和软件,升级后的处理器重新启动并投入使用,然后管理系统请求工作处理器用受控保护转换所用数据进行模式状态更新,这时系统将已更新过的处理器作为工作处理器。然后在其它处理器上同样重复这个过程,最后系统回到正常工作状态。
作者: Bill Krause
上一篇:利用成像技术进行测量
下一篇:用实时跟踪方法调试嵌入式软件