| |||
Openlava是什么:
Openlava脱胎于IBM的lsf(两者命令和用法基本相同),是一个免费、开源的工作负载调度程序,支持HPC(高性能计算),是IC应用环境下主流的任务分发和调度工具。
Openlava术语:
使用openlava我们需要了解如下基本概念:
- Job
任务,用户工作的一个抽象,对应着一条任务指令。
- Host
机器,任务分发和任务执行的机器。
- Queue
队列,多个Host(机器)组成一个队列,用于为指定类型的任务(Job)提供一组资源池。
其中Host分为如下三类:
- Execution Host
计算节点,用于接收并执行任务。
- Submission Host
任务分发节点,一般和Execution Host是分开的,仅用于分发任务,不接收和执行任务。
- Master Host
主控节点,一般和Execution Host及Submission Host都是分开的,仅用于收集负载和状态信息,管理任务。
Openlava命令:
常用基本命令
基本命令 | 用法 |
bsub | 提交任务到openlava |
bjobs | 查看任务状态和基本信息 |
bkill | 杀死未完成的任务 |
bqueues | 查看队列状态和基本信息 |
bhosts | 查看机器状态及基本信息 |
lshosts | 查看机器资源状态 |
lsload | 查看机器负载状态 |
- bsub
%bsub -q [queueName] : 指定队列,如果不指定,则任务会提交到默认队列(一般是normal)。
%bsub -m [hostName] : 指定机器,任务将会被提交到指定的机器上运行(需要确保机器在当前队列中)。
%bsub -P [projectName] : 指定项目,一般用于标识和统计。
%bsub -Is : 投递任务的时候用shell模式启动一个终端,并将任务投递到上面以交互式运行。这种模式一般用于启动带图形界面的工具,启动需要交互式的工具,将标准输出打印到当前窗口,或者为了阻塞式运行任务(任务运行期间bsub不退出)。
%bsub -o [fileName] : 保存任务的标准输出到指定的文件,这个模式和”-Is”相冲突,但是可以和”-e”叠加使用。
%bsub -e [fileName] : 保存任务的标准错误到指定的文件,这个模式和”-Is”相冲突,但是可以和”-o”叠加使用。
%bsub -n [number] : 指定为当前任务保留多少cpu处理器。
%bsub -R [resourceString] : 指定为当前任务的资源需求。
示例:
* 当前任务为virtuoso(图形界面), 任务投递到队列GUI,所属项目为ABC,预计需要4个cpu核(在同一台机器)和10G内存,则任务投递方式为:
bsub -q GUI -P ABC -Is -n 4 -R “span[hosts=1] rusage[mem=10240]” “virtuoso”
* 当前任务为liberate,任务投递到默认队列,所属项目为ABC,需要保存标准输出和标准错误,预计1个cpu核足够, 要求投递的机器剩余内存大于100G,剩余swap大于100G,剩余tmp空间大于30G,则任务投递方式为:
bsub -P ABC -o lsf.log -e lsf.log -R “select[mem>=102400 && swap>=102400 && tmp>=30720]” “liberate liberate.tcl”
- bjobs
%bjobs : 查看当前用户所有的未完成job。
%bjobs -a : 查看当前用户在一段时间内所有的job,包括已完成和未完成的job。
%bjobs -UF [jobId] : 查看指定job的详细信息。
- bkill
%bkill 0 : 杀死当前用户所有的job。
%bkill -r [jobId] : 强制杀死指定的job。
- bqueues
%bqueues : 查看所有队列的job状态。
- bhosts
%bhosts : 查看所有机器的job状态。
- lshosts
%lshosts : 查看所有机器的资源状况。
- lsload
%lsload : 查看所有机器的负载状况。
扩展知识
1. 从队列详细信息我们能够到什么
MAX : 队列的理论最大slots可用数目,此队列最多可以占用60 slots。
JL/U : 队列个人slots限制,每个人在这个队列中最多可以占用5 slots。
NJOBS/PEND/RUN/SSUSP/USUSP/RSV : 当前队列上的作业情况。
RUNLIMIT : 队列的运行时间限制,10080 min即7天,队列上的任务运行时间达到7天会被kill掉。
USERS : 哪些用户或者用户组可以使用这个队列。
HOSTS : 哪些机器或者机器组在这个队列中。
2. 从任务详细信息中我们可以得到什么
对于RUN/DONE/EXIT状态的job,我们可以从job的详细信息中获取:
任务的分发参数,包括Project, Queue, Command, Processors Requested, Requested Resources等。
机器信息,包括投递机器(Submitted from)和执行机器(Dispatched to)。
时间信息,包括投递时间和执行时间。
用户信息(User)。
目录信息(CWD)。
有些job还可以看到资源用量信息,包括CPU time, MEM, SWAP等。
对于PEND状态的job,我们则可以额外获取“PENDING REASONS”这一重要信息。
Openlava的用户经常有这种困惑,为什么我的job投递出去,但是总是PEND的状态跑不起来?一般而言常见的PEND原因无非以下几种:
- Limits on the number of job slots that are configured for a queue, a host, or a user
运行job的数目达到了queue设置的上限。
- Availability of the specified resources
没有机器满足指定的资源条件。
- Job dependency and pre-execution conditions
Job的依赖关系不被满足。
- Relative priority to other users and jobs
优先级低。
- Start time that is specified by the user when the job is submitted
用户指定了job开始时间(开始时间之前都是PEND的状态)
- Load conditions on qualified hosts
不满足机器上的载入条件。
- Dispatch windows during which the queue can dispatch and qualified hosts can accept jobs
queue设置了调度时间窗口,调度窗口之内job都是PEND的状态。
- Run windows during which jobs from the queue can run
queue设置了运行时间窗口,时间窗口之外job都是PEND的状态。