一种生成处理器故障记录的方法及装置制造方法及图纸

技术编号:15762791 阅读:364 留言:0更新日期:2017-07-05 22:54
本申请涉及计算机领域,尤其涉及一种生成处理器故障记录的方法及装置。在一种生成处理器故障记录的方法中,控制芯片检测到CPU中的一个处理单元停止响应,通过JTAG通道获取所述处理单元当前的程序计数器PC中的指令地址,并创建一个包括所述当前的PC中的指令地址的第一类表项,记录在指令地址表中。当所述指令地址表中已记录的表项数量达到预设值时,所述控制芯片触发所述CPU中断。本申请提供的方案,可以为处理器故障分析提供更多信息,从而提高故障分析的效率。

Method and device for generating processor fault recording

The invention relates to the computer field, in particular to a method and a device for generating a processor fault record. In a method for generating a processor fault recording, control chip detects a processing unit in the CPU to stop responding, obtaining the program counter PC unit in the current instruction address through the JTAG channel, and create a includes the current PC instructions in the address of the first table. Recorded in the instruction address table. When the number of table entries recorded in the instruction address table reaches a preset value, the control chip triggers the CPU interrupt. The solution provided by this application can provide more information for processor fault analysis, thus improving the efficiency of fault analysis.

【技术实现步骤摘要】
一种生成处理器故障记录的方法及装置
本申请涉及计算机领域,尤其涉及一种生成处理器故障记录的方法及装置。
技术介绍
中央处理器(centralprocessingunit,CPU)是计算机,服务器等具有数据处理功能的设备的运算核心和控制核心。一台设备中的CPU通过总线与设备中的存储器(memory)相连,并通过解释和执行所述存储器中的程序指令,来实现对数据的处理。现有的CPU通常包括算数逻辑单元(arithmeticlogicunit,ALU)、寄存器(register)、高速缓冲存储器(Cache)以及实现三者之间联系的数据、控制及状态总线(bus)。在CPU运行的程序中,一系列指令会被多次循环执行,直到到达程序中某一预设的条件。在实际运行过程中,由于设计缺陷或实际应用环境中无法预料的原因,所述预设的条件长时间未到达,会导致所述一系列指令被异常地多次循环执行。在长时间内异常地多次循环执行所述一系列指令,导致CPU无法响应其他业务的现象,被称作死循环(infiniteloop)。现有技术为了解决上述问题,在设备中通常会集成专用复位器件,例如看门狗,对设备中CPU的运行状况进行监测,并在确定CPU停止响应时,触发CPU中断并复位,从而避免包括CPU死循环在内的故障导致业务运行被长时间影响。例如,通过心跳检测等技术对CPU的运行状况进行监测。当CPU超过预设的时间没有对复位器件进行响应,引发心跳检测中的定时器溢出时,复位器件通过将CPU复位使CPU脱离死循环状态。CPU中的寄存器会保存复位之前发生CPU中断时的指令地址,然而由于当前的程序代码在设计时,往往存在较为复杂的多个函数之间的嵌套调用关系,中断时刻寄存器中存放的指令地址对应的指令不一定是导致发生死循环的函数中的指令。因此,利用中断时刻寄存器中的指令地址难以准确定位死循环发生的函数。现有的CPU死循环定位技术更多依赖开发人员的经验来完成。开发人员通过联想和猜测,分析与中断时刻寄存器中存放的地址对应的指令相关的函数,利用调试工具来定位。然而很多实际中出现的死循环都是偶发的,或者不是每次运行都会出现的,复现的难度比较大。因此现有CPU死循环定位技术的低效率问题成为软件产品设计过程中一个亟待解决的问题。。
技术实现思路
有鉴于此,本申请提供了一种生成处理器故障记录的方法,用以提供故障发生时CPU中的更多信息,从而降低定位引发CPU死循环原因时的难度。本申请实施例提供的技术方案如下。第一方面,提供了一种生成处理器故障记录的方法,应用于包括控制芯片和中央处理器CPU的硬件平台中,所述方法包括:所述控制芯片检测到所述CPU中的一个处理单元停止响应;所述控制芯片通过联合测试行动组JTAG通道获取所述处理单元当前的程序计数器PC中的指令地址;所述控制芯片创建一个包括所述当前的PC中的指令地址的第一类表项,并将所述第一类表项记录在指令地址表中;所述控制芯片判断所述指令地址表中已记录的表项数量是否达到预设值,所述预设值大于等于2;如果所述指令地址表中已记录的表项数量没有达到所述预设值,所述控制芯片,返回执行所述通过JTAG通道获取所述处理单元当前的程序计数器PC中的指令地址步骤;如果所述指令地址表中记录的表项数量达到所述预设值,所述控制芯片触发所述CPU中断。通过上述方案,控制芯片在处理单元停止响应时,通过JTAG通道在一段时间内,获取多项所述处理单元的PC中存放的指令地址并记录在指令地址表中。所述指令地址表反映了所述处理单元停止响应后一段时间内,所述处理单元运行程序的状况。由于当所述处理单元进入死循环时,会导致死循环函数及相应的一段代码行被反复调用,因此,本申请实施例提供的方法,相比于现有技术中,检测到所述处理单元停止响应后立即触发中断,并且只记录中断时刻所述处理单元正在运行的一个指令地址而言,更准确地反映出现死循环的函数和代码区间,有助于提高CPU故障分析的效率。可选的,所述将所述第一类表项记录在指令地址表中之前,还包括:所述控制芯片通过所述JTAG通道获取所述处理单元当前的函数返回地址寄存器中的指令地址;所述控制芯片将所述当前的函数返回地址寄存器中的指令地址添加在所述第一类表项中。通过将所述处理单元当前的函数返回地址寄存器中的指令地址记录在所述指令地址表中,所述指令地址表能够更清楚地反映所述处理单元正在运行的函数之间的调用关系,进一步提高了CPU故障分析的效率。可选的,所述将所述第一类表项记录在指令地址表中之前,还包括:所述控制芯片获取当前的时刻,并将所述当前的时刻添加到所述第一类表项中。可选的,所述将所述第一类表项记录在指令地址表中,包括:所述控制芯片按照所述第一类表项生成的先后顺序,将所述第一类表项记录在指令地址表中。可选的,所述控制芯片返回执行所述通过JTAG通道获取所述处理单元当前的PC中的指令地址步骤,包括:所述控制芯片延迟时间段T1;在所述时间段T1到达后,所述控制芯片返回执行所述通过JTAG通道获取所述处理单元当前的PC中的指令地址步骤。所述控制芯片通过延迟时间段T1,可以使得所述控制芯片在延迟的所述T1时间段内执行其他任务,避免所述控制芯片因循环执行读取所述处理单元PC指针并记录在所述第一类表项等步骤,占用所述控制芯片过多资源。可选的,所述控制芯片检测到所述处理单元停止响应,包括:所述控制芯片对所述处理单元进行心跳检测,确定所述处理单元停止响应。可选的,所述方法还包括,所述控制芯片按照表项存储的先后顺序,依次从所述指令地址表中读取一个第一类表项,针对读取的每个第一类表项,执行:所述控制芯片根据所述第一类表项中包括的PC中的指令地址,从预先设定的所述处理单元中的指令地址与函数名和代码行的对应关系中,查询得到所述第一类表项中包括的所述PC中的指令地址对应的函数名和代码行;所述控制芯片创建一个第二类表项,所述第二类表项中包括所述第一类表项中包括的PC中的指令地址对应的函数名和代码行;所述控制芯片按照所述第二类表项生成的先后顺序,将所述第二类表项记录在函数运行表中。所述控制芯片通过根据指令地址表中的每个第一类表项,生成函数运行表中的一个第二类表项,所述函数运行表中记录了处理单元停止响应后一段时间内,运行的程序的函数名和代码行,相比于指令地址,所述函数名和代码行更直观的反映所述处理单元运行的程序,有助于进一步提高CPU故障分析效率。可选的,所述方法还包括:所述控制芯片按照表项存储的先后顺序,依次从所述指令地址表中读取一个第一类表项,针对读取的每个第一类表项,执行:所述控制芯片根据所述第一类表项中包括的PC中的指令地址,从预先设定的所述处理单元中的指令地址与函数名和代码行的对应关系中,查询得到所述第一类表项中包括的所述PC中的指令地址对应的函数名和代码行;所述控制芯片根据所述第一类表项中包括的函数返回寄存器中的指令地址,从预先设定的所述处理单元中的指令地址与函数名和代码行的对应关系中,查询得到所述第一类表项中包括的所述函数返回寄存器中的指令地址对应的函数名和代码行;所述控制芯片创建一个第二类表项,所述第二类表项中包括所述第一类表项中包括的PC中的指令地址对应的函数名和代码行,以及所述第一类表项中包括的函数返回寄存器中的指令地址对应的函数名和代码行;所述本文档来自技高网
...
一种生成处理器故障记录的方法及装置

【技术保护点】
一种生成处理器故障记录的方法,其特征在于,应用于包括控制芯片和中央处理器CPU的硬件平台中,所述方法包括:所述控制芯片检测到所述CPU中的一个处理单元停止响应;所述控制芯片通过联合测试行动组JTAG通道获取所述处理单元当前的程序计数器PC中的指令地址;所述控制芯片创建一个包括所述当前的PC中的指令地址的第一类表项,并将所述第一类表项记录在指令地址表中;所述控制芯片判断所述指令地址表中已记录的表项数量是否达到预设值,所述预设值大于等于2;如果所述指令地址表中已记录的表项数量没有达到所述预设值,所述控制芯片,返回执行所述通过JTAG通道获取所述处理单元当前的程序计数器PC中的指令地址步骤;如果所述指令地址表中已记录的表项数量达到所述预设值,所述控制芯片触发所述CPU中断。

【技术特征摘要】
1.一种生成处理器故障记录的方法,其特征在于,应用于包括控制芯片和中央处理器CPU的硬件平台中,所述方法包括:所述控制芯片检测到所述CPU中的一个处理单元停止响应;所述控制芯片通过联合测试行动组JTAG通道获取所述处理单元当前的程序计数器PC中的指令地址;所述控制芯片创建一个包括所述当前的PC中的指令地址的第一类表项,并将所述第一类表项记录在指令地址表中;所述控制芯片判断所述指令地址表中已记录的表项数量是否达到预设值,所述预设值大于等于2;如果所述指令地址表中已记录的表项数量没有达到所述预设值,所述控制芯片,返回执行所述通过JTAG通道获取所述处理单元当前的程序计数器PC中的指令地址步骤;如果所述指令地址表中已记录的表项数量达到所述预设值,所述控制芯片触发所述CPU中断。2.根据权利要求1所述的方法,其特征在于,所述将所述第一类表项记录在指令地址表中之前,还包括:所述控制芯片通过所述JTAG通道获取所述处理单元当前的函数返回地址寄存器中的指令地址;所述控制芯片将所述当前的函数返回地址寄存器中的指令地址添加在所述第一类表项中。3.根据权利要求1或2所述的方法,其特征在于,所述将所述第一类表项记录在指令地址表中之前,还包括:所述控制芯片获取当前的时刻,并将所述当前的时刻添加到所述第一类表项中。4.根据权利要求1、2、或3所述的方法,其特征在于,所述将所述第一类表项记录在指令地址表中,包括:所述控制芯片按照所述第一类表项生成的先后顺序,将所述第一类表项记录在指令地址表中。5.根据权利要求1至4任一所述的方法,其特征在于,所述控制芯片返回执行所述通过JTAG通道获取所述处理单元当前的PC中的指令地址步骤,包括:所述控制芯片延迟时间段T1;在所述时间段T1到达后,所述控制芯片返回执行所述通过JTAG通道获取所述处理单元当前的PC中的指令地址步骤。6.根据权利要求1至5任一所述的方法,其特征在于,所述控制芯片检测到所述处理单元停止响应,包括:所述控制芯片对所述处理单元进行心跳检测,确定所述处理单元停止响应。7.根据权利要求1至6任一所述的方法,其特征在于,还包括:所述控制芯片按照表项存储的先后顺序,依次从所述指令地址表中读取一个第一类表项,针对读取的每个第一类表项,执行:所述控制芯片根据所述第一类表项中包括的PC中的指令地址,从预先设定的所述处理单元中的指令地址与函数名和代码行的对应关系中,查询得到所述第一类表项中包括的所述PC中的指令地址对应的函数名和代码行;所述控制芯片创建一个第二类表项,所述第二类表项中包括所述第一类表项中包括的PC中的指令地址对应的函数名和代码行;所述控制芯片按照所述第二类表项生成的先后顺序,将所述第二类表项记录在函数运行表中。8.根据权利要求2所述的方法,其特征在于,还包括:所述控制芯片按照表项存储的先后顺序,依次从所述指令地址表中读取一个第一类表项,针对读取的每个第一类表项,执行:所述控制芯片根据所述第一类表项中包括的PC中的指令地址,从预先设定的所述处理单元中的指令地址与函数名和代码行的对应关系中,查询得到所述第一类表项中包括的所述PC中的指令地址对应的函数名和代码行;所述控制芯片根据所述第一类表项中包括的函数返回寄存器中的指令地址,从预先设定的所述处理单元中的指令地址与函数名和代码行的对应关系中,查询得到所述第一类表项中包括的所述函数返回寄存器中的指令地址对应的函数名和代码行;所述控制芯片创建一个第二类表项,所述第二类表项中包括所述第一类表项中包括的PC中的指令地址对应的函数名和代码行,以及所述第一类表项中包括的函数返回寄存器中的指令地址对应的函数名和代码行;所述控制芯片按照所述第二类表项生成的先后顺序,将所述第二类表项记录在函数运行表中。9.一种生成处理器故障记录的方法,其特征在于,应用于包括控制芯片和多核CPU的硬件平台中,所述多核CPU包括第一处理单元和第二处理单元,所述第一处理单元和所述第二处理单元是所述多核CPU中的从核,所述方法包括:所述控制芯片检测到所述第一处理单元停止响应;如果所述第一处理单元对应的指令地址表中已记录的表项数量未到达第一预设值,所述控制芯片通过联合测试工作组JTAG通道获取所述第一处理单元当前的程序计数器PC中的指令地址,所述第一预设值大于等于2,所述控制芯片创建一个第一类表项,将所述第一类表项记录在所述第一处理单元对应的指令地址表中,所述第一类表项中包括所述第一处理单元当前的PC中的指令地址;如果所述第二处理单元对应的指令地址表中已记录的表项数量未达到第二预设值,所述控制芯片通过所述JTAG通道获取所述第二处理单元当前的PC中的指令地址,所述第二预设值大于等于2,所述控制芯片创建另一个第一类表项,并将所述另一个第一类表项记录在所述第二处理单元对应的指令地址表中,所述另一个第一类表项中包括所述第二处理单元当前的PC中的指令地址;所述控制芯片判断所述第一处理单元对应的指令地址表和所述第二处理单元对应的指令地址表中的至少一个指令地址表中记录的表项数量是否达到对应的预设值;如果所述第一处理单元对应的指令地址表和所述第二处理单元对应的指令地址表中的至少一个指令地址表中记录的表项数量没有达到所述对应的预设值,所述控制芯片返回执行所述通过所述JTAG通道获取所述第一处理单元当前的PC中的指令地址步骤;如果所述第一处理单元对应的指令地址表和所述第二处理单元对应的指令地址表中记录的表项数量均达到对应的预设值,所述控制单元触发所述多核CPU中断。10.根据权利要求9所述的方法,其特征在于,所述将所述第一类表项记录在所述第一处理单元对应的指令地址表中之前,还包括:所述控制芯片通过所述JTAG通道获取所述第一处理单元当前的函数返回地址寄存器中的指令地址;所述控制芯片将所述第一处理单元当前的函数返回地址寄存器中的指令地址添加在所述第一类表项中;所述将所述另一个第一类表项记录在所述第二处理单元对应的指令地址表中之前,还包括:所述控制芯片通过所述JTAG通道获取所述第二处理单元当前的函数返回地址寄存器中的指令地址;所述控制芯片将所述第二处理单元当前的函数返回地址寄存器中的指令地址添加在所述另一个第一类表项中。11.根据权利要求9或10所述的方法,其特征在于,还包括:所述控制芯片按照表项存储的先后顺序,依次从所述第一处理单元对应的指令地址表中读取一个第一类表项,针对读取的每个第一类表项,执行:所述控制芯片根据所述第一类表项中包括的PC中的指令地址,从预先设定的所述第一处理单元中的指令地址与函数名和代码行的对应关系中,查询得到所述第一类表项中包括的所述PC中的指令地址对应的函数名和代码行;所述控制芯片创建一个第二类表项,所述第二类表项中包括所述第一类表项中包括的PC中的指令地址对应的函数名和代码行;所述控制芯片按照所述第二类表项生成的先后顺序,将所述第二类表项记录在第一处理单元对应的函数运行表中。12.根据权利要求9至11任一所述的方法,其特征在于,还包括:所述控制芯片按照表项存储的先后顺序,依次从所述第二处理单元对应的指令地址表中读取一个第一类表项,针对读取的每个第一类表项,执行:所述控制芯片根据所述第一类表项中包括的PC中的指令地址,从预先设定的所述第二处理单元中的指令地址与函数名和代码行的对应关系中,查询得到所述第一类表项中包括的所述PC中的指令地址对应的函数名和代码行;所述控制芯片创建一个第二类表项,所述第二类表项中包括所述第一类表项中包括的PC中的指令地址对应的函数名和代码行;所述控制芯片按照所述第二类表项生成的先后顺序,将所述第二类表项记录在第二处理单元对应的函数运行表中。13.一种生成处理器故障记录的装置,其特征在于,应用于包括所述装置和第一中央处理器CPU的硬件平台中,所述第一CPU中包括至少一个处理单元,所述装置通过JTAG通道与所述第一CPU通信,所述装置包括:第二处理器、存储器和JTAG接口,所述第二处理器、所述存储器和所述JTAG接口通过总线相连;所述JTAG接口,用于通过所述JTAG通道,获取所述第一CPU中的处理单元的程序计数器PC中的指令地址,并将所述PC中的指令地址通过所述总线发送给所述第二处理器;所述第二处理器,用于读取所述存储器中存储的程序代码,执行以下操作:检测到所述第一CPU中的处理单元停止响应;通过JTAG通道获取所述处理单元当前的程序计数器PC中的指令地址;创建一个包括所述当前的PC中的指令地址的第一类表...

【专利技术属性】
技术研发人员:侯承舜樊辉刘洪佳刘恒鲁冬杰
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1