ress#

服务进程#

ress - SkyForm AIP 系统的资源传感器 (RESS)

概要#

CB_SERVERDIR/ress.[master|host|hostname]

描述#

RESS 是 AIP 负载服务器 (cbls) 的定制资源插件。它 向 AIP 系统提供定制的资源信息,供作业使用。它是一个定制编写的程序,由 CBLS 调用,用于 获取特定于站点的资源数据。

RESS 必须位于 CB_SERVERDIR 目录(/opt/skyformai/sbin)中,并且必须可执行。

RESS 必须具有以下文件名之一:

  • ress.master,将由 CBLS 在主主机上执行。

  • ress.host,将由 CBLS 在每个 AIP 主机上执行。

  • ress.hostname,将由 CBLS 在主机名为 hostname 的主机上执行。

CBLS 会定期在 $CB_SERVDIR 目录中查找可执行名称 ress.master、ress.host 和 ress.hostname,如果存在,则自动执行。

RESS 代码逻辑#

RESS 代码逻辑应为一个循环,定期更新资源数据。 在每个循环中,它会在其标准输出上提供 YAML 格式的资源数据,然后休眠几秒钟。之后,它会再次更新资源。

对于不经常更新的资源,两次循环之间的休眠时间可能很长,例如几个小时。

最短的数据更新时间为**5**秒。

它提供的资源数据必须是 YAML 格式。详细格式将在下一节中解释。

RESS 代码示例,ress.master:

#!/bin/bash
while true; do
  echo "- resource: clksnd"
  echo " description: 当前时钟的秒值"
  echo " type: number"
  echo " direction: increase"
  echo " value:" \`date +%S\`
  echo " locale: master node01"
  echo "---"
  sleep 10
done

输出格式#

对于每次循环,RESS 在标准输出中的输出必须是完整的 YAML 文档。该文档应以一个序列开头,并以“—”作为分隔行结尾。这告诉 CBLS 停止读取内容并等待下一个循环。

每个序列描述一个资源。可以描述多个资源。

每个资源的属性包括:

resource:

定义资源的名称。资源名称的长度不应超过 32 个字符。必须以字母开头,且不能包含任何 .!-=+*/[]@:&|{}’`" 字符。

description:

资源的描述。可以包含任何字符。总长度必须为 255 个字符或更短。

type:

资源类型。有效值为:

number,表示资源值为数字(整数或浮点数);

text,表示资源值为少于 32 个字符的自由文本;

tag,表示资源不为值,资源名称将作为主机的标签。作业可以使用标签(即资源名称)来选择主机。

direction:

方向表示资源从最佳状态向最差状态移动的方向。其值为“增加”或“减少”。“增加”值表示数字越小,系统拥有的资源越多。例如,CPU 利用率一个“增加”类型的资源。“减少”类型的资源表示数字越大,系统拥有的资源越多。例如,空闲内存就是一个“减少”类型的资源。此参数仅适用于类型为“number”的资源。

release

取值为“yes”或“no”。当**release**指定为“yes”时,当请求该资源的作业被暂停时,资源会被释放。默认值为“no”,即作业暂停时不会释放资源。

assign

仅适用于类型为“number”的资源。取值为“yes”或“no”。当**assign**指定为“yes”时,资源单元会被枚举,调度程序会将特定的资源单元分配给请求该资源的作业。例如,GPU 的资源“assign”设置为“yes”。如果某个作业在主机上请求 2 个 GPU 资源,调度程序将为该作业分配特定的 GPU 编号,例如 GPU 2 和 GPU 3。这样,该作业就知道要使用哪些 GPU,以避免与同一主机上其他请求 GPU 的作业发生冲突。默认值为“no”,即不为每个任务(作业槽位)分配资源单元。

slotresource:

仅适用于“number”资源。如果该值设置为“yes”,则为该作业预留的资源总量等于作业资源需求中请求的值乘以该作业调度的槽位数量。 默认值为“no”,即为该作业预留的资源总量与资源需求中指定的值相同。

value:

资源的当前值。对于“number”资源,该值可以是数字;对于“text”资源,该值可以是文本字符串。对于“tag”资源,该值无意义。

locale

表示本地

报告资源的位置。如果缺少此参数,系统将认为资源值是运行 RESS 的主机的地址。该地址是共享该资源的主机列表。对于主机基础资源,此参数可以是报告资源值的主机名,也可以不填。 对于集群范围的资源,请使用保留字“all”。如果某个资源由多个主机共享,请列出这些主机的主机名,并用空格分隔,以分钟为单位。

警告

locale 必须是 yaml 输出中的最后一个字段。

备注

如果资源以在cb.yaml中定义,RESS的输出只需resource和value两个字段即可。

示例#

以下示例报告了两个资源:一个“number”资源和一个“text”资源。这两个资源的“locale”都是运行 RESS 的主机。hostname

#!/bin/bash
while true; do
  echo "- resource: gpu1"
  echo "  description: GPU availability"
  echo "  type: number"
  echo "  direction: increase"
  echo "  value: 0.8
  echo "  release: yes"
  echo "- resource: network"
  echo "  description: my network"
  echo "  type: text"
  echo "  value: IB"
  echo "- resource: localdisk"        # 这个资源以在cb.yaml中定义
  echo "  value: 30"
  echo "---"
  sleep 10
done