fb84c49a36
Summary: Pad each Ticker structure to be 64 bytes and make them align on 64 bytes boundary to avoid cache line false sharing issue. Please refer to task 3615553 for more details Test Plan: db_bench LevelDB: version 2.0s Date: Wed Jan 29 12:23:17 2014 CPU: 32 * Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz CPUCache: 20480 KB rocksdb.build.overwrite.qps 49638 rocksdb.build.overwrite.p50_micros 58.73 rocksdb.build.overwrite.p75_micros 210.56 rocksdb.build.overwrite.p99_micros 733.28 rocksdb.build.fillseq.qps 366729 rocksdb.build.fillseq.p50_micros 1.00 rocksdb.build.fillseq.p75_micros 1.00 rocksdb.build.fillseq.p99_micros 2.65 rocksdb.build.readrandom.qps 1152995 rocksdb.build.readrandom.p50_micros 11.27 rocksdb.build.readrandom.p75_micros 15.69 rocksdb.build.readrandom.p99_micros 33.59 rocksdb.build.readrandom_smallblockcache.qps 956047 rocksdb.build.readrandom_smallblockcache.p50_micros 15.23 rocksdb.build.readrandom_smallblockcache.p75_micros 17.31 rocksdb.build.readrandom_smallblockcache.p99_micros 31.49 rocksdb.build.readrandom_memtable_sst.qps 1105183 rocksdb.build.readrandom_memtable_sst.p50_micros 12.04 rocksdb.build.readrandom_memtable_sst.p75_micros 15.78 rocksdb.build.readrandom_memtable_sst.p99_micros 32.49 rocksdb.build.readrandom_fillunique_random.qps 487856 rocksdb.build.readrandom_fillunique_random.p50_micros 29.65 rocksdb.build.readrandom_fillunique_random.p75_micros 40.93 rocksdb.build.readrandom_fillunique_random.p99_micros 78.68 rocksdb.build.memtablefillrandom.qps 91304 rocksdb.build.memtablefillrandom.p50_micros 171.05 rocksdb.build.memtablefillrandom.p75_micros 196.12 rocksdb.build.memtablefillrandom.p99_micros 291.73 rocksdb.build.memtablereadrandom.qps 1340411 rocksdb.build.memtablereadrandom.p50_micros 9.48 rocksdb.build.memtablereadrandom.p75_micros 13.95 rocksdb.build.memtablereadrandom.p99_micros 30.36 rocksdb.build.readwhilewriting.qps 491004 rocksdb.build.readwhilewriting.p50_micros 29.58 rocksdb.build.readwhilewriting.p75_micros 40.34 rocksdb.build.readwhilewriting.p99_micros 76.78 Reviewers: igor, haobo Reviewed By: igor CC: leveldb Differential Revision: https://reviews.facebook.net/D15573
95 lines
2.6 KiB
C++
95 lines
2.6 KiB
C++
// 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 "util/statistics.h"
|
|
#include "rocksdb/statistics.h"
|
|
#include <algorithm>
|
|
#include <cstdio>
|
|
|
|
namespace rocksdb {
|
|
|
|
std::shared_ptr<Statistics> CreateDBStatistics() {
|
|
return std::make_shared<StatisticsImpl>();
|
|
}
|
|
|
|
StatisticsImpl::StatisticsImpl() {}
|
|
|
|
StatisticsImpl::~StatisticsImpl() {}
|
|
|
|
long StatisticsImpl::getTickerCount(Tickers tickerType) {
|
|
assert(tickerType < TICKER_ENUM_MAX);
|
|
return tickers_[tickerType].value;
|
|
}
|
|
|
|
void StatisticsImpl::setTickerCount(Tickers tickerType, uint64_t count) {
|
|
assert(tickerType < TICKER_ENUM_MAX);
|
|
tickers_[tickerType].value = count;
|
|
}
|
|
|
|
void StatisticsImpl::recordTick(Tickers tickerType, uint64_t count) {
|
|
assert(tickerType < TICKER_ENUM_MAX);
|
|
tickers_[tickerType].value += count;
|
|
}
|
|
|
|
void StatisticsImpl::measureTime(Histograms histogramType, uint64_t value) {
|
|
assert(histogramType < HISTOGRAM_ENUM_MAX);
|
|
histograms_[histogramType].Add(value);
|
|
}
|
|
|
|
void StatisticsImpl::histogramData(Histograms histogramType,
|
|
HistogramData* const data) {
|
|
assert(histogramType < HISTOGRAM_ENUM_MAX);
|
|
histograms_[histogramType].Data(data);
|
|
}
|
|
|
|
namespace {
|
|
|
|
// a buffer size used for temp string buffers
|
|
const int kBufferSize = 200;
|
|
|
|
std::string HistogramToString (
|
|
Statistics* dbstats,
|
|
const Histograms& histogram_type,
|
|
const std::string& name) {
|
|
|
|
char buffer[kBufferSize];
|
|
HistogramData histogramData;
|
|
dbstats->histogramData(histogram_type, &histogramData);
|
|
snprintf(
|
|
buffer,
|
|
kBufferSize,
|
|
"%s statistics Percentiles :=> 50 : %f 95 : %f 99 : %f\n",
|
|
name.c_str(),
|
|
histogramData.median,
|
|
histogramData.percentile95,
|
|
histogramData.percentile99
|
|
);
|
|
return std::string(buffer);
|
|
};
|
|
|
|
std::string TickerToString(Statistics* dbstats, const Tickers& ticker,
|
|
const std::string& name) {
|
|
char buffer[kBufferSize];
|
|
snprintf(buffer, kBufferSize, "%s COUNT : %ld\n",
|
|
name.c_str(), dbstats->getTickerCount(ticker));
|
|
return std::string(buffer);
|
|
};
|
|
} // namespace
|
|
|
|
std::string Statistics::ToString() {
|
|
std::string res;
|
|
res.reserve(20000);
|
|
for (const auto& t : TickersNameMap) {
|
|
res.append(TickerToString(this, t.first, t.second));
|
|
}
|
|
for (const auto& h : HistogramsNameMap) {
|
|
res.append(HistogramToString(this, h.first, h.second));
|
|
}
|
|
res.shrink_to_fit();
|
|
return res;
|
|
}
|
|
|
|
} // namespace rocksdb
|