LSF“订单”资源字符串

时间:2015-03-24 20:51:54

标签: linux lsf

我试图使用

向LSF中使用最少的机器提交作业
bsub -R "order[ut]"

它按预期工作,但所有作业(背靠背提交)最终都在同一主机(最少使用的主机)中,从而大量加载机器,最终导致作业性能不佳。有没有办法将连续提交的作业分散到最少使用的机器上?或者找出机器上使用了多少个插槽的方法?

1 个答案:

答案 0 :(得分:0)

很难根据你的描述肯定地说,但我的猜测是你所看到的是由LSF的调度周期的性质引起的影响。以下是关于订单字符串的LSF文档的摘录:

http://www-01.ibm.com/support/knowledgecenter/SSETD4_9.1.3/lsf_admin/order_string.dita

  

假设主机h1存在于群集中并且具有110个消耗品单元   资源'res'而主机h2有20个这个资源('res'可以是   例如,新的批量内置资源槽。假设这两个   作业正在等待并由调度程序在相同的调度中考虑   循环,job1将首先安排:

     

Job1:bsub -R“maxmem> 1000”-R“order [res] rusage [res = 100]” - q q1   睡10000(

)      

Job2:bsub -R“mem< 1000”-R“order [res] rusage [res = 10]”-q q2 sleep   10000

     

在调度周期的早期,候选主机列表由构建   获取群集中的所有主机或任何主机中列出的主机   询问主机列表(-m)并按顺序部分对它们进行排序   资源需求字符串。假设有序的候选主机列表   在订购后,工作看起来像这样:

     

Job1:{h1,h7,h4,h10}

     

Job2:{h1,h2}

     

这意味着h1最终成为候选主机的最高“res”主机   两份工作清单。在以后的调度中,每个作业都会逐个进行   分配要运行的主机和来自这些主机的资源。

     

假设Job1计划登陆主机h1,因此将会   分配100'res'。然后当考虑Job2时,它也可能是   计划登陆主机h1,因为它的候选主机列表仍然存在   看起来一样。也就是说,它没有考虑到100'res'   在同一个调度周期内分配给Job1。

简而言之,您要同时提交一堆作业,并要求资源“ut”对候选主机进行排序,但在一个调度周期内,主机不会重新排序,因为作业已安排到它们。如果您将作业提交的时间隔开,使得每个作业都在不同的周期中进行安排,您会看到作业被分派到不同的主机。

现在,该文档的页面还继续描述如何强制LSF在每个作业的循环内重新排序主机,这可以通过简单地添加'!'来完成。在订单字符串中:

bsub -R "order[!ut]"

我警告你,如果你的集群中有很多工作,这可能会大大减慢调度速度。

此外,我不是100%确定这是否适用于资源'ut'(因为它的值不会随着作业的安排而改变),你可能想尝试内置资源'slots'我相信最新版本中添加了:

bsub -R "order[!slots]"

修改

我的几位同事想出了另一种方法来解决这种行为而不使用'!' order字符串中的表示法,即将JOB_ACCEPT_INTERVAL中的lsb.params参数设置为1。

这样做会强制分配给每个特定主机的每分钟1个作业,这将为ut资源提供时间来刷新和平衡主机间的工作量。