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