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高性能计算机环境介绍:作业管理》