目录
LSF使用bsub -R指定满足资源需求的主机来运行作业,资源需求字符串用于描述作业需要的资源。LSF资源需求字符串包括:select、order、rusage、span、same、cu和affinity等部分,每个部分都有不同的语法。这里我们只讨论资源使用字符串rusage。
rusage定义了作业的预期资源使用情况,它用于为作业指定预留资源,或者在运行交互式作业时将作业映射到主机并调整负载。
缺省情况下,LSF不为任何作业预留资源。因此,如果在同一台机器上运行的第二个作业没有任何内存限制或资源需求,调度器就无法阻止该作业消耗为第一个作业“保留”的资源。
如果rusage部分包含非消耗性资源,LSF将拒绝资源需求字符串。
基本语法
rusage[usage_string [, usage_string][|| usage_string] ...]
这里usage_string语法如下:
load_index=value [:load_index=value]... [:duration=minutes[m] | :duration=hours[h] | :duration=seconds[s] [:decay=0 | :decay=1]]
说明:默认单位为分钟。若要使用小时或秒作为单位,请在持续时间值后面加“h”或“s”。例如,duration=30表示30分钟,duration=30m也表示30分钟,duration=30h表示30小时,duration=30s表示30秒。
每个部分都必须键入方括号。每个资源需求部分之间必须有一个空格。
例如:
bsub -R "rusage[mem=100] || rusage[swap=100]" myjob
rusage字符串中的多个阶段允许不同的时间段有不同的资源预留需求。除最后阶段外的所有阶段的持续时间都必须指定,而衰减率都是可选的,如果省略,则假定为0。如果可选的最终持续时间为空,则最终资源需求将一直应用到作业完成。
示例
以下作业请求20M内存,并占用1个license 2分钟:
bsub -R "rusage[mem=20, license=1:duration=2]" myjob
以下作业需要20M的内存和50M的交换空间,持续1小时,同时需要1个license,持续2分钟:
bsub -R "rusage[mem=20:swp=50:duration=1h, license=1:duration=2]" myjob
以下作业请求50M的交换空间,并在2小时内线性减少预留量,同时需要1个license,持续2分钟:
bsub -R "rusage[swp=50:duration=2h:decay=1, license=1:duration=2]" myjob
下面的作业请求两个持续时间相同但衰减不同的资源:
bsub -R "rusage[mem=20:duration=30:decay=1, lic=1:duration=30]" myjob
在下面的示例中,同一个应用程序存在两个版本:1.5和2.0.1,app_lic_v15是1.5版本的license资源,app_lic_v201是2.0.1版本的license资源。
例1:提交使用app_lic_v201资源的作业:
bsub -R "rusage[app_lic_v201=1]" myjob
例2:优先尝试使用应用程序的2.0.1版本,如果没有,则尝试使用版本1.5:
bsub -R "rusage[app_lic_v201=1 || app_lic_v15=1]" myjob
如果不同版本的应用程序需要不同的系统资源,您可以在rusage字符串中指定其他资源。例如:要提交一个作业,app_lic_v15使用20M内存,app_lic_v201使用20M内存和50M交换空间:
bsub -R "rusage[mem=20:app_lic_v15=1 || mem=20:swp=50:app_lic_v201=1]" myjob
可以指定一个阈值,在进行分配之前所消耗的资源必须达到该阈值。例如:
bsub -R "rusage[bwidth=1:threshold=5]" myjob
资源预留方法
通过在数值后面使用/job、/host或/task关键字在资源使用字符串中指定资源预留方法,只能为消耗性资源指定资源预留方法。资源预留方式如下:
value/job
per-job资源预留。
value/host
per-host 资源预留。
value/task
per-task资源预留
语法:
resource_name=value/method:duration=value:decay=value
例如:
rusage[mem=10/host:duration=10]
表示指定在每一台执行机请求预留10M的memory,持续时间10分钟。
多阶段资源预留
rusage字符串中的多个阶段允许不同的时间段有不同的资源需求。除最后阶段外的所有阶段的持续时间都必须指定,而衰减率都是可选的,如果省略,则假定为0。如果可选的最终持续时间为空,则最终资源需求将一直应用到作业完成。
多阶段资源预留不可以增加资源,但可以指定在多个时间段内固定或减少资源预留。
多阶段memory资源语法:
rusage[multi_usage_string [, usage_string]...]
这里multi_usage_string是:
mem=(v1 [v2 … vn]):[duration=(t1 [t2 … tm])][:decay=(d1 [d2... dk])]
多阶段语法可以用于单阶段内存资源需求,也可以用于多个阶段。
多阶段资源预留不能随着时间的推移而增加。从一个阶段到下一个阶段的资源保留增加的作业提交将被拒绝。
例如:
bsub -R"rusage[mem=(200 300):duration=(2 3)]" myjob
指定内存预留从200M增加到300M,该作业将被拒绝。
提示:当使用多阶段mem资源预留需求时,可以为单阶段资源单独指定持续时间。
以下作业使用多阶段rusage字符串,第一阶段请求50M的内存,持续10分钟,第二阶段请求10M的内存:
bsub -R "rusage[mem=(50 10):duration=(10):decay=(0)]" myjob
以上所述是LSF提交作业rusage的一个简单的使用说明。更详细的文档可以参考官方文档:
欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。