diff options
Diffstat (limited to 'src/spdk/test/blobfs/rocksdb/rocksdb.sh')
-rwxr-xr-x | src/spdk/test/blobfs/rocksdb/rocksdb.sh | 155 |
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 |