一种调用栈信息合并方法、装置及设备与流程

摘要: 本技术涉及数据处理,尤其涉及一种调用栈信息合并方法、装置及设备。背景技术:1、超级计算机基于其强大的计算能力,在航空航天、量子力学、生物信息等多个领域均得到了广...
一种调用栈信息合并方法、装置及设备与流程

本技术涉及数据处理,尤其涉及一种调用栈信息合并方法、装置及设备。

背景技术:

1、超级计算机基于其强大的计算能力,在航空航天、量子力学、生物信息等多个领域均得到了广泛的应用,成为解决复杂科学问题的理想平台。由于这些科学问题通常涉及大规模的数据集和复杂的计算模型,因此,超级计算机上的程序设计大多采用并行计算模式。

2、并行计算程序的设计允许数据和任务被分割成小块,每个小块可以独立地在不同的处理器上进行处理。这种分割和并行处理的方式,极大地提高了计算效率。但是,由于多进程的特征以及进程间复杂的通信关系,计算结果受到进程调度、资源分配和通信时序等多种因素的影响,导致并行计算出现错误的可能较高,且调试的难度较高。

3、调用栈提供了并行计算程序执行过程中函数调用的详细历史记录,其不仅显示了单个进程的活动过程,还表征了进程间的相互依赖关系。通过查看不同处理器节点上各进程的调用栈信息,可以直观了解整个系统的运行状态以及各进程之间的关系,便于对并行计算程序进行有效调试,但目前缺少一种准确有效地对调用栈信息进行合并的方法。

技术实现思路

1、本发明提供了一种调用栈信息合并方法、装置及设备,用于解决相关技术中缺少一种准确有效地对调用栈信息进行合并的方法的问题。

2、第一方面,本技术实施例提供一种调用栈信息合并方法,应用于计算机设备,计算机设备包括多个计算节点,该方法包括:

3、针对每个计算节点,获取计算节点中各业务进程分别对应的调用栈信息;调用栈信息中包括:相应业务进程历史调用的函数以及各函数之间的调用关系;

4、针对每个业务进程,基于业务进程对应的调用栈信息,生成调用栈链表;调用栈链表中的节点用于表征相应函数的调用信息,节点之间的连接线用于表征函数之间的调用关系;

5、对各业务进程分别对应的调用栈链表进行合并,得到调用栈树;其中,在任意两个调用栈链表进行合并时,对其中一个调用栈链表进行遍历,在确定存在与另一个调用栈链表共有的节点时,对共有的节点的调用信息进行合并;

6、对调用栈树进行展示。

7、上述方法,通过对调用栈信息的采集和准确合并,便于开发人员能够直观地查看并行程序每个作业进程的调用栈信息,准确定位并行程序存在故障的位置,避免了人工进行逐进程检查,或者对调试日志的大批量输出,进而有效地提高了并行程序的调试速度。

8、在一种可能的实施方式中,对各业务进程分别对应的调用栈链表进行合并,得到调用栈树,包括:

9、对计算节点中各业务进程分别对应的调用栈链表进行合并,得到每个计算节点对应的调用栈子树;确定各计算节点对应的调用栈子树的根节点相同时,对各计算节点对应的调用栈子树进行合并,得到调用栈树;

10、该方法还包括:

11、确定任一调用栈子树的根节点与其他调用栈子树的根节点不同时,确定任一调用栈子树存在错误,并向用户发送提示消息。

12、上述方法,通过在对调用栈子树进行合并前,首先确定各调用栈子树的根节点是否相同,可以准确地确定出存在故障的调用栈子树,进而保证后续调用栈信息合并的准确性。

13、在一种可能的实施方式中,多个计算节点中包括一个第一节点以及多个第二节点;对各业务进程分别对应的调用栈链表进行合并,得到调用栈树,包括:

14、通过每个计算节点,对计算节点中各业务进程分别对应的调用栈链表进行合并,得到与计算节点对应的调用栈子树;

15、通过每个第二节点,将第二节点对应的调用栈子树发送至第一节点;

16、通过第一节点,对第一节点对应的调用栈子树,以及接收到的各第二节点分别对应的调用栈子树进行合并,得到调用栈树。

17、上述方法,各调用节点在自身节点处将各自的调用栈链表合并为调用栈子树,再将调用栈子树发送至第一节点,由第一节点进行调用栈子树的合并,能够提高调用栈树的生成效率。

18、在一种可能的实施方式中,通过每个第二节点,将第二节点对应的调用栈子树发送至第一节点,包括:

19、通过每个第二节点,对调用栈子树进行序列化操作,得到目标序列,并将目标序列发送至第一节点;

20、通过第一节点,对第一节点对应的调用栈子树,以及接收到的各第二节点分别对应的调用栈子树进行合并之前,方法还包括:

21、通过第一节点,对接收到的各目标序列进行反序列化操作,得到各调用栈子树。

22、上述方法,在各第二节点将调用栈子树发送至第一节点的过程中,先对调用栈子树进行序列化,再对其进行还原,能够提高调用栈子树的发送效率。

23、在一种可能的实施方式中,通过每个第二节点,对调用栈子树进行序列化操作,得到目标序列,包括:

24、将调用栈子树的根节点的节点信息添加至任务队列中,循环执行如下过程至任务队列为空,并对得到的各子序列依次进行组合,得到目标序列:

25、从任务队列中取出目标节点的节点信息,并对目标节点的节点信息进行序列化操作,得到与目标节点对应的子序列;其中,目标节点为任务队列中的第一个节点;

26、将调用栈子树中目标节点的子节点的节点信息添加至任务队列中。

27、上述方法,通过按照调用栈子树中节点之间的调用关系,将节点依次添加至任务队列中对其进行序列化,能够适用于对节点数量不确定的多叉树进行有序的序列化,保证其序列化过程中的准确性。

28、在一种可能的实施方式中,通过第一节点,对接收到的各二进制压缩序列进行反序列化操作,得到各调用栈子树,包括:

29、针对每个目标序列,按照目标序列中各子序列的排列顺序,依次从目标序列中解析出各子序列;

30、针对每个子序列,对子序列进行反序列化操作,得到子序列对应的节点信息;节点信息中包括:相应节点的子节点数量;

31、针对每个目标序列,基于目标序列中各节点对应的节点信息,重建目标序列对应的调用栈子树。

32、上述方法,通过对各子序列依次进行反序列化的操作,能够高效准确地实现调用栈子树的还原。

33、在一种可能的实施方式中,通过每个第二节点,将第二节点对应的调用栈子树发送至第一节点,包括:

34、循环执行如下过程至获取到的第三节点的数量为一个,则确定各第二节点对应的调用栈子树发送至第一节点:

35、获取各第三节点,并将第三节点划分为第一类节点以及第二类节点,其中,第三节点为上一次循环过程中确定的第一类节点,第一类节点中包括第一节点;

36、对第一类节点与第二类节点进行组合,每个组合中包括一个第一类节点以及至少一个第二类节点;

37、通过每个第二类节点,将第二类节点中存储的调用栈子树发送至相应组合中的第一类节点;存储的调用栈子树包括:第二类节点对应的调用栈子树、以及历史接收到的其他节点的调用栈子树。

38、上述方法,通过树形结构通讯的方式实现调用栈子树从第二节点向第一节点的传输,能够有效提高传输效率。

39、在一种可能的实施方式中,多个计算节点中包括一个第一节点以及多个第二节点;针对每个业务进程,基于业务进程对应的调用栈信息,生成调用栈链表之前,方法还包括:

40、通过每个第二节点,在共享文件系统中创建与第二节点中各业务进程分别对应的共享文件,并将各业务进程对应的调用栈信息存储至相应共享文件中;共享文件系统用于在各计算节点之间进行信息共享;

41、通过第一节点,对共享文件系统中的各共享文件进行遍历,获取各业务进程分别对应的调用栈信息。

42、上述方法,提供了另一种可能的调用栈信息的传输方式,通过共享文件系统进程传输,能够高效准确地将调用栈信息传输至第一节点,便于第一节点进行调用栈信息的合并。

43、第二方面,本技术实施例提供一种调用栈信息合并装置,应用于计算机设备,计算机设备包括多个计算节点,该装置包括:

44、获取模块,用于针对每个计算节点,获取计算节点中各业务进程分别对应的调用栈信息;调用栈信息中包括:相应业务进程历史调用的函数以及各函数之间的调用关系;

45、生成模块,用于针对每个业务进程,基于业务进程对应的调用栈信息,生成调用栈链表;调用栈链表中的节点用于表征相应函数的调用信息,节点之间的连接线用于表征函数之间的调用关系;

46、合并模块,用于对各业务进程分别对应的调用栈链表进行合并,得到调用栈树;其中,在任意两个调用栈链表进行合并时,对其中一个调用栈链表进行遍历,在确定存在与另一个调用栈链表共有的节点时,对共有的节点的调用信息进行合并;

47、展示模块,用于对调用栈树进行展示。

48、第三方面,本技术实施例提供一种电子设备,包括存储器、处理器及存储在上述存储器上并可在上述处理器上运行的计算机程序,上述处理器执行上述计算机程序时实现上述调用栈信息合并方法中的步骤。

49、第四方面,本技术实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本技术上述的调用栈信息合并方法中的步骤。

50、第五方面,本技术实施例提供一种计算机程序产品,包括计算机程序,计算机程序存储在计算机可读存储介质中;当内存访问设备的处理器从计算机可读存储介质读取计算机程序时,处理器执行计算机程序,使得内存访问设备执行本技术上述调用栈信息合并方法中的步骤。

51、上述第二至五方面中的各个方面以及各个方面可能达到的技术效果请参照上述针对第一方面或第一方面中的各种可能方案可以达到的技术效果说明,这里不再重复赘述。