LSF(Load Sharing Facility)是IBM旗下的一款分布式集群管理系统软件,负责计算资源的管理和批处理作业的调度。它给用户提供统一的集群资源访问接口,让用户透明地访问整个集群资源。它通常是高性能计算环境中不可或缺的基础软件。LSF 是一种强大的工作负载管理平台,提供基于各种策略的智能调度功能,利用分布式的基础架构资源来提高整体的系统性能。用户通过 LSF可以实现集群间的负载均衡,扩展集群构架和资源,最大限度地提高集群的使用效率。

通过集中监控和调用,可以充分共享计算机的CPU、内存、磁盘、License等资源,一组安装了LSF软件的计算机组成了一个集群(Cluster)。Cluster内地资源统一监控和调度。提交给LSF作业的命令就是bsub

芯片验证过程中跑case或者跑regression的时候经常会使用到bsub命令,上面就是bsub命令背后的原理。下面详细地介绍一些常用命令。

2. 常用命令之bsub详解

2.1 bsub命令的格式:

bsub [options] command [argument]

2.2 相关参数:

  • -q 选择作业提交的队列queue
  • -i 指定输入文件
  • -I 交互模式,此时终端不能输入
  • -J 指定作业名称
  • -n 指定作业需要的CPU核心数,LSF中一般称之为slot
  • -R span[hosts=1] 指定作业只能在单个节点运行,不能跨节点(跨节点作业需要MPI支持,生物中比较少),-R 可以使得作业在需要满足某种条件的节点上运行
  • -o 作业标准输出,%J为作业ID,即此处的作业输出文件为 jobid.out
  • -e 作业错误输出,%J为作业ID,即此处的作业输出文件为 jobid.err
    -M 内存控制参数,作业占用的内存超过其指定值时,作业会被系统杀掉。如 -M 20GB -R "rusage[mem=20GB]" 申请20GB的内存,且其内存使用量不能超过20G;
  • -m 指定作业运行节点;
  • -W hh:mm 设置作业运行时间;
  • -w 作业依赖,方便写流程,如-w "done(JobA)",作业名为JobA的作业完成之后,该作业才开始运行;
  • -K 提交作业并等待作业结束,在写流程时会用得上,可以见后面的例子
  • -P 指定project name,如果我们需要统计某个项目消耗的计算资源,如CPU时等,可以将相关的作业都指定为同一个project name,然后根据project name统计资源消耗;
  • -r rerun选项,即作业失败后自动重新运行,提交大量作业时此选项比较有用;

example:
/tools/xxx/xxx/bsub -q normal -P AnIP -K -C 0上面-q 后面跟queue的名字;-P后面跟project名字;

3. 常用命令之bqueues

查询所有queue的状态

  • QUEUE_NAME:队列名称
  • PRIO:优先级
  • NJOBS:几个作业在并行
  • PEND:阻塞的作业数量
  • RUN:正在运行的作业数量
  • SUSP:挂起的作业数量

**4. 常用命令之bhosts**\

显示各节点作业相关情况

bhosts hostname

5. 常用命令之bjobs

查看提交作业运行情况;

bjobs –r 显示正在运行的作业

bjobs –a 显示正在运行的和最近完成的作业

bjobs -p 显示等待运行的作业和等待原因

bjobs –s 显示正在挂起的作业和挂起的原因

bjobs -l 显示该作业的所有信息

6. bkill

删除不需要的作业

bkill jobid 终止指定的作业;

bkill –r jobid

6.1 批量bkill任务

例:bkill所有PSUSP状态的任务

6.1.1 单个用户:(bkill -u username 0,删除该用户下所有提交的并行任务)

bjobs -u username | grep PSUSP|awk '{print $1}' |xargs bkill

6.1.2 所有用户:bjobs -u all -p -q normal | grep PSUSP|awk '{print $1}' |xargs bkill(-p参数,可有可无,不影响命令执行结果)

PS:常用LSF命令(更详细命令使用可参考LSF的PDF手册)

7. bpeek -f 作业号

查看任务日志,显示处于运行时作业的标准输出和标准错误输出信息;

8. bhist

显示最近完成作业或正在运行作业的历史情况

bhist jobid

查看作业历史;

9. lsload

显示节点当前负载;

10. 运行脚本文件

bsub < run_sim.bsub

脚本实例

#BSUB -J HArgument
#BSUB -n 4
#BSUB -o 111%J.lsf.out 
#BSUB -e %J.lsf.err
#BSUB -W 120
#BSUB -q batch
#BSUB -R "span[ptile=36]"

mpiexec ../build/test