#!/bin/bash # # --- ROCK-COPYRIGHT-NOTE-BEGIN --- # # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # Please add additional copyright information _after_ the line containing # the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by # the ./scripts/Create-CopyPatch script. Do not edit this copyright text! # # ROCK Linux: rock-src/scripts/Create-ParaSim # ROCK Linux is Copyright (C) 1998 - 2006 Clifford Wolf # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. A copy of the GNU General Public # License can be found at Documentation/COPYING. # # Many people helped and are helping developing ROCK Linux. Please # have a look at https://www.rocklinux.org/ and the Documentation/TEAM # file for details. # # --- ROCK-COPYRIGHT-NOTE-END --- config=default jobs="" ; x11=0 while [ "$1" ] ; do case "$1" in -cfg) config=$2 ; shift ; shift ;; -jobs) jobs=$2 ; shift ; shift ;; -x11) x11=1 ; shift ;; *) echo "Usage: $0 [ -cfg ] [ -x11 ]" \ "[ -jobs [,[,...]]]" echo echo " \"Simulate\" a parallel build and output a graph showing how many parallel" echo " jobs are available for building in which phase of the build." echo echo " -cfg the configuration to use" echo " -x11 graph the results with 'gnuplot'" echo " -jobs [,[,...]]] compare the reference build to cluster builds" echo " with N nodes" echo echo " For details, see Documentation/BUILD-CLUSTER." exit 1 ;; esac done . scripts/parse-config dir=src.parasim.$(cksum config/$config/packages | cut -f1 -d' ') echo "Building parasim in $dir." if [ "$jobs" ] ; then maxjobs=0 for x in $( echo $jobs | tr , ' ' ) ; do [ $maxjobs -lt $x ] && maxjobs=$x if [ ! -f "$dir/parasim_$x.dat" ] ; then rm -rf $dir/logs_$x perl scripts/parasim2.pl $dir $config $x else echo "Using cached data in $dir/parasim_$x.dat." fi done { jobstotal=$( echo `wc -l < $dir/parasim_$maxjobs.dat` ) echo 'set data style lines' echo 'set title "ROCK Linux Parallel Build' \ 'Simulation ('$jobstotal' Jobs Total)"' echo 'set xlabel "Hours (on reference hardware)"' echo 'set ylabel "Parallel Jobs"' echo "plot [0:*] [0:$(( $maxjobs + 1 ))] \\" next="" for x in $( echo $jobs | tr , ' ' ) ; do tm=$( tail -n 1 $dir/parasim_$x.dat | cut -f1 | \ awk -F. '{ printf("%02d:%02d\n", $1, 60*("0." $2)); }' ) echo -en "$next" ; next=', \\\n' echo -n " \"parasim_$x.dat\" title \"Build with" \ "$x parallel jobs ($tm)\" with steps lw 3" done } > $dir/parasim_$jobs.gnuplot cmd="perl scripts/parasim3.pl" for x in $( echo $jobs | tr , ' ' ) do cmd="$cmd $dir/parasim_$x.dat" ; done eval "$cmd" > $dir/parasim_$jobs.txt if [ "$x11" = 1 ] ; then cd $dir ; gnuplot -persist parasim_$jobs.gnuplot else cat $dir/parasim_$jobs.txt fi exit fi mkdir -p $dir/logs if [ ! -f $dir/parasim.dat ] ; then echo -n "Simulation running ..." rm -rf $dir/logs $dir/parasim.new mkdir -p $dir/logs while ./scripts/Create-PkgQueue -cfg $config \ -logdir $dir/logs | sort -r -n -k2 > $dir/queue.txt [ -s $dir/queue.txt ] do next="`head -n 1 $dir/queue.txt`" ; set $next qid="$1-$6" ; touch $dir/logs/$qid.log printf "%5d %5d %-30s %s\n" $(wc -l < $dir/queue.txt) \ $2 $qid "$( cut -f1,7 -d' ' $dir/queue.txt | \ tail -n +2 | tr '\n ' ' -' )" >> $dir/parasim.new echo -n . done mv $dir/parasim.new $dir/parasim.dat echo else echo "Using cached data in $dir/parasim.dat." fi jobstotal=$( echo `wc -l < $dir/parasim.dat` ) cat > $dir/parasim.gnuplot <<- EOT set title "ROCK Linux Parallel Build Simulation ($jobstotal Jobs Total)" set xlabel "Number of Jobs build so far" set ylabel "Possible Parallel Jobs" plot 'parasim.dat' using 1 title "Parallel Jobs" with steps lw 3 EOT perl scripts/parasim1.pl $dir/parasim.dat 0 > $dir/parasim.txt if [ "$x11" = 1 ] ; then cd $dir ; gnuplot -persist parasim.gnuplot else cat $dir/parasim.txt fi