1

我有一个(本土)集群网络基准测试,我正在尝试使用 SLURM 调度程序运行。基准测试使用标准的客户端/服务器架构,该架构在启动时需要客户端可执行文件的服务器 IP 地址(或主机名)参数。

通常我会编写一个服务器脚本,它将 grep 主网卡的地址并将信息删除到共享文件系统上,但 AFAIK 不会在集群节点上工作。我也知道有一个 SLURM_JOB_NODELIST 环境变量允许脚本从我的 sbatch 脚本中查看集群中所有节点的列表,但我看不出这在这种情况下有什么用处。

如何确定调度程序选择哪个节点来运行基准服务器并将该信息在启动之前/启动时传递给客户端任务?

4

1 回答 1

2

我不敢相信我在问之前没有想到这一点。这比听起来容易,而且SLURM_JOB_NODELIST 关键。您可以将该变量从 sbatch 脚本传递到第二个 shell 脚本,该脚本以$(hostname)两种主机名都已知的方式测试和启动适当的可执行文件,如下所示:

name=$(echo $1 | cut -d '-' -f1 -)
node1=$(echo $1 | cut -d '-' -f2 - | tr -d '[')
node2=$(echo $1 | cut -d '-' -f3 - | tr -d ']')
if [ "$(hostname)" == "$name-$node1" ]; then
    server.exe
else
    client.exe $name-$node1
fi
于 2018-03-31T14:36:37.820 回答