1#!/bin/bash 2# 3# This is a template for a script used for day-to-day size and 4# performance monitoring of SQLite. Typical usage: 5# 6# sh speed-check.sh trunk # Baseline measurement of trunk 7# sh speed-check.sh x1 # Measure some experimental change 8# fossil xdiff --tk cout-trunk.txt cout-x1.txt # View chanages 9# 10# There are multiple output files, all with a base name given by 11# the first argument: 12# 13# summary-$BASE.txt # Copy of standard output 14# cout-$BASE.txt # cachegrind output 15# explain-$BASE.txt # EXPLAIN listings (only with --explain) 16# 17if test "$1" = "" 18then 19 echo "Usage: $0 OUTPUTFILE [OPTIONS]" 20 exit 21fi 22NAME=$1 23shift 24#CC_OPTS="-DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_MEMSYS5" 25CC_OPTS="-DSQLITE_ENABLE_MEMSYS5" 26CC=gcc 27SPEEDTEST_OPTS="--shrink-memory --reprepare --stats --heap 10000000 64" 28SIZE=5 29LEAN_OPTS="-DSQLITE_THREADSAFE=0" 30LEAN_OPTS="$LEAN_OPTS -DSQLITE_DEFAULT_MEMSTATUS=0" 31LEAN_OPTS="$LEAN_OPTS -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1" 32LEAN_OPTS="$LEAN_OPTS -DSQLITE_LIKE_DOESNT_MATCH_BLOBS" 33LEAN_OPTS="$LEAN_OPTS -DSQLITE_MAX_EXPR_DEPTH=0" 34LEAN_OPTS="$LEAN_OPTS -DSQLITE_OMIT_DECLTYPE" 35LEAN_OPTS="$LEAN_OPTS -DSQLITE_OMIT_DEPRECATED" 36LEAN_OPTS="$LEAN_OPTS -DSQLITE_OMIT_PROGRESS_CALLBACK" 37LEAN_OPTS="$LEAN_OPTS -DSQLITE_OMIT_SHARED_CACHE" 38LEAN_OPTS="$LEAN_OPTS -DSQLITE_USE_ALLOCA" 39BASELINE="trunk" 40doExplain=0 41doCachegrind=1 42doVdbeProfile=0 43doWal=1 44doDiff=1 45while test "$1" != ""; do 46 case $1 in 47 --nodiff) 48 doDiff=0 49 ;; 50 --reprepare) 51 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 52 ;; 53 --autovacuum) 54 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 55 ;; 56 --utf16be) 57 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 58 ;; 59 --stats) 60 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 61 ;; 62 --without-rowid) 63 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 64 ;; 65 --strict) 66 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 67 ;; 68 --nomemstat) 69 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 70 ;; 71 --multithread) 72 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 73 ;; 74 --singlethread) 75 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 76 ;; 77 --serialized) 78 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 79 ;; 80 --temp) 81 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --temp 6" 82 ;; 83 --legacy) 84 doWal=0 85 CC_OPTS="$CC_OPTS -DSPEEDTEST_OMIT_HASH" 86 ;; 87 --verify) 88 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --verify" 89 ;; 90 --wal) 91 doWal=1 92 ;; 93 --size) 94 shift; SIZE=$1 95 ;; 96 --cachesize) 97 shift; SPEEDTEST_OPTS="$SPEEDTEST_OPTS --cachesize $1" 98 ;; 99 --stmtcache) 100 shift; SPEEDTEST_OPTS="$SPEEDTEST_OPTS --stmtcache $1" 101 ;; 102 --checkpoint) 103 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --checkpoint" 104 ;; 105 --explain) 106 doExplain=1 107 ;; 108 --vdbeprofile) 109 rm -f vdbe_profile.out 110 CC_OPTS="$CC_OPTS -DVDBE_PROFILE" 111 doCachegrind=0 112 doVdbeProfile=1 113 ;; 114 --lean) 115 CC_OPTS="$CC_OPTS $LEAN_OPTS" 116 ;; 117 --clang) 118 CC=clang 119 ;; 120 --icc) 121 CC=/home/drh/intel/bin/icc 122 ;; 123 --gcc7) 124 CC=gcc-7 125 ;; 126 --heap) 127 CC_OPTS="$CC_OPTS -DSQLITE_ENABLE_MEMSYS5" 128 shift; 129 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --heap $1 64" 130 ;; 131 --lookaside) 132 shift; 133 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --lookaside $1 $2" 134 shift; 135 ;; 136 --repeat) 137 CC_OPTS="$CC_OPTS -DSQLITE_ENABLE_RCACHE" 138 shift; 139 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --repeat $1" 140 ;; 141 --mmap) 142 shift; 143 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --mmap $1" 144 ;; 145 --rtree) 146 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --testset rtree" 147 CC_OPTS="$CC_OPTS -DSQLITE_ENABLE_RTREE" 148 ;; 149 --persist) 150 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --persist" 151 ;; 152 --orm) 153 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --testset orm" 154 ;; 155 --cte) 156 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --testset cte" 157 ;; 158 --fp) 159 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --testset fp" 160 ;; 161 -*) 162 CC_OPTS="$CC_OPTS $1" 163 ;; 164 *) 165 BASELINE=$1 166 ;; 167 esac 168 shift 169done 170if test $doWal -eq 1; then 171 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --journal wal" 172fi 173SPEEDTEST_OPTS="$SPEEDTEST_OPTS --size $SIZE" 174echo "NAME = $NAME" | tee summary-$NAME.txt 175echo "SPEEDTEST_OPTS = $SPEEDTEST_OPTS" | tee -a summary-$NAME.txt 176echo "CC_OPTS = $CC_OPTS" | tee -a summary-$NAME.txt 177rm -f cachegrind.out.* speedtest1 speedtest1.db sqlite3.o 178if test $doVdbeProfile -eq 1; then 179 rm -f vdbe_profile.out 180fi 181$CC -g -Os -Wall -I. $CC_OPTS -c sqlite3.c 182size sqlite3.o | tee -a summary-$NAME.txt 183if test $doExplain -eq 1; then 184 $CC -g -Os -Wall -I. $CC_OPTS \ 185 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \ 186 ./shell.c ./sqlite3.c -o sqlite3 -ldl -lpthread 187fi 188SRC=./speedtest1.c 189$CC -g -Os -Wall -I. $CC_OPTS $SRC ./sqlite3.o -o speedtest1 -ldl -lpthread 190ls -l speedtest1 | tee -a summary-$NAME.txt 191if test $doCachegrind -eq 1; then 192 valgrind --tool=cachegrind ./speedtest1 speedtest1.db \ 193 $SPEEDTEST_OPTS 2>&1 | tee -a summary-$NAME.txt 194else 195 ./speedtest1 speedtest1.db $SPEEDTEST_OPTS 2>&1 | tee -a summary-$NAME.txt 196fi 197size sqlite3.o | tee -a summary-$NAME.txt 198wc sqlite3.c 199if test $doCachegrind -eq 1; then 200 cg_anno.tcl cachegrind.out.* >cout-$NAME.txt 201 echo '*****************************************************' >>cout-$NAME.txt 202 sed 's/^[0-9=-]\{9\}/==00000==/' summary-$NAME.txt >>cout-$NAME.txt 203fi 204if test $doExplain -eq 1; then 205 ./speedtest1 --explain $SPEEDTEST_OPTS | ./sqlite3 >explain-$NAME.txt 206fi 207if test $doVdbeProfile -eq 1; then 208 tclsh ../sqlite/tool/vdbe_profile.tcl >vdbeprofile-$NAME.txt 209 open vdbeprofile-$NAME.txt 210fi 211if test "$NAME" != "$BASELINE" -a $doVdbeProfile -ne 1 -a $doDiff -ne 0; then 212 fossil test-diff --tk -c 20 cout-$BASELINE.txt cout-$NAME.txt 213fi 214