1 | #!/bin/sh |
---|
2 | |
---|
3 | # A script that runs the single and multi threaded versions of libtrace programs |
---|
4 | # Currently this compares tracestats and traceanon |
---|
5 | # This requires a bit of environment setup since it requires large trace files |
---|
6 | # 100mb+ ideally 1gb to ensure that the times are long enough to compare. |
---|
7 | # See the defines block below for the environment expected |
---|
8 | |
---|
9 | # outfilename |
---|
10 | printresults() { |
---|
11 | WALLCLOCKAVG=$(cut -d , -f 2 $1 | tail -n +2 | awk '{a+=$1} END{print a/NR}') |
---|
12 | SYSAVG=$(cut -d , -f 3 $1 | tail -n +2 | awk '{a+=$1} END{print a/NR}') |
---|
13 | USERAVG=$(cut -d , -f 4 $1 | tail -n +2 | awk '{a+=$1} END{print a/NR}') |
---|
14 | echo "Wall=$WALLCLOCKAVG Sys=$SYSAVG User=$USERAVG STDOUTMATCH=" |
---|
15 | } |
---|
16 | |
---|
17 | |
---|
18 | TRACES=$HOME/traces |
---|
19 | LIBTRACE=$HOME/mylibtrace/ |
---|
20 | TRACESTATS=$LIBTRACE/tools/tracestats/tracestats |
---|
21 | TRACESTATSP=$LIBTRACE/tools/tracestats/tracestats_parallel |
---|
22 | TRACEANON=$LIBTRACE/tools/traceanon/traceanon |
---|
23 | TRACEANONP=$LIBTRACE/tools/traceanon/traceanon_parallel |
---|
24 | TRACESTATSARGS= |
---|
25 | # Large output files are put here such as the output of traceanon, these files |
---|
26 | # are not stored rather a md5sum is kept. |
---|
27 | LARGEOUTPUT=/ramdisk |
---|
28 | TRACEANONARGS=--encrypt-source --encrypt-dest --cryptopan="HereISS0meB1GKey" |
---|
29 | # We push the most useful forward |
---|
30 | TIMEFORMAT=%e,%S,%U,%C,%D,%F,%I,%K,%M,%O,%P,%R,%W,%X,%Z,%c,%k,%p,%r,%s,%t,%w,%x |
---|
31 | CSVHEADINS="num,Wall Clock(e),System Time (S),User Time (U),Command (C),Average unshared data(D),Major page faults (F),I,K,M,O,P,R,W,X,Z,c,k,p,r,s,t,w,exit status (x), outputsum, errorsum" |
---|
32 | |
---|
33 | # Get the current git revision we use this for our output |
---|
34 | cd $LIBTRACE |
---|
35 | GITREV=$(git rev-parse HEAD) |
---|
36 | cd - |
---|
37 | echo "Git revision is $GITREV" |
---|
38 | |
---|
39 | #Name our results |
---|
40 | TIME=$(date +%Y%m%d-%T) |
---|
41 | RESULTSDIR=$TIME-$GITREV |
---|
42 | cd $TRACES |
---|
43 | mkdir $RESULTSDIR |
---|
44 | cd $RESULTSDIR |
---|
45 | |
---|
46 | # Now lets run the timings single threaded |
---|
47 | for tracefile in $TRACES/*.gz |
---|
48 | do |
---|
49 | OUTFILENAME=$(basename $tracefile) |
---|
50 | OUTFILENAME=tracestats-$OUTFILENAME.csv |
---|
51 | echo $CSVHEADINS > $OUTFILENAME |
---|
52 | # Load this file into memory so disk I/O is less important |
---|
53 | cat $tracefile > /dev/null |
---|
54 | echo "Running tracestats (singlethreaded) on $tracefile" |
---|
55 | for i in {1..5} |
---|
56 | do |
---|
57 | printf "\tRun $i : " |
---|
58 | /usr/bin/time -o times -f "$i,$TIMEFORMAT" $TRACESTATS $TRACESTATSARGS erf:$tracefile 1>$OUTFILENAME.stdout$i 2>$OUTFILENAME.stderr$i |
---|
59 | STDERRSUM=$(md5sum $OUTFILENAME.stderr$i | cut -f1 -d ' ') |
---|
60 | STDOUTSUM=$(md5sum $OUTFILENAME.stdout$i | cut -f1 -d ' ') |
---|
61 | echo "stdout=$STDOUTSUM stderr=$STDERRSUM" |
---|
62 | TIMESOUTPUT=$(cat times | tr -d "\n") |
---|
63 | echo "$TIMESOUTPUT,$STDOUTSUM,$STDERRSUM" >> $OUTFILENAME |
---|
64 | # clean up times |
---|
65 | rm times |
---|
66 | done |
---|
67 | printresults $OUTFILENAME |
---|
68 | done |
---|
69 | |
---|
70 | # Now lets do the parallel version |
---|
71 | for tracefile in $TRACES/*.gz |
---|
72 | do |
---|
73 | OUTFILENAME=$(basename $tracefile) |
---|
74 | OUTFILENAME=tracestats_parallel-$OUTFILENAME.csv |
---|
75 | echo $CSVHEADINS > $OUTFILENAME |
---|
76 | # Load this file into memory so disk I/O is less important |
---|
77 | cat $tracefile > /dev/null |
---|
78 | echo "Running tracestats_parallel on $tracefile" |
---|
79 | for i in {1..5} |
---|
80 | do |
---|
81 | printf "Run $i : " |
---|
82 | /usr/bin/time -o times -f "$i,$TIMEFORMAT" $TRACESTATSP $TRACESTATSARGS erf:$tracefile 1>$OUTFILENAME.stdout$i 2>$OUTFILENAME.stderr$i |
---|
83 | STDERRSUM=$(md5sum $OUTFILENAME.stderr$i | cut -f1 -d ' ') |
---|
84 | STDOUTSUM=$(md5sum $OUTFILENAME.stdout$i | cut -f1 -d ' ') |
---|
85 | echo "Sums stdout=$STDOUTSUM stderr=$STDERRSUM" |
---|
86 | TIMESOUTPUT=$(cat times | tr -d "\n") |
---|
87 | echo "$TIMESOUTPUT,$STDOUTSUM,$STDERRSUM" >> $OUTFILENAME |
---|
88 | # clean up times |
---|
89 | rm times |
---|
90 | done |
---|
91 | printresults $OUTFILENAME |
---|
92 | done |
---|
93 | |
---|
94 | # Now lets do traceanon |
---|
95 | for tracefile in $TRACES/*.gz |
---|
96 | do |
---|
97 | OUTFILENAME=$(basename $tracefile) |
---|
98 | OUTFILENAME=traceanon-$OUTFILENAME.csv |
---|
99 | echo $CSVHEADINS > $OUTFILENAME |
---|
100 | # Load this file into memory so disk I/O is less important |
---|
101 | cat $tracefile > /dev/null |
---|
102 | echo "Running traceanon on $tracefile" |
---|
103 | for i in {1..5} |
---|
104 | do |
---|
105 | printf "Run $i : " |
---|
106 | /usr/bin/time -o times -f "$i,$TIMEFORMAT" $TRACEANON $TRACEANONARGS erf:$tracefile erf:$LARGEOUTPUT/output.erf 1>$OUTFILENAME.stdout$i 2>$OUTFILENAME.stderr$i |
---|
107 | STDERRSUM=$(md5sum $OUTFILENAME.stderr$i | cut -f1 -d ' ') |
---|
108 | STDOUTSUM=$(md5sum $LARGEOUTPUT/output.erf | cut -f1 -d ' ') |
---|
109 | # this will be big but we just check the sums |
---|
110 | rm $LARGEOUTPUT/output.erf |
---|
111 | echo "Sums stdout=$STDOUTSUM stderr=$STDERRSUM" |
---|
112 | TIMESOUTPUT=$(cat times | tr -d "\n") |
---|
113 | echo "$TIMESOUTPUT,$STDOUTSUM,$STDERRSUM" >> $OUTFILENAME |
---|
114 | # clean up times |
---|
115 | rm times |
---|
116 | done |
---|
117 | printresults $OUTFILENAME |
---|
118 | done |
---|
119 | |
---|
120 | # Now lets do traceanon_parallel |
---|
121 | for tracefile in $TRACES/*.gz |
---|
122 | do |
---|
123 | OUTFILENAME=$(basename $tracefile) |
---|
124 | OUTFILENAME=traceanon_parallel-$OUTFILENAME.csv |
---|
125 | echo $CSVHEADINS > $OUTFILENAME |
---|
126 | # Load this file into memory so disk I/O is less important |
---|
127 | cat $tracefile > /dev/null |
---|
128 | echo "Running traceanon_parallel on $tracefile" |
---|
129 | for i in {1..5} |
---|
130 | do |
---|
131 | printf "Run $i : " |
---|
132 | /usr/bin/time -o times -f "$i,$TIMEFORMAT" $TRACEANONP $TRACEANONARGS erf:$tracefile erf:$LARGEOUTPUT/output.erf 1>$OUTFILENAME.stdout$i 2>$OUTFILENAME.stderr$i |
---|
133 | STDERRSUM=$(md5sum $OUTFILENAME.stderr$i | cut -f1 -d ' ') |
---|
134 | STDOUTSUM=$(md5sum $LARGEOUTPUT/output.erf | cut -f1 -d ' ') |
---|
135 | # this will be big but we just check the sums |
---|
136 | rm $LARGEOUTPUT/output.erf |
---|
137 | echo "Sums stdout=$STDOUTSUM stderr=$STDERRSUM" |
---|
138 | TIMESOUTPUT=$(cat times | tr -d "\n") |
---|
139 | echo "$TIMESOUTPUT,$STDOUTSUM,$STDERRSUM" >> $OUTFILENAME |
---|
140 | # clean up times |
---|
141 | rm times |
---|
142 | done |
---|
143 | printresults $OUTFILENAME |
---|
144 | done |
---|