Separeate main from bench functionality to allow cusomizations

Summary: Isolate db_bench functionality from main so custom benchmark code can be written and managed

Test Plan:
Tested commands
./build_tools/regression_build_test.sh
./db_bench --db=/tmp/rocksdbtest-12321/dbbench --stats_interval_seconds=1 --num=1000
./db_bench --db=/tmp/rocksdbtest-12321/dbbench --stats_interval_seconds=1 --num=1000 --reads=500 --writes=500
./db_bench --db=/tmp/rocksdbtest-12321/dbbench --stats_interval_seconds=1 --num=1000 --merge_keys=100 --numdistinct=100 --num_column_families=3 --num_hot_column_families=1
./db_bench --stats_interval_seconds=1 --num=1000 --bloom_locality=1 --seed=5 --threads=5
./db_bench --duration=60 --value_size=50 --seek_nexts=10 --reverse_iterator=true --usee_uint64_comparator=true --batch-size=5
./db_bench --duration=60 --value_size=50 --seek_nexts=10 --reverse_iterator=true --use_uint64_comparator=true --batch_size=5
./db_bench --duration=60 --value_size=50 --seek_nexts=10 --reverse_iterator=true --usee_uint64_comparator=true --batch-size=5

Test Results - https://phabricator.fb.com/P56130387

Additional tests for:
./db_bench --duration=60 --value_size=50 --seek_nexts=10 --reverse_iterator=true --use_uint64_comparator=true --batch_size=5 --key_size=8 --merge_operator=put
./db_bench --stats_interval_seconds=1 --num=1000 --bloom_locality=1 --seed=5 --threads=5 --merge_operator=uint64add

Results: https://phabricator.fb.com/P56130607

Reviewers: yhchiang, sdong

Reviewed By: sdong

Subscribers: dhruba

Differential Revision: https://reviews.facebook.net/D53991
This commit is contained in:
Jonathan Wiepert 2016-02-16 06:17:31 -08:00
parent 1c868d6848
commit 7bd284c374
5 changed files with 45 additions and 21 deletions

View File

@ -242,6 +242,8 @@ VALGRIND_VER := $(join $(VALGRIND_VER),valgrind)
VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full VALGRIND_OPTS = --error-exitcode=$(VALGRIND_ERROR) --leak-check=full
BENCHTOOLOBJECTS = $(BENCH_SOURCES:.cc=.o) $(LIBOBJECTS) $(TESTUTIL)
TESTS = \ TESTS = \
db_test \ db_test \
db_iter_test \ db_iter_test \
@ -713,7 +715,7 @@ $(LIBRARY): $(LIBOBJECTS)
$(AM_V_AR)rm -f $@ $(AM_V_AR)rm -f $@
$(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS) $(AM_V_at)$(AR) $(ARFLAGS) $@ $(LIBOBJECTS)
db_bench: db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) db_bench: tools/db_bench.o $(BENCHTOOLOBJECTS)
$(AM_LINK) $(AM_LINK)
cache_bench: util/cache_bench.o $(LIBOBJECTS) $(TESTUTIL) cache_bench: util/cache_bench.o $(LIBOBJECTS) $(TESTUTIL)

View File

@ -0,0 +1,9 @@
// Copyright (c) 2013-present, Facebook, Inc. All rights reserved.
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree. An additional grant
// of patent rights can be found in the PATENTS file in the same directory.
#pragma once
namespace rocksdb {
int db_bench_tool(int argc, char** argv);
} // namespace rocksdb

5
src.mk
View File

@ -179,6 +179,9 @@ MOCK_SOURCES = \
table/mock_table.cc \ table/mock_table.cc \
util/mock_env.cc util/mock_env.cc
BENCH_SOURCES = \
tools/db_bench_tool.cc
TEST_BENCH_SOURCES = \ TEST_BENCH_SOURCES = \
third-party/gtest-1.7.0/fused-src/gtest/gtest-all.cc \ third-party/gtest-1.7.0/fused-src/gtest/gtest-all.cc \
db/auto_roll_logger_test.cc \ db/auto_roll_logger_test.cc \
@ -189,7 +192,7 @@ TEST_BENCH_SOURCES = \
db/comparator_db_test.cc \ db/comparator_db_test.cc \
db/corruption_test.cc \ db/corruption_test.cc \
db/cuckoo_table_db_test.cc \ db/cuckoo_table_db_test.cc \
db/db_bench.cc \ tools/db_bench_tool.cc \
db/dbformat_test.cc \ db/dbformat_test.cc \
db/db_iter_test.cc \ db/db_iter_test.cc \
db/db_test.cc \ db/db_test.cc \

23
tools/db_bench.cc Normal file
View File

@ -0,0 +1,23 @@
// Copyright (c) 2013-present, Facebook, Inc. All rights reserved.
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree. An additional grant
// of patent rights can be found in the PATENTS file in the same directory.
//
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors.
#ifndef __STDC_FORMAT_MACROS
#define __STDC_FORMAT_MACROS
#endif
#ifndef GFLAGS
#include <cstdio>
int main() {
fprintf(stderr, "Please install gflags to run rocksdb tools\n");
return 1;
}
#else
#include <rocksdb/db_bench_tool.h>
int main(int argc, char** argv) { rocksdb::db_bench_tool(argc, argv); }
#endif // GFLAGS

View File

@ -11,14 +11,6 @@
#define __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS
#endif #endif
#ifndef GFLAGS
#include <cstdio>
int main() {
fprintf(stderr, "Please install gflags to run rocksdb tools\n");
return 1;
}
#else
#ifdef NUMA #ifdef NUMA
#include <numa.h> #include <numa.h>
#include <numaif.h> #include <numaif.h>
@ -76,6 +68,7 @@ int main() {
#include <io.h> // open/close #include <io.h> // open/close
#endif #endif
namespace {
using GFLAGS::ParseCommandLineFlags; using GFLAGS::ParseCommandLineFlags;
using GFLAGS::RegisterFlagValidator; using GFLAGS::RegisterFlagValidator;
using GFLAGS::SetUsageMessage; using GFLAGS::SetUsageMessage;
@ -521,7 +514,6 @@ DEFINE_uint64(transaction_lock_timeout, 100,
DEFINE_bool(compaction_measure_io_stats, false, DEFINE_bool(compaction_measure_io_stats, false,
"Measure times spents on I/Os while in compactions. "); "Measure times spents on I/Os while in compactions. ");
namespace {
enum rocksdb::CompressionType StringToCompressionType(const char* ctype) { enum rocksdb::CompressionType StringToCompressionType(const char* ctype) {
assert(ctype); assert(ctype);
@ -541,7 +533,7 @@ enum rocksdb::CompressionType StringToCompressionType(const char* ctype) {
return rocksdb::kZSTDNotFinalCompression; return rocksdb::kZSTDNotFinalCompression;
fprintf(stdout, "Cannot parse compression type '%s'\n", ctype); fprintf(stdout, "Cannot parse compression type '%s'\n", ctype);
return rocksdb::kSnappyCompression; //default value return rocksdb::kSnappyCompression; // default value
} }
std::string ColumnFamilyName(size_t i) { std::string ColumnFamilyName(size_t i) {
@ -553,7 +545,6 @@ std::string ColumnFamilyName(size_t i) {
return std::string(name); return std::string(name);
} }
} }
} // namespace
DEFINE_string(compression_type, "snappy", DEFINE_string(compression_type, "snappy",
"Algorithm to use to compress the database"); "Algorithm to use to compress the database");
@ -764,7 +755,6 @@ enum RepFactory {
kCuckoo kCuckoo
}; };
namespace {
enum RepFactory StringToRepFactory(const char* ctype) { enum RepFactory StringToRepFactory(const char* ctype) {
assert(ctype); assert(ctype);
@ -782,7 +772,6 @@ enum RepFactory StringToRepFactory(const char* ctype) {
fprintf(stdout, "Cannot parse memreptable %s\n", ctype); fprintf(stdout, "Cannot parse memreptable %s\n", ctype);
return kSkipList; return kSkipList;
} }
} // namespace
static enum RepFactory FLAGS_rep_factory; static enum RepFactory FLAGS_rep_factory;
DEFINE_string(memtablerep, "skip_list", ""); DEFINE_string(memtablerep, "skip_list", "");
@ -834,6 +823,7 @@ static const bool FLAGS_deletepercent_dummy __attribute__((unused)) =
static const bool FLAGS_table_cache_numshardbits_dummy __attribute__((unused)) = static const bool FLAGS_table_cache_numshardbits_dummy __attribute__((unused)) =
RegisterFlagValidator(&FLAGS_table_cache_numshardbits, RegisterFlagValidator(&FLAGS_table_cache_numshardbits,
&ValidateTableCacheNumshardbits); &ValidateTableCacheNumshardbits);
} // namespace
namespace rocksdb { namespace rocksdb {
@ -4072,9 +4062,7 @@ class Benchmark {
} }
}; };
} // namespace rocksdb int db_bench_tool(int argc, char** argv) {
int main(int argc, char** argv) {
rocksdb::port::InstallStackTraceHandler(); rocksdb::port::InstallStackTraceHandler();
SetUsageMessage(std::string("\nUSAGE:\n") + std::string(argv[0]) + SetUsageMessage(std::string("\nUSAGE:\n") + std::string(argv[0]) +
" [OPTIONS]..."); " [OPTIONS]...");
@ -4143,5 +4131,4 @@ int main(int argc, char** argv) {
benchmark.Run(); benchmark.Run();
return 0; return 0;
} }
} // namespace rocksdb
#endif // GFLAGS