概述

LSF 作业依赖用于在作业提交时指定作业执行流程。LSF 会保持这些作业,定期评估依赖条件。当依赖条件变为真时,LSF 开始为作业寻找资源。

当依赖流程中添加越来越多的作业,或者依赖条件变得复杂时,使用 bjobs 命令监控流程会变得困难。此时可以使用 bjdepinfo 命令查看作业依赖关系的层次视图。

示例场景

提交作业依赖流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 提交预处理作业 1
$ bsub -J "pre-process 1" ...
Job <8021> is submitted to default queue <normal>.

# 提交预处理作业 2
$ bsub -J "pre-process 2" ...
Job <8022> is submitted to default queue <normal>.

# 提交执行作业数组,依赖预处理作业完成
$ bsub -J "execution[1-4]" -w "done(8021) && done(8022)" ...
Job <8023> is submitted to default queue <normal>.

# 提交后处理作业,依赖执行作业结束
$ bsub -J "post-process" -w "ended(8023)" ...
Job <8024> is submitted to default queue <normal>.

使用 bjobs 查看作业状态

1
2
3
4
5
6
7
8
9
$ bjobs
JOBID   USER    STAT  QUEUE      FROM_HOST   EXEC_HOST   JOB_NAME   SUBMIT_TIME
8021    userA   RUN   normal     hostA       hostB       *process 1 Oct  1 14:59
8022    userA   RUN   normal     hostA       hostB       *process 2 Oct  1 14:59
8023    userA   PEND  normal     hostA                   *cution[1] Oct  1 14:59
8023    userA   PEND  normal     hostA                   *cution[2] Oct  1 14:59
8023    userA   PEND  normal     hostA                   *cution[3] Oct  1 14:59
8023    userA   PEND  normal     hostA                   *cution[4] Oct  1 14:59
8024    userA   PEND  normal     hostA                   *t-process Oct  1 15:00

bjdepinfo 命令

查看父作业(阻塞原因)

使用 -p 选项获取作业父作业的状态,使用 -l 选项查看依赖条件和等待原因:

1
2
3
4
5
$ bjdepinfo -lp 8023
The dependency condition of job <8023> is not satisfied: done(8021) && done(8022)
JOBID          PARENT         PARENT_STATUS  PARENT_NAME  LEVEL
8023           8021           RUN            *process 1   1
8023           8022           RUN            *process 2   1

输出说明

字段 说明
JOBID 当前作业 ID
PARENT 父作业 ID
PARENT_STATUS 父作业状态
PARENT_NAME 父作业名称
LEVEL 依赖层级

查看子作业(下游流程)

使用 -c 选项获取作业子作业的状态,使用 -r level 递归查看到指定层级:

1
2
3
4
5
6
7
$ bjdepinfo -c -r 10 8022
JOBID          CHILD          CHILD_STATUS  CHILD_NAME  LEVEL
8022           8023[1]        RUN           *cution[1]  1
8022           8023[2]        RUN           *cution[2]  1
8022           8023[3]        RUN           *cution[3]  1
8022           8023[4]        RUN           *cution[4]  1
8023           8024           PEND          *t-process  2

输出说明

字段 说明
JOBID 当前作业 ID
CHILD 子作业 ID
CHILD_STATUS 子作业状态
CHILD_NAME 子作业名称
LEVEL 依赖层级(1=直接子作业,2=孙作业)

说明:作业 8024 是作业 8022 的”孙作业”(LEVEL=2)

bjdepinfo 选项汇总

选项 说明
-p 显示父作业信息
-c 显示子作业信息
-l 显示详细依赖条件和等待原因
-r level 递归查看到指定层级

依赖条件关键字

关键字 说明
done(job_id) 作业正常完成(退出码为 0)
ended(job_id) 作业结束(无论成功或失败)
exit(job_id) 作业异常退出
started(job_id) 作业已开始运行
post_done(job_id) 作业后处理完成
post_err(job_id) 作业后处理出错

使用场景

场景 命令
查看作业为何等待 bjdepinfo -lp <job_id>
查看作业的直接子作业 bjdepinfo -c <job_id>
查看完整依赖树 bjdepinfo -c -r 10 <job_id>
查看祖父作业 bjdepinfo -p -r 3 <job_id>

参考资料

  1. IBM Documentation - Tracking job dependencies
  2. IBM Documentation - Best practices and tips for LSF