并行程序的异常运行时追踪方法、装置、设备及存储介质与流程

摘要: 本公开涉及程序异常追踪,尤其涉及一种并行程序的异常运行时追踪方法、装置、设备及存储介质。背景技术:1、高性能计算程序,尤其是基于mpi的并行程序,在运行过程中通...
并行程序的异常运行时追踪方法、装置、设备及存储介质与流程

本公开涉及程序异常追踪,尤其涉及一种并行程序的异常运行时追踪方法、装置、设备及存储介质。

背景技术:

1、高性能计算程序,尤其是基于mpi的并行程序,在运行过程中通常具有多进程并行执行、调用路径复杂、运行周期长、日志分散、多模块和多语言混合实现等特点。在实际运行中,尤其是模拟器模型和科学计算程序,往往同时包含数值计算、并行通信、资源分配和领域约束判断等逻辑,当出现异常时,开发者很难快速定位异常位置及其上下文。

2、现有通过printf调试与人工日志分析,虽实现简便但输出分散、缺乏结构化且难以恢复异常时的完整调用上下文,大规模场景下人工分析成本极高;通过gdb等交互式调试器不适用于长时间运行、跨多节点的hpc应用场景;通过固定粒度日志或固定采样率监测,其中低粒度方案开销虽小却无法提供充分的异常上下文信息,高粒度方案虽信息全面却显著增加日志量、i/o压力及程序运行开销。综上,现有技术普遍缺乏运行时动态自适应调节能力,难以在常态低开销与异常精准定位之间取得有效平衡。

技术实现思路

1、为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种并行程序的异常运行时追踪方法、装置、设备及存储介质。

2、本公开实施例提供了一种并行程序的异常运行时追踪方法,该方法包括:在并行程序启动时,为每个运行进程初始化独立的运行时实例;在每个运行进程的关键执行片段中设置执行区间埋点,维护当前执行上下文;其中,执行区间埋点包括进入埋点和退出埋点,进入埋点被触发时生成新的执行区间标识并压入当前活动执行区间栈,退出埋点被触发时弹出当前活动执行区间栈;基于当前执行上下文按照第一追踪粒度记录普通日志信息,并对每个运行进程的运行状态进行检测,当满足预设异常条件时生成异常事件;响应于检测到异常事件,则将第一追踪粒度提升至第二追踪粒度,基于当前执行上下文按照第二追踪粒度在异常追踪窗口内记录异常日志信息;其中,异常追踪窗口是基于当前活动执行区间栈确定的;输出普通日志信息和异常日志信息生成结构化日志。

3、在一种可能的实现方式中,对每个运行进程的运行状态进行检测,当满足预设异常条件时生成异常事件,包括:基于预设状态项对每个运行进程进行检测,判断运行进程是否满足预设异常条件;其中,预设状态项包括关键计算结果、mpi调用返回值、资源申请结果、参数合法性、算法收敛状态和领域物理约束中的至少一个;当运行进程满足预设异常条件,则生成异常事件,并记录异常事件的异常类型;其中,异常类型包括数值异常、并行通信异常、资源管理异常、算法错误、逻辑错误和领域特化异常中的至少一个。

4、在一种可能的实现方式中,将第一追踪粒度提升至第二追踪粒度,包括:增加执行区间记录密度、增加状态事件和检查点事件、提高异常相关路径日志级别阈值和增加保留异常相关运行状态信息中的至少一种方式。

5、在一种可能的实现方式中,基于当前执行上下文按照第二追踪粒度在异常追踪窗口内记录异常日志信息,包括:响应于检测到异常事件,则开启异常追踪窗口并持续记录异常追踪窗口对应的异常追踪时间;持续监测异常追踪时间是否达到静默时间,在异常追踪时间未达到静默时间时,持续监测当前活动执行区间栈的退出边界;当达到当前活动执行区间栈的退出边界时,在退出边界退出异常追踪窗口;当未达到当前活动执行区间栈的退出边界,则在异常追踪时间达到静默时间时退出异常追踪窗口。

6、在一种可能的实现方式中,该并行程序的异常运行时追踪方法还包括:在异常追踪窗口,响应于再次检测到异常事件,则延续异常追踪窗口并持续记录异常追踪窗口对应的延续追踪时间;持续监测延续追踪时间是否达到静默时间,在延续追踪时间未达到静默时间时,持续监测当前活动执行区间栈的退出边界;当达到当前活动执行区间栈的退出边界时,在退出边界退出异常追踪窗口;当未达到当前活动执行区间栈的退出边界,则在延续追踪时间达到静默时间时退出异常追踪窗口。

7、在一种可能的实现方式中,该并行程序的异常运行时追踪方法还包括:当退出异常追踪窗口,则判断程序正常运行;响应于程序正常运行,将第二追踪粒度降低为第一追踪粒度,并继续基于当前执行上下文按照第一追踪粒度记录普通日志信息。

8、在一种可能的实现方式中,输出普通日志信息和异常日志信息生成结构化日志,包括:将普通日志信息写入本地缓冲区,当本地缓冲区中的数据量大于数据量阈值时,或数据条数大于条数阈值时,或累计时间大于时间阈值时,将普通日志信息打包输出;将异常日志信息以完整结构化单条日志记录的形式通过快速传输通道进行输出。

9、本公开实施例还提供了一种并行程序的异常运行时追踪装置,该并行程序的异常运行时追踪装置包括:初始化模块,用于在并行程序启动时,为每个运行进程初始化独立的运行时实例;执行区间埋点模块,用于在每个运行进程的关键执行片段中设置执行区间埋点,维护当前执行上下文;其中,执行区间埋点包括进入埋点和退出埋点,进入埋点被触发时生成新的执行区间标识并压入当前活动执行区间栈,退出埋点被触发时弹出当前活动执行区间栈;常态监测和异常检测模块,用于基于当前执行上下文按照第一追踪粒度记录普通日志信息,并对每个运行进程的运行状态进行检测,当满足预设异常条件时生成异常事件;局部提级追踪模块,用于响应于检测到异常事件,则将第一追踪粒度提升至第二追踪粒度,基于当前执行上下文按照第二追踪粒度在异常追踪窗口内记录异常日志信息;其中,异常追踪窗口是基于当前活动执行区间栈确定的;输出模块,用于输出普通日志信息和异常日志信息生成结构化日志。

10、本公开实施例还提供了一种计算设备,计算设备包括:处理器;用于存储处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现如本公开实施例提供的并行程序的异常运行时追踪方法。

11、本公开实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行如本公开实施例提供的并行程序的异常运行时追踪方法。

12、在该实现方式中,通过为每个进程独立维护活动执行区间栈以还原异常发生时的调用上下文,在程序常态阶段维持低粒度、低开销追踪,能够减少日志生成、缓冲、传输和存储带来的附加扰动,在检测到异常情况时仅对触发异常的运行进程及其当前活动的执行区间对应的局部上下文进行增强追踪,能够减少无关信息干扰。因此,本申请的并行程序的异常运行时追踪方法能够在常态低开销的同时实现异常精准定位。

1.一种并行程序的异常运行时追踪方法,其特征在于,所述方法包括:

2.根据权利要求1所述的并行程序的异常运行时追踪方法,其特征在于,所述对每个运行进程的运行状态进行检测,当满足预设异常条件时生成异常事件,包括:

3.根据权利要求1所述的并行程序的异常运行时追踪方法,其特征在于,所述将所述第一追踪粒度提升至第二追踪粒度,包括:

4.根据权利要求1所述的并行程序的异常运行时追踪方法,其特征在于,所述基于所述当前执行上下文按照所述第二追踪粒度在异常追踪窗口内记录异常日志信息,包括:

5.根据权利要求4所述的并行程序的异常运行时追踪方法,其特征在于,所述方法还包括:

6.根据权利要求4或5所述的并行程序的异常运行时追踪方法,其特征在于,所述方法还包括:

7.根据权利要求1所述的并行程序的异常运行时追踪方法,其特征在于,所述输出所述普通日志信息和所述异常日志信息生成结构化日志,包括:

8.一种并行程序的异常运行时追踪装置,其特征在于,所述装置包括:

9.一种计算设备,其特征在于,所述计算设备包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现如权利要求1至7中任一项所述的并行程序的异常运行时追踪方法。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机指令,所述计算机指令用于使计算机执行权利要求1至7中任一项所述的并行程序的异常运行时追踪方法。