CEMC笔记:业务系统任务运行超时的两种检测方法

目录

数值预报业务系统是由大量有依赖关系的任务构成的工作流。 如果某个任务运行超时,那么依赖该任务的后续任务都不会运行,甚至会影响下一个时次预报的按时启动。 所以需要及时发现运行超时的任务,根据不同的任务采取不同的处理方法,例如重新启动任务或者继续等待运行结束。

本文介绍目前 CEMC 在 CMA-PI HPC 中的数值模式业务系统任务脚本中使用的两种超时检测方法。

Slurm 墙钟时间

业务系统中的绝大部分作业都在 Slurm 队列中运行,可以通过设置 Slurm 的墙钟时间来控制任务运行时长。 slurm 会终止运行时间超过墙钟时间的任务,导致脚本运行出错。

例如,下面代码来自 CMA-MESO 产品后处理转码任务脚本的文件头,其中 #SBATCH -t 00:60:00 设置墙钟时间为60 分钟。

#!/bin/ksh
#SBATCH --comment=op_grapes_meso_3km
#SBATCH -J GRAPES
#SBATCH -N 4
#SBATCH --ntasks-per-node=32
#SBATCH -t 00:60:00
#SBATCH -p operation
#SBATCH -o job_001.1
#SBATCH -e job_001.1.err

这是预防任务超时的最后一道防线,所以超时时间通常设置会比较宽松,仅在极端情况下才会启用。

timeout 命令

最近我们遇到任务触发 slurm 超时但 ecFlow 任务没有出错结束的情况,不清楚具体原因,但需要寻找处理方案。

出错的任务都是在执行 cp 文件拷贝操作,需要使用额外机制对该操作进行超时监控并报错。

Linux 的 timeout 命令可以实现这个功能,监控命令是否在时限内结束,超时会返回非 0 错误码。

命令格式

timeout duration command [args]...

duration 是浮点格式的时长,可以附件 s(秒,默认)、m(分)、h(小时)、d(天)字符结尾。

例如下面代码将拷贝操作限制为 15 分钟:

timeout 15m cp -v ${runtime_archive_dir}/gmf.gra.${start_time}${forecast_hour}.grb2 \
  gmf.gra.${start_time}${forecast_hour}.grb2.tmp

该方案仅是异常情况下的备选方案,无需对所有耗时操作添加 timeout 而增加系统复杂度。 timeout 与 Slurm 墙钟时间的配合效果有待后续观察。

参考

CMA-PI HPC 的 Slurm 简介:《NWPC高性能计算机环境介绍:作业管理