了解 LSF 作业生命周期。 使用 bsub 将作业提交到队列,并指定作业提交选项以修改默认作业行为。 提交的作业在队列中等待,直到将它们调度并分配到主机上来执行。 在作业分发时,LSF 会检查哪些主机有资格运行该作业。
一、作业生命周期
LSF 作业会经历几种状态,从作业提交开始,到分发,执行和最终返回作业结果。
1. 提交一个作业
您可以使用 bsub 命令从 LSF 客户端或服务器提交作业。
如果在提交作业时未指定队列,则该作业将提交到默认队列。
作业在等待调度时被排在队列中。 等待的作业处于 PEND 状态。 如果在配置文件lsb.params中定义了 MAX_INFO_DIRS 参数,则该作业将保存在 LSF_SHAREDIR/cluster_name/logdir/info/ 目录中的作业文件中,或者在其子目录之一中。
-
作业 ID
提交作业时,LSF 为每个作业分配唯一的作业 ID。
-
作业名
您还可以使用 bsub的 -J 选项为作业分配一个任意名称。 与作业 ID 不同,作业名称不一定是唯一的。
2. 调度该作业
-
主批处理守护程序(mbatchd)查看队列中的作业,然后将要调度的作业,发送到主批处理调度程序守护程序(mbschd)。 作业以预设的时间间隔进行调度(由配置文件 lsb.params 中的参数 JOB_SCHEDULING_INTERVAL 定义)。
-
mbschd 根据以下内容评估作业并制定计划决策:
-
作业优先级
-
调度策略
-
可用资源
-
-
mbschd 选择作业可以运行的最佳主机,并将其决策发送回 mbatchd。资源信息由主负载信息管理器(LIM)以预设的时间间隔,从服务器主机上的 LIM 上收集。 主 LIM 将此信息传达给 mbatchd,后者又将其传达给 mbschd 以支持调度决策。
3. 分配该作业
mbatchd 收到调度决策后,便立即将作业分配给主机。
4. 运行该作业
从属批处理守护程序(sbatchd)具有以下功能:
-
从 mbatchd 接收请求。
-
为作业创建一个子 sbatchd 。
-
创建执行环境。
-
通过使用远程执行服务器(res)启动作业。
LSF 将执行环境从提交主机复制到执行主机:
-
作业所需的环境变量
-
作业开始运行的工作目录
-
其他与系统有关的环境设置
-
在 UNIX 和 Linux 上,资源限制和 umask
-
在 Windows,桌面和 Windows 根目录
作业在提交该作业的用户帐户下运行,并且状态为 RUN。
-
-
5. 返回结果
作业完成后,如果作业完成没有任何问题,则会被分配为 "DONE" 状态。 如果错误导致作业无法完成,则会为该作业分配 "EXIT" 状态。
sbatchd 传递作业信息,例如错误信息,并输出到 mbatchd。
6. 向客户发送 email
mbatchd 通过电子邮件将作业输出,作业错误和作业信息返回给提交主机。 使用 bsub 的 -o 和 -e 选项将作业输出和错误发送到文件。
作业报告通过电子邮件发送给 LSF 客户端,其中包括以下信息:
-
作业信息:
-
CPU 使用
-
内存使用
-
提交作业的帐户名称
-
-
作业输出
-
错误
二、作业提交
使用 bsub 命令在命令行上提交作业。 您可以使用 bsub 命令指定许多选项来修改默认行为。 作业必须提交到队列中。
队列
队列代表一组挂起等待的作业,它们按定义的顺序排列,并等待其使用资源的机会。 队列执行不同的作业调度和控制策略。
队列有以下特征:
-
优先级
-
名称
-
队列限制 (对主机、作业数、用户、组、或者处理器的限制)
-
标准 UNIX 和 Linux 限制(内存,交换,进程,CPU)
-
调度策略
-
管理员
-
运行条件
-
负载共享阈值条件
-
UNIX nice 值 (设置 UNIX 和 Linux 调度程序优先级)
队列优先级
定义搜索队列,以确定要处理的作业的顺序。 LSF 管理员为队列分配了优先级,其中数值越高,优先级越高。 LSF按从高到低的优先级为队列提供服务。 如果多个队列具有相同的优先级,则 LSF 按照先来先服务的顺序,调度这些队列中的所有作业。
自动队列选择
提交作业时,LSF 会考虑作业要求,并自动从候选默认队列列表中,选择合适的队列。
LSF 根据以下约束条件选择合适的队列:
-
用户访问限制
不允许该用户提交作业的队列,不会予以考虑。
-
节点限制
如果作业明确指定了可以在其上运行作业的主机节点列表,则必须将所选的队列,配置为作业发送到列表中的主机。
-
队列状态
不考虑关闭的队列。
-
排他执行限制
如果作业需要排他执行,则未配置为接受排他作业的队列,将不予考虑。
-
作业所需的资源
作业请求的资源,必须在所选队列的资源分配限制内。
如果多个队列满足上述要求,则选择满足要求的候选队列中,列出的第一个队列。
三、作业调度和分配
提交的作业在队列中等待,直到将它们调度并分配到主机上来执行。
将作业提交给 LSF 时,许多因素控制着作业开始的时间和地点:
-
队列或主机的活动时间窗口
-
作业的资源需求
-
合格主机的可用性
-
各种作业槽位限制
-
作业依赖条件
-
Fairshare 限制(已配置的用户共享策略)
-
负载条件
调度策略
为了解决各种问题,LSF 允许在同一集群中,使用多种调度策略。 LSF 有几种队列调度策略,例如排他,抢占,公平共享和分层公平共享。
-
先来先服务(FCFS)调度:
默认情况下,队列中的作业按 FCFS 顺序分派。 这意味着作业将根据其在队列中的顺序进行调度。
-
服务水平协议(SLA)调度:
LSF 中的 SLA 是 “及时” 的调度策略,用于调度 LSF 管理员和 LSF 用户之间约定的服务。 SLA 调度策略定义应从每个 SLA 运行多少作业,以达到配置的目标。
-
公平共享调度:
如果您为队列指定一个公平共享调度策略,或者如果已配置主机分区,则 LSF 会根据分配的用户份额,资源使用,或其他因素在用户之间调度作业。
-
抢占式调度:
您可以指定所需的行为,以便当两个或多个作业竞争同一资源时,一个作业优先于另一个作业。 抢占不仅适用于作业槽位,而且还适用于提前预订(为特定作业保留主机节点)和许可证(使用 IBM Platform License Scheduler)。
-
回填式调度:
允许小型作业在为其他作业保留的作业槽位上运行,前提是,回填作业在保留时间到期,且资源使用到期之前完成。
调度与分配
定期安排作业(默认为5秒)。 一旦安排了作业,就可以立即将其分配给主机。
为了防止任何节点过载,默认情况下,LSF 在将作业分发到同一节点之间,会等待一小段时间。
分配顺序
作业不一定按提交顺序分派。
定义队列时,每个队列都有一个由 LSF 管理员设置的优先级编号。LSF 会尝试首先从优先级最高的队列中,启动作业。
LSF 按以下顺序考虑要分派的作业:
-
对于每个队列,从最高优先级到最低优先级。 如果多个队列具有相同的优先级,则 LSF 会按照先来先服务(FCFS)的顺序,调度这些队列中的所有作业。
-
对于队列中的每个作业,根据 FCFS 顺序。
-
如果有任何主机有资格运行此作业,将在最合格的主机上启动该作业,并标记该主机不具备启动任何其他作业的资格,直到经过 JOB_ACCEPT_INTERVAL 参数所指定的时间段为止。
四、节点选择
每次 LSF 尝试分配作业时,它都会检查哪些主机有资格运行该作业。
许多条件决定了节点是否符合条件:
-
主机调度窗口
-
作业的资源需求
-
队列的资源需求
-
队列中的节点列表
-
节点负载水平
-
节点的作业槽位限制
-
用户配额与用户限制
只有满足所有条件,主机节点才有资格运行作业。 如果队列中已有一个作业,并且该作业的合格主机可用,则该作业将放置在该主机上。 如果有多个主机符合条件,则根据作业和队列资源要求,在最佳主机上启动作业。
主机负载级别
如果主机的负载索引(例如r1m,pg,mem)的值,在配置的调度阈值之内,则该主机可用。 您可以配置两种调度阈值:主机和队列。 如果主机上的任何负载索引,超过相应的主机阈值或队列阈值,则该主机不符合运行任何作业的条件。
合格的主机
当 LSF 尝试放置作业时,它将获取所有主机的当前负载信息。
将每个主机上的负载级别,与在 lsb.hosts 的 Host 部分中,为该主机配置的调度阈值,以及在 lsb.queues 中配置的按队列调度阈值进行比较。
如果任何负载索引,超过其按队列或按主机调度的阈值,则不会在该主机上启动任何新作业。
五、作业执行环境
当 LSF 运行作业时,它将环境从提交主机,复制到执行主机。
执行环境包括以下信息:
-
作业所需的环境变量
-
作业开始运行的工作目录
-
其他与系统有关的环境设置,例如资源使用限制
共享的用户目录
为了提供透明的远程执行,LSF 命令确定用户的当前工作目录,并在远程主机上使用该目录。
可执行文件和 PATH 环境变量
可执行文件的搜索路径(PATH环境变量),未更改地传递到远程执行主机。
注意
在混合集群中,当用户二进制目录,在不同主机类型上具有相同路径名时,LSF 效果最佳。使用相同的路径名,可使 PATH 变量在所有主机上均有效。
为了便于管理,LSF 配置文件存储在共享目录中。