Add a PerfContext counter for secondary cache hits (#8685)
Summary: Add a PerfContext counter. Pull Request resolved: https://github.com/facebook/rocksdb/pull/8685 Reviewed By: zhichao-cao Differential Revision: D30453957 Pulled By: anand1976 fbshipit-source-id: 42888a3ced240e1c44446d52d3b04adfb01f5665
This commit is contained in:
parent
22f2936b35
commit
f35042ca40
@ -9,6 +9,7 @@
|
|||||||
* Fixed a bug affecting the batched `MultiGet` API when used with keys spanning multiple column families and `sorted_input == false`.
|
* Fixed a bug affecting the batched `MultiGet` API when used with keys spanning multiple column families and `sorted_input == false`.
|
||||||
* Fixed a potential incorrect result in opt mode and assertion failures caused by releasing snapshot(s) during compaction.
|
* Fixed a potential incorrect result in opt mode and assertion failures caused by releasing snapshot(s) during compaction.
|
||||||
* Fixed passing of BlobFileCompletionCallback to Compaction job and Atomic flush job which was default paramter (nullptr). BlobFileCompletitionCallback is internal callback that manages addition of blob files to SSTFileManager.
|
* Fixed passing of BlobFileCompletionCallback to Compaction job and Atomic flush job which was default paramter (nullptr). BlobFileCompletitionCallback is internal callback that manages addition of blob files to SSTFileManager.
|
||||||
|
* Fixed MultiGet not updating the block_read_count and block_read_byte PerfContext counters
|
||||||
|
|
||||||
### New Features
|
### New Features
|
||||||
* Made the EventListener extend the Customizable class.
|
* Made the EventListener extend the Customizable class.
|
||||||
@ -20,6 +21,7 @@
|
|||||||
* Fast forward option in Trace replay changed to double type to allow replaying at a lower speed, by settings the value between 0 and 1. This option can be set via `ReplayOptions` in `Replayer::Replay()`, or via `--trace_replay_fast_forward` in db_bench.
|
* Fast forward option in Trace replay changed to double type to allow replaying at a lower speed, by settings the value between 0 and 1. This option can be set via `ReplayOptions` in `Replayer::Replay()`, or via `--trace_replay_fast_forward` in db_bench.
|
||||||
* Add property `LiveSstFilesSizeAtTemperature` to retrieve sst file size at different temperature.
|
* Add property `LiveSstFilesSizeAtTemperature` to retrieve sst file size at different temperature.
|
||||||
* Added a stat rocksdb.secondary.cache.hits
|
* Added a stat rocksdb.secondary.cache.hits
|
||||||
|
* Added a PerfContext counter secondary_cache_hit_count
|
||||||
* The integrated BlobDB implementation now supports the tickers `BLOB_DB_BLOB_FILE_BYTES_READ`, `BLOB_DB_GC_NUM_KEYS_RELOCATED`, and `BLOB_DB_GC_BYTES_RELOCATED`, as well as the histograms `BLOB_DB_COMPRESSION_MICROS` and `BLOB_DB_DECOMPRESSION_MICROS`.
|
* The integrated BlobDB implementation now supports the tickers `BLOB_DB_BLOB_FILE_BYTES_READ`, `BLOB_DB_GC_NUM_KEYS_RELOCATED`, and `BLOB_DB_GC_BYTES_RELOCATED`, as well as the histograms `BLOB_DB_COMPRESSION_MICROS` and `BLOB_DB_DECOMPRESSION_MICROS`.
|
||||||
|
|
||||||
## Public API change
|
## Public API change
|
||||||
|
3
cache/lru_cache.cc
vendored
3
cache/lru_cache.cc
vendored
@ -13,6 +13,7 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
|
#include "monitoring/perf_context_imp.h"
|
||||||
#include "monitoring/statistics.h"
|
#include "monitoring/statistics.h"
|
||||||
#include "util/mutexlock.h"
|
#include "util/mutexlock.h"
|
||||||
|
|
||||||
@ -473,6 +474,7 @@ Cache::Handle* LRUCacheShard::Lookup(
|
|||||||
e->Free();
|
e->Free();
|
||||||
e = nullptr;
|
e = nullptr;
|
||||||
} else {
|
} else {
|
||||||
|
PERF_COUNTER_ADD(secondary_cache_hit_count, 1);
|
||||||
RecordTick(stats, SECONDARY_CACHE_HITS);
|
RecordTick(stats, SECONDARY_CACHE_HITS);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -481,6 +483,7 @@ Cache::Handle* LRUCacheShard::Lookup(
|
|||||||
e->SetIncomplete(true);
|
e->SetIncomplete(true);
|
||||||
// This may be slightly inaccurate, if the lookup eventually fails.
|
// This may be slightly inaccurate, if the lookup eventually fails.
|
||||||
// But the probability is very low.
|
// But the probability is very low.
|
||||||
|
PERF_COUNTER_ADD(secondary_cache_hit_count, 1);
|
||||||
RecordTick(stats, SECONDARY_CACHE_HITS);
|
RecordTick(stats, SECONDARY_CACHE_HITS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
cache/lru_cache_test.cc
vendored
3
cache/lru_cache_test.cc
vendored
@ -481,6 +481,7 @@ TEST_F(LRUSecondaryCacheTest, BasicTest) {
|
|||||||
ASSERT_OK(cache->Insert("k2", item2, &LRUSecondaryCacheTest::helper_,
|
ASSERT_OK(cache->Insert("k2", item2, &LRUSecondaryCacheTest::helper_,
|
||||||
str2.length()));
|
str2.length()));
|
||||||
|
|
||||||
|
get_perf_context()->Reset();
|
||||||
Cache::Handle* handle;
|
Cache::Handle* handle;
|
||||||
handle =
|
handle =
|
||||||
cache->Lookup("k2", &LRUSecondaryCacheTest::helper_, test_item_creator,
|
cache->Lookup("k2", &LRUSecondaryCacheTest::helper_, test_item_creator,
|
||||||
@ -497,6 +498,8 @@ TEST_F(LRUSecondaryCacheTest, BasicTest) {
|
|||||||
ASSERT_EQ(secondary_cache->num_lookups(), 1u);
|
ASSERT_EQ(secondary_cache->num_lookups(), 1u);
|
||||||
ASSERT_EQ(stats->getTickerCount(SECONDARY_CACHE_HITS),
|
ASSERT_EQ(stats->getTickerCount(SECONDARY_CACHE_HITS),
|
||||||
secondary_cache->num_lookups());
|
secondary_cache->num_lookups());
|
||||||
|
PerfContext perf_ctx = *get_perf_context();
|
||||||
|
ASSERT_EQ(perf_ctx.secondary_cache_hit_count, secondary_cache->num_lookups());
|
||||||
|
|
||||||
cache.reset();
|
cache.reset();
|
||||||
secondary_cache.reset();
|
secondary_cache.reset();
|
||||||
|
@ -74,6 +74,9 @@ struct PerfContext {
|
|||||||
uint64_t filter_block_read_count; // total number of filter block reads
|
uint64_t filter_block_read_count; // total number of filter block reads
|
||||||
uint64_t compression_dict_block_read_count; // total number of compression
|
uint64_t compression_dict_block_read_count; // total number of compression
|
||||||
// dictionary block reads
|
// dictionary block reads
|
||||||
|
|
||||||
|
uint64_t secondary_cache_hit_count; // total number of secondary cache hits
|
||||||
|
|
||||||
uint64_t block_checksum_time; // total nanos spent on block checksum
|
uint64_t block_checksum_time; // total nanos spent on block checksum
|
||||||
uint64_t block_decompress_time; // total nanos spent on block decompression
|
uint64_t block_decompress_time; // total nanos spent on block decompression
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ PerfContext::PerfContext(const PerfContext& other) {
|
|||||||
block_cache_filter_hit_count = other.block_cache_filter_hit_count;
|
block_cache_filter_hit_count = other.block_cache_filter_hit_count;
|
||||||
filter_block_read_count = other.filter_block_read_count;
|
filter_block_read_count = other.filter_block_read_count;
|
||||||
compression_dict_block_read_count = other.compression_dict_block_read_count;
|
compression_dict_block_read_count = other.compression_dict_block_read_count;
|
||||||
|
secondary_cache_hit_count = other.secondary_cache_hit_count;
|
||||||
block_checksum_time = other.block_checksum_time;
|
block_checksum_time = other.block_checksum_time;
|
||||||
block_decompress_time = other.block_decompress_time;
|
block_decompress_time = other.block_decompress_time;
|
||||||
get_read_bytes = other.get_read_bytes;
|
get_read_bytes = other.get_read_bytes;
|
||||||
@ -144,6 +145,7 @@ PerfContext::PerfContext(PerfContext&& other) noexcept {
|
|||||||
block_cache_filter_hit_count = other.block_cache_filter_hit_count;
|
block_cache_filter_hit_count = other.block_cache_filter_hit_count;
|
||||||
filter_block_read_count = other.filter_block_read_count;
|
filter_block_read_count = other.filter_block_read_count;
|
||||||
compression_dict_block_read_count = other.compression_dict_block_read_count;
|
compression_dict_block_read_count = other.compression_dict_block_read_count;
|
||||||
|
secondary_cache_hit_count = other.secondary_cache_hit_count;
|
||||||
block_checksum_time = other.block_checksum_time;
|
block_checksum_time = other.block_checksum_time;
|
||||||
block_decompress_time = other.block_decompress_time;
|
block_decompress_time = other.block_decompress_time;
|
||||||
get_read_bytes = other.get_read_bytes;
|
get_read_bytes = other.get_read_bytes;
|
||||||
@ -243,6 +245,7 @@ PerfContext& PerfContext::operator=(const PerfContext& other) {
|
|||||||
block_cache_filter_hit_count = other.block_cache_filter_hit_count;
|
block_cache_filter_hit_count = other.block_cache_filter_hit_count;
|
||||||
filter_block_read_count = other.filter_block_read_count;
|
filter_block_read_count = other.filter_block_read_count;
|
||||||
compression_dict_block_read_count = other.compression_dict_block_read_count;
|
compression_dict_block_read_count = other.compression_dict_block_read_count;
|
||||||
|
secondary_cache_hit_count = other.secondary_cache_hit_count;
|
||||||
block_checksum_time = other.block_checksum_time;
|
block_checksum_time = other.block_checksum_time;
|
||||||
block_decompress_time = other.block_decompress_time;
|
block_decompress_time = other.block_decompress_time;
|
||||||
get_read_bytes = other.get_read_bytes;
|
get_read_bytes = other.get_read_bytes;
|
||||||
@ -339,6 +342,7 @@ void PerfContext::Reset() {
|
|||||||
block_cache_filter_hit_count = 0;
|
block_cache_filter_hit_count = 0;
|
||||||
filter_block_read_count = 0;
|
filter_block_read_count = 0;
|
||||||
compression_dict_block_read_count = 0;
|
compression_dict_block_read_count = 0;
|
||||||
|
secondary_cache_hit_count = 0;
|
||||||
block_checksum_time = 0;
|
block_checksum_time = 0;
|
||||||
block_decompress_time = 0;
|
block_decompress_time = 0;
|
||||||
get_read_bytes = 0;
|
get_read_bytes = 0;
|
||||||
@ -459,6 +463,7 @@ std::string PerfContext::ToString(bool exclude_zero_counters) const {
|
|||||||
PERF_CONTEXT_OUTPUT(block_cache_filter_hit_count);
|
PERF_CONTEXT_OUTPUT(block_cache_filter_hit_count);
|
||||||
PERF_CONTEXT_OUTPUT(filter_block_read_count);
|
PERF_CONTEXT_OUTPUT(filter_block_read_count);
|
||||||
PERF_CONTEXT_OUTPUT(compression_dict_block_read_count);
|
PERF_CONTEXT_OUTPUT(compression_dict_block_read_count);
|
||||||
|
PERF_CONTEXT_OUTPUT(secondary_cache_hit_count);
|
||||||
PERF_CONTEXT_OUTPUT(block_checksum_time);
|
PERF_CONTEXT_OUTPUT(block_checksum_time);
|
||||||
PERF_CONTEXT_OUTPUT(block_decompress_time);
|
PERF_CONTEXT_OUTPUT(block_decompress_time);
|
||||||
PERF_CONTEXT_OUTPUT(get_read_bytes);
|
PERF_CONTEXT_OUTPUT(get_read_bytes);
|
||||||
|
Loading…
Reference in New Issue
Block a user