LSF - 基础 - 管理
在LSF环境下工作
启动、停止与重新配置LSF
使用 LSF 管理命令 lsadmin 和 badmin 来启动和停止 LSF 守护进程,并重新配置集群属性。
两个 LSF 管理命令(lsadmin 和 badmin)
这两个命令只有LSF管理员或root能运行。
要启动和停止 LSF,以及在更改任何配置文件后重新配置 LSF,请使用以下命令:
- lsadmin 命令控制 lim 和 res 守护进程的操作。
- badmin 命令控制 mbatchd 和 sbatchd 守护程序的操作。
使用 cshrc.lsf 和 profile.lsf 设置 LSF 环境
在使用 LSF 之前,您必须使用 cshrc.lsf 或 profile.lsf 文件设置 LSF 执行环境。
步骤
登录到 LSF 主机后,使用以下 shell 环境文件之一来设置 LSF 环境。
在 csh 或 tcsh shell 中,运行 source 命令:
% source <LSF_TOP>/conf/cshrc.lsf
在 sh、ksh 或 bash shell 中运行以下命令:
$ . <LSF_TOP>/conf/profile.lsf
cshrc.lsf 和 profile.lsf 文件是在安装过程中由 lsfinstall 命令创建的,用于设置 LSF 操作环境。
启动集群
使用 lsadmin 和 badmin 命令启动 LSF 守护进程。
步骤
- 以 root 用户身份登录到每个 LSF 服务器主机。
如果您以非 root 用户身份安装了单用户集群,请以主 LSF 管理员身份登录。
从 LSF 管理主机开始,并在所有 LSF 主机上重复这些步骤。 - 使用以下命令启动 LSF 集群:
# bctrld 开始 lim
# bctrld 启动资源
# bctrld 启动 sbd
在使用任何 LSF 命令之前,请等待几分钟,让 lim 守护进程所有主机执行以下操作:
- 相互联系
- 选择管理主机
- 交换初始化信息
停止集群
使用 lsadmin 和 badmin 命令停止 LSF 守护进程。
步骤
- 以 root 用户身份登录到每个 LSF 服务器主机。
如果您以非 root 用户身份安装了单用户集群,请以主 LSF 管理员身份登录。 - 使用以下命令停止 LSF 集群:
# bctrld 停止 sbd 全部
# bctrld stop res all
# bctrld 停止所有
使用 lsadmin 和 badmin 重新配置集群
在更改任何配置文件后,使用 lsadmin 和 badmin 命令重新配置 LSF。
程序
- 以 root 用户身份登录到每个 LSF 服务器主机。
如果您以非 root 用户身份安装了单用户集群,请以主 LSF 管理员身份登录。 - 使用以下命令重新配置 LSF 集群:
重新加载修改后的 LSF 配置文件并重启 lim:
# lsadmin reconfig
重新加载修改后的 LSF 批处理配置文件:
# badmin reconfig
重新加载修改后的 LSF 批处理配置文件并重启 mbatchd:
# badmin mbdrestart
此命令还会读取 LSF_LOGDIR/lsb.events 文件,因此如果有大量作业正在运行,则可能需要一些时间才能完成。
检查LSF状态
使用 LSF 管理命令检查集群配置、查看集群状态以及 LSF 批处理工作负载系统配置和状态。
示例命令输出
本节中显示的 LSF 命令显示了典型输出的示例。您看到的输出可能因您的配置而异。
这些命令被简要描述,以便您可以轻松地使用它们来验证您的 LSF 安装。有关完整的用法和命令选项,请参阅 LSF 命令参考或 LSF 手册页。您可以在任何 LSF 主机上使用这些命令。
如果您从这些命令中获得正确的输出,您的集群就可以使用了。如果您的输出有错误,请参阅疑难解答 LSF 问题以获取帮助。
使用 lsadmin 命令检查集群配置
lsadmin 命令控制 LSF 集群的操作并管理 LSF 守护进程 lim 和 res。
使用 lsadmin ckconfig 命令检查 LSF 配置文件。 -v 选项显示有关 LSF 配置的详细信息:
以下输出中显示的消息是 lsadmin ckconfig -v 的典型消息。其他消息可能表明您的 LSF 配置存在问题。
% lsadmin ckconfig -v
Checking configuration files ...
EGO 3.6.0 build 800000, Jul 25 2017
Copyright International Business Machines Corp. 1992, 2016.
US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
binary type: linux2.6-glibc2.3-x86_64
Reading configuration from /opt/lsf/conf/lsf.conf
Aug 3 13:45:27 2017 20884 6 3.6.0 Lim starting...
Aug 3 13:45:27 2017 20884 6 3.6.0 LIM is running in advanced workload execution mode.
Aug 3 13:45:27 2017 20884 6 3.6.0 Master LIM is not running in EGO_DISABLE_UNRESOLVABLE_HOST mode.
Aug 3 13:45:27 2017 20884 5 3.6.0 /opt/lsf/10.1/linux2.6-glibc2.3-x86_64/etc/lim -C
Aug 3 13:45:27 2017 20884 7 3.6.0 Could not construct product entitlement version array
Aug 3 13:45:27 2017 20884 Last message repeated 1 time(s).
Aug 3 13:45:27 2017 20884 6 3.6.0 initEntitlement: EGO_AUDIT_MAX_SIZE was not set. Default value <100> will be used.
Aug 3 13:45:27 2017 20884 6 3.6.0 initEntitlement: EGO_AUDIT_MAX_ROTATE was not set. Default value <20> will be used.
Aug 3 13:45:27 2017 20884 6 3.6.0 LIM is running as IBM Spectrum LSF Standard Edition.
Aug 3 13:45:27 2017 20884 6 3.6.0 reCheckClass: numhosts 1 so reset exchIntvl to 15.00
Aug 3 13:45:27 2017 20884 6 3.6.0 Checking Done.
---------------------------------------------------------
No errors found.
使用 lsid 和 lsload 命令检查集群状态
lsid 命令会告诉您 LSF 环境是否设置正确。 lsload 命令显示集群的当前负载级别。
lsid 命令
lsid 命令显示集群的当前 LSF 管理主机的当前 LSF 版本号、集群名称和主机名。
lsid 命令显示的 LSF 管理主机名可能会有所不同,但通常是在 LSF_CONFDIR/lsf.cluster.cluster_name 文件的 Hosts 部分中配置的第一个主机。
% lsid
IBM Spectrum LSF Standard 10.1.0.0, Apr 04 2016
Copyright International Business Machines Corp, 1992-2016.
US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
My cluster name is cluster1
My master name is hosta
如果您看到如下消息
Cannot open lsf.conf file
LSF_ENVDIR 环境变量可能设置不正确。使用 cshrc.lsf 或 profile.lsf 文件来设置您的环境。有关更多帮助,请参阅 LSF 问题疑难解答。
lsload 命令
lsload 命令的输出包含集群中每台主机的一行。集群中的所有主机都处于正常状态。
% lsload
HOST_NAME status r15s r1m r15m ut pg ls it tmp swp mem
hosta ok 0.0 0.0 0.1 1% 0.0 1 224 43G 67G 3G
hostc -ok 0.0 0.0 0.0 3% 0.0 3 0 38G 40G 7G
hostf busy *6.2 6.9 9.5 85% 1.1 30 0 5G 400G 385G
hosth busy 0.1 0.1 0.3 7% *17 6 0 9G 23G 28G
hostv unavail
对于负载指数超出其配置阈值的主机,将显示繁忙状态。星号 (*) 标记超出阈值的负载索引,导致主机状态为忙碌。值 ok 前面的减号 (-) 表示 res 未在该主机上运行。
如果您在启动或重新配置 LSF 后看到以下消息之一,请等待几秒钟,然后再次尝试 lsload 命令,以便让所有主机上的 lim 守护程序有时间进行初始化。
lsid: getentitlementinfo() failed: LIM is down; try later
或
LSF daemon (LIM) not responding ... still trying
如果问题仍然存在,请参阅对 LSF 问题进行故障排除以获取帮助。
其他有用的命令
bparams 命令显示有关 LSF 批处理系统配置参数的信息。
bhist 命令显示有关作业的历史信息。
使用 badmin 检查 LSF 批处理系统配置
badmin 命令控制和监视 LSF 批处理工作负载系统的操作。
使用badmin ckconfig 命令查看LSF 批处理系统配置文件。 -v 选项显示有关配置的详细信息:
以下输出中的消息是典型的 badmin ckconfig -v。其他消息可能表明您的 LSF 批处理工作负载系统配置存在问题。
% badmin ckconfig -v
Checking configuration files ...
Dec 20 12:22:55 2015 20246 9 9.1.3 minit: Trying to call LIM to get cluster name
...
Dec 20 12:22:55 2015 20246 9 9.1.3 Batch is enabled
Dec 20 12:22:55 2015 4433 9 9.1.3 Checking Done
---------------------------------------------------------
No errors found.
使用 bhosts 和 bqueue 找出批处理系统状态
使用 bhosts 命令查看 LSF 批处理工作负载系统是否正常运行。 bqueues 命令显示可用队列的状态及其配置参数。
要使用 LSF 批处理命令,集群必须已启动并正在运行。有关启动 LSF 守护程序的信息,请参阅启动集群。
bhosts 命令
bhosts 命令显示集群中 LSF 批处理服务器主机的状态,以及有关批处理主机的其他详细信息:
- 单个用户允许的最大作业slot数
- 系统中的作业总数、正在运行的作业、被用户挂起的作业、被系统挂起的作业
- 预留作业slot总数
集群中所有主机的正常状态正常。
% bhosts
HOST_NAME STATUS JL/U MAX NJOBS RUN SSUSP USUSP RSV
hosta ok - - 0 0 0 0 0
hostb ok - - 0 0 0 0 0
hostc ok - - 0 0 0 0 0
hostd ok - - 0 0 0 0 0
如果您在启动或重新配置 LSF 时看到以下消息,请等待几秒钟并再次尝试 bhosts 命令,以便为 mbatchd 守护进程提供时间进行初始化。
batch system daemon not responding ... still trying
bqueues 命令
LSF 队列组织具有不同优先级和不同调度策略的作业。
bqueues 命令显示可用队列的状态及其配置参数。对于接受和分派作业的队列,状态必须为 Open:Active。
% bqueues
QUEUE_NAME PRIO STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SUSP
owners 43 Open:Active - - - - 0 0 0 0
priority 43 Open:Active - - - - 0 0 0 0
night 40 Open:Inact - - - - 0 0 0 0
chkpnt_rerun_qu 40 Open:Active - - - - 0 0 0 0
short 35 Open:Active - - - - 0 0 0 0
license 33 Open:Active - - - - 0 0 0 0
normal 30 Open:Active - - - - 0 0 0 0
idle 20 Open:Active - - - - 0 0 0 0
要查看更详细的队列信息,请使用 bqueues -l 命令:
% bqueues -l normal
QUEUE: normal
-- For normal low priority jobs, running only if hosts are lightly loaded. This is the default queue.
PARAMETERS/STATISTICS
PRIO NICE STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SSUSP USUSP RSV
30 20 Open:Active - - - - 0 0 0 0 0 0
Interval for a host to accept two jobs is 0 seconds
SCHEDULING PARAMETERS
r15s r1m r15m ut pg io ls it tmp swp mem
loadSched - - - - - - - - - - -
loadStop - - - - - - - - - - -
SCHEDULING POLICIES: FAIRSHARE NO_INTERACTIVE
USER_SHARES: [default, 1]
USERS: all
HOSTS: all
bqueues -l 命令显示有关队列的以下种类的信息:
- 什么样的作业要在队列上运行
- 资源使用限制
- 能够使用队列的主机和用户
- 调度阈值:
- loadSched 是 LSF 自动停止调度作业的阈值
- loadStop 是 LSF 自动挂起作业的阈值
跑lsf job
使用 bsub 和 lsrun 命令通过 LSF 运行作业。使用 bjobs 命令查看作业的状态。使用 bstop、bresume 和 bkill 命令控制作业执行。
使用 bsub 和 lsrun 运行 LSF 作业
使用两个基本命令通过 LSF 运行作业:
- bsub 将作业提交给 LSF 批处理调度程序。 LSF 根据您在 LSF 队列中配置的调度策略来调度和分派作业到最佳可用主机。
- lsrun 命令根据 lim 守护程序收集的当前系统负载信息,在最佳可用主机上运行交互式任务。
对于大多数作业,您需要做的就是在您通常使用的作业命令前添加 lsrun 或 bsub 命令。您通常不需要修改可执行应用程序或执行脚本。
使用 bsub 提交批处理作业
bsub 命令将作业提交到 LSF 批处理调度队列。
以下命令将sleep命令作业提交到默认队列(正常):
% bsub sleep 60
Job <3616> is submitted to default queue <normal>.
当一个作业提交到 LSF 时,它会被分配一个唯一的作业 ID,在本例中为 3616。
您可以在 bsub 命令上指定范围广泛的作业选项。例如,您可以指定一个队列,而作业命令 sleep 60 是最后一个选项:
% bsub -q short sleep 60
Job <3628> is submitted to queue <short>.
LSF 如何处理作业输出
默认情况下,当作业完成时,LSF 会向提交作业的用户帐户发送带有作业报告和任何输出和错误消息的电子邮件。您可以选择使用 -o 和 -e 选项将标准输出和标准错误保存到文件中。
以下命令将作业的标准输出和标准错误附加到 user1 的主目录的作业子目录中的文件 output.3640 和 errors.3640。
% bsub -q short -o /home/user1/job/output.%J -e /home/user1/job/errors.%J ls -l
Job <3640> is submitted to queue <short>.
创建文件时,%J 变量由作业 ID 替换。当您运行大量作业时,使用 %J 可帮助您找到作业输出。
使用 bsub -I 的交互式批处理作业
要通过 LSF 提交交互式作业,请使用 -I 选项:
以下命令提交一个批处理交互式作业,该作业显示 ls 命令的输出:
% bsub -I ls
要使用伪终端提交批处理交互式作业,请使用 bsub -Ip 选项。
要提交批处理交互式作业并创建支持 shell 模式的伪终端,请使用 bsub -Is 选项。
使用 bjobs 显示作业状态
使用 bjobs 命令查看作业 ID 和有关您的作业的其他信息。
每个 LSF 作业的状态都会定期更新。
% bjobs
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
1266 user1 RUN normal hosta hostb sleep 60 Jun 5 17:39:58
名为 sleep 60 的作业运行 60 秒。作业完成后,LSF 会发送电子邮件报告作业完成情况。
您可以使用作业 ID 来监控特定作业的状态。
如果所有主机都忙,则不会立即启动作业,并且 STAT 列显示 PEND。
使用 bstop、bresume 和 bkill 控制作业执行
使用 LSF 命令挂起 (bstop)、恢复 (bresume) 和终止 (bkill) 作业。
bstop 命令
要暂停正在运行的作业,请使用 bstop 命令并指定作业 ID:
% bstop 1266
Job <1266> is being stopped
如果作业在停止时正在运行,则 bjobs 命令显示作业 1266 的 USUSP 状态:
% bjobs
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
1266 user1 USUSP normal hosta hostb sleep 60 Jun 5 17:39:58
job所有者只能暂停他们自己的作业。 LSF 管理员可以暂停任何作业。
恢复命令
要恢复暂停的作业,请使用 bresume 命令。
% bresume 1266
Job <1266> is being resumed
如果作业立即恢复,bjobs 命令将显示作业 1266 的 RUN 状态:
% bjobs
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
1266 user1 RUN normal hosta hostb sleep 60 Jun 5 17:39:58
job所有者只能恢复自己的工作。 LSF 管理员可以恢复任何工作。
bkill 命令
要终止作业,请使用 bkill 命令,该命令向指定的作业发送信号。例如,如果作业所有者或 LSF 管理员运行以下命令,作业 1266 将被杀掉:
% bkill 1266
Job <1266> is being terminated
使用 lsrun 和 lsgrun 运行交互式任务
lsrun 命令在当前本地主机上或远程在最佳可用主机上运行任务,前提是它可以找到必要的资源和适当的主机类型。 lsgrun 命令类似于 lsrun,但它在一组主机上运行任务。
以下命令运行 ls 命令。在这种情况下,命令通过本地主机上的 LSF 运行:
% lsrun ls -l /usr/share/lsf/cluster1/conf/
total 742
-rw-r--r-- 1 root lsf 11372 Jul 16 16:23 cshrc.lsf
-rw-r--r-- 1 root lsf 365 Oct 25 10:55 hosts
drwxr-xr-x 3 lsfadmin lsf 512 Jul 16 15:53 lsbatch
-rw-r--r-- 1 lsfadmin lsf 1776 Nov 23 15:13 lsf.conf
-rw-r--r-- 1 lsfadmin lsf 8453 Nov 16 17:46 lsf.shared
-rw-r--r-- 1 lsfadmin lsf 578 Jul 16 15:53 lsf.task
-rw-r--r-- 1 root lsf 10485 Jul 16 17:08 profile.lsf
您还可以指定要运行命令的主机。例如,以下命令在远程主机 hosta 上运行 hostname 命令:
% lsrun -v -m hosta hostname
<<Execute hostname on remote host hosta>>
hosta
The following command runs the hostname command on three remote hosts:
% lsgrun -v -m "hosta hostb hostc" hostname
<<Executing hostname on hosta>>
hosta
<<Executing hostname on hostb>>
hostb
<<Executing hostname on hostc>>
hostc
将您的应用程序与 LSF 集成
通过将您的应用程序与 LSF 集成,您可以确保您的用户可以使用正确和完整的作业提交选项提交和运行他们的作业,而无需让他们学习 LSF 命令。
以三种方式将应用程序与 LSF 集成:
- 包装shell脚本
- 包装二进制可执行文件
- 修改现有的应用程序源代码和接口
包装shell脚本
最简单的集成方法是将 bsub 命令放入一个类似于 shell 脚本的可执行文件中。包装器脚本是用于通过 LSF 启动应用程序的可执行文件。它为用户提供了一个简单的界面来运行其易于部署和维护的作业。
例如,如果您的应用程序名为 abc,请将 abc 重命名为 abc_real 并创建一个名为 abc 的包装脚本:
#! /bin/sh
bsub -R "rusage[abc_license=1:duration=1]" abc_real
当用户运行 abc 时,他们实际上是在运行一个脚本来将作业 abc_real 提交给使用 1 个名为 abc_license 的共享资源的 LSF。
有关使用 bsub 命令的 -R 选项上的资源要求 (rusage) 字符串指定共享资源的更多信息,请参阅管理软件许可证和其他共享资源。
通过向脚本添加适当的选项,您可以增强集成:
- 根据License的可用性,重新排队作业
- 将输入和输出文件复制到执行主机上的本地目录或从本地目录复制
- 计算和估计资源需求
包装二进制程序
包装器二进制文件类似于已编译二进制可执行文件形式的包装器 shell 脚本。编译后的包装文件通常比 shell 脚本运行得更快、更高效,而且它们还可以访问 LSF API(LSLIB 和 LSBLIB)。二进制代码也更安全,因为用户在没有源代码和适当的库的情况下无法修改它,但是开发包装二进制程序比包装 shell 脚本更耗时。
修改现有的应用程序源代码和接口
LSF 已经与许多常用的软件产品紧密集成。 IBM 和其他软件应用程序供应商为 LSF 和其他应用程序的更紧密集成提供了设施和服务。通过修改现有的应用程序用户界面,您可以实现轻松的作业提交、License最大化、并行执行和其他高级 LSF 功能。在某些情况下,您可以直接从应用程序用户界面运行 LSF 作业。
管理用户、主机和队列
使用 cshrc.lsf 和 profile.lsf 使您的集群可供用户使用。从集群中添加或删除主机和队列。
使用 cshrc.lsf 和 profile.lsf 使您的集群可供用户使用
确保所有 LSF 用户在他们自己的 .cshrc 或 .profile 文件末尾包含 cshrc.lsf 或 profile.lsf 文件,或者在使用 LSF 之前source这两个文件之一。
要为您的用户设置 LSF 环境,请使用以下两个 shell 文件:
- LSF_CONFDIR/cshrc.lsf #将此文件用于 csh 或 tcsh shell;
- LSF_CONFDIR/profile.lsf #将此文件用于 sh、ksh 或 bash shell。
将主机添加到集群
使用 LSF 安装脚本 lsfinstall 将新主机和主机类型添加到您的集群。
在你开始之前
确保您拥有要添加的主机类型的 LSF 分发文件。例如,要将运行 x86-64 内核 2.6 和 3.x 的 Linux 系统添加到您的集群,请获取文件 lsf10.1_linux2.6-glibc2.3-x86_64.tar.Z。所有受支持的 LSF 发行版的分发包均可通过 IBM Passport Advantage 下载。
步骤
将主机添加到集群有以下主要步骤:
- 为主机类型安装 LSF 二进制文件。
- 将主机信息添加到 lsf.cluster.cluster_name 文件。
- 设置新主机。
详细
从集群中删除主机
从 LSF 中删除主机包括关闭主机以防止任何其他作业在主机上运行,以及从 lsf.cluster.cluster_name 文件和其他配置文件中删除对主机的引用。
注意:不要移除管理主机。
- 以 root 身份登录到 LSF 主机。
- 运行 badmin hclose 关闭主机。
关闭主机可防止将作业分派到主机并允许正在运行的作业完成。 - 手动停止所有正在运行的守护进程。
- 在 LSF_CONFDIR/lsf.cluster.cluster_name 文件的 Host 部分中删除对主机的任何引用。
- 从以下配置文件中删除对主机的任何其他引用(如果适用):
- LSF_CONFDIR/lsf.shared
- LSB_CONFDIR/cluster_name/configdir/lsb.hosts
- LSB_CONFDIR/cluster_name/configdir/lsb.queues
- LSB_CONFDIR/cluster_name/configdir/lsb.resources
- 退出登录要删除的主机,然后以 root 或主要 LSF 管理员身份登录到集群中的任何其他主机。
- 运行 lsadmin reconfig 命令重新配置 LIM
% lsadmin reconfig
Checking configuration files ...
No errors found.
Do you really want to restart LIMs on all hosts? [y/n] y
Restart LIM on <hosta> ...... done
Restart LIM on <hostc> ...... done
lsadmin reconfig 命令检查配置错误。
如果没有发现错误,系统会要求您确认是否要在所有主机上重新启动 lim 并重新配置 lim。如果发现不可恢复的错误,则退出重新配置。
- 运行badmin mbdrestart命令重启mbatchd
% badmin reconfig
Checking configuration files ...
No errors found.
Do you want to reconfigure? [y/n] y
Reconfiguration initiated
badmin mbdrestart 命令检查配置错误。
如果没有发现不可恢复的错误,系统会要求您确认重新配置。如果发现不可恢复的错误,则退出重新配置。
- 如果您将 LSF 守护程序配置为在系统启动时自动启动,请从主机的系统启动文件中删除 LSF 部分。
有关自动 LSF 守护程序启动的更多信息,请参阅设置自动 LSF 启动 - 如果主机的任何用户使用 lstcsh shell 作为他们的登录 shell,请将他们的登录 shell 更改为 tcsh 或 csh。从 /etc/shells 文件中删除 lstcsh。
使用动态主机
https://www.ibm.com/docs/en/SSWRJV_10.1.0/lsf_welcome/lsf_kc_cluster_ops.html
添加队列
编辑 lsb.queues 文件以添加新的队列定义。添加队列不会影响挂起或正在运行的作业。
步骤
- 在集群中的任何主机上以管理员身份登录。
- 编辑 LSB_CONFDIR/cluster_name/configdir/lsb.queues 文件以添加新的队列定义。
您可以从该文件复制另一个队列定义作为起点。请记住更改复制队列的 QUEUE_NAME 参数。 - 将更改保存到 lsb.queues 文件。
- 当配置文件准备好后,运行badmin ckconfig 命令检查新的队列定义。
如果报告任何错误,请修复问题并再次检查配置。 - 运行 badmin reconfig 命令重新配置集群
% badmin reconfig
Checking configuration files ...
No errors found.
Do you want to reconfigure? [y/n] y
Reconfiguration initiated
badmin reconfig 命令还会检查配置错误。如果没有发现不可恢复的错误,系统会要求您确认重新配置。如果发现不可恢复的错误,则退出重新配置。
移除队列
编辑 lsb.queues 以删除队列定义。
开始之前
使用 bqueues 命令查看现有队列和在这些队列中运行的作业的列表。如果作业在您要移除的队列中,您必须将挂起和正在运行的作业切换到另一个队列,然后移除该队列。如果您删除一个包含待处理作业的队列,这些作业会临时移动到 lost_and_found 队列。作业状态不会改变。正在运行的作业继续,而在原始队列中挂起的作业在 lost_and_found 队列中挂起。在用户或队列管理员使用 bswitch 命令将作业切换到常规队列之前,作业一直处于挂起状态。其他队列中的作业不受影响。
步骤
- 以主管理员登录任一台主机
- 关闭队列
badmin qclose night
Queue night is closed
- 将所有pending与running的job移到另一个队列
bjobs -u all -q night
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
5308 user5 RUN night hostA hostD job5 Nov 21 18:16
5310 user5 PEND night hostA hostC job10 Nov 21 18:17
bswitch -q night idle 0
Job <5308> is switched to queue <idle>
Job <5310> is switched to queue <idle>
- 从LSB_CONFDIR/cluster_name/configdir/lsb.queues文件注释或移除掉需要删除的队列信息,并保存文件。
- 运行 badmin reconfig 命令重新配置集群
% badmin reconfig
Checking configuration files ...
No errors found.
Do you want to reconfigure? [y/n] y
Reconfiguration initiated
badmin reconfig 命令检查配置错误。如果没有发现不可恢复的错误,系统会要求您确认重新配置。如果发现不可恢复的错误,则退出重新配置。
配置 LSF 启动
使用 lsf.sudoers 文件,以便 LSF 管理员可以启动和停止 LSF 守护程序。将 LSF 设置为自动启动。
允许 LSF 管理员使用 lsf.sudoers 启动 LSF 守护进程
要允许 LSF 管理员启动和停止 LSF 守护程序,请配置 /etc/lsf.sudoers 文件。如果 lsf.sudoers 文件不存在,则只有 root 可以启动和停止 LSF 守护进程。
使用 lsf.sudoers 文件需要您启用 setuid 位。由于这允许 LSF 管理命令以 root 权限运行,如果您不希望这些命令以 root 权限运行,请不要继续。
设置自动 LSF 启动
将 LSF 守护程序配置为在集群中的每个 LSF 服务器主机上自动启动。
使用 hostsetup 命令的 boot=y 选项。
管理软件许可证和其他共享资源
设置 LSF 外部 LIM (ELIM) 以将软件许可证作为动态共享资源进行监控。
LSF 如何使用动态共享资源
LSF 识别两种主要类型的资源:
- 基于主机的资源在集群中的所有主机上都可用,例如,主机类型和型号,或节点锁定软件许可证。
- 共享资源作为集群中一组主机可用的动态负载索引进行管理,例如网络浮动软件许可证、共享文件系统。
共享资源由一组 LSF 主机共享。 LSF 管理用于主机选择和批处理或交互式作业执行的共享资源。这些资源是动态资源,因为系统上的负载随着资源的可用性而变化。
软件许可证作为共享资源
共享资源最常见的应用是管理软件应用许可证。您提交需要这些许可证的作业,LSF 会在许可证可用时根据作业的优先级运行这些作业。当许可证不可用时,LSF 将作业排队,然后在许可证空闲时分派它们。将应用程序许可证配置为共享资源可确保优化使用昂贵且关键的资源。
在 ELIM 中定义动态共享资源
为了让 LSF 使用软件许可证等共享资源,您必须在 lsf.shared 文件的 Resource 部分定义资源。您定义资源的类型以及希望 LSF 刷新资源值的频率。
为了让 LSF 随着时间的推移正确跟踪资源,您必须将它们定义为外部负载索引。 LSF 使用称为外部负载信息管理器 (ELIM) 的程序定期更新负载索引。
ELIM 可以是 shell 脚本或编译后的二进制程序,它返回您定义的共享资源的值。 ELIM 必须命名为 elim 并位于 LSF_SERVERDIR 目录中:
/usr/share/lsf/lsf/cluser1/10.1/sparc-sol2/etc/elim
您可以在 misc/examples 目录中找到示例 ELIM 的示例。
共享许可证示例
在 lsf.shared 文件中,为软件许可证定义两个动态共享资源,命名为 license1 和 license2:
Begin Resource
RESOURCENAME TYPE INTERVAL INCREASING RELEASE DESCRIPTION # Keywords
license1 Numeric 30 N Y (license1 resource)
license2 Numeric 30 N Y (license2 resource)
End Resource
- 共享资源的 TYPE 参数可以是以下类型之一:
- 数字
- 布尔值
- string
在这种情况下,资源是数字。
- INTERVAL 参数指定您希望刷新值的频率。在本例中,ELIM 每 30 秒更新一次共享资源 license1 和 license2 的值。
- INCREASING列中的N表示License资源在减少;也就是说,随着更多许可证可用,负载会降低。
- RELEASE 列中的 Y 表示当使用许可证的作业暂停时释放许可证资源。
将动态共享资源映射到主机
要让 LSF 知道您定义的动态共享资源 license1 和 license2 在哪里,请将它们映射到它们所在的主机。
在 LSF_CONFDIR/lsf.cluster.cluster_name 文件中,配置一个 ResourceMap 部分,以指定您在 LSF_CONFDIR/lsf.shared 文件中定义的共享资源 license1 和 license2 之间的映射,以及要将它们映射到的主机:
Begin ResourceMap
RESOURCENAME LOCATION
license1 [all]
license1 [all]
End ResourceMap
在此资源映射中,LOCATION 参数下的 [all] 属性表示 RESOURCENAME 参数下的资源 license1 和 license2 在集群中的所有主机上都可用。管理主机上只需要运行一个 ELIM,因为这两个资源对于所有主机都是相同的。如果资源在不同主机上的位置不同,则必须在每个主机上运行不同的 ELIM。
监控动态共享资源
为了让 LSF 正确接收外部负载索引,ELIM 必须以以下格式将可用资源的计数发送到标准输出:
number_indexes [index_name index_value] …
本示例中的字段包含以下信息:
2 license1 3 license2 2
外部负载指标总数(2)
第一个外部负载索引的名称(license1)
第一载荷指数值 (3)
第二个外部负载索引的名称(license2)
第二负载指数的值 (2)
编写ELIM程序
ELIM 必须是名为 elim 的可执行程序,位于 LSF_SERVERDIR 目录中。
当 lim 守护进程启动或重新启动时,它会在同一主机上运行 elim 程序,并获取 elim 程序发送的外部负载索引的标准输出。一般来说,你可以将任何可量化的资源定义为外部负载索引,编写一个ELIM报告其值,并将其用作LSF资源。
以下示例 ELIM 程序使用 license1 和 license2 并假设 FLEXlm 许可证服务器控制它们:
#!/bin/sh
NUMLIC=2 # number of dynamic shared resources
while true
do
TMPLICS='/usr/share/lsf/cluster1/10.1/sparc-sol2/etc/lic -c
/usr/share/lsf/cluster1/conf/license.dat -f license1, license2'
LICS='echo $TMPLICS | sed -e s/-/_/g'
echo $NUMLIC $LICS # $NUMLIC is number of dynamic shared
resource
sleep 30 # Resource
done
在脚本中,sed 命令将许可证特性名称中的减号(-)更改为下划线(_),因为 LSF 使用减号进行计算,并且资源名称中不允许使用减号。
lic 实用程序可从 IBM 支持部门获得。您还可以使用 FLEXlm 命令 lmstat 来制作您自己的 ELIM。
使用动态共享资源
要在集群中启用新的共享资源,请使用以下命令重新启动 LSF:
- lsadmin 重新配置
- 羽毛球重新配置
如果未发现错误,请使用 lsload -l 命令验证您的动态共享资源的值:
HOST_NAME status r15s r1m r15m ut pg io ls it tmp swp mem license1 license2
hosta ok 0.1 0.3 0.4 8% 0.2 50 73 0 62M 700M 425M 3 0
hostb ok 0.1 0.1 0.4 4% 5.7 3 3 0 79M 204M 64M 3 0
提交使用共享资源的作业
要提交使用一个 license1 资源的批处理作业,请使用以下命令:
% bsub -R 'rusage[license1=1:duration=1]' myjob
在资源需求 (rusage) 字符串中,duration=1 表示将 license1 保留 1 分钟,以便让 LSF 有时间从 FLEXlm 中检出它。
您还可以在队列级别的 RES_REQ 参数中为队列指定资源需求字符串。在 LSB_CONFDIR/cluster_name/configdir/lsb.queues 文件中,指定以下资源要求字符串:
Begin Queue
QUEUE_NAME = license1
RES_REQ=rusage[license1=1:duration=1]
...
End Queue
然后,使用以下命令提交使用一个 license1 资源的批处理作业:
% bsub -q license1 myjob
当许可证可用时,LSF 会立即运行您的作业;当所有许可证都在使用中时,LSF 会将您的作业放入队列中,并在许可证可用时分派它们。这样,您的所有许可证都将得到最大的利用。
问题定位
https://www.ibm.com/docs/en/spectrum-lsf/10.1.0?topic=foundations-troubleshooting-lsf-problems