#!/bin/sh # set -x if [ $# -lt 4 ]; then echo "usage: perf_diff_gc iterations options1 options2 [conf-name1] [conf-name2]" echo "example: perf_diff_gc 100 \"-bm=default\" \"-log\" \"-nocache\" c1 c2" exit 1 fi BINDIR=`dirname $0` test -z "$RAILS_PERF_DATA" && RAILS_PERF_DATA=$HOME ITER="$1" COMMON="$2" OPT1="$3" OPT2="$4" BENCHMARK="" WARMUP="-warmup" DATE=`date +%m-%d` if [ $# -gt 4 ]; then FILE1="$RAILS_PERF_DATA/${DATE}${BENCHMARK}.$5.gc.txt" else FILE1="$RAILS_PERF_DATA/perf_run1${BENCHMARK}.gc.txt" fi if [ $# -gt 5 ]; then FILE2="$RAILS_PERF_DATA/${DATE}${BENCHMARK}.$6.gc.txt" else FILE2="$RAILS_PERF_DATA/perf_run2${BENCHMARK}.gc.txt" fi OLD_RUBY_HEAP_MIN_SLOTS=$RUBY_HEAP_MIN_SLOTS OLD_RUBY_GC_MALLOC_LIMIT=$RUBY_GC_MALLOC_LIMIT OLD_RUBY_HEAP_FREE_MIN=$RUBY_HEAP_FREE_MIN PERF_OPTIONS="$ITER $WARMUP $COMMON $OPT1" use_patched_gc="no" for opt in $COMMON $OPT1; do case $opt in -patched_gc) use_patched_gc="yes";; esac done if [ "${use_patched_gc}" = "yes" ]; then RUBY_HEAP_MIN_SLOTS=$OLD_RUBY_HEAP_MIN_SLOTS RUBY_GC_MALLOC_LIMIT=$OLD_RUBY_GC_MALLOC_LIMIT RUBY_HEAP_FREE_MIN=$OLD_RUBY_HEAP_FREE_MIN export RUBY_HEAP_MIN_SLOTS RUBY_GC_MALLOC_LIMIT RUBY_HEAP_FREE_MIN else unset RUBY_HEAP_MIN_SLOTS RUBY_GC_MALLOC_LIMIT RUBY_HEAP_FREE_MIN fi echo "benchmarking GC performance with options $PERF_OPTIONS" echo (RUBY_GC_STATS=1 RUBY_GC_DATA_FILE=$FILE1 ruby $BINDIR/run_urls $PERF_OPTIONS >/dev/null) \ && ruby $BINDIR/perf_times_gc $FILE1 echo;echo PERF_OPTIONS="$ITER $WARMUP $COMMON $OPT2" use_patched_gc="no" for opt in $COMMON $OPT2; do case $opt in -patched_gc) use_patched_gc="yes";; esac done if [ "${use_patched_gc}" = "yes" ]; then RUBY_HEAP_MIN_SLOTS=$OLD_RUBY_HEAP_MIN_SLOTS RUBY_GC_MALLOC_LIMIT=$OLD_RUBY_GC_MALLOC_LIMIT RUBY_HEAP_FREE_MIN=$OLD_RUBY_HEAP_FREE_MIN export RUBY_HEAP_MIN_SLOTS RUBY_GC_MALLOC_LIMIT RUBY_HEAP_FREE_MIN else unset RUBY_HEAP_MIN_SLOTS RUBY_GC_MALLOC_LIMIT RUBY_HEAP_FREE_MIN fi echo "benchmarking GC performance with options $PERF_OPTIONS" echo (RUBY_GC_STATS=1 RUBY_GC_DATA_FILE=$FILE2 ruby $BINDIR/run_urls $PERF_OPTIONS >/dev/null) \ && ruby $BINDIR/perf_times_gc $FILE2 echo;echo echo "benchmark comparison data" echo ruby $BINDIR/perf_comp_gc $FILE1 $FILE2