IBM LSF理解作业的状态

集群管理 0 1813 张长瑞 收藏

使用bjobs命令来显示当前作业的状态。

正常的作业状态

大多数的作业会是如下的三种状态:

==================================================================

作业状态 描述

------------------------------------------------------------------

PEND 在队中等待派发或调度

------------------------------------------------------------------

RUN 已经被派发并且运行

------------------------------------------------------------------

Done 正常运行完毕,退出值为0

==================================================================

挂起作业的状态

如果一个作业被挂起,它会是如下的三种状态:

==================================================================

作业状态 描述

------------------------------------------------------------------

PSUSP 作业是被用户自己或LSF管理员在PEND状态时指定挂起的

------------------------------------------------------------------

USUSP 作业是被用户自己或LSF管理员在派发后指定挂起的

------------------------------------------------------------------

SSUSP 作业是被LSF系统在派发后指定挂起的

==================================================================

状态变换

一个作业会经过一系列的状态变换,最终或是被成功完成,或是失败,或是被终止;下图中标识出了作业在其生命周期内所有可能的状态。

LSF-admin1.jpg

挂起的作业

作业会一直处于挂起状态,直到所有的执行条件满足。下列就是其中一些条件:

¤用户在提交作业时所指定的起始时间
¤ 能够运行该作业的节点的负载情况
¤ 派发窗口,队列可以在这个指定的时间内向适合的节点派发作业
¤ 运行窗口,队列可以在这个指定的时间内运行起作业
¤ 在队列、节点或用户上所定义的作业槽使用数量的限制
¤相对于其他用户与队列的优先级
¤运行所需要资源的可用情况
¤ 作业的依赖关系以及作业的前处理条件

最大的挂起作业阀值

如果用户或用户组向LSF提交的作业挂起作业阀值,LSF会拒绝这个用户或用户组的再次提交作业的请求。挂起作业的阀值是在lsb.users文件中的user段定义的,或是在lsb.params文件中定义的。

系统会自动每隔SUB_TRY_INTERVAL时间间隔向LSF提交作业请求,并会持续尝试LSB_NTRIES次。 SUB_TRY_INTERVAL是在lsb.params文件中定义的,LSB_NTRIES则是一个环境变量。如果没有过定义LSB_NTRIES且LSF拒绝接收作业的提交,那么系统的默认动作是不停的尝试下去。

挂起作业

作业可能在任何时候被挂起。作业可能是被用户自己,或是LSF管理员,或是Root超级用户,以及LSF挂起。

在一个作业被派发到一个节点上启动运行后,它可能被LSF挂起。在一个作业运行时,LSF会定时检查运行节点的负载情况,如果有的负载值超过了在节点或队列上所定义的阀值,那么该节点上优先级最低的批处理作业将会被挂起。

如果执行节点或执行节点组的负载过高,可能是批处理作业之间互相干扰或是批处理作业与交互式作业互相干扰,那么就需要把一部分作业停下来,从而保证系统的效率,或保证交互式任务的响应速度。

LSF根据作业所属队列的优先级来决定挂起哪个作业。当一个节点忙时,LSF首先会挂起优先级最低的作业,除非是与其相关的调度策略不同意。作业也可能是由于当前不是队列的运行窗口中的运行时间,从而被LSF挂起。系统挂起的作业,在负载下降到足够低的时候或是又到了运行窗口时间内,LSF会自动恢复这些挂起的作业。

“捆作业”中作业的WAIT(等待)状态

如果你定义了“捆作业”队列,那么使用bjobs命令则会显示其中正在等待运行的作业为WAIT。使用bqueues或busers命令会统计挂起的作业,而处于WAIT状态的作业也会统计在其内。即便是整个“捆作业”已经被派发了并占有一个作业槽,WAIT状态的作业还是要被统计在内的。使用bhosts命令时,会在NJOBS列上显示节点上所运行作业的个数,而整个“捆作业”只会占用一个作业槽。

你可以使用bswitch(转移命令)或bmig(迁移命令)把处于WAIT状态的作业调整到其他的队列中去。

退出的作业

一个退出作业,在其结束时是以一个非零值为其退出状态的。

作业的异常终止退出可能是由于多种原因造成的,作业终止也可能在任何状态发生。一个异常终止的作业会被标记为EXIT。下列的条件将有可能导致作业的异常退出:

¤作业在队列中待发时或是已经被派发到节点上后,被用户自己或是LSF管理员取消;
¤作业还没有来得及被派发就已经到达了其最后期限,LSF会自动取消它;
¤作业不能成功启动,例如,用户在提交作业时指定了错误的执行代码;
¤应用程序的退出码为非零值。

你可以在节点上设置作业退出异常,LSF就会定期自动监测作业退出异常并作相应的处理。

后处理状态

有些作业的状态不能算是完成,只有到其相关的后处理也执行完毕,作业才能算是完成。举例来说,有的作业可能需要从其后处理的脚本中完成退出动作,有的作业可能需要清理作业文件,还有的作业在完成时需要把作业的输出结果传送到其他地方等等。

DONE和EXIT状态并不代表作业的后处理已经完成,所以有依赖关系的作业此时启动可能还是为时过早。在使用bsub –w命令来提交有依赖关系的作业时,请使用post_done和post_err关键字来指定相关的作业后处理动作。相对应的作业的POST_DONE和POST_ERR状态代表的是后处理的完成状态。

一旦作业完成了,你就不能使用任何作业控制命令来管理后处理动作了。后处理的结果也不汇报给LSF。


相关推荐:

网友留言:

您需要 登录账户 后才能发表评论

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码