资源管理
以下新功能会影响资源管理和分配。
强制实施作业内存限制时排除交换阈值
使用 lsf.conf 文件中的 LSB_MEMLIMIT_ENF_CONTROL 参数指定强制实施作业内存限制的行为时,现在可以排除交换阈值并仅指定内存阈值。
要排除交换阈值,请在 lsf.conf 文件的 LSB_MEMLIMIT_ENF_CONTROL 参数中为交换阈值指定值 0 :
LSB_MEMLIMIT_ENF_CONTROL=<内存阈值>:0:<检查间隔>:[all]
设置硬内存限制,而不是按进程 (软) 内存限制
使用 bsub -M 命令选项为属于作业的所有进程设置内存限制时,缺省情况下, LSF 会设置每个进程的软内存限制。 这意味着当作业超过内存限制时, LSF 会将内存限制传递到操作系统。 支持 RUSAGE_RSS for setrlimit() 函数的 UNIX 操作系统可以将内存限制应用于每个进程。
现在,您可以禁用此功能,并通过将感叹号 (!) 添加到使用 bsub -M 命令选项指定的内存限制末尾,强制 LSF 在作业超过内存限制时立即终止该作业:
bsub -M内存限制 [!]
如果指定感叹号,那么内存限制是硬限制,并且 LSF 会在作业超过此硬内存限制时立即终止该作业,并且不会等待达到主机内存和交换阈值。
在 rusage 字符串中指定资源预留方法
现在,您可以在作业,应用程序或队列级别指定资源保留方法,方法是在 bsub -R 选项中的资源使用情况 (rusage) 字符串中指定该方法,或者在 lsb.applications 或 lsb.queues 文件中的 RES_REQ 参数中指定该方法。 现在,还可以通过在 bsub -gpu 选项中,在 lsb.applications 或 lsb.queues 文件中的 GPU_REQ 参数中或在 lsf.conf 文件中的 LSB_GPU_REQ 参数中指定方法来指定 GPU 资源保留方法。 先前,只能通过在 lsb.resources 文件的 ReservationUsage 部分中指定 METHOD 参数来指定全局级别的资源预留方法。 作业级别的资源预留值和方法将覆盖应用程序级别的值和方法,这将覆盖队列级别的值和方法,这将覆盖集群级别的值和方法。
通过在 rusage 字符串中的数字值后使用 /task, /job或 /host 关键字或者通过在 GPU 需求字符串中使用 /task 或 /host 关键字来指定资源预留方法。 只能为可使用的资源指定资源预留方法。 按如下所示指定资源预留方法:
- value/task
指定指定资源的每个任务预留。 这相当于在 lsb.resources 文件的 ReservationUsage 部分中为 METHOD 参数指定 PER_TASK 。
- value/job
指定指定资源的每个作业保留。 这相当于在 lsb.resources 文件的 ReservationUsage 部分中为 METHOD 参数指定 PER_JOB 。 不能在 GPU 需求字符串中指定每个作业的预留。
- value/host
指定指定资源的按主机保留。 这相当于在 lsb.resources 文件的 ReservationUsage 部分中为 METHOD 参数指定 PER_HOST 。
- RES_REQ="rusage[mem=10/job:duration=10:decay=0]"
- RES_REQ="rusage[mem=(50 20)/task:duration=(10 5):decay=0]"
- GPU_REQ="num=2/task:mode=shared:j_exclusive=yes"
在候选主机上的可用资源之间分割并行作业的任务
现在,您可以启用 LSF 以将并行作业的任务分割到候选主机的可用资源中。
通过在 bsub -R 选项的资源需求的 span 字符串中或在 lsb.applications 或 lsb.queues 文件的 RES_REQ 参数中使用 stripe 关键字来启用作业条带分割。 作业级别的 span 字符串将覆盖应用程序级别的 span 字符串,这将覆盖队列级别的 span 字符串。 可以通过为 stripe 关键字指定数字来限制分配给候选主机的最大任务数。
- span[stripe]
- span[stripe=2]