管理软件许可证和其他共享资源
设置LSF external LIM (ELIM),将软件许可证作为动态共享资源进行监控。
LSF如何使用动态共享资源
LSF识别两种主要类型的资源:
- 集群内的所有主机都有基于主机的资源,如主机类型和型号、nodelocked software license。
- 共享的资源:集群中的主机组动态加载的可用资源,比如基于网络传输的license,共享文件系统。
共享的资源被LSF集群中的主机组共享。LSF管理用于主机选择和批处理或交互式作业执行的共享资源。这些资源是动态资源,因为系统上的负载随着资源的可用性而变化。
licenses 作为共享资源
共享资源最常见的应用是管理软件应用许可证。提交需要这些许可证的作业,当许可证可用时,LSF根据作业的优先级运行这些作业。当许可证不可用时,LSF将作业排成队列,然后在许可证空闲时分派它们。将应用程序许可证配置为共享资源可以确保最优地使用昂贵和关键的资源。
在ELIM中定义动态共享资源
要让LSF使用软件许可证之类的共享资源,您必须在LSF的resource部分定义资源。共享文件。您可以定义资源的类型以及希望LSF刷新资源值的频率。
要让LSF在一段时间内正确地跟踪资源,您必须将它们定义为外部负载索引。LSF使用一个称为外部负载信息管理器(ELIM)的程序定期更新负载索引。
ELIM可以是shell脚本或编译后的二进制程序,它返回您定义的共享资源的值。ELIM必须命名为ELIM,路径必须位于LSF_SERVERDIR:
/usr/share/lsf/lsf/cluser1/10.1/sparc-sol2/etc/elim
您可以在misc/examples目录中找到示例ELIMs的示例。
共享许可证示例
lsf.shared file 定义软件许可的两个动态共享资源,命名为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参数可以是以下类型之一:
- Numeric
- Boolean
- String
在这个例子中,资源的Type参数是Numeric。
- INTERVAL参数指定您希望刷新该值的频率。本例中,ELIM每30秒更新一次共享资源license1和license2的值。
- “递增”列中的N表示license资源正在减少;也就是说,随着可用许可证的增加,负载就会降低。
- “释放”列中的“Y”表示当使用license的作业挂起时,释放license资源。
将动态共享资源映射给主机
要让LSF知道您定义的动态共享资源license1和license2在哪里,请将它们映射到它们所在的主机。
在LSF_CONFDIR/lsf.cluster.cluster_name文件配置ResourceMap部分,指定你在lsf.shared文件中定义的资源license1和license2和hosts之间的映射关系。
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 Support获得。您还可以使用FLEXlm命令lmstat来创建自己的ELIM。
使用动态共享资源
使得新的共享资源可用,通过以下命令重新启动LSF:
- lsadmin reconfig
- badmin reconfig
如果没有发现错误,使用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将作业放入队列,并在许可可用时分派它们。这样,您的所有许可证都得到了最大的利用。