内核故障诊断信息处理方法、装置、存储介质及电子设备与流程

文档序号:17048989发布日期:2019-03-05 19:50阅读:200来源:国知局
内核故障诊断信息处理方法、装置、存储介质及电子设备与流程

本公开涉及信息处理领域,具体地,涉及一种内核故障诊断信息处理方法、装置、存储介质及电子设备。



背景技术:

内核发生故障时,需要收集相关信息,以便于工作人员进行故障分析。现有技术中,在内核发生故障时进行信息收集的技术主要有以下几种:

(1)通过内核打印函数将打印信息输出到串口中,经由串口将该打印信息传输到另一台设备,以便工作人员在该另一台设备上进行查看,并分析故障原因。然而,这种方法需要预先把设备的串口和一台附加设备连接,需要占用一台附加设备,且不适用于没有串口的设备。另外,内核打印函数输出的打印信息除包括与内核故障相关的诊断信息外,还包括与内核故障无关的其他信息,如某些进程的运行过程中出现的提示信息或警告信息等。因此,工作人员在进行故障分析时,需人工筛选出与内核故障有关的诊断信息,这就导致故障分析效率低下,且大大增加工作人员的工作量。

(2)启用内核的崩溃转储功能。当内核崩溃时,把内存镜像拷贝到硬盘上。然而,对于大型设备而言,会生成较大的内核镜像,从而会带来巨大的网络传输负担。另外,通过这种方式也只是能将保存的原始内存信息提供给工作人员,而不会直接向工作人员提供内核故障诊断信息,因此,工作人员依然需要费时费力地基于原始内存信息进行内核故障分析,同样存在故障分析效率低下的问题。

(3)在用户空间启动klogd命令收集内核日志。在内核发生故障时将内核日志提供给工作人员,以便工作人员根据内核日志进行内核故障分析。这种方式,一方面,当内核故障发生于软中断上下文时,klogd命令得不到调度,也就无法收集内核日志。另一方面,内核日志中记录了大量内核运行状态信息,因此,工作人员也是需要费时费力地基于内核日志中记录的海量信息进行内核故障分析,同样存在故障分析效率低下的问题。



技术实现要素:

本公开的目的是提供一种内核故障诊断信息处理方法、装置、存储介质及电子设备,以解决相关技术中存在的问题。

为了实现上述目的,根据本公开的第一方面,提供一种内核故障诊断信息处理方法,所述方法包括:在内核发生故障时,获取内核故障诊断信息;将所述内核故障诊断信息保存至诊断信息存储区域,所述诊断信息存储区域为内存中预留出的部分存储区域。

可选地,在所述在内核发生故障时,获取内核故障诊断信息的步骤之前,所述方法还包括:在操作系统启动时,接收预留指令,所述预留指令用于指示要预留的存储区域的容量;响应于所述预留指令,自所述内存的顶部起,预留出具有所述容量的存储区域作为所述诊断信息存储区域。

可选地,在所述在内核发生故障时,获取内核故障诊断信息的步骤之前,所述方法还包括:确定所述操作系统的本次启动的启动类型;在所述启动类型为冷启动时,清空所述诊断信息存储区域中存储的内容;在所述启动类型为热启动时,若所述诊断信息存储区域内存储有内核故障诊断信息,将所述内核故障诊断信息备份到预置文件中,并清空所述诊断信息存储区域中存储的内容。

可选地,在将所述内核故障诊断信息保存至诊断信息存储区域之后,所述方法还包括:控制所述操作系统重启。

可选地,所述获取内核故障诊断信息,包括:将内核打印函数输出的字符串与预设规则相匹配;若匹配成功,则确定所述字符串为所述内核故障诊断信息。

根据本公开的第二方面,提供一种内核故障诊断信息处理装置,所述装置包括:获取模块,用于在内核发生故障时,获取内核故障诊断信息;保存模块,用于将所述获取模块获取到的所述内核故障诊断信息保存至诊断信息存储区域,所述诊断信息存储区域为内存中预留出的部分存储区域。

可选地,所述装置还包括:接收模块,用于在操作系统启动时,接收预留指令,所述预留指令用于指示要预留的存储区域的容量;预留模块,用于响应于所述接收模块接收到的所述预留指令,自所述内存的顶部起,预留出具有所述容量的存储区域作为所述诊断信息存储区域。

可选地,所述装置还包括:确定模块,用于在所述获取模块获取到内核故障诊断信息之前,确定所述操作系统的本次启动的启动类型;第一处理模块,用于在所述确定模块确定出的所述启动类型为冷启动时,清空所述诊断信息存储区域中存储的内容;第二处理模块,用于在所述确定模块确定出的所述启动类型为热启动时,若所述诊断信息存储区域内存储有内核故障诊断信息,将所述内核故障诊断信息备份到预置文件中,并清空所述诊断信息存储区域中存储的内容。

可选地,所述装置还包括:重启模块,用于在所述保存模块将所述内核故障诊断信息保存至诊断信息存储区域之后,控制所述操作系统重启。

可选地,所述获取模块,包括:匹配子模块,用于将内核打印函数输出的字符串与预设规则相匹配;确定子模块,用于在所述匹配子模块匹配成功的情况下,确定所述字符串为所述内核故障诊断信息。

根据本公开的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面所述方法的步骤。

根据本公开的第四方面,提供一种电子设备,包括:上述第三方面所述的计算机可读存储介质;以及一个或者多个处理器,用于执行所述计算机可读存储介质中的程序。

在上述技术方案中,可以直接获取内核故障诊断信息,并在系统内存中预留出部分存储区域作为诊断信息存储区域,以用于保存所获取到的内核故障诊断信息,从而为后续工作人员进行内核故障分析提供直观、准确、可靠的数据支持,有利于降低内核故障分析的难度,提高内核故障分析的效率。另外,通过上述技术方案,在保存内核故障诊断信息时不需要串口及附加设备的辅助,而是直接利用系统内存的部分存储区域作为内核故障诊断信息的保存媒介,从而可以应用于没有串口的设备。此外,无论内核故障发生于软中断上下文还是硬中断上下文,其对应的内核故障诊断信息都可以保存至该诊断信息存储区域。因此,本公开提供的上述方法的适用范围更广,通用性更强。

本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1是根据本公开的一种实施方式提供的内核故障诊断信息处理方法的流程图;

图2是根据本公开的另一种实施方式提供的内核故障诊断信息处理系统的示意图;

图3是根据本公开的另一种实施方式提供的内核故障诊断信息处理方法的流程图;

图4是根据本公开的另一种实施方式提供的内核故障诊断信息处理方法的流程图;

图5是根据本公开的一种实施方式提供的内核故障诊断信息处理装置的框图;

图6是根据本公开的另一种实施方式提供的内核故障诊断信息处理装置的框图;

图7是根据本公开的另一种实施方式提供的内核故障诊断信息处理装置的框图;

图8是根据一示例性实施例示出的一种电子设备的框图。

附图标记说明

1诊断信息规则库2诊断信息存储区域

3引导管理器4伪串口设备驱动

5规则管理进程6诊断信息收集进程

7内核

具体实施方式

以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。

根据本公开的第一方面,提供一种内核故障诊断信息处理方法,该方法适用于各种类型的内核,包括但不限于linux内核、unix内核等。

图1所示,为根据本公开的一种实施方式提供的内核故障诊断信息处理方法的流程图,如图1所示,该方法包括:

在s11中,在内核发生故障时,获取内核故障诊断信息。

示例地,当内核发生故障时,通过调用内核打印函数(例如,printk函数)来获取打印信息,例如,该打印信息为字符串的形式。如在背景技术中所描述的,该打印信息中包括了与内核故障相关的诊断信息。因此,可以通过对打印信息进行解析,从中提取出内核故障诊断信息。

示例地,获取内核故障诊断信息的一种示例实现方式如下:

将内核打印函数输出的字符串与预设规则相匹配;

若匹配成功,则确定所述字符串为所述内核故障诊断信息。

如图2所示,预设规则可以被预先定义在诊断信息规则库1中,该预设规则可以用正则表达式编写,通过设备i/o通道管理函数(例如,ioctl函数)调用。预设规则可以用于定义内核故障诊断信息所对应的字符串。将内核打印函数输出的字符串与预设规则相匹配,实际上就是字符串匹配过程。若字符串匹配成功,则表示内核打印函数输出的这一字符串属于内核故障诊断信息。若字符串匹配不成功,则表示内核打印函数输出的这一字符串属于与内核故障无关的其他信息,此时,该字符串会被过滤掉,而不会被认为是内核故障诊断信息。

通过对内核故障诊断信息的自动筛选,一方面可以降低数据量,降低保存时对内存的占用率。另一方面,有利于降低工作人员的工作量,降低内核故障分析的难度,提高内核故障分析的效率。

在s12中,将内核故障诊断信息保存至诊断信息存储区域,所述诊断信息存储区域为内存中预留出的部分存储区域。

在本公开中,如图2所示,可以在内核7中创建一伪串口设备驱动4,通过向内核7传递重定向指令,以使内核打印函数响应于该重定向指令将打印信息打印到该伪串口设备驱动4。此时,系统创建规则管理进程5以实现内核7和诊断信息规则库1的通信,通过规则管理进程5将诊断信息规则库1中的规则下发至内核7中。因此,伪串口设备驱动4可以根据诊断信息规则库1中的预设规则对内核打印函数输出的字符串进行匹配,以获取内核故障诊断信息。同时,伪串口设备驱动4可以和诊断信息存储区域2通信,以将其匹配成功的内核故障诊断信息存储至诊断信息存储区域2中。

在上述技术方案中,可以直接获取内核故障诊断信息,并在系统内存中预留出部分存储区域作为诊断信息存储区域,以用于保存所获取到的内核故障诊断信息,从而为后续工作人员进行内核故障分析提供直观、准确、可靠的数据支持,有利于降低内核故障分析的难度,提高内核故障分析的效率。另外,通过上述技术方案,在保存内核故障诊断信息时不需要串口及附加设备的辅助,而是直接利用系统内存的部分存储区域作为内核故障诊断信息的保存媒介,从而可以应用于没有串口的设备。此外,无论内核故障发生于软中断上下文还是硬中断上下文,其对应的内核故障诊断信息都可以保存至该诊断信息存储区域。因此,本公开提供的上述方法的适用范围更广,通用性更强。

可选地,可以以环形队列的形式将内核故障诊断信息保存至诊断信息存储区域2中。一般而言,在内核发生故障时,时间越晚的内核故障诊断信息往往是更重要的。因此,通过环形队列对内核故障诊断信息进行保存,可以在内核故障诊断信息过多时,优先丢弃时间较早的内核故障诊断信息,从而可以有效提高诊断信息存储区域中的内核故障诊断信息的有效性,方便工作人员对其进行内核故障原因分析。

图3所示,为根据本公开的另一种实施方式提供的内核故障诊断信息处理方法的流程图。如图3所示,在图1的基础上,在s11之前,该方法还可以包括:

在s31中,在操作系统启动时,接收预留指令,所述预留指令用于指示要预留的存储区域的容量。

结合图2,引导管理器3是在内核7启动之前运行,可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。示例地,所述预留指令可以是引导管理器3在内核7启动之前,向内核7传递的启动参数,从而可以控制内核7的启动行为。

在s32中,响应于预留指令,自内存的顶部起,预留出具有所述容量的存储区域作为所述诊断信息存储区域。

示例地,该预留指令可以通过系统自带的启动参数“mem=size”下发,其中,size表示系统可用内存的容量,其从物理内存地址的低位开始计数,内存总容量减去该系统可用内存的容量后所得容量即为要预留出的诊断信息区域的容量,示例地,系统内存容量为1024mb,则预留指令“mem=1023mb”表示要预留的存储区域的容量为1mb。

另外,由于系统可用内存的容量从物理内存地址的低位开始计数,则诊断信息存储区域位于物理内存的高位地址区域,因此,自内存的顶部起预留该诊断信息存储区域。

响应于预留指令“mem=1023mb”,系统将内存顶部的1mb内存预留,并将该1mb的存储区域作为诊断信息存储区域,并且,在操作系统启动时,内存管理系统可用的内存为从底部起、容量为参数size所指示大小的内存区域,而其余内存为内存管理系统不可见的,即预留出的诊断信息存储区域为内存管理系统不可见的内存区域,只有伪串口设备驱动4可以对该内存区域进行读写操作,可以避免系统其它进程对该内存区域的使用,保证该存储区域中存储数据的有效性。

通过上述技术方案,直接利用操作系统启动时在内存中预留出的诊断信息存储区域作为内核故障诊断信息的保存媒介,从而在保存内核故障诊断信息时不需要串口及附加设备的辅助,可以应用于没有串口的设备,避免使用附加设备时繁琐的连接和配置过程,同时还可以节约设备资源,方便用户的使用。

图4所示,根据本公开的另一种实施方式提供的内核故障诊断信息处理方法的流程图。如图4所示,在图3的基础上,所述方法还包括:

在s41中,确定操作系统的本次启动的启动类型。

其中,启动类型可以包括冷启动和热启动。冷启动方式为在关机状态下,对设备重新上电后启动操作系统的启动方式。热启动方式为在设备已上电的情况下,通过开始菜单、任务管理器或者快捷键等重新引导操作系统启动的启动方式,通常是在设备运行中出现“死机”时使用。

可选地,可以通过如下方式确定所述操作系统的本次启动的启动类型:

示例地,诊断信息存储区域的数据中包含一个特征数值,该数值可以用于判断操作系统本次启动的启动类型。结合图2,由于诊断信息存储区域2为对内存管理系统不可见的存储区域,伪串口设备驱动4与诊断信息存储区域2通信,通过地址映射函数将所述诊断信息存储区域2中的数据映射到操作系统的内核地址空间中,以便于对所述诊断信息存储区域2中的数据进行操作,从而获取该特征数值。示例地,该地址映射函数可以是ioremap函数。

通过判断该特征数值与预设值是否相同来确定操作系统本次启动的启动类型,在该特征数值与预设值不相同时,确定操作系统本次启动的启动类型为冷启动;在该特征数值与预设值相同时,确定操作系统本次启动的启动类型为热启动。

在s42中,在启动类型为冷启动时,清空所述诊断信息存储区域中存储的内容。

其中,在所述启动类型为冷启动时,系统内存中会产生一些随机量,此时,诊断信息存储区域中存储的内容为干扰数据,因此需要清空诊断信息存储区域中存储的内容。

可选地,在所述启动类型为冷启动时,在清空所述诊断信息存储区域中存储的内容后,可以将诊断信息存储区域中的特征数值设置为上述预设值,以便于正确确定操作系统后续启动时的启动类型。

在s43中,在启动类型为热启动时,若诊断信息存储区域内存储有内核故障诊断信息,将内核故障诊断信息备份到预置文件中,并清空诊断信息存储区域中存储的内容。

示例地,可以在诊断信息存储区域中设置一个标志位,用于确定诊断信息存储区域中是否存储有内核故障诊断信息。示例地,当该标志位为1时,可以确定诊断信息存储区域中存储有内核故障诊断信息。在伪串口设备驱动将内核故障诊断信息保存至诊断信息存储区域时,可以将该标志位置1,并在清空诊断信息存储区域时,将该标志位置0。因此,在启动类型为热启动时,若查询到该标志位为1时,可以确定诊断信息存储区域内存储有内核故障诊断信息,并将该内核故障诊断信息备份至系统的线性地址空间中,之后可以清空所述诊断信息存储区域中存储的内容,并将标志位置0。

结合图2,系统创建诊断信息收集进程6,用于收集内核故障诊断信息。首先,诊断信息收集进程6可以创建一缓冲区,用于存储内核故障诊断信息的备份。之后,诊断信息收集进程6与伪串口设备驱动4通信,通过伪串口设备驱动4查询系统的线性地址空间中是否存在内核故障诊断信息的备份。当伪串口设备驱动4查询到该备份时,诊断信息收集进程6将备份的内核故障诊断信息拷贝至其创建的缓冲区,从而可以将该内核故障诊断信息进行数据加工,例如,加入故障设备标识符、软件版本号、日期等信息,并将加工后的数据写入预置文件(如,.txt格式的文件)中。

在上述技术方案中,通过操作系统启动类型的不同,对诊断信息存储区域执行不同的操作:在操作系统的启动方式为冷启动时,诊断信息存储区域中存储的内容为随机量,清空诊断信息存储区域中存储的内容;在操作系统的启动方式为热启动时,将诊断信息存储区域存储的内核故障诊断信息备份后,清空诊断信息存储区域中存储的内容。通过上述技术方案,可以对有效数据进行备份,并及时清除干扰数据,以避免下次内核故障时,对其对应的内核故障诊断信息的有效性产生影响。

可选地,可以将该预置文件回传至工作人员,以便于工作人员及时对内核故障原因进行判断,从而可以及时针对该故障原因给出解决方案,方便用户的使用。

可选地,在将所述内核故障诊断信息保存至诊断信息存储区域之后,所述方法还包括:

控制所述操作系统重启。

示例地,可以在诊断信息规则库1中增加“echon>/proc/sys/kernel/panic”的规则,通过规则管理进程5将该规则下发至内核7,从而可以在内核7发生故障死机后,n秒后自动重启,其中,n的数值可以根据用户的需要而设置。

通过在诊断信息规则库中增加上述内核发生故障后控制操作系统重新启动的规则,可以在内核发生故障时,及时做出应对措施,方便用户的使用,提升用户使用体验。

根据本公开的第二方面,提供一种内核故障诊断信息处理装置。图5所示,为根据本公开的一种实施方式提供的内核故障诊断信息处理装置的框图,如图5所示,所述装置10包括:

获取模块100,用于在内核发生故障时,获取内核故障诊断信息;

保存模块200,用于将所述获取模块100获取到的所述内核故障诊断信息保存至诊断信息存储区域,所述诊断信息存储区域为内存中预留出的部分存储区域。

图6所示,为根据本公开的另一种实施方式提供的内核故障诊断信息处理装置的框图,如图6所示,在图5的基础上,所述装置10还包括:

接收模块300,用于在操作系统启动时,接收预留指令,所述预留指令用于指示要预留的存储区域的容量;

预留模块400,用于响应于所述接收模块300接收到的所述预留指令,自所述内存的顶部起,预留出具有所述容量的存储区域作为所述诊断信息存储区域。

可选地,如图7所示,在图6的基础上,所述装置10还包括:

确定模块500,用于在所述获取模块100获取到内核故障诊断信息之前,确定所述操作系统的本次启动的启动类型;

第一处理模块600,用于在所述确定模块500确定出的启动类型为冷启动时,清空所述诊断信息存储区域中存储的内容;

第二处理模块700,用于在所述确定模块500确定出的启动类型为热启动时,若所述诊断信息存储区域内存储有内核故障诊断信息,将所述内核故障诊断信息备份到预置文件中,并清空所述诊断信息存储区域中存储的内容。

可选地,所述装置10还包括:

重启模块,用于在所述保存模块200将所述内核故障诊断信息保存至诊断信息存储区域之后,控制所述操作系统重启。

可选地,所述获取模块100,包括:

匹配子模块,用于将内核打印函数输出的字符串与预设规则相匹配;

确定子模块,用于在所述匹配子模块匹配成功的情况下,确定所述字符串为所述内核故障诊断信息。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

图8是根据一示例性实施例示出的一种电子设备800的框图。例如,电子设备800可以被提供为一服务器。参照图8,电子设备800包括处理器822,其数量可以为一个或多个,以及存储器832,用于存储可由处理器822执行的计算机程序。存储器832中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器822可以被配置为执行该计算机程序,以执行上述的内核故障诊断信息处理方法。

另外,电子设备800还可以包括电源组件826和通信组件850,该电源组件826可以被配置为执行电子设备800的电源管理,该通信组件850可以被配置为实现电子设备800的通信,例如,有线或无线通信。此外,该电子设备800还可以包括输入/输出(i/o)接口858。电子设备800可以操作基于存储在存储器832的操作系统,例如unixtm,linuxtm等等。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,例如包括程序指令的存储器832,上述程序指令可由电子设备800的处理器822执行以完成上述的内核故障诊断信息处理方法。

以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1