Although the generation of perf data is not as slow as valgrind, it
seems simplest to re-use the machinery already there to save the logs
in a timestamped subdirectory.
- xz. Some speedup can be gotten by installing "pixz", but this is
probably only worthwhile if you are debugging the tests.
- valgrind (for the memory tests)
- xz. Some speedup can be gotten by installing "pixz", but this is
probably only worthwhile if you are debugging the tests.
- valgrind (for the memory tests)
+- perf (optional, for more fine-grained timing)
Getting set up to run tests:
----------------------------
Getting set up to run tests:
----------------------------
--small / --medium / --large Choose corpus size.
--debug Enable debugging. In particular don't delete
--small / --medium / --large Choose corpus size.
--debug Enable debugging. In particular don't delete
+ temporary directories.
+--perf Run perf record in place of /usr/bin/time. Perf output can be
+ found in a log directory.
+--call-graph {fp,lbr,dwarf} Call graph option for perf record. Default is 'lbr'.
When using the make targets, you can pass arguments to all test
scripts by defining the make variable OPTIONS.
When using the make targets, you can pass arguments to all test
scripts by defining the make variable OPTIONS.
+Log Directory
+-------------
+
+The memory tests, and the time tests when option '--perf' is given
+save their output in a directory named as follows
+
+ log.$test_name-$corpus_size-$timestamp
+
+These directories are removed by "make clean".
+
Writing tests
-------------
Writing tests
-------------
. $(dirname "$0")/version.sh || exit 1
. $(dirname "$0")/version.sh || exit 1
+perf_callgraph=lbr
+use_perf=0
+ -p|--perf)
+ use_perf=1;
+ shift
+ ;;
+ -c|--call-graph)
+ shift
+ perf_callgraph=$1
+ shift
+ ;;
-s|--small)
corpus_size=small;
shift
-s|--small)
corpus_size=small;
shift
+make_log_dir () {
+ local timestamp=$(date +%Y%m%dT%H%M%S)
+ log_dir=${TEST_DIRECTORY}/log.$(basename $0)-$corpus_size-${timestamp}
+ mkdir -p "${log_dir}"
+}
+
time_start ()
{
add_email_corpus
time_start ()
{
add_email_corpus
+ if [[ "$use_perf" = 1 ]]; then
+ make_log_dir
+ fi
+
print_header
notmuch_new_with_cache time_run
print_header
notmuch_new_with_cache time_run
- local timestamp=$(date +%Y%m%dT%H%M%S)
- log_dir="${TEST_DIRECTORY}/log.$(basename $0)-$corpus_size-${timestamp}"
- mkdir -p ${log_dir}
notmuch_new_with_cache memory_run
}
notmuch_new_with_cache memory_run
}
printf " %-22s" "$1"
test_count=$(($test_count+1))
if test "$verbose" != "t"; then exec 4>test.output 3>&4; fi
printf " %-22s" "$1"
test_count=$(($test_count+1))
if test "$verbose" != "t"; then exec 4>test.output 3>&4; fi
- if ! eval >&3 "/usr/bin/time -f '%e\t%U\t%S\t%M\t%I/%O' $2" ; then
+ if [[ "$use_perf" = 1 ]]; then
+ command_str="perf record --call-graph=${perf_callgraph} -o ${log_dir}/${test_count}.perf $2"
+ else
+ command_str="/usr/bin/time -f '%e\t%U\t%S\t%M\t%I/%O' $2"
+ fi
+
+ if ! eval >&3 "$command_str" ; then
test_failure=$(($test_failure + 1))
return 1
fi
test_failure=$(($test_failure + 1))
return 1
fi