作业限制的工作方式

JOBS 参数限制可供资源使用者使用的正在运行或暂挂作业的最大数目。 根据 RUN , SSUSP 和 USUSP 状态中的作业数来实施限制。

停止和恢复作业

使用 bstop停止的作业进入 USUSP 状态。 LSF 在正在运行的作业计数中包含 USUSP 作业,因此暂挂作业时, JOBS 限制的使用不会更改。

恢复已停止的作业 (bresume) 会将作业状态更改为 SSUSP。 如果未超过 JOBS 限制,那么作业可以进入 RUN 状态。 在恢复作业之前降低 JOBS 限制可以超过 JOBS 限制,并防止 SSUSP 作业进入 RUN 状态。

例如, JOBS=5和 5 作业正在集群中运行 (JOBS 已达到 5/ 5)。 normally. 停止的作业 (处于 USUSP 状态) 可以稍后恢复并开始运行,返回到 RUN 状态。 如果在恢复作业之前将 JOBS 限制重新配置为 4 ,那么 JOBS 使用率将变为 5/4 ,并且作业无法运行,因为已超过 JOBS 限制。

预占

JOBS 限制不会阻止基于作业槽的抢占。 例如,如果 JOBS=2,并且主机已在抢占队列中运行 2 个作业,那么即使已达到 JOBS 限制,新的抢占作业也可以抢占该主机上的作业。

预留和回填

预留和回填仍在作业槽级别进行,但尽管已满足槽预留,但作业最终可能无法运行,因为已达到 JOBS 限制。

其他作业

  • brun 强制暂挂作业立即在指定的主机上运行。 强制与 brun 一起运行的作业被视为正在运行的作业,这可能违反 JOBS 限制。 强制作业启动后,可能会超出 JOBS 限制。
  • 重新排队的作业brequeue) 被指定为 PEND 状态或 PSUSP。 JOBS 限制的使用量会根据重新排队的作业数量而减少。
  • 使用 brestart 重新启动的检查点作业将根据现有作业的检查点启动新作业。 新作业能否运行取决于应用于作业的限制策略 (包括 JOBS 限制)。 例如,如果对在已达到 JOBS 限制的主机上运行的作业执行检查点操作,然后重新启动该作业,那么重新启动的作业无法运行,因为已达到 JOBS 限制。
  • 对于作业数组,您可以定义在任何给定时间可以在数组中运行的最大作业数。 与其他资源分配限制一样, JOBS 限制与数组限制结合使用。 例如,如果 JOBS=3 且数组限制为 4 ,那么最多可以在数组中运行 3 个作业元素。
  • 对于区块作业,只有在区块中一起分派的作业中正在运行的作业才会计入 JOBS 限制。 处于 WAIT 状态的作业不会影响 JOBS 限制使用。

示例限制配置

在由 开始限制结束限制括起的 限制 部分中定义了每组限制。

示例 1

user1限制为 2 个作业槽hostAuser2队列中的作业normal限制为 20 MB 内存:

Begin Limit
NAME    HOSTS     SLOTS  MEM   SWP  TMP   USERS       QUEUES
Limit1  hostA     2      -      -    -    user1       -
-       -         -      20     -    -    user2       normal
End Limit

示例 2

为用户设置作业槽限制 2user1将作业提交到队列normal在主机上hosta对于所有项目,但对于项目的所有队列和主机只有一个作业槽test:

Begin Limit
HOSTS  SLOTS  PROJECTS   USERS     QUEUES
hosta  2         -       user1     normal
  -    1      test       user1       -   
End Limit

示例 3

用户组中的所有用户ugroup1除外user1使用queue1queue2以及在主机组中的主机上运行作业hgroup1限制为每个主机上每个处理器的 2 个作业插槽:

Begin Limit
NAME          = limit1
# Resources:
SLOTS_PER_PROCESSOR = 2
#Consumers:
QUEUES       = queue1 queue2
USERS        = ugroup1 ~user1
PER_HOST     = hgroup1
End Limit

示例 4

user1user2可以使用限制为 20 MB 可用内存的集群中的所有队列和所有主机:

Begin Limit
NAME  = 20_MB_mem 
# Resources:
MEM   = 20
# Consumers:
USERS = user1 user2
End Limit

示例 5

用户组中的所有用户ugroup1可以使用queue1queue2并在主机组中的任何主机上运行作业hgroup1共享 10 个作业槽:

Begin Limit
NAME   = 10_slot 
# Resources:
SLOTS  = 10
#Consumers:
QUEUES = queue1 queue2
USERS  = ugroup1
HOSTS  = hgroup1
End Limit

示例 6

用户组中的所有用户ugroup1除外user1可以使用所有队列,但queue1并运行主机组中每个主机上的可用内存限制为 10% 的作业hgroup1:

Begin Limit
NAME     = 10_percent_mem
# Resources:
MEM      = 10%
QUEUES   = all ~queue1
USERS    = ugroup1 ~user1
PER_HOST = hgroup1
End Limit

示例 7

限制用户develop组到每个主机上的 1 作业,以及主机上内存的 50%。

Begin Limit
NAME = develop_group_limit
# Resources:
SLOTS = 1
MEM = 50%
#Consumers:
USERS = develop
PER_HOST = all
End Limit

示例 8

将所有主机限制为每个处理器的 1 作业插槽:

Begin Limit
NAME                = default_limit
SLOTS_PER_PROCESSOR = 1
PER_HOST            = all
End Limit

示例 9

short 队列最多可以有 200 个正在运行和已暂挂的作业:

Begin Limit
NAME     = shortq_limit
QUEUES   = short
JOBS     = 200
End Limit