概述

浮动软件许可证池通常在 LSF 中表示为数值资源。每个需要许可证的作业必须在其 rusage 表达式中包含许可证需求,以确保在作业调度时有足够的许可证可用。

LSF 提供三种推荐的许可证管理方法:

方法 特点 适用场景
静态数值共享资源 手动配置许可证数量 单集群、许可证数量固定
动态数值共享资源 使用 elim 轮询许可证服务器 多集群共享许可证池
LSF License Scheduler 自动跟踪许可证使用 需要精确许可证管理

方法一:静态数值共享资源

手动在 LSF 配置中编码集群可用的许可证总数。

配置步骤

1. 定义许可证资源

lsf.shared 中配置:

1
2
3
4
5
Begin Resource
RESOURCENAME  TYPE     INTERVAL  INCREASING  DESCRIPTION
...
lic1          Numeric  ()        N           (application license)
End Resource

2. 映射许可证到所有主机

lsf.cluster 中配置:

1
2
3
4
Begin ResourceMap
 RESOURCENAME  LOCATION
 lic1          (10@[all])
End ResourceMap

3. 重启服务

1
2
bctrld restart lim
badmin mbdrestart

4. 提交作业

1
bsub -R "rusage[lic1=1]" job_script

注意事项

  • 不适合多集群共享:一个集群不知道其他集群检出或预留的许可证数量
  • 需要手动更新:许可证总数变化时需要重新配置 LSF
  • 非精确管理:如果应用在 LSF 作业外检出许可证,可能导致许可证检出失败

方法二:动态数值共享资源

编写 elim 程序定期从许可证服务器收集可用许可证数量,并报告给 LSF。

配置步骤

1. 定义动态资源

lsf.shared 中配置(指定 INTERVAL):

1
2
3
4
5
Begin Resource
RESOURCENAME  TYPE     INTERVAL  INCREASING  DESCRIPTION
...
lic2          Numeric  15        N           (application licenses)
End Resource

2. 映射资源(不指定数量)

lsf.cluster 中配置:

1
2
3
4
Begin ResourceMap
 RESOURCENAME  LOCATION
 lic2           ([all])
End ResourceMap

3. 创建 elim 程序

编写 elim 可执行文件从许可证服务器收集可用许可证。详见 External load indices

4. 提交作业(指定 duration)

1
bsub -R "rusage[lic2=1:duration=5]" job_script

Duration 机制

  1. 作业提交时指定许可证和 duration
  2. elim 报告可用许可证数量
  3. LSF 调度作业并预留许可证
  4. 作业从许可证服务器检出许可证
  5. elim 检测到许可证被使用
  6. duration 过期后,LSF 停止预留

image-20251211091956715

重要:duration 设置要足够长,让作业有时间检出许可证并让 elim 轮询到许可证服务器。

方法三:LSF License Scheduler Basic Edition

使用 LSF License Scheduler 无需编写和管理 elim,作业也不需要在 rusage 中指定 duration。

工作原理

  1. LSF License Scheduler 定期从许可证服务器获取使用情况
  2. 通过匹配许可证检出与作业来跟踪许可证使用
  3. 计算 LSF 集群可用的许可证数量
  4. LSF 定期与 License Scheduler 通信获取可用许可证

配置步骤

1. 安装 LSF License Scheduler Basic Edition

2. 配置 lsf.licensescheduler

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Begin Parameters
PORT = 9581
HOSTS = LSManagementHost
ADMIN = admin
LM_STAT_INTERVAL=30
LMSTAT_PATH = /usr/bin
CLUSTER_MODE=y
End Parameters

Begin Clusters
CLUSTERS
myCluster
End Clusters

Begin ServiceDomain
NAME = LanServer
LIC_SERVERS = ((1770@licHost))
End ServiceDomain

Begin Feature
NAME = lic3
CLUSTER_DISTRIBUTION=LanServer(myCluster 1)
End Feature

3. 启动 License Scheduler

1
blstartup

4. 重启 mbatchd

1
badmin mbdrestart

5. 查看许可证资源

1
2
3
4
5
$ bhosts -s
RESOURCE                 TOTAL       RESERVED       LOCATION
lic3                         2            0.0
                                                     server1
                                                     server2

6. 提交作业

1
bsub -R "rusage[lic3=1]" job_script

7. 查看许可证使用详情

1
2
3
4
5
6
$ blstat
FEATURE: lic3@ myCluster
 SERVICE_DOMAIN: LanServer
 TOTAL_TOKENS: 2    TOTAL_ALLOC: 2    TOTAL_USE: 1    OTHERS: 0
 CLUSTER SHARE ALLOC TARGET INUSE RESERVE OVER PEAK BUFFER FREE  DEMAND
myCluster  100.0%  2     2      1      0       0     1     0      1      0

8. 查看作业许可证使用

1
2
3
4
5
$ blusers -J
JOBID  USER   HOST    PROJECT   CLUSTER    START_TIME
1      admin  server1 default   myCluster  Aug 27 02:49:11
RESOURCE   RUSAGE  SERVICE_DOMAIN    INUSE    EFFECTIVE_PROJECT
lic3       1       LanServer         1        default

方法对比

特性 静态资源 动态资源 License Scheduler
需要 elim
需要 duration
多集群支持 良好 优秀
精确度
配置复杂度

参考资料

  1. IBM Documentation - Managing floating software licenses
  2. IBM Documentation - External load indices
  3. IBM Documentation - LSF License Scheduler