LSF实践专题(37):LSF中资源的属性

作为一个集群调度产品,LSF主要功能就是管理整个集群的各种计算资源,让其得到更加合理利用。集群里的各类资源,都会以resource的方式在LSF中进行注册,并由LSF进行各种管理和调度。

LSF中resource的属性

LSF中的resource主要分为两类,一类是内置资源(built-in resource),这类资源主要是每个计算节点的一些最基本的属性,包括r15s, r1m, r15m, ut, pg, ls, it, tmp, swp, mem等,这些都是每个节点固有的属性,所以即使不单独配置,也存在于每个节点的属性中。

还有一类是额外定义的resource,一方面我们可以根据需要自己添加一些资源,我们需要将这些资源添加到$LSF_ENVDIR下的lsf.shared文件中,同时,LSF在安装完成后也会默认在lsf.shared文件中自动添加一些常用的resource,比如名为bigmem的布尔resource,可以用来标注拥有大内存的节点,或者名为mg的布尔resource,可以用于标注管理节点。还有些是预留给某些功能的,比如templateID, instanceID, awshost, azurehost, googlehost等是预留给Resource Connector来进行云部署的,它们默认是被注释掉的状态,需要使用的时候直接去掉注释就可以。

在lsf.shared文件中,除去内置资源外,所有的可定义资源都被配置在Resource这一节,以Begin Resource开始,以End Resource结束。如下图所示:

图片

其中:

RESOURCENAME就是每一个resource的名字,只能以字母开头。

TYPE是resource的类型,LSF中resource的类型包括 :

  • Boolean(布尔型),一般用于标注某个计算节点是否具备某种属性,只有“是”和“否” 两种值。
  • Numeric(数值型),用数值来表述节点上某些属性的大小、数量等,比如license个数,内存大小等等,值是整数类型。
  • String(字符型), 使用字符描述节点上的某些属性,例如部署在云上的虚拟机的templateID和instanceID。

INCREASING的值是N或者Y,设置成N表示这种resource是可消耗资源,比如剩余内存或者某种license,每当作业占用掉一部分,可用的值就会减少一部分,直到作业完成将其释放。如果设置成Y,表示这种resource用的作业越多,它的值就越大,例如网络流量或者CPU的r15s就是这种数值,数值越大表示越繁忙。

INTERVAL是更新间隔。

这里要介绍resource的另一个维度的分类,动态资源静态资源。动态资源是用于描述节点上随着时间或者使用,数值不断变化的属性,比如剩余内存;而静态资源指的是每个节点上不会发生变化的属性,比如最大内存。如果是静态资源,INTERVAL直接写成 “()” 就可以,如果是动态资源,则INTERVAL中的数值表示LSF每隔多少秒更新一次这个属性的值,INTERVAL中直接写的数字就代表多少秒。如下图中,licA表示每15秒更新一次数值,licC表示他是静态的:

图片

一般来讲,自定义的静态资源的值可以直接定义在lsf.cluster文件中,LSF启动时读取一次,而自定义的动态资源,可以通过定义elim脚本的方式来进行属性值的设置。

我们需要把elim脚本定义在$LSF_SERVERDIR中,脚本的后缀要写成对应的resource名字,LSF的lim才会自动运行这些脚本,注意要为这些elim脚本设置可执行文件权限,如755(rwxr-xr-x)。

下面是我为licA写的elim脚本:

图片

这个脚本会不断循环,并且每次会通过下面这行来返回resource的值,

echo  “1 licA 10”

这是elim的一个固定格式,echo的字串中,第一个域表示这个elim返回几个resource的数值,当前我们只返回licA的数值,所以数量是1,第二个域是第一个资源的名字,第三个域是第一个资源的值,这个值可以是数值也可以是字符串,根据具体资源的类型决定。

我们可以在一个elim中为多个resource设定动态数值,比如:

echo “3 licA 10 licB 20 licC 30” 就可以同时为licA,licB,licC三个资源设置动态数值。当然,这里我们只是举例,所以虽然是动态数值,但是其实每次都是相同的值,在实际使用中,我们可以在elim脚本中写入更复杂的逻辑,比如探测系统中某个属性,或者读取某些文件的内容来决定资源当前的数值是多少。

而对于静态resource,我们不必设置elim脚本,直接把值定义在$LSF_ENVDIR中的lsf.cluster文件中就可以了。在lsf.cluster文件中的ResourceMap中,既可以定义哪些节点有哪些resource,也可以定义静态resource的值:

图片

如图所示,我们可以在LOCATION中为每个resource定义节点范围和静态数值,对于licA这种动态resource,我们只定义节点范围就可以,对于licC这种静态resource,我们将值和节点范围一起定义。

我们来看licC的定义,这里表示在节点servera1和serverc1上总共有1个licC,而在serverb1上有2个licC。

而licD的定义,[default]则表示,在集群中的每个节点上,都有5个licD,newres999那一行则表示,在整个集群中,总共有20个newres999。

这三种定义中,licC称为部分共享resource,licD称为节点级别的resource,而newres999则称为集群共享resource。

对于licA,因为它的值由elim.licA来设置,所以只通过([default])定义了每个节点上都有相同数量的licA。如果我们将licA的LOCATION设置为 ([all]) 则表示整个集群只有这些licA,所有节点只能共享使用。我们也可以将动态resource设置成 ([servera1 serverb1]) 这样的部分共享,只让一部分节点拥有这种resource。

以上就是对resource的基本属性的设置方式。根据实际环境的需要,可以设置自定义resource来管理一些特殊资源(例如软件license或某些具有特殊硬件资源的节点)。

欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。

HPC常青园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ivyent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值