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 run-speed-test.sh trunk # Baseline measurement of trunk 7# sh run-speed-test.sh x1 # Measure some experimental change 8# fossil test-diff --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 24CC_OPTS="-DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_MEMSYS5" 25SPEEDTEST_OPTS="--shrink-memory --reprepare --heap 10000000 64" 26SIZE=5 27doExplain=0 28while test "$1" != ""; do 29 case $1 in 30 --reprepare) 31 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 32 ;; 33 --autovacuum) 34 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 35 ;; 36 --utf16be) 37 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 38 ;; 39 --stats) 40 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 41 ;; 42 --without-rowid) 43 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 44 ;; 45 --nomemstat) 46 SPEEDTEST_OPTS="$SPEEDTEST_OPTS $1" 47 ;; 48 --wal) 49 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --journal wal" 50 ;; 51 --size) 52 shift; SIZE=$1 53 ;; 54 --explain) 55 doExplain=1 56 ;; 57 --heap) 58 CC_OPTS="$CC_OPTS -DSQLITE_ENABLE_MEMSYS5" 59 shift; 60 SPEEDTEST_OPTS="$SPEEDTEST_OPTS --heap $1 64" 61 ;; 62 *) 63 CC_OPTS="$CC_OPTS $1" 64 ;; 65 esac 66 shift 67done 68SPEEDTEST_OPTS="$SPEEDTEST_OPTS --size $SIZE" 69echo "NAME = $NAME" | tee summary-$NAME.txt 70echo "SPEEDTEST_OPTS = $SPEEDTEST_OPTS" | tee -a summary-$NAME.txt 71echo "CC_OPTS = $CC_OPTS" | tee -a summary-$NAME.txt 72rm -f cachegrind.out.* speedtest1 speedtest1.db sqlite3.o 73gcc -g -Os -Wall -I. $CC_OPTS -c sqlite3.c 74size sqlite3.o | tee -a summary-$NAME.txt 75if test $doExplain -eq 1; then 76 gcc -g -Os -Wall -I. $CC_OPTS \ 77 -DSQLITE_ENABLE_EXPLAIN_COMMENTS \ 78 ./shell.c ./sqlite3.c -o sqlite3 -ldl -lpthread 79fi 80SRC=./speedtest1.c 81gcc -g -Os -Wall -I. $CC_OPTS $SRC ./sqlite3.o -o speedtest1 -ldl -lpthread 82ls -l speedtest1 | tee -a summary-$NAME.txt 83valgrind --tool=cachegrind ./speedtest1 speedtest1.db \ 84 $SPEEDTEST_OPTS 2>&1 | tee -a summary-$NAME.txt 85size sqlite3.o | tee -a summary-$NAME.txt 86wc sqlite3.c 87cg_anno.tcl cachegrind.out.* >cout-$NAME.txt 88if test $doExplain -eq 1; then 89 ./speedtest1 --explain $SPEEDTEST_OPTS | ./sqlite3 >explain-$NAME.txt 90fi 91