* Revise the machine selection algorithm. Previously it chose the first

machine with the lowest number of running jobs.  This worked when the
  clients were all roughly equivalent, but schedules poorly when there
  are some that are much more powerful (e.g. 8-core machines vs UP machines)

* We now compute the ratio of running jobs to maximum jobs and schedule on
  the machine with lowest occupation fraction.  This populates the machines
  to equal fractions of their capacity.
This commit is contained in:
Kris Kennaway
2007-07-29 19:41:52 +00:00
parent 13e1b025a1
commit cc0916c8a0
+17 -8
View File
@@ -17,20 +17,28 @@ if [ "$1" = "*" ]; then
exit 1
fi
min=9999
min=999999
while [ $# -gt 0 ]; do
m=$1
num=$(cat $m)
if [ $num -lt $min ]; then
# Pull in maxjobs
. ${pb}/${arch}/portbuild.conf
test -f ${pb}/${arch}/portbuild.${m} && . ${pb}/${arch}/portbuild.${m}
curjobs=$(cat $m)
weight=$((${curjobs}*1000/${maxjobs}))
if [ $weight -lt $min ]; then
mach=$m
min=$num
elif [ $num -eq $min ]; then
min=$weight
elif [ $weight -eq $min ]; then
mach="${mach} ${m}"
fi
shift
done
if [ "$min" = 9999 -o -z "${mach}" ]; then
if [ "$min" = 999999 -o -z "${mach}" ]; then
echo ""
exit 1
fi
@@ -45,11 +53,12 @@ fi
. ${pb}/${arch}/portbuild.conf
test -f ${pb}/${arch}/portbuild.${mach} && . ${pb}/${arch}/portbuild.${mach}
curjobs=$(cat $mach)
# Now that we've found a machine, register our claim in the queue
if [ "$((${min}+1))" -ge "${maxjobs}" ]; then
if [ "$((${curjobs}+1))" -ge "${maxjobs}" ]; then
rm ${mach}
else
echo $(($min+1)) > ${mach}
echo $(($curjobs+1)) > ${mach}
fi
# Report to caller