summaryrefslogtreecommitdiffstats
path: root/src/spdk/test/blobfs/rocksdb/rocksdb.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/spdk/test/blobfs/rocksdb/rocksdb.sh')
-rwxr-xr-xsrc/spdk/test/blobfs/rocksdb/rocksdb.sh155
1 files changed, 155 insertions, 0 deletions
diff --git a/src/spdk/test/blobfs/rocksdb/rocksdb.sh b/src/spdk/test/blobfs/rocksdb/rocksdb.sh
new file mode 100755
index 000000000..406156905
--- /dev/null
+++ b/src/spdk/test/blobfs/rocksdb/rocksdb.sh
@@ -0,0 +1,155 @@
+#!/usr/bin/env bash
+
+testdir=$(readlink -f $(dirname $0))
+rootdir=$(readlink -f $testdir/../../..)
+source $rootdir/test/common/autotest_common.sh
+
+dump_db_bench_on_err() {
+ # Fetch std dump of the last run_step that might have failed
+ [[ -e $db_bench ]] || return 0
+
+ # Dump entire *.txt to stderr to clearly see what might have failed
+ xtrace_disable
+ mapfile -t step_map < "$db_bench"
+ printf '%s\n' "${step_map[@]/#/* $step (FAILED)}" >&2
+ xtrace_restore
+}
+
+run_step() {
+ if [ -z "$1" ]; then
+ echo run_step called with no parameter
+ exit 1
+ fi
+
+ cat <<- EOL >> "$1"_flags.txt
+ --spdk=$ROCKSDB_CONF
+ --spdk_bdev=Nvme0n1
+ --spdk_cache_size=$CACHE_SIZE
+ EOL
+
+ db_bench=$1_db_bench.txt
+ echo -n Start $1 test phase...
+ time taskset 0xFF $DB_BENCH --flagfile="$1"_flags.txt &> "$db_bench"
+ DB_BENCH_FILE=$(grep -o '/dev/shm/\(\w\|\.\|\d\|/\)*' "$db_bench")
+ gzip $DB_BENCH_FILE
+ mv $DB_BENCH_FILE.gz "$1"_trace.gz
+ chmod 644 "$1"_trace.gz
+ echo done.
+}
+
+run_bsdump() {
+ $SPDK_EXAMPLE_DIR/blobcli -c $ROCKSDB_CONF -b Nvme0n1 -D &> bsdump.txt
+}
+
+# In the autotest job, we copy the rocksdb source to just outside the spdk directory.
+DB_BENCH_DIR="$rootdir/../rocksdb"
+DB_BENCH=$DB_BENCH_DIR/db_bench
+ROCKSDB_CONF=$testdir/rocksdb.conf
+
+if [ ! -e $DB_BENCH_DIR ]; then
+ echo $DB_BENCH_DIR does not exist
+ false
+fi
+
+timing_enter db_bench_build
+
+pushd $DB_BENCH_DIR
+if [ -z "$SKIP_GIT_CLEAN" ]; then
+ git clean -x -f -d
+fi
+
+EXTRA_CXXFLAGS=""
+GCC_VERSION=$(cc -dumpversion | cut -d. -f1)
+if ((GCC_VERSION >= 9)); then
+ EXTRA_CXXFLAGS+="-Wno-deprecated-copy -Wno-pessimizing-move -Wno-error=stringop-truncation"
+fi
+
+$MAKE db_bench $MAKEFLAGS $MAKECONFIG DEBUG_LEVEL=0 SPDK_DIR=$rootdir EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS"
+popd
+
+timing_exit db_bench_build
+
+$rootdir/scripts/gen_nvme.sh > $ROCKSDB_CONF
+# 0x80 is the bit mask for BlobFS tracepoints
+echo "[Global]" >> $ROCKSDB_CONF
+echo "TpointGroupMask 0x80" >> $ROCKSDB_CONF
+
+trap 'dump_db_bench_on_err; run_bsdump || :; rm -f $ROCKSDB_CONF; exit 1' SIGINT SIGTERM EXIT
+
+if [ -z "$SKIP_MKFS" ]; then
+ run_test "blobfs_mkfs" $rootdir/test/blobfs/mkfs/mkfs $ROCKSDB_CONF Nvme0n1
+fi
+
+mkdir -p $output_dir/rocksdb
+RESULTS_DIR=$output_dir/rocksdb
+if [ $RUN_NIGHTLY -eq 1 ]; then
+ CACHE_SIZE=4096
+ DURATION=60
+ NUM_KEYS=100000000
+else
+ CACHE_SIZE=2048
+ DURATION=20
+ NUM_KEYS=20000000
+fi
+
+cd $RESULTS_DIR
+cp $testdir/common_flags.txt insert_flags.txt
+cat << EOL >> insert_flags.txt
+--benchmarks=fillseq
+--threads=1
+--disable_wal=1
+--use_existing_db=0
+--num=$NUM_KEYS
+EOL
+
+cp $testdir/common_flags.txt randread_flags.txt
+cat << EOL >> randread_flags.txt
+--benchmarks=readrandom
+--threads=16
+--duration=$DURATION
+--disable_wal=1
+--use_existing_db=1
+--num=$NUM_KEYS
+EOL
+
+cp $testdir/common_flags.txt overwrite_flags.txt
+cat << EOL >> overwrite_flags.txt
+--benchmarks=overwrite
+--threads=1
+--duration=$DURATION
+--disable_wal=1
+--use_existing_db=1
+--num=$NUM_KEYS
+EOL
+
+cp $testdir/common_flags.txt readwrite_flags.txt
+cat << EOL >> readwrite_flags.txt
+--benchmarks=readwhilewriting
+--threads=4
+--duration=$DURATION
+--disable_wal=1
+--use_existing_db=1
+--num=$NUM_KEYS
+EOL
+
+cp $testdir/common_flags.txt writesync_flags.txt
+cat << EOL >> writesync_flags.txt
+--benchmarks=overwrite
+--threads=1
+--duration=$DURATION
+--disable_wal=0
+--use_existing_db=1
+--sync=1
+--num=$NUM_KEYS
+EOL
+
+run_test "rocksdb_insert" run_step insert
+run_test "rocksdb_overwrite" run_step overwrite
+run_test "rocksdb_readwrite" run_step readwrite
+run_test "rocksdb_writesync" run_step writesync
+run_test "rocksdb_randread" run_step randread
+
+trap - SIGINT SIGTERM EXIT
+
+run_bsdump
+rm -f $ROCKSDB_CONF