#!/usr/bin/env bash # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # debug? Just uncomment. #SVNBENCH_DEBUG=DEBUG_ if [ -n "$SVNBENCH_DEBUG" ]; then SVNBENCH_DEBUG="DEBUG_" fi # Subversion bin-dir used for maintenance of working copies SVN_STABLE="$HOME/pat/stable/prefix/bin/" # Where to find the svn binaries you want to benchmark, what are their labels # and Last Changed Revisions? # side A SVN_A_NAME="1.7.0" SVN_A="$HOME/pat/bench/prefix/bin" SVN_A_REV="$("$SVN_STABLE"/svnversion -c "$HOME/pat/bench/src" | sed 's/.*://')" # side B SVN_B_NAME="trunk" SVN_B="$HOME/pat/trunk/prefix/bin" SVN_B_REV="$("$SVN_STABLE"/svnversion -c "$HOME/pat/trunk/src" | sed 's/.*://')" echo "$SVN_A_NAME@$SVN_A_REV vs. $SVN_B_NAME@$SVN_B_REV" # benchmark script and parameters... benchmark="$PWD/benchmark.py" db="$PWD/${SVNBENCH_DEBUG}benchmark.db" batch(){ levels="$1" spread="$2" N="$3" # SVN_A is a fixed tag, currently 1.7.0. For each call, run this once. # It will be called again and again for each trunk build being tested, # that's why we don't really need to run it $N times every time. N_for_A=1 "$benchmark" "--db-path=$db" "--svn-bin-dir=$SVN_A" \ run "$SVN_A_NAME@$SVN_A_REV,${levels}x$spread" "$N_for_A" >/dev/null # SVN_B is a branch, i.e. the moving target, benchmarked at a specific # point in history each time this script is called. Run this $N times. "$benchmark" "--db-path=$db" "--svn-bin-dir=$SVN_B" \ run "$SVN_B_NAME@$SVN_B_REV,${levels}x$spread" $N >/dev/null } N=3 al=5 as=5 bl=100 bs=1 cl=1 cs=100 if [ -n "$SVNBENCH_DEBUG" ]; then echo "DEBUG" N=1 al=1 as=1 bl=2 bs=1 cl=1 cs=2 fi { started="$(date)" echo "Started at $started" echo " *DISCLAIMER* - This tests only file://-URL access on a GNU/Linux VM. This is intended to measure changes in performance of the local working copy layer, *only*. These results are *not* generally true for everyone. Charts of this data are available at http://svn-qavm.apache.org/charts/" if [ -z "$SVNBENCH_SUMMARY_ONLY" ]; then batch $al $as $N batch $bl $bs $N batch $cl $cs $N else echo "(not running benchmarks, just printing results on record.)" fi echo "" echo "Averaged-total results across all runs:" echo "---------------------------------------" echo "" "$benchmark" "--db-path=$db" \ compare "$SVN_A_NAME" "$SVN_B_NAME@$SVN_B_REV" echo "" echo "" echo "Above totals split into separate <dir-levels>x<dir-spread> runs:" echo "----------------------------------------------------------------" echo "" for lvlspr in "${al}x${as}" "${bl}x${bs}" "${cl}x${cs}"; do "$benchmark" "--db-path=$db" \ compare "$SVN_A_NAME,$lvlspr" "$SVN_B_NAME@$SVN_B_REV,$lvlspr" echo "" done echo "" echo "" echo "More detail:" echo "------------" echo "" for lvlspr in "${al}x${as}" "${bl}x${bs}" "${cl}x${cs}" "" ; do "$benchmark" "--db-path=$db" show "$SVN_A_NAME,$lvlspr" echo -- "$benchmark" "--db-path=$db" show "$SVN_B_NAME@$SVN_B_REV,$lvlspr" echo -- "$benchmark" "--db-path=$db" \ compare -v "$SVN_A_NAME,$lvlspr" "$SVN_B_NAME@$SVN_B_REV,$lvlspr" echo "" echo "" done echo "" echo "Had started at $started," echo " done at $(date)" } 2>&1 | tee results.txt