基于License的调度#
AIP通过使用外插的RESS机制(参考 ress )把可用的应用浮动许可证数量变成AIP的资源,作业提交时 请求该资源。如果没有可用的许可证,作业不会被调度。这样避免作业因无可用应用许可证而失败。
以下的例子通过ress.master把Siemens StarCCM+ 的ccmppower许可证插入到AIP中。
编写名为ress.master的脚本:
#!/bin/bash # 这个 ress 例子用lmstat命令获取Siemens StarCCM+ license的使用情况, # 计算出可用的feature ccmppower的数量。 # 通过定期输出(每10秒)资源配置名为star_ccmppower的YAML格式把可用 # 的ccmppower数量插入AIP调度器 STAR_LM_BIN_PATH="/share/apps/Siemens/14.06.012-R8/FLEXlm/11_14_0_2/bin" STAR_LIC_SERVER_1="1999@mgt01" STAR_LIC_FEATURE_1="ccmppower" STAR_LIC_RES_NAME_1="star_ccmppower" STAR_LIC_RES_VALUE_1="0" OLD_IFS=$IFS while true; do IFS=$'\n'; STR_VAR1=(`${STAR_LM_BIN_PATH}/lmstat -c ${STAR_LIC_SERVER_1} -a`) for i in ${STR_VAR1[@]}; do echo $i | grep ${STAR_LIC_FEATURE_1} > /dev/null 2>&1; if [ $? == 0 ]; then LIC_TOTAL=`echo $i | awk '{print $6}'`; LIC_USED=`echo $i | awk '{print $11}'`; STAR_LIC_RES_VALUE_1=$((LIC_TOTAL-LIC_USED)) break; fi done IFS=$OLD_IFS echo "- resource: ${STAR_LIC_RES_NAME_1}" echo " description: ${STAR_LIC_RES_NAME_1}, license feature resource of ${STAR_LIC_FEATURE_1} " echo " type: number" echo " direction: decrease" echo " release: no" echo " assign: no" echo " slotresource: no" echo " value: ${STAR_LIC_RES_VALUE_1}" echo " locale: all" echo "---" sleep 10 done
编写好脚本后现在shell下运行测试。脚本不停地循环,每10秒输出类似以下的结果(连续):
./ress.master - resource: star_ccmppower description: star_ccmppower, license feature resource of star_ccmppower type: number direction: decrease" release: no" assign: no" slotresource: no" value: 15 locale: all" --- - resource: star_ccmppower description: star_ccmppower, license feature resource of star_ccmppower ^C
Ctrl-C中断运行。
把脚本放到/opt/skyformai/sbin中。注意脚本名必须是ress.master, root必须可执行。
不用重启AIP,等10-15秒后用命令cload -s查看:
cload -s RESOURCE VALUE LOCATION star_ccmppower 15 dev node[01-10]
确认调度器里也有相应的值:
chosts -s RESOURCE USABLE RESERVED LOCALE star_ccmppower 15 0.0 dev node[01-10]
提交作业,用-R预留作业所需的star_ccmppower资源(详见 csub 里的-R参数):
csub -n 16 -R "rusage[star_ccmppower=1:duration=1]" mystarccmp
上面rusage中的duration是个关键的参数。这个作业先在调度器中预留1个star_ccmppower资源 (即ccmppower许可),等作业调度开始运行后,应用到许可证服务器上拿走一个ccmppower许可, 这样ress.master获的值就会少一个,所以在应用拿走license后,调度器里预留的值需要释放。 duration的单位是分钟,指资源预留时间,时间到后会释放。duration的值一定大于应用启动到从 许可证服务器获取许可的时间,但又不能太长,否则造成许可浪费(调度器过多预留资源)。