我有一个(本土)集群网络基准测试,我正在尝试使用SLURM调度程序运行。该基准测试使用标准的客户端/服务器体系结构,该体系结构在启动时需要服务器IP地址(或主机名)参数。
通常我会编写一个服务器脚本来grep主要的nic的地址并将信息放在共享文件系统上,但是AFAIK不能在集群节点上工作。我也明白有一个SLURM_JOB_NODELIST env变量允许脚本从我的sbatch脚本中查看集群中所有节点的列表,但我不知道在这种情况下它是如何有用的。
如何确定调度程序选择哪个节点来运行基准测试服务器,并在启动之前/之后将该信息传递给客户端任务?
答案 0 :(得分:0)
我无法相信在问之前我没有想到这一点。这比听起来容易,SLURM_JOB_NODELIST
是的关键。您可以将该变量从sbatch脚本传递到第二个测试$(hostname)
的shell脚本,并以两个主机名都已知的方式启动相应的可执行文件,如下所示:
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