From f5f5c645a892caa8770d4b61f33570db916b7caf Mon Sep 17 00:00:00 2001 From: Igor Canadi Date: Wed, 11 Dec 2013 13:51:20 -0800 Subject: [PATCH] Add readrandom with both memtable and sst regression test Summary: @MarkCallaghan's tests indicate that performance with 8k rows in memtable is much worse than empty memtable. I wanted to add a regression tests that measures this effect, so we could optimize it. However, current config shows 634461 QPS on my devbox. Mark, any idea why this is so much faster than your measurements? Test Plan: Ran the regression test. Reviewers: MarkCallaghan, dhruba, haobo Reviewed By: MarkCallaghan CC: leveldb, MarkCallaghan Differential Revision: https://reviews.facebook.net/D14511 --- build_tools/regression_build_test.sh | 116 +++++++++++++++++++++++---- 1 file changed, 99 insertions(+), 17 deletions(-) diff --git a/build_tools/regression_build_test.sh b/build_tools/regression_build_test.sh index b0140ef48f..b0c130e3cf 100755 --- a/build_tools/regression_build_test.sh +++ b/build_tools/regression_build_test.sh @@ -26,15 +26,20 @@ function cleanup { } trap cleanup EXIT -git_br=$(basename $GIT_BRANCH) + +if [ -z $GIT_BRANCH ]; then + git_br=`git rev-parse --abbrev-ref HEAD` +else + git_br=$(basename $GIT_BRANCH) +fi + if [ $git_br == "master" ]; then git_br="" else git_br="."$git_br fi -make clean -OPT=-DNDEBUG make db_bench -j$(nproc) +make release # measure fillseq + fill up the DB for overwrite benchmark ./db_bench \ @@ -45,7 +50,8 @@ OPT=-DNDEBUG make db_bench -j$(nproc) --num=$NUM \ --writes=$NUM \ --cache_size=6442450944 \ - --cache_numshardbits=6 \ + --cache_numshardbits=4 \ + --table_cache_numshardbits=4 \ --open_files=55000 \ --statistics=1 \ --histogram=1 \ @@ -60,9 +66,10 @@ OPT=-DNDEBUG make db_bench -j$(nproc) --use_existing_db=1 \ --bloom_bits=10 \ --num=$NUM \ - --writes=$((NUM / 2)) \ + --writes=$((NUM / 10)) \ --cache_size=6442450944 \ - --cache_numshardbits=6 \ + --cache_numshardbits=4 \ + --table_cache_numshardbits=4 \ --open_files=55000 \ --statistics=1 \ --histogram=1 \ @@ -80,7 +87,8 @@ OPT=-DNDEBUG make db_bench -j$(nproc) --num=$NUM \ --writes=$NUM \ --cache_size=6442450944 \ - --cache_numshardbits=6 \ + --cache_numshardbits=4 \ + --table_cache_numshardbits=4 \ --open_files=55000 \ --statistics=1 \ --histogram=1 \ @@ -96,9 +104,10 @@ OPT=-DNDEBUG make db_bench -j$(nproc) --use_existing_db=1 \ --bloom_bits=10 \ --num=$NUM \ - --reads=$NUM \ + --reads=$((NUM / 5)) \ --cache_size=6442450944 \ - --cache_numshardbits=8 \ + --cache_numshardbits=4 \ + --table_cache_numshardbits=4 \ --open_files=55000 \ --disable_seek_compaction=1 \ --statistics=1 \ @@ -106,18 +115,19 @@ OPT=-DNDEBUG make db_bench -j$(nproc) --disable_data_sync=1 \ --disable_wal=1 \ --sync=0 \ - --threads=32 > ${STAT_FILE}.readrandom + --threads=16 > ${STAT_FILE}.readrandom -# measure readrandom with 300MB block cache +# measure readrandom with 100MB block cache ./db_bench \ --benchmarks=readrandom \ --db=$DATA_DIR \ --use_existing_db=1 \ --bloom_bits=10 \ --num=$NUM \ - --reads=$NUM \ - --cache_size=314572800 \ - --cache_numshardbits=8 \ + --reads=$((NUM / 5)) \ + --cache_size=104857600 \ + --cache_numshardbits=4 \ + --table_cache_numshardbits=4 \ --open_files=55000 \ --disable_seek_compaction=1 \ --statistics=1 \ @@ -125,7 +135,70 @@ OPT=-DNDEBUG make db_bench -j$(nproc) --disable_data_sync=1 \ --disable_wal=1 \ --sync=0 \ - --threads=32 > ${STAT_FILE}.readrandomsmallblockcache + --threads=16 > ${STAT_FILE}.readrandomsmallblockcache + +# measure readrandom with 8k data in memtable +./db_bench \ + --benchmarks=overwrite,readrandom \ + --db=$DATA_DIR \ + --use_existing_db=1 \ + --bloom_bits=10 \ + --num=$NUM \ + --reads=$((NUM / 5)) \ + --writes=512 \ + --cache_size=6442450944 \ + --cache_numshardbits=4 \ + --table_cache_numshardbits=4 \ + --write_buffer_size=1000000000 \ + --open_files=55000 \ + --disable_seek_compaction=1 \ + --statistics=1 \ + --histogram=1 \ + --disable_data_sync=1 \ + --disable_wal=1 \ + --sync=0 \ + --threads=16 > ${STAT_FILE}.readrandom_mem_sst + + +# fill up the db for readrandom benchmark with filluniquerandom (1GB total size) +./db_bench \ + --benchmarks=filluniquerandom \ + --db=$DATA_DIR \ + --use_existing_db=0 \ + --bloom_bits=10 \ + --num=$((NUM / 4)) \ + --writes=$((NUM / 4)) \ + --cache_size=6442450944 \ + --cache_numshardbits=4 \ + --table_cache_numshardbits=4 \ + --open_files=55000 \ + --statistics=1 \ + --histogram=1 \ + --disable_data_sync=1 \ + --disable_wal=1 \ + --sync=0 \ + --threads=1 > /dev/null + +# measure readrandom after load with filluniquerandom with 6GB block cache +./db_bench \ + --benchmarks=readrandom \ + --db=$DATA_DIR \ + --use_existing_db=1 \ + --bloom_bits=10 \ + --num=$((NUM / 4)) \ + --reads=$((NUM / 4)) \ + --cache_size=6442450944 \ + --cache_numshardbits=4 \ + --table_cache_numshardbits=4 \ + --open_files=55000 \ + --disable_seek_compaction=1 \ + --disable_auto_compactions=1 \ + --statistics=1 \ + --histogram=1 \ + --disable_data_sync=1 \ + --disable_wal=1 \ + --sync=0 \ + --threads=16 > ${STAT_FILE}.readrandom_filluniquerandom # measure memtable performance -- none of the data gets flushed to disk ./db_bench \ @@ -135,7 +208,8 @@ OPT=-DNDEBUG make db_bench -j$(nproc) --num=$((NUM / 10)) \ --reads=$NUM \ --cache_size=6442450944 \ - --cache_numshardbits=8 \ + --cache_numshardbits=4 \ + --table_cache_numshardbits=4 \ --write_buffer_size=1000000000 \ --open_files=55000 \ --disable_seek_compaction=1 \ @@ -145,13 +219,19 @@ OPT=-DNDEBUG make db_bench -j$(nproc) --disable_wal=1 \ --sync=0 \ --value_size=10 \ - --threads=32 > ${STAT_FILE}.memtablefillreadrandom + --threads=16 > ${STAT_FILE}.memtablefillreadrandom # send data to ods function send_to_ods { key="$1" value="$2" + if [ -z $JENKINS_HOME ]; then + # running on devbox, just print out the values + echo $1 $2 + return + fi + if [ -z "$value" ];then echo >&2 "ERROR: Key $key doesn't have a value." return @@ -180,5 +260,7 @@ send_benchmark_to_ods overwrite overwrite $STAT_FILE.overwrite send_benchmark_to_ods fillseq fillseq $STAT_FILE.fillseq send_benchmark_to_ods readrandom readrandom $STAT_FILE.readrandom send_benchmark_to_ods readrandom readrandom_smallblockcache $STAT_FILE.readrandomsmallblockcache +send_benchmark_to_ods readrandom readrandom_memtable_sst $STAT_FILE.readrandom_mem_sst +send_benchmark_to_ods readrandom readrandom_fillunique_random $STAT_FILE.readrandom_filluniquerandom send_benchmark_to_ods fillrandom memtablefillrandom $STAT_FILE.memtablefillreadrandom send_benchmark_to_ods readrandom memtablereadrandom $STAT_FILE.memtablefillreadrandom