ecFlow学习笔记:使用late设置超时报警
目录
最近一段时间,业务系统一直受到串行作业运行卡住的影响。具体表现为:
- 作业提交到slurm上
- 执行ncl程序画图卡住
- 运行超时被slurm杀掉
- 脚本捕获trap信号,调用
ecflow_client --abort
与 ecflow 服务通信 - 与 ecflow 通讯尚未完成,作业已停止运行,导致ecflow_ui上作业一直处于 active 状态
目前尚未定位具体原因,可能需要与HPC运行维护团队一同寻找。
超时报警一直是业务系统维护的核心需求之一,我们主要通过设置 slurm 的墙钟时间限制。 但上述示例表明即便slurm墙钟时间有效,但作业与ecflow服务的通讯依然可能发生异常,所以需要额外的机制进行报警。
本文介绍如何使用 ecFlow 的 late 属性设置超时报警。
late属性
late属性用于指示任务超时,当某个节点被系统任务超时,ecflow仅会标记该节点,而不采取其他动作。 ecflow_ui会在该节点显示late图标,并在late弹出窗口中显示该节点。
late有下面三种类型:
Submitted
节点处于submitted状态不能超过指定时间(格式为[+]hh:mm
)。
Submitted是相对的,所以 +
被忽略。
如果节点处于submitted状态超过该时长,节点会被设置late标签。
Active
节点必须在某个时间点处于active状态(格式hh:mm
)。
如果节点在该时间点处于queued或submitted状态,会被设置late标签。
Complete
节点必须在某时间运行结束(格式[+]hh:mm
)。
如果使用相对时间,则表示从节点变为active后的时间,否则节点必须在给定的时间点运行结束。
方法
定义一个设置late的函数,包括对提交和完成的限制。
def add_late_attribute(node, submitted=(0, 10), complete=(0, 30, True)):
late = Late()
late.submitted(*submitted)
late.complete(*complete)
node.add_late(late)
默认参数限制节点在submitted状态不能超过10分钟,运行时间不能超过30分钟。
应用
已对业务系统的ncl画图任务添加late属性。
节点超时在ecflow_ui上显示如下。