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,
|
||||
"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) {
|
||||
assert(ctype);
|
||||
|
||||
@ -2081,6 +2092,7 @@ class Benchmark {
|
||||
Options open_options_; // keep options around to properly destroy db later
|
||||
#ifndef ROCKSDB_LITE
|
||||
TraceOptions trace_options_;
|
||||
TraceOptions block_cache_trace_options_;
|
||||
#endif
|
||||
int64_t reads_;
|
||||
int64_t deletes_;
|
||||
@ -2917,6 +2929,47 @@ class Benchmark {
|
||||
fprintf(stdout, "Tracing the workload to: [%s]\n",
|
||||
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
|
||||
|
||||
if (num_warmup > 0) {
|
||||
@ -2959,6 +3012,14 @@ class Benchmark {
|
||||
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
|
||||
|
||||
if (FLAGS_statistics) {
|
||||
|
Loading…
Reference in New Issue
Block a user