专利名称:一种计算机故障管理系统的容错方法
技术领域:
本发明涉及一种计算机应用技术领域,具体地说是一种计算机故障管理系统的容错方法。
背景技术:
随着计算机技术的飞速发展,计算机系统已经广泛应用于国防、教育、科研、工业、 金融及社会生活的各个领域之中。在不断追求高计算能力的同时,对于计算机系统可靠性也提出了更高的要求。尤其对于支撑关键应用的计算机系统,一旦其出现故障,造成的后果是难以想象的。因此,在现代计算机系统中设计部署故障管理系统,尤其是高可靠的故障管理系统,以此来保证计算机系统的可靠性是十分必要的。故障管理系统能够实时检测计算机系统当中的软/硬件错误,根据产生的错误参考诊断规则对错误进行诊断,一旦满足诊断规则的触发条件则立即触发故障,再由专门的故障处理模块执行故障处理(包括故障隔离、故障恢复和故障修复),并根据故障处理的执行结果进行进一步处理。故障管理系统的整个执行过程是由事件驱动,不需要人工参与,具有可预测、自我修复的特点,能够有效避免计算机系统发生故障,从而满足计算机系统可靠性要求。然而,在追求故障管理系统保证计算机系统可靠性的同时,如何保证故障管理系统的可靠性成为十分关键和重要的前提。因此需要从计算机系统的总体结构性设计出发, 综合考虑计算机系统整体可靠性和故障管理系统自身可靠性,提出一种完整优化的故障管理系统容错框架是十分必要的。由于操作系统内核十分脆弱,容易引起Panic,我们需要尽量避免这种情况提前处理的同时,也需要考虑一旦紧急情况发生时候的急救措施。因此,提出一种故障管理系统具有一定独立性的设计,使其在紧急时刻仍能够运行良好,并能够采取一些紧急处理。
发明内容
本发明的目的是提供一种计算机故障管理系统的容错框架,以保证故障管理系统的可靠性,进而保证计算机系统的整体可靠性。本发明是按以下方式实现的,以故障管理系统为中心,提供一套完整的容错框架, 使其既能保证故障管理系统服务自身的可靠性,也能保证在操作系统内核Panic的情况下故障管理系统仍能够进行紧急处理,从而提高系统的整体可用性,该框架分为用户空间和内核空间两部分,其中
用户空间包括故障管理核心单元1),故障管理冗余单元2),代理接收模块3)和代理发送模块4);其中
故障管理核心单元1)是整个框架在用户空间部分的核心,负责错误收集、故障诊断以及故障处理,包括故障隔离、故障恢复和故障修复;采用检查点机制,定期保存当前错误处理状态信息;故障管理核心单元由错误检测模块(1)、事件分发模块(2)、诊断引擎模块 (3)、故障处理模块(4)和检查点处理单元(5)组成,其中
错误检测模块(1),针对系统不同组件部署多个错误检测模块,具体组件涉及文件系统、应用程序和服务以及提供用户空间检测手段的硬件组件,错误检测模块主动将自己生成的错误事件加入事件分发模块事件缓冲区;
事件分发模块(2),负责向故障管理核心单元各模块主动分发事件,事件包括错误事件和故障事件,事件分发模块遍历事件缓冲区中每一个事件,如果是错误事件,则将事件发给诊断引擎模块的归并单元,如果是故障事件,则查询故障处理模块哈希表,将故障事件发给指定故障处理模块;
诊断引擎模块(3),包含一套诊断规则,针对每一类故障事件创建一个归并单元,由归并单元产生故障事件,并加入事件分发模块的事件缓冲区;
故障处理模块(4),针对系统不同组件部署多个故障处理模块,组件涉及CPU、内存和 I/O以及应用程序,故障处理方式包括故障隔离、故障恢复和故障修复,根据故障处理结果选择更优的故障处理方式;
检查点处理单元(5),由检查点信息收集模块①、检查点创建模块②和检查点回滚模块 ③组成;检查点处理单元负责收集故障管理核心单元各组件信息,创建检查点消息以及回滚检查点;
故障管理冗余单元2)是故障管理核心单元的冗余组件,负责接收故障管理核心单元的心跳及监控故障管理核心单元的工作状态;定期将故障管理核心单元的检查点信息保存至检查点文件中,故障管理冗余单元和故障管理核心单元相互监听对方心跳,当心跳超时, 故障管理冗余单元则立即重启对方单元的执行进程,故障管理冗余单元工作流程如下
a)交互模块接收检查点处理单元发送的检查点消息,保存至检查点消息缓冲区,当消息数目达到预设阀值时,由信息保存模块将消息缓冲区中所有消息保存至检查点文件;
b)交互模块接受检查点处理单元的消息请求,从检查点消息缓冲区或检查点文件中获取指定检查点消息并发送给检查点处理单元;
代理接收模块3)代理接收模块位于用户空间,是故障管理系统用户空间和内核空间的通信代理,负责接收来自内核空间的错误事件;生成内核标准错误事件并加入事件分发模块事件缓冲区,采用Netlink机制与内核事件传输通道通信,模块由故障管理核心单元执行进程初始化,独立运行;
代理发送模块4)代理发送模块位于用户空间,是故障管理系统用户空间和内核空间的通信代理,负责将内核标准错误事件的诊断结果发送给内核事件传输通道,再由内核事件传输通道将内核错误事件的诊断结果发送给内核空间故障处理模块,代理发送模块采用 Netlink机制与内核事件传输通道通信,由故障管理核心单元执行进程初始化,独立运行; 内核空间包括内核故障管理核心单元5),含内核事件传输通道6),内核故障处理模块7),内核故障管理冗余单元8),其中
内核故障管理核心单元5)是整个框架在内核空间部分的核心,内核故障管理核心单元由内核事件传输通道和内核故障处理模块组成,负责对内核错误事件的收集、分发和故障处理,采用一个内核线程、一组接口和应用规范的方式,内核错误检测源,包括内核模块、驱动程序和内核部件,通过这组接口和应用规范,使用故障管理系统提供的故障管理功能, 其中,通过在中断下半部和内核代码中添加回调函数的方法,获得内核错误检测源的原始错误信息,回调函数调用的一组接口实际是对内核事件传输通道的封装,应用规范指内核错误事件,包括一般事件和紧急事件的故障处理规则;
内核故障管理核心单元工作流程如下
a)内核事件传输通道获得原始错误信息;
b)内核事件传输通道判断原始错误事件类型,如果是一般事件,则将原始事件发送给代理接收模块,如果是紧急事件,则直接交给内核故障处理模块;
c)内核故障处理模块处理紧急事件以及来自用户空间的标准故障事件;
为了保证内核故障管理核心单元执行线程可靠运行,采用在系统启动时,隔离处于两
个不
同NUMA域中的两个逻辑CPU单独运行内核故障管理核心单元执行线程的方法,CPU选择策略如下
a)根据ACPI提供的SRAT表,在第一个节点任意选择一个CPU;
b)根据距离表,再找出与此相距最远的一个CPU;
选择距离最远CPU的目的是为了减少由于两个CPU同时出错而造成故障管理系统无法正常运行的可能性;
内核事件传输通道6)是故障管理系统用户空间和内核空间的信息传递接口,采用 Netlink机制实现;内核事件传输通道封装成一组接口,在内核模块、驱动程序和内核部件的中断下半部和内核代码中以回调函数形式被调用,与用户空间代理接收模块和代理发送模块传递事件信息;
内核故障处理模块7)分为内核紧急事件处理和一般事件处理,经内核故障管理核心单元判断,如果是内核紧急事件,则直接由内核故障处理模块处理,包括采用Kexec机制快速重启一个新内核;如果是一般事件,则经由故障管理系统用户空间诊断后,再由内核故障处理模块处理,包括调用内核空间功能函数;其中
(1)针对某些MCA机制对致命错误恢复不成功,PCIEAER机制对致命错误恢复不成功, 内核发生致命错误情况,在这种情况下内核执行Panic处理,截断Panic处理,由内核故障处理模块处理,执行Kexec机制快速重启一个新内核;
(2)针对MCA、PCIEAER,SCSI EH机制成功恢复可恢复错误,以及内核发生非紧急错误情况,经过用户空间故障管理核心单元诊断后,最终交给内核故障处理模块处理,处理方式包括CPU Offline、PCIE Off line、内存页隔离;
内核故障管理冗余单元8)是内核故障管理核心单元5)的冗余组件,负责监控内核故障管理核心单元的工作状态,内核故障管理冗余单元和内核故障管理核心单元之间采用心跳连接,负责接收内核故障管理核心单元的心跳,以监控内核故障管理核心单元的工作状态;
内核故障管理冗余单元8)执行线程运行在另一个隔离的逻辑CPU上,且与运行内核故障管理核心单元执行线程的逻辑CPU距离最远,减少由于两个CPU同时出错造成故障管理系统无法正常运行的可能性;
内核故障管理冗余单元8)执行线程监听内核故障管理核心单元执行线程的心跳,当检测到心跳超时,内核故障管理冗余单元立即担当内核故障管理核心单元的角色,取代原来的内核故障管理核心单元继续工作,同时,初始化一个新的内核故障管理冗余单元,并将其迁移到另一个隔离的CPU上运行;
用户空间各单元或模块收集各组件错误信息,生成标准错误事件发送给事件分发模块;事件分发模块将错误检测模块生成的标准错误事件交给诊断引擎模块处理;诊断引擎模块将标准错误事件进行归并,并根据错误事件的诊断规则诊断组件故障,预测组件可能产生的故障,生成标准故障事件交给事件分发模块;事件分发模块进一步将标准故障事件发送给故障处理模块,由其完成后续故障处理动作;
内核空间各单元或模块收集各内核组件错误信息,将原始内核错误事件交给内核事件传输通道;内核事件传输通道判断原始内核错误事件类型,如果是紧急事件,则直接交给内核故障处理模块处理;如果是一般事件,则将原始内核错误事件发送给用户空间代理接收模块;代理接收模块根据原始内核错误事件创建标准内核错误事件交给事件分发模块,进而完成用户空间一系列处理动作,最终将生成的标准内核故障事件由代理发送模块发送给内核事件传输通道;内核事件传输通道将标准内核故障事件交给内核故障处理模块处理; 容错工作流程如下
a)信息收集,检查点信息收集模块分别遍历各错误检测模块、事件分发模块和各故障处理模块的事件缓冲区,获得当前各模块事件缓冲区中所有的事件信息;获得诊断引擎模块当前所有归并单元的信息;
b)检查点创建,检查点创建模块将检查点信息收集模块获得的所有信息,按照检查点消息格式创建检查点消息;
c)消息发送,检查点创建模块将当前检查点消息发送给故障管理冗余单元;
d)检查点回滚,检查点回滚模块从故障管理冗余单元获得指定检查点消息,包括用户指定或者最近一次检查点,按照检查点消息格式解析检查点消息,并初始化故障管理核心单元对应模块;
检查点消息由检查点消息头CkptHeader和一组模块段数据ModSecData组成,格式如
下
CkptHeader描述检查点时间、消息大小、模块段数目信息,ModSecData描述各模块具体检查点信息,包括模块段头ModSecHeader和模块包含的一组事件信息CkptEvent组成, 格式如下 ModSecHeader描述模块类型、模块段数据大小、模块包含事件数目的信息。为了保证故障管理系统自身的可靠性,对故障管理系统核心部件-故障管理核心单元采用检查点机制,定期保存其错误处理状态信息;同时,采用故障管理冗余单元对故障管理核心单元进行心跳检测,一旦检测到故障管理核心单元执行进程非正常终止,则立刻重启故障管理系统并快速回滚到上一次检查点状态并继续工作,从而提高故障管理系统的可用性。以故障管理系统为中心,提供一套完整的容错框架,为了保证在操作系统内核 Panic的情况下故障管理系统能够做一些紧急处理,采用隔离一部分CPU资源的方法,这部分CPU资源只运行故障管理系统内核空间执行程序,独立于操作系统进程调度,并修改内核Panic机制,当内核Panic时执行内核空间故障管理系统故障处理过程;同时,采用内核故障管理冗余单元对内核故障管理核心单元进行心跳检测,一旦检测到内核故障管理核心单元执行线程非正常终止,则立刻取代内核故障管理核心单元进行工作,并重新初始化一个新的内核故障管理冗余单元;同时,为了尽量减少在内核空间的工作,采用内核非紧急错误事件由用户空间故障管理系统诊断的策略。综上特征,从而提高系统的整体可用性。本发明所述的计算机故障管理系统的容错框架与现有的故障管理系统相比,具有以下优点
1.本系统框架分跨用户空间和内核空间,综合考量各种故障检测手段,具有可扩展性, 既能检测应用程序引发的错误和异常,保证服务的可靠性,又能检测各主要硬件错误以及操作系统驱动程序等错误,保证系统的可靠性。2.本系统框架对关键部件采用检查点策略,定期保存错误在处理过程各阶段的状态信息,保证不会由于系统执行进程异常终止等情况而导致错误处理信息丢失,对关键部件采用冗余组件监控策略,用冗余组件监控关键部件的工作状态。从而保证系统自身的可靠性。3.本系统框架具有一定的独立性,框架内核空间部分独立运行于隔离的CPU资源上,从而故障管理系统的运行状况不受内核影响,因而一旦内核Panic时,故障管理系统仍能够继续运行,并采取紧急故障补救措施。同时,对框架内核空间部分的关键部件采用冗余互备策略,提高系统自身的可靠性。
附图1为故障管理系统容错框架结构示意图; 附图2为故障管理系统容错框架处理流程示意图; 附图3为检查点处理单元结构示意附图4为检查点处理单元处理流程示意图。
具体实施例方式下面结合附图对本发明的方法进行更详细的说明。参照附图1,计算机故障管理系统容错框架分为用户空间和内核空间两部分,用户空间部分由故障管理核心单元,内含检查点处理模块,故障管理冗余单元以及代理接收模块和代理发送模块组成,内核空间部分由内核故障管理核心单元,包括内核事件传输通道、 内核故障处理模块和内核故障管理冗余单元组成。计算机故障管理系统容错框架各部分功能和工作职责如下
故障管理核心单元是整个框架在用户空间部分的核心,负责错误收集、故障诊断以及故障处理,其中故障处理方式包括故障隔离、故障恢复和故障修复,根据故障处理结果选择更优的故障处理方式;采用检查点机制,定期保存当前错误处理状态信息。检查点处理模块负责收集故障管理核心单元各组件信息,创建检查点消息,以及回滚检查点。故障管理冗余单元是故障管理核心单元的冗余组件,负责接收故障管理核心单元的心跳,以监控故障管理核心单元的工作状态;定期将故障管理核心单元的检查点信息保存至检查点文件中。代理接收模块是故障管理系统用户空间和内核空间的通信代理,负责接收来自内核空间的错误事件。代理发送模块是故障管理系统用户空间和内核空间的通信代理,负责将内核错误事件的诊断结果发送给内核空间故障处理模块。内核故障管理核心单元是整个框架在内核空间部分的核心,负责对内核错误事件的收集、分发和故障处理。内核事件传输通道是故障管理系统用户空间和内核空间的信息传递接口,采用 Netlink机制实现。内核故障处理模块分为内核紧急事件处理和一般事件处理,经内核故障管理核心单元判断,如果是内核紧急事件,则直接由内核故障处理模块处理,例如采用Kexec机制快速重启一个新内核;如果是一般事件,则经由故障管理系统用户空间诊断后,再由内核故障处理模块处理(调用内核空间功能函数)。内核故障管理冗余单元是内核故障管理核心单元的冗余组件,负责接收内核故障管理核心单元的心跳,以监控内核故障管理核心单元的工作状态。参照附图2,本发明所述系统的容错框架处理的主要工作流程如下
用户空间各错误检测模块收集各组件错误信息,生成标准错误事件发送给事件分发模块;事件分发模块将错误检测模块生成的标准错误事件交给诊断引擎模块处理;诊断引擎模块将标准错误事件进行归并,并根据错误事件的诊断规则诊断组件故障,预测组件可能产生的故障,生成标准故障事件交给事件分发模块;事件分发模块进一步将标准故障事件发送给故障处理模块由其完成后续故障处理动作。内核空间各内核错误检测源收集各内核组件错误信息,将原始内核错误事件交给内核事件传输通道;内核事件传输通道判断原始内核错误事件类型,如果是紧急事件,则直接交给内核故障处理模块处理;如果是一般事件,则将原始内核错误事件发送给用户空间代理接收模块;代理接收模块根据原始内核错误事件创建标准内核错误事件交给事件分发模块,进而完成用户空间一系列处理动作,最终将生成的标准内核故障事件由代理发送模块发送给内核事件传输通道;内核事件传输通道将标准内核故障事件交给内核故障处理模块处理。1.故障管理核心单元
本发明所述系统中,故障管理核心单元是整个框架在用户空间部分的核心。参照附图 2,故障管理核心单元由错误检测模块、事件分发模块、诊断引擎模块、故障处理模块和检查点处理单元组成。1)错误检测模块,针对系统不同组件部署多个错误检测模块,具体组件涉及文件系统、应用程序和服务,以及提供用户空间检测手段的硬件组件等。错误检测模块主动将自己生成的错误事件加入事件分发模块事件缓冲区;
2)事件分发模块,负责向故障管理核心单元各模块主动分发事件,事件包括错误事件和故障事件。事件分发模块遍历事件缓冲区中每一个事件,如果是错误事件,则将事件发给诊断引擎模块的归并单元。如果是故障事件,则查询故障处理模块哈希表,将故障事件发给指定故障处理模块;
3)诊断引擎模块,包含一套诊断规则,针对每一类故障事件创建一个归并单元,由归并单元产生故障事件,并加入事件分发模块的事件缓冲区;
4)故障处理模块,针对系统不同组件部署多个故障处理模块,组件涉及CPU、内存和I/ 0,以及应用程序等。故障处理方式包括故障隔离、故障恢复和故障修复,根据故障处理结果选择更优的故障处理方式。5)故障管理冗余单元和故障管理核心单元相互监听对方心跳,当心跳超时,则立即重启对方单元的执行进程。2.检查点处理单元
本发明所述系统中,检查点处理单元属于故障管理核心单元。参照附图3,检查点处理单元由检查点信息收集模块、检查点创建模块和检查点回滚模块组成。 参照附图4,其主要工作流程如下
a)信息收集,检查点信息收集模块分别遍历各错误检测模块、事件分发模块和各故障处理模块的事件缓冲区,获得当前各模块事件缓冲区中所有的事件信息;获得诊断引擎模块当前所有归并单元的信息;
b)检查点创建,检查点创建模块将检查点信息收集模块获得的所有信息,按照检查点消息格式创建检查点消息;
c)消息发送,检查点创建模块将当前检查点消息发送给故障管理冗余单元;
d)检查点回滚,检查点回滚模块从故障管理冗余单元获得指定检查点消息(用户指定或者最近一次检查点),按照检查点消息格式解析检查点消息,并初始化故障管理核心单元对应模块。在本系统的典型实现中,检查点消息由检查点消息头(CkptHeader )和一组模块段数据(ModSecData)组成,格式如下
CkptHeader描述检查点时间、消息大小、模块段数目等信息。ModSecData描述各模块具体检查点信息,包括模块段头(ModSecHeader)和模块包含的一组事件信息(CkptEvent) 组成,格式如下 ModSecHeader描述模块类型、模块段数据大小、模块包含事件数目等信息。3.故障管理冗余单元
本发明所述系统中,故障管理冗余单元是故障管理核心单元的冗余组件,负责监控故障管理核心单元的工作状态;定期将故障管理核心单元的检查点信息保存至检查点文件中。参照附图2,故障管理冗余单元执行进程监听故障管理核心单元执行进程发送的心跳, 当检测到心跳超时,故障管理冗余单元立即重启故障管理核心单元执行进程。故障管理冗余单元主要工作流程如下
a)交互模块接收检查点处理单元发送的检查点消息,保存至检查点消息缓冲区,当消息数目达到预设阀值时,由信息保存模块将消息缓冲区中所有消息保存至检查点文件;
b)交互模块接受检查点处理单元的消息请求,从检查点消息缓冲区或检查点文件中获取指定检查点消息并发送给检查点处理单元。
4.代理接收模块
本发明所述系统中,代理接收模块位于用户空间是故障管理系统用户空间和内核空间的通信代理,负责接收来自内核空间的错误事件,生成内核标准错误事件并加入事件分发模块事件缓冲区。采用Netlink机制与内核事件传输通道通信,模块由故障管理核心单元执行进程初始化,独立运行。5.代理发送模块
本发明所述系统中,代理发送模块位于用户空间是故障管理系统用户空间和内核空间的通信代理,负责将内核标准错误事件的诊断结果-内核标准故障事件发送给内核事件传输通道。采用Netlink机制与内核事件传输通道通信,模块由故障管理核心单元执行进程初始化,独立运行。6.内核故障管理核心单元
本发明所述系统中,内核故障管理核心单元是整个框架在内核空间部分的核心。参照附图2,内核故障管理核心单元由内核事件传输通道和内核故障处理模块组成,负责对内核错误事件的收集、分发和故障处理。在实现上,采用一个内核线程、一组接口和应用规范的方式。内核错误检测源(包括内核模块、驱动程序和内核部件)可以通过这组接口和应用规范,使用故障管理系统提供的故障管理功能。其中,通过在中断下半部和内核代码中添加回调函数的方法,获得内核错误检测源的原始错误信息,回调函数调用的一组接口实际是对内核事件传输通道的封装,应用规范指内核错误事件(一般事件和紧急事件)的故障处理规则。参照附图2,内核故障管理核心单元主要工作流程如下
a)内核事件传输通道获得原始错误信息;
b)内核事件传输通道判断原始错误事件类型,如果是一般事件,则将原始事件发送给代理接收模块,如果是紧急事件,则直接交给内核故障处理模块;
c)内核故障处理模块处理紧急事件以及来自用户空间的标准故障事件。为了保证内核故障管理核心单元执行线程可靠运行,采用在系统启动时,隔离处于两个不同NUMA域中的两个逻辑CPU单独运行内核故障管理核心单元执行线程的方法。 CPU选择策略如下
a)根据ACPI提供的SRAT表,在第一个节点任意选择一个CPU;
b)根据距离表,再找出与此相距最远的一个CPU。选择距离最远CPU的目的是为了减少由于两个CPU同时出错而造成故障管理系统无法正常运行的可能性。7.内核事件传输通道
本发明所述系统中,内核事件传输通道是故障管理系统用户空间和内核空间的信息传递接口,采用Netlink机制实现。内核事件传输通道封装成一组接口,在内核模块、驱动程序和内核部件的中断下半部和内核代码中以回调函数形式被调用。与用户空间代理接收模块和代理发送模块传递事件信息。8.内核故障处理模块
本发明所述系统中,内核故障处理模块分为内核紧急事件处理和一般事件处理。(1)针对某些MCA机制对致命错误恢复不成功,PCIE AER机制对致命错误恢复不成功,内核发生致命错误等情况(通常在这种情况下内核执行Panic处理),截断Panic处理,由内核故障处理模块处理,执行Kexec机制快速重启一个新内核;
(2)针对MCA、PCIE AER,SCSI EH等机制成功恢复可恢复错误,以及内核发生非紧急错误等情况,经过用户空间故障管理核心单元诊断后,最终交给内核故障处理模块处理。处理方式包括CPU Offline、PCIE Off line、内存页隔离等。9.内核故障管理冗余单元
本发明所述系统中,内核故障管理冗余单元是内核故障管理核心单元的冗余组件,负责监控内核故障管理核心单元的工作状态。内核故障管理冗余单元执行线程运行在另一个隔离的逻辑CPU上,且与运行内核故障管理核心单元执行线程的逻辑CPU距离最远,减少由于两个CPU同时出错造成故障管理系统无法正常运行的可能性。参照附图2,内核故障管理冗余单元执行线程监听内核故障管理核心单元执行线程的心跳,当检测到心跳超时,内核故障管理冗余单元立即担当内核故障管理核心单元的角色,取代原来的内核故障管理核心单元继续工作。同时,初始化一个新的内核故障管理冗余单元,并将其迁移到另一个隔离的CPU上运行。
权利要求
1. 一种计算机故障管理系统的容错方法,其特征在于以故障管理系统为中心,提供一套完整的容错框架,使其既能保证故障管理系统服务自身的可靠性,也能保证在操作系统内核Panic的情况下故障管理系统仍能够进行紧急处理,从而提高系统的整体可用性, 该框架分为用户空间和内核空间两部分,其中用户空间包括故障管理核心单元1),故障管理冗余单元2),代理接收模块3)和代理发送模块4),其中故障管理核心单元1)是整个框架在用户空间部分的核心,负责错误收集、故障诊断以及故障处理,包括故障隔离、故障恢复和故障修复;采用检查点机制,定期保存当前错误处理状态信息;故障管理核心单元由错误检测模块(1)、事件分发模块(2)、诊断引擎模块 (3)、故障处理模块(4)和检查点处理单元(5)组成,其中错误检测模块(1),针对系统不同组件部署多个错误检测模块,具体组件涉及文件系统、应用程序和服务以及提供用户空间检测手段的硬件组件,错误检测模块主动将自己生成的错误事件加入事件分发模块事件缓冲区;事件分发模块(2),负责向故障管理核心单元各模块主动分发事件,事件包括错误事件和故障事件,事件分发模块遍历事件缓冲区中每一个事件,如果是错误事件,则将事件发给诊断引擎模块的归并单元,如果是故障事件,则查询故障处理模块哈希表,将故障事件发给指定故障处理模块;诊断引擎模块(3),包含一套诊断规则,针对每一类故障事件创建一个归并单元,由归并单元产生故障事件,并加入事件分发模块的事件缓冲区;故障处理模块(4),针对系统不同组件部署多个故障处理模块,组件涉及CPU、内存和 I/O以及应用程序,故障处理方式包括故障隔离、故障恢复和故障修复,根据故障处理结果选择更优的故障处理方式;检查点处理单元(5),由检查点信息收集模块①、检查点创建模块②和检查点回滚模块 ③组成;检查点处理单元负责收集故障管理核心单元各组件信息,创建检查点消息以及回滚检查点;故障管理冗余单元2)是故障管理核心单元的冗余组件,负责接收故障管理核心单元的心跳及监控故障管理核心单元的工作状态;定期将故障管理核心单元的检查点信息保存至检查点文件中,故障管理冗余单元和故障管理核心单元相互监听对方心跳,当心跳超时, 故障管理冗余单元则立即重启对方单元的执行进程,故障管理冗余单元工作流程如下a)交互模块接收检查点处理单元发送的检查点消息,保存至检查点消息缓冲区,当消息数目达到预设阀值时,由信息保存模块将消息缓冲区中所有消息保存至检查点文件;b)交互模块接受检查点处理单元的消息请求,从检查点消息缓冲区或检查点文件中获取指定检查点消息并发送给检查点处理单元;代理接收模块3)代理接收模块位于用户空间,是故障管理系统用户空间和内核空间的通信代理,负责接收来自内核空间的错误事件;生成内核标准错误事件并加入事件分发模块事件缓冲区,采用Netlink机制与内核事件传输通道通信,模块由故障管理核心单元执行进程初始化,独立运行;代理发送模块4):代理发送模块位于用户空间,是故障管理系统用户空间和内核空间的通信代理,负责将内核标准错误事件的诊断结果发送给内核事件传输通道,再由内核事件传输通道将内核错误事件的诊断结果发送给内核空间故障处理模块,代理发送模块采用 Netlink机制与内核事件传输通道通信,由故障管理核心单元执行进程初始化,独立运行;内核空间包括内核故障管理核心单元5),含内核事件传输通道6),内核故障处理模块7),内核故障管理冗余单元8),其中内核故障管理核心单元5)是整个框架在内核空间部分的核心,内核故障管理核心单元由内核事件传输通道和内核故障处理模块组成,负责对内核错误事件的收集、分发和故障处理,采用一个内核线程、一组接口和应用规范的方式,内核错误检测源,包括内核模块、 驱动程序和内核部件,通过这组接口和应用规范,使用故障管理系统提供的故障管理功能, 其中,通过在中断下半部和内核代码中添加回调函数的方法,获得内核错误检测源的原始错误信息,回调函数调用的一组接口实际是对内核事件传输通道的封装,应用规范指内核错误事件,包括一般事件和紧急事件的故障处理规则;内核故障管理核心单元工作流程如下a)内核事件传输通道获得原始错误信息;b)内核事件传输通道判断原始错误事件类型,如果是一般事件,则将原始事件发送给代理接收模块,如果是紧急事件,则直接交给内核故障处理模块;c)内核故障处理模块处理紧急事件以及来自用户空间的标准故障事件;为了保证内核故障管理核心单元执行线程可靠运行,采用在系统启动时,隔离处于两个不同NUMA域中的两个逻辑CPU单独运行内核故障管理核心单元执行线程的方法,CPU选择策略如下a)根据ACPI提供的SRAT表,在第一个节点任意选择一个CPU;b)根据距离表,再找出与此相距最远的一个CPU;选择距离最远CPU的目的是为了减少由于两个CPU同时出错而造成故障管理系统无法正常运行的可能性;内核事件传输通道6)是故障管理系统用户空间和内核空间的信息传递接口,采用 Netlink机制实现;内核事件传输通道封装成一组接口,在内核模块、驱动程序和内核部件的中断下半部和内核代码中以回调函数形式被调用,与用户空间代理接收模块和代理发送模块传递事件信息;内核故障处理模块7)分为内核紧急事件处理和一般事件处理,经内核故障管理核心单元判断,如果是内核紧急事件,则直接由内核故障处理模块处理,包括采用Kexec机制快速重启一个新内核;如果是一般事件,则经由故障管理系统用户空间诊断后,再由内核故障处理模块处理,包括调用内核空间功能函数;其中(1)针对某些MCA机制对致命错误恢复不成功,PCIEAER机制对致命错误恢复不成功, 内核发生致命错误情况,在这种情况下内核执行Panic处理,截断Panic处理,由内核故障处理模块处理,执行Kexec机制快速重启一个新内核;(2)针对MCA、PCIEAER,SCSI EH机制成功恢复可恢复错误,以及内核发生非紧急错误情况,经过用户空间故障管理核心单元诊断后,最终交给内核故障处理模块处理,处理方式包括CPU Offline、PCIE Off line、内存页隔离;内核故障管理冗余单元8)是内核故障管理核心单元5)的冗余组件,负责监控内核故障管理核心单元的工作状态,内核故障管理冗余单元和内核故障管理核心单元之间采用心跳连接,负责接收内核故障管理核心单元的心跳,以监控内核故障管理核心单元的工作状态;内核故障管理冗余单元8)执行线程运行在另一个隔离的逻辑CPU上,且与运行内核故障管理核心单元执行线程的逻辑CPU距离最远,减少由于两个CPU同时出错造成故障管理系统无法正常运行的可能性;内核故障管理冗余单元8)执行线程监听内核故障管理核心单元执行线程的心跳,当检测到心跳超时,内核故障管理冗余单元立即担当内核故障管理核心单元的角色,取代原来的内核故障管理核心单元继续工作,同时,初始化一个新的内核故障管理冗余单元,并将其迁移到另一个隔离的CPU上运行。
2.根据权利要求1所述的方法,其特征在于,用户空间各单元或模块收集各组件错误信息,生成标准错误事件发送给事件分发模块;事件分发模块将错误检测模块生成的标准错误事件交给诊断引擎模块处理;诊断引擎模块将标准错误事件进行归并,并根据错误事件的诊断规则诊断组件故障,预测组件可能产生的故障,生成标准故障事件交给事件分发模块;事件分发模块进一步将标准故障事件发送给故障处理模块,由其完成后续故障处理动作;内核空间各单元或模块收集各内核组件错误信息,将原始内核错误事件交给内核事件传输通道;内核事件传输通道判断原始内核错误事件类型,如果是紧急事件,则直接交给内核故障处理模块处理;如果是一般事件,则将原始内核错误事件发送给用户空间代理接收模块;代理接收模块根据原始内核错误事件创建标准内核错误事件交给事件分发模块,进而完成用户空间一系列处理动作,最终将生成的标准内核故障事件由代理发送模块发送给内核事件传输通道;内核事件传输通道将标准内核故障事件交给内核故障处理模块处理;容错工作流程如下a)信息收集,检查点信息收集模块分别遍历各错误检测模块、事件分发模块和各故障处理模块的事件缓冲区,获得当前各模块事件缓冲区中所有的事件信息;获得诊断引擎模块当前所有归并单元的信息;b)检查点创建,检查点创建模块将检查点信息收集模块获得的所有信息,按照检查点消息格式创建检查点消息;c)消息发送,检查点创建模块将当前检查点消息发送给故障管理冗余单元;d)检查点回滚,检查点回滚模块从故障管理冗余单元获得指定检查点消息,包括用户指定或者最近一次检查点,按照检查点消息格式解析检查点消息,并初始化故障管理核心单元对应模块;检查点消息由检查点消息头CkptHeader和一组模块段数据ModSecData组成,格式如下[CkptHeader, ModSecDataj ModSecDataj …,ModSecData]CkptHeader描述检查点时间、消息大小、模块段数目信息,ModSecData描述各模块具体检查点信息,包括模块段头ModSecHeader和模块包含的一组事件信息CkptEvent组成, 格式如下[ModSecHeader, CkptEventj CkptEventj …,CkptEvent]ModSecHeader描述模块类型、模块段数据大小、模块包含事件数目的信息。
3.根据权利要求1所述的方法,其特征在于,为了保证故障管理系统自身的可靠性,对故障管理系统核心部件-故障管理核心单元采用检查点机制,定期保存其错误处理状态信息;同时,采用故障管理冗余单元对故障管理核心单元进行心跳检测,一旦检测到故障管理核心单元执行进程非正常终止,则立刻重启故障管理系统并快速回滚到上一次检查点状态并继续工作,从而提高故障管理系统的可用性。
4.根据权利要求1所述的方法,其特征在于,以故障管理系统为中心,提供一套完整的容错框架,为了保证在操作系统内核Panic的情况下故障管理系统能够做一些紧急处理, 采用隔离一部分CPU资源的方法,这部分CPU资源只运行故障管理系统内核空间执行程序, 独立于操作系统进程调度,并修改内核Panic机制,当内核Panic时执行内核空间故障管理系统故障处理过程;同时,采用内核故障管理冗余单元对内核故障管理核心单元进行心跳检测,一旦检测到内核故障管理核心单元执行线程非正常终止,则立刻取代内核故障管理核心单元进行工作,并重新初始化一个新的内核故障管理冗余单元;同时,为了尽量减少在内核空间的工作,采用内核非紧急错误事件由用户空间故障管理系统诊断的策略,综上特征,从而提高系统的整体可用性。
全文摘要
本发明提供一种计算机故障管理系统的容错框架,分为用户空间和内核空间两部分,包括故障管理核心单元1)、检查点处理模块2)、故障管理冗余单元3)、代理接收模块4)、代理发送模块5)、内核故障管理核心单元6)、内核事件传输通道7)、内核故障处理模块8)和内核故障管理冗余单元9)组成。
文档编号G06F11/07GK102364448SQ201110277680
公开日2012年2月29日 申请日期2011年9月19日 优先权日2011年9月19日
发明者刘斌, 张东 申请人:浪潮电子信息产业股份有限公司