File: bench.sh

package info (click to toggle)
systemtap 5.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 47,556 kB
  • sloc: cpp: 81,117; ansic: 54,933; xml: 49,795; exp: 43,595; sh: 11,526; python: 5,003; perl: 2,252; tcl: 1,312; makefile: 1,006; javascript: 149; lisp: 105; awk: 101; asm: 91; java: 70; sed: 16
file content (130 lines) | stat: -rwxr-xr-x 3,285 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Measure probe performance.  Currently measures: 
# static user uprobes, static user kprobes, dynamic user uprobes.

# example use:
# ./bench.sh -stapdir /foo/stap/install/ -gccdir /foo/gcc-4.4.3-10/install/

function stap_test() {

# Compile bench
$STAP/bin/dtrace -G -s bench_.d -D$1
$STAP/bin/dtrace --types -h -s bench_.d -D$1
$GCC/bin/gcc -D$1 -DLOOP=10 bench_.o bench.c -o bench-$2$3.x -I$TESTSRC -I. -isystem $STAP/include -g
if [ $? -ne 0 ]; then echo "error compiling bench-$2$3"; return; fi
./bench-$2$3.x > /dev/null

# Run bench with stap
taskset 1 $STAP/bin/stap -DSTP_NO_OVERLOAD=1 -g -p4 -m stapbench_$2$3 bench.stp ./bench-$2$3.x $1 >/dev/null
if [ $? -ne 0 ]; then echo "error running stapbench_$2$3 with stap"; return; fi

# Parse /usr/bin/time, bench.x, bench.stp output to get statistics
(
taskset 1 /usr/bin/time ./bench-$2$3.x 2>&1 >/dev/null # mute stdout, get times from stderr
$STAP/bin/staprun stapbench_$2$3.ko -c "taskset 1 /usr/bin/time ./bench-$2$3.x" 2>&1
) | awk --non-decimal-data '
function seconds(s) {
    if (index(s,":"))
	m=substr(s,0,index(s,":"))*60
    else m=0
    return m + substr(s,index(s,":")+1) 
}

# probe count and average probe setup cycles from bench.stp
/@count/ {
  n += 1
  count += (substr($2,8));
  avg += (substr($6,6))
}

# elapsed time from /usr/bin/time
/elapsed/ {
  elapsed=(seconds($3))
  if (nostapet == 0) {
    nostapet=elapsed
    print "without stap elapsed time is " elapsed
  }
  else
    print "with stap elapsed time is " elapsed
}

# average probe cycles from bench.x
/_cycles/ {
  cycles_n += 1
  cycles += $2
}

END {
  print "count of probe hits is " count
  if (cycles && n) {
    printf "average cycles/probe is %d\n", (cycles / cycles_n)
    printf "average setup cycles/probe is %d\n", (avg / n)
  }
  if (count)
    printf "seconds/probe (%s/%s) is %.9f\n",
      elapsed-nostapet, count, (elapsed-nostapet)/count
}'

}

usage () {
echo 'Usage $0 -testsrcdir /testsuite/src/top/dir [-k] [-stapdir /stap/top/dir] [-gccdir /gcc/top/dir] [-help]'
exit
}

# Main

while test ! -z "$1" ; do
    if [ "$1" = "-gccdir" ] ; then GCC=$2 ; shift
    elif [ "$1" = "-stapdir" ] ; then STAP=$2 ; shift
    elif [ "$1" = "-testsrcdir" ] ; then TESTSRC=$2 ; shift
    elif [ "$1" = "-k" ] ; then KEEP=1 ;
    elif [ "$1" = "-h" -o "$1" = "-help" -o "$1" = "?" ] ; then
	usage
    else echo Unrecognized arg "$1" 
        exit
    fi
   shift
done

if [ ! -z "$GCC" ] ; then
 if [ ! -x "$GCC/bin/gcc" ] ; then
    echo $GCC/bin/gcc does not exist
    exit
 fi
else
 GCC=/usr/
fi
echo Using $GCC/bin/gcc

if [ ! -z "$STAP" ] ; then
 if [ ! -x "$STAP/bin/stap" ] ; then
    echo $STAP/bin/stap does not exist
    exit
 fi
else
 STAP=/usr/
fi
echo Using $STAP/bin/stap

if [ ! -z "$TESTSRC" ] ; then
 if [ ! -r "$TESTSRC/sys/sdt.h" ] ; then
    echo $TESTSRC/sys/sdt.h does not exist
    exit
 fi
else
 echo -e 'The testsuite sources containing directory must be given\nso the compatible sdt.h can be found'
 usage
fi
echo Using $TESTSRC/sys/sdt.h

echo -e "\n##### LABEL (NO SDT)  #####\n"
stap_test NO_STAP_SDT nosdt

echo -e "\n##### UPROBE V1 #####\n"
stap_test STAP_SDT_V1 uprobe

echo -e "\n##### UPROBE V2 #####\n"
stap_test STAP_SDT_V2 uprobe2

echo -e "\n##### UPROBE V3 #####\n"
stap_test STAP_SDT_V3 uprobe3