From 23e6e6cb2a8a3ed4e10ede46bffefc40c25c01a2 Mon Sep 17 00:00:00 2001 From: ville rantanen Date: Mon, 31 Mar 2014 12:54:03 +0300 Subject: [PATCH] implemented free node waiting --- anduril/slurm-maxfree | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/anduril/slurm-maxfree b/anduril/slurm-maxfree index 2f5834d..e5c6995 100755 --- a/anduril/slurm-maxfree +++ b/anduril/slurm-maxfree @@ -23,21 +23,32 @@ Current nodelist: "'${NODELIST[@]}'"'"( ${#NODELIST[@]} nodes)\n" fi NODERUNS=( ) +for e in ${NODELIST[@]} +do NODERUNS+=( 0 ) +done # find node with max free CPUs +while [ true ] +do + MAX=0 + INDEX=0 + for (( i=0; i<${#NODERUNS[@]}; i++ )) + do NODERUNS[$i]=$(( $( scontrol -o show node ${NODELIST[$i]} | sed 's,.*CPUAlloc=\([0-9]\+\).*CPUTot=\([0-9]\+\).*,\2-\1 ,' ) )) + echo -n "${NODELIST[$i]}:${NODERUNS[$i]} " + [ ${NODERUNS[$i]} -gt $MAX ] && { + MAX=${NODERUNS[$i]} + INDEX=$i + } + done + [ $MAX -gt 0 ] && { + break + } || { + SECONDS=$(( 10 + $RANDOM/1000 )) + echo "waiting for free sockets for $SECONDS s." + sleep $SECONDS + } +done -for e in ${NODELIST[@]} -do NODERUNS+=( $(( $( scontrol show node $e | tr -d [:cntrl:] | sed 's,.*CPUAlloc=\([0-9]\+\).*CPUTot=\([0-9]\+\).*,\2-\1 ,' ) )) ) -done -MAX=${NODERUNS[0]} -INDEX=0 -for (( i=0; i<${#NODERUNS[@]}; i++ )) -do (( ${NODERUNS[$i]} > MAX )) && { - MAX=${NODERUNS[$i]} - INDEX=$i - } - echo -n "${NODELIST[$i]}:${NODERUNS[$i]} " -done echo "srun: Node ${NODELIST[$INDEX]}, Free sockets: ${NODERUNS[$INDEX]}" >&2 mkdir -p "$JOBROOT"