mirror of https://github.com/facebook/rocksdb.git
Integrate block cache tracing into db_bench (#5459)
Summary: This PR integrates the block cache tracing into db_bench. It adds three command line arguments. -block_cache_trace_file (Block cache trace file path.) type: string default: "" -block_cache_trace_max_trace_file_size_in_bytes (The maximum block cache trace file size in bytes. Block cache accesses will not be logged if the trace file size exceeds this threshold. Default is 64 GB.) type: int64 default: 68719476736 -block_cache_trace_sampling_frequency (Block cache trace sampling frequency, termed s. It uses spatial downsampling and samples accesses to one out of s blocks.) type: int32 default: 1 Pull Request resolved: https://github.com/facebook/rocksdb/pull/5459 Differential Revision: D15832031 Pulled By: HaoyuHuang fbshipit-source-id: 0ecf2f2686557251fe741a2769b21170777efa3d
This commit is contained in:
parent
d1ae67bdb9
commit
d43b4cd570
|
@ -774,6 +774,17 @@ DEFINE_string(trace_file, "", "Trace workload to a file. ");
|
||||||
DEFINE_int32(trace_replay_fast_forward, 1,
|
DEFINE_int32(trace_replay_fast_forward, 1,
|
||||||
"Fast forward trace replay, must >= 1. ");
|
"Fast forward trace replay, must >= 1. ");
|
||||||
|
|
||||||
|
DEFINE_int32(block_cache_trace_sampling_frequency, 1,
|
||||||
|
"Block cache trace sampling frequency, termed s. It uses spatial "
|
||||||
|
"downsampling and samples accesses to one out of s blocks.");
|
||||||
|
DEFINE_int64(
|
||||||
|
block_cache_trace_max_trace_file_size_in_bytes,
|
||||||
|
uint64_t{64} * 1024 * 1024 * 1024,
|
||||||
|
"The maximum block cache trace file size in bytes. Block cache accesses "
|
||||||
|
"will not be logged if the trace file size exceeds this threshold. Default "
|
||||||
|
"is 64 GB.");
|
||||||
|
DEFINE_string(block_cache_trace_file, "", "Block cache trace file path.");
|
||||||
|
|
||||||
static enum rocksdb::CompressionType StringToCompressionType(const char* ctype) {
|
static enum rocksdb::CompressionType StringToCompressionType(const char* ctype) {
|
||||||
assert(ctype);
|
assert(ctype);
|
||||||
|
|
||||||
|
@ -2081,6 +2092,7 @@ class Benchmark {
|
||||||
Options open_options_; // keep options around to properly destroy db later
|
Options open_options_; // keep options around to properly destroy db later
|
||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
TraceOptions trace_options_;
|
TraceOptions trace_options_;
|
||||||
|
TraceOptions block_cache_trace_options_;
|
||||||
#endif
|
#endif
|
||||||
int64_t reads_;
|
int64_t reads_;
|
||||||
int64_t deletes_;
|
int64_t deletes_;
|
||||||
|
@ -2917,6 +2929,47 @@ class Benchmark {
|
||||||
fprintf(stdout, "Tracing the workload to: [%s]\n",
|
fprintf(stdout, "Tracing the workload to: [%s]\n",
|
||||||
FLAGS_trace_file.c_str());
|
FLAGS_trace_file.c_str());
|
||||||
}
|
}
|
||||||
|
// Start block cache tracing.
|
||||||
|
if (!FLAGS_block_cache_trace_file.empty()) {
|
||||||
|
// Sanity checks.
|
||||||
|
if (FLAGS_block_cache_trace_sampling_frequency <= 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Block cache trace sampling frequency must be higher than "
|
||||||
|
"0.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (FLAGS_block_cache_trace_max_trace_file_size_in_bytes <= 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"The maximum file size for block cache tracing must be "
|
||||||
|
"higher than 0.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
block_cache_trace_options_.max_trace_file_size =
|
||||||
|
FLAGS_block_cache_trace_max_trace_file_size_in_bytes;
|
||||||
|
block_cache_trace_options_.sampling_frequency =
|
||||||
|
FLAGS_block_cache_trace_sampling_frequency;
|
||||||
|
std::unique_ptr<TraceWriter> block_cache_trace_writer;
|
||||||
|
Status s = NewFileTraceWriter(FLAGS_env, EnvOptions(),
|
||||||
|
FLAGS_block_cache_trace_file,
|
||||||
|
&block_cache_trace_writer);
|
||||||
|
if (!s.ok()) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Encountered an error when creating trace writer, %s\n",
|
||||||
|
s.ToString().c_str());
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
s = db_.db->StartBlockCacheTrace(block_cache_trace_options_,
|
||||||
|
std::move(block_cache_trace_writer));
|
||||||
|
if (!s.ok()) {
|
||||||
|
fprintf(
|
||||||
|
stderr,
|
||||||
|
"Encountered an error when starting block cache tracing, %s\n",
|
||||||
|
s.ToString().c_str());
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
fprintf(stdout, "Tracing block cache accesses to: [%s]\n",
|
||||||
|
FLAGS_block_cache_trace_file.c_str());
|
||||||
|
}
|
||||||
#endif // ROCKSDB_LITE
|
#endif // ROCKSDB_LITE
|
||||||
|
|
||||||
if (num_warmup > 0) {
|
if (num_warmup > 0) {
|
||||||
|
@ -2959,6 +3012,14 @@ class Benchmark {
|
||||||
s.ToString().c_str());
|
s.ToString().c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!FLAGS_block_cache_trace_file.empty()) {
|
||||||
|
Status s = db_.db->EndBlockCacheTrace();
|
||||||
|
if (!s.ok()) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Encountered an error ending the block cache tracing, %s\n",
|
||||||
|
s.ToString().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif // ROCKSDB_LITE
|
#endif // ROCKSDB_LITE
|
||||||
|
|
||||||
if (FLAGS_statistics) {
|
if (FLAGS_statistics) {
|
||||||
|
|
Loading…
Reference in New Issue