xref: /sqlite-3.40.0/tool/run-speed-test.sh (revision fbcd3130)
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