概述

LSF 在作业执行过程中使用不同类型的目录。了解这些目录的用途和配置方法,对于优化集群性能和管理作业输出非常重要。

目录类型 英文名称 主要用途
作业当前工作目录 JOBCWD 作业进程运行和生成数据的目录
作业缓冲目录 Job Spool Directory 存储作业脚本和标准输出/错误
作业临时目录 TMPDIR 存储临时输出和工作文件
作业输出目录 Job Output Directory 存储作业完成后的输出文件

作业当前工作目录 (JOBCWD)

作业当前工作目录是作业进程运行的目录,通常所有作业数据和结果都会生成在此目录下。

默认行为

  • 默认使用作业提交目录作为 JOBCWD
  • 如果提交目录不存在,使用 /tmp

使用 bsub -cwd 指定

1
2
3
4
5
6
7
8
9
10
11
12
13
# 使用默认提交目录
$ pwd
/home/user1
$ bsub -I pwd
Job <322> is submitted to default queue <interactive>.
<<Starting on s1node1>>
/home/user1

# 指定自定义工作目录
$ bsub -I -cwd "/pcc/cust_data" pwd
Job <323> is submitted to default queue <interactive>.
<<Starting on s1node1>>
/pcc/cust_data

动态工作目录

支持使用动态模式创建作业目录:

1
2
3
4
$ bsub -I -cwd "/tmp/%J_%I" pwd
Job <324> is submitted to default queue <interactive>.
<<Starting on s1node1>>
/tmp/324_0

LSF 会根据 JOB_CWD_TTL 参数在作业完成后清理动态创建的目录。

其他配置方式

配置方式 配置位置 说明
JOB_CWD lsb.applications 应用配置文件中指定
DEFAULT_JOB_CWD lsb.params 集群范围默认设置
LSB_JOB_CWD 环境变量 指定执行主机上的启动目录

作业缓冲目录 (Job Spool Directory)

LSF 在作业缓冲目录下创建作业脚本文件并重定向标准输出和标准错误。作业完成后这些文件会被删除。

默认位置

默认使用 $HOME/.lsbatch,通常位于共享文件系统上,可能存在磁盘配额和性能限制。

配置 JOB_SPOOL_DIR

lsb.params 中配置替代位置:

1
JOB_SPOOL_DIR=/tmp/smc

配置步骤

  1. 在 lsb.params 中添加配置后重启服务:
1
2
badmin mbdrestart
badmin hrestart all
  1. 验证配置:
1
2
$ bparams -a | grep JOB_SPOOL_DIR
JOB_SPOOL_DIR = /tmp/smc
  1. 提交作业验证:
1
2
3
4
5
6
$ bsub -Is /bin/sh
Job <314> is submitted to default queue <interactive>.
<<Starting on s1node1>>
sh-4.1$ cd /tmp/smc
sh-4.1$ ls
1379966620.314  1379966620.314.hostAffinityFile  1379966620.314.hostfile  1379966620.314.out

建议:如果有 GPFS 等并行文件系统,可将 JOB_SPOOL_DIR 指向该文件系统;也可以使用 /tmp 减少 I/O 竞争。

作业临时目录 (TMPDIR)

LSF 为作业创建专用临时目录存储临时输出和工作文件,作业完成后自动删除。

配置参数

参数 配置位置 说明
LSF_TMPDIR lsf.conf 顶层临时目录
LSB_SET_TMPDIR lsf.conf 设置环境变量名

目录命名规则

  • 普通作业:$LSF_TMPDIR/<jobID>.tmpdir
  • 作业数组元素:$LSF_TMPDIR/<jobID>_<job_index>.tmpdir

配置示例

  1. 在 lsf.conf 中添加配置:
1
2
LSF_TMPDIR=/tmp/smctmp
LSB_SET_TMPDIR=LSF_TMPDIR
  1. 重启 sbatchd:
1
badmin hrestart all
  1. 验证:
1
2
3
4
5
6
7
8
9
$ badmin showconf sbd s1node1 | grep TMPDIR
LSB_SET_TMPDIR = LSF_TMPDIR
LSF_TMPDIR = /tmp/smctmp

$ bsub -Is /bin/sh
Job <315> is submitted to default queue <interactive>.
<<Starting on s1node1>>
sh-4.1$ echo $LSF_TMPDIR
/tmp/smctmp/315.tmpdir

作业输出目录 (Job Output Directory)

用于管理作业完成后文件复制的目标目录,支持动态目录模式。

支持的动态模式

模式 说明
%J 作业 ID
%I 数组索引(默认 0)
%JG 作业组
%EJ 执行作业 ID
%EI 执行索引
%P 项目名称
%U 用户名
%G 用户组

配置方式

  • bsub -outdir:提交时指定
  • DEFAULT_JOB_OUTDIR:在 lsb.params 中设置默认值

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 提交目录
$ pwd
/tmp

# 提交作业,指定输出目录
$ bsub -outdir "outputdir/%J_%I" -o outputfile -f " outputfile < outputfile" hostname
Job <320> is submitted to default queue <normal>.

# 作业完成后检查
$ bjobs 320
JOBID   USER    STAT  QUEUE      FROM_HOST   EXEC_HOST   JOB_NAME   SUBMIT_TIME
320     user1   DONE  normal     master      s1node1     hostname   Sep 23 21:02

$ cd outputdir/320_0
$ pwd
/tmp/outputdir/320_0
$ ls
outputfile

说明:LSF 以 700 权限创建输出目录,所有者为提交用户。

配置参数汇总

参数 配置文件 说明
JOB_CWD lsb.applications 应用配置文件中的工作目录
DEFAULT_JOB_CWD lsb.params 集群默认工作目录
JOB_CWD_TTL lsb.params/lsb.applications 动态工作目录存活时间
JOB_SPOOL_DIR lsb.params 作业缓冲目录
LSF_TMPDIR lsf.conf 临时目录顶层路径
LSB_SET_TMPDIR lsf.conf 设置临时目录环境变量
DEFAULT_JOB_OUTDIR lsb.params 默认输出目录

参考资料

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