Summary: db_test includes Benchmark for LogAndApply. This diff removes it from db_test and puts it into a separate log_and_apply bench. I just wanted to play around with our new benchmark framework and figure out how it works. I would also like to show you how great it is! I believe right set of microbenchmarks can speed up our productivity a lot and help catch early regressions. Test Plan: no Reviewers: dhruba, haobo, sdong, ljin, yhchiang Reviewed By: yhchiang CC: leveldb Differential Revision: https://reviews.facebook.net/D18261main
parent
9b17558311
commit
d2569fea47
@ -0,0 +1,79 @@ |
||||
// Copyright (c) 2013, 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.
|
||||
|
||||
|
||||
#include <vector> |
||||
|
||||
#include "util/testharness.h" |
||||
#include "util/benchharness.h" |
||||
#include "db/version_set.h" |
||||
#include "util/mutexlock.h" |
||||
|
||||
namespace rocksdb { |
||||
|
||||
std::string MakeKey(unsigned int num) { |
||||
char buf[30]; |
||||
snprintf(buf, sizeof(buf), "%016u", num); |
||||
return std::string(buf); |
||||
} |
||||
|
||||
void BM_LogAndApply(int iters, int num_base_files) { |
||||
VersionSet* vset; |
||||
ColumnFamilyData* default_cfd; |
||||
uint64_t fnum = 1; |
||||
port::Mutex mu; |
||||
MutexLock l(&mu); |
||||
|
||||
BENCHMARK_SUSPEND { |
||||
std::string dbname = test::TmpDir() + "/rocksdb_test_benchmark"; |
||||
ASSERT_OK(DestroyDB(dbname, Options())); |
||||
|
||||
DB* db = nullptr; |
||||
Options opts; |
||||
opts.create_if_missing = true; |
||||
Status s = DB::Open(opts, dbname, &db); |
||||
ASSERT_OK(s); |
||||
ASSERT_TRUE(db != nullptr); |
||||
|
||||
delete db; |
||||
db = nullptr; |
||||
|
||||
Options options; |
||||
EnvOptions sopt; |
||||
vset = new VersionSet(dbname, &options, sopt, nullptr); |
||||
std::vector<ColumnFamilyDescriptor> dummy; |
||||
dummy.push_back(ColumnFamilyDescriptor()); |
||||
ASSERT_OK(vset->Recover(dummy)); |
||||
default_cfd = vset->GetColumnFamilySet()->GetDefault(); |
||||
VersionEdit vbase; |
||||
for (int i = 0; i < num_base_files; i++) { |
||||
InternalKey start(MakeKey(2 * fnum), 1, kTypeValue); |
||||
InternalKey limit(MakeKey(2 * fnum + 1), 1, kTypeDeletion); |
||||
vbase.AddFile(2, ++fnum, 1 /* file size */, start, limit, 1, 1); |
||||
} |
||||
ASSERT_OK(vset->LogAndApply(default_cfd, &vbase, &mu)); |
||||
} |
||||
|
||||
for (int i = 0; i < iters; i++) { |
||||
VersionEdit vedit; |
||||
vedit.DeleteFile(2, fnum); |
||||
InternalKey start(MakeKey(2 * fnum), 1, kTypeValue); |
||||
InternalKey limit(MakeKey(2 * fnum + 1), 1, kTypeDeletion); |
||||
vedit.AddFile(2, ++fnum, 1 /* file size */, start, limit, 1, 1); |
||||
vset->LogAndApply(default_cfd, &vedit, &mu); |
||||
} |
||||
} |
||||
|
||||
BENCHMARK_NAMED_PARAM(BM_LogAndApply, 1000_iters_1_file, 1000, 1) |
||||
BENCHMARK_NAMED_PARAM(BM_LogAndApply, 1000_iters_100_files, 1000, 100) |
||||
BENCHMARK_NAMED_PARAM(BM_LogAndApply, 1000_iters_10000_files, 1000, 10000) |
||||
BENCHMARK_NAMED_PARAM(BM_LogAndApply, 100_iters_100000_files, 100, 100000) |
||||
|
||||
} // namespace rocksdb
|
||||
|
||||
int main(int argc, char** argv) { |
||||
rocksdb::benchmark::RunBenchmarks(); |
||||
return 0; |
||||
} |
Loading…
Reference in new issue