基于License的调度#

AIP通过使用外插的RESS机制(参考 ress )把可用的应用浮动许可证数量变成AIP的资源,作业提交时 请求该资源。如果没有可用的许可证,作业不会被调度。这样避免作业因无可用应用许可证而失败。

以下的例子通过ress.master把Siemens StarCCM+ 的ccmppower许可证插入到AIP中。

  1. 编写名为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
    
  2. 编写好脚本后现在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中断运行。

  3. 把脚本放到/opt/skyformai/sbin中。注意脚本名必须是ress.master, root必须可执行。

  4. 不用重启AIP,等10-15秒后用命令cload -s查看:

    cload -s
    RESOURCE                                VALUE       LOCATION
    star_ccmppower                          15          dev node[01-10]
    
  5. 确认调度器里也有相应的值:

    chosts -s
    RESOURCE                USABLE       RESERVED       LOCALE
    star_ccmppower              15            0.0       dev node[01-10]
    
  6. 提交作业,用-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的值一定大于应用启动到从 许可证服务器获取许可的时间,但又不能太长,否则造成许可浪费(调度器过多预留资源)。