IBM的Spectrum LSF software是每个芯片工程师或多或少都会接触到的一套软件系统,LSF是Load Sharing Facility的缩写,顾名思义,这套软件是用于管理资源负载的,使资源最大化被各个用户所使用。
LSF主要功能有3点:1. 管理硬件和软件资源;2. 调度和运行jobs;3. 监控jobs的状态。我们从LSF资源和LSF软件讲下。
1. LSF资源
LSF的资源有硬件资源和软件资源,硬件资源有计算机、磁盘、内存等。软件资源有license等。
硬件资源中定义了Cluster(集群)的概念,Cluster是将一组computer(host)打包成一个整体,它们共享算力和资源。Cluster的host可以简化为3类:management host、execution(compute) host和Submission(client) host,三者安装了LSF的完整或部分软件。Management host充当集群的总体协调器、队列管理、作业派发,一般不跑普通用户计算任务。Execution host用于执行任务。Submission host用于提交任务。
User通常在Submission host上提交jobs,Management host根据jobs的类型和资源需求来选择合适的Execution host去执行jobs。根据需求,这些execution host可以使用共享的NFS memory或者使用自己local的memory去执行任务。如果使用local memory,那么execution host和submission host之间需要互相copy的文件会比较多,但是执行jobs的速度可能更快,因为它不需要和其它host去争抢NFS 磁盘的IO读写资源。
用户提交jobs到LSF的常用命令就是bsub,在提交bsub可以指定一系列需求,比如服务器类型、OS类型、memory大小、CPU个数、EDA license数目和host空闲程度等。这么多复杂的需求,就是靠LSF软件系统去维护,它需要定期监控各个软硬件资源的使用情况,然后从jobs队列(queue)中挑出符合的job丢给execution host去执行,并把执行结果返回给user(不管成功与否),而且还要根据user查询类型反馈系统的状态信息。
2. LSF软件
集群中的每台host的角色不一样,因此运行的LSF进程类型和数量也不一样。主要的LSF进程有以下几种。
Daemon Role
mbatchdJob requests and dispatch
mbschdJob scheduling
sbatchdJob execution
resJob execution
limHost information
pimJob process information
elimDynamic load indexes
mbatchd(Management batch daemon)是运行在management host上的,它负责系统中jobs的整体状态。接收jobs提交和信息查询请求。管理queue中保存的jobs。将jobs分派到由mbschd选择的主机。
mbschd(Management batch scheduler daemon)也是运行在management host上的。它mbatchd一块配合工作,它会根据jobs需求、策略和资源可用性做出调度决策。将调度决策发送到mbatchd。
sbatchd(Server batch daemon)运行在每个服务器host上,包括management host。从mbatchd接收运行jobs的请求,并管理jobs的本地执行。负责执行本地策略并维护host上的jobs状态。sbatchd为每一个job都创建一个子sbatchd。子sbatchd运行一个res实例来创建job运行的执行环境。当作业完成时,子sbatchd退出。
res(Remote execution server)在每个服务器host上运行。接受远程执行请求,为jobs和tasks提供可靠、安全的远程执行。
lim(Load information manager)运行在每个服务器host上,它收集host负载和配置信息,并将其转发给运行在management host上的host LIM。当LIM启动或cpu (ncpu)数量发生变化时,将上报静态负载指数(static load index)。在management host上运行的LIM(Parent LIMIT)会接收集群中各host上运行的lim的负载信息。并把负载信息转发给mbatchd,后者将此信息转发给mbschd以支持调度决策。如果management host上LIM不可用,则management candidate host上的LIM自动接管。
pim(Process information manager)是每个服务器主机上运行的进程信息管理器。由LIM启动,LIM会定期检查PIM并在它死亡时重新启动它。pim收集host上运行的job进程信息,如job占用的CPU和内存等,并将这些信息报告给sbatchd。
elim(External LIM)是一个站点可定义的可执行文件,它收集和跟踪自定义的动态负载指数(dynamic load index)。ELIM可以是shell脚本或编译的二进制程序,它返回用户定义的动态资源的值。ELIM可执行文件必须命名为ELIM。并位于LSF_SERVERDIR中。
上述这些LSF进程在management host和computer host的分布如下图。
上述这些LSF进程的调用关系如下图:
Static Load Index和Dynamic Load Index的区别:
- Static Load Index(静态负载指数):LIM 启动时读取、硬件 / 配置不变就几乎不动;lshosts查看;
- Dynamic Load Index(动态负载指数):LIM 每~15s 周期性采样、EWMA 平滑;lsload查看;还可以通过 ELIM 自定义额外动态指数;
Static Load Index(内置静态,lshosts)
名称 | 含义 | 单位 /备注 |
ncpus | 检测到的 CPU 数量 | 核数(LSF 用来算归一化 run‑queue) |
ndisks | 本地磁盘数目 | 块设备数 |
maxmem | 整机最大可用内存 | MB(物理 RAM 总量) |
maxswp | 整机最大 Swap 总量 | MB |
maxtmp | /tmp 文件系统总容量 | MB |
cpuf | CPU 归一化因子 | 相对速度值(用来跨机型校正 r1m 等) |
type | 主机类型 | 字符串(OS + 架构) |
model | 主机型号 | 字符串 |
server | 是否为 Server host | bool(Yes/No,能否执行作业) |
Dynamic Load Index(内置动态,lsload)
名称 | 含义 | 别名 | 说明 &工程要点 |
r15s | 15s 指数平均运行队列长度 | — | 瞬时尖峰;LSF 已按ncpus/cpuf归一化,≠原生 Linux loadavg |
r1m | 1min 指数平均运行队列长度 | cpu | 最常用负载指标;loadSched/loadStop 大多配这个 |
r15m | 15min 指数平均运行队列长度 | — | 看持续高负载 |
ut | 1min 平均 CPU 利用率 | — | 0.0‑1.0;注意超线程时 ut 高不代表 slot 耗尽 |
pg | 1min 平均换页速率 | — | pages/sec;不是 swap 已用大小;pg 高 = 内存颠簸风险 |
io | 1min 平均磁盘 I/O 速率 | — | KB/s;本地盘吞吐;不直接反映 NFS 压力 |
ls | 当前登录会话数 | login | 交互式用户数量 |
it | 主机空闲时间 | idle | 分钟;全部登录会话无操作时长 |
mem | 当前可用内存 | — | MB(实时剩余;和maxmem区分) |
swp | 当前可用 Swap | swap | MB(实时剩余;和maxswp区分) |
tmp | /tmp 当前剩余空间 | — | MB(实时剩余;和maxtmp区分) |
PS:External Dynamic Index:管理员用 ELIM 脚本自定义(例如 license 余量、GPU 利用率),也是动态指数,只是不是 LIM 内置。
3. 总结
LSF将众多软硬件组合起来,给用户提供统一接口,用户不需要关系内部资源协调和组织的细节。组成cluster的host中会至少选用一台作为management host,用于协调其它computer host的运行。Management host通过lim机制掌握了各个host的资源使用情况,这些信息也会提供给mbschd去做出调度决策,mbatchd根据这个调度决策把jobs分配到合适的computer host上去运行,computer host上的sbatchd会为每个分配过来的job启动一个子sbatchd,这个子sbatchd会启动一个res实例来创建job运行的执行环境,使得每个job独立、安全的执行。
LSF中提供了众多的命令给用户使用,大致可以分为以下四类:
- 提交jobs
- 查询jobs
- 查询hosts
- 配置命令