Skip to content

Commit 6a38d8d

Browse files
AlnisMmeta-codesync[bot]
authored andcommitted
Add BigHash lookup and insert latency counters
Summary: We already export latency metrics for block cache. This diff adds insert and lookup latency for big hash. Reviewed By: rlyerly Differential Revision: D113406659 fbshipit-source-id: 52cb42fa0914f4012a2a50862688fc8b6f1d812c
1 parent 916a2ac commit 6a38d8d

4 files changed

Lines changed: 65 additions & 0 deletions

File tree

cachelib/allocator/nvmcache/tests/NvmCacheTests.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1824,6 +1824,36 @@ TEST_F(NvmCacheTest, NavyStats) {
18241824
EXPECT_TRUE(cs("navy_bh_item_lifetime_secs_p9999"));
18251825
EXPECT_TRUE(cs("navy_bh_item_lifetime_secs_p99999"));
18261826
EXPECT_TRUE(cs("navy_bh_item_lifetime_secs_p999999"));
1827+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_avg"));
1828+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_min"));
1829+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_max"));
1830+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p5"));
1831+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p10"));
1832+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p25"));
1833+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p50"));
1834+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p75"));
1835+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p90"));
1836+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p95"));
1837+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p99"));
1838+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p999"));
1839+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p9999"));
1840+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p99999"));
1841+
EXPECT_TRUE(cs("navy_bh_lookup_latency_us_p999999"));
1842+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_avg"));
1843+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_min"));
1844+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_max"));
1845+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p5"));
1846+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p10"));
1847+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p25"));
1848+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p50"));
1849+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p75"));
1850+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p90"));
1851+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p95"));
1852+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p99"));
1853+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p999"));
1854+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p9999"));
1855+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p99999"));
1856+
EXPECT_TRUE(cs("navy_bh_insert_latency_us_p999999"));
18271857
EXPECT_TRUE(cs("navy_bh_disabled_bucket_lookup"));
18281858
EXPECT_TRUE(cs("navy_bh_disabled_bucket_insert"));
18291859
EXPECT_TRUE(cs("navy_bh_disabled_bucket_remove"));

cachelib/navy/bighash/BigHash.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include <fmt/core.h>
2020
#include <folly/Random.h>
21+
#include <folly/ScopeGuard.h>
2122

2223
#include <chrono>
2324

@@ -224,6 +225,8 @@ void BigHash::getCounters(const CounterVisitor& visitor) const {
224225
bucketExpirationsDist_x100_.visitQuantileEstimator(
225226
visitor, "navy_bh_expired_loop_x100");
226227
bhLifetimeSecs_.visitQuantileEstimator(visitor, "navy_bh_item_lifetime_secs");
228+
lookupLatency_.visitQuantileEstimator(visitor, "navy_bh_lookup_latency_us");
229+
insertLatency_.visitQuantileEstimator(visitor, "navy_bh_insert_latency_us");
227230
}
228231

229232
void BigHash::persist(RecordWriter& rw) {
@@ -297,6 +300,10 @@ Status BigHash::insert(HashedKey hk,
297300
uint8_t /* poolId */,
298301
uint32_t /* expiryTime */,
299302
uint32_t /* lastAccessTimeSecs */) {
303+
auto start = getSteadyClock();
304+
SCOPE_EXIT {
305+
insertLatency_.trackValue(toMicros(getSteadyClock() - start).count());
306+
};
300307
const auto bid = getBucketId(hk);
301308
insertCount_.inc();
302309

@@ -397,6 +404,10 @@ uint64_t BigHash::estimateWriteSize(HashedKey, BufferView) const {
397404
Status BigHash::lookup(HashedKey hk,
398405
Buffer& value,
399406
uint32_t& lastAccessTimeSecs) {
407+
auto start = getSteadyClock();
408+
SCOPE_EXIT {
409+
lookupLatency_.trackValue(toMicros(getSteadyClock() - start).count());
410+
};
400411
lastAccessTimeSecs = 0;
401412
const auto bid = getBucketId(hk);
402413
lookupCount_.inc();

cachelib/navy/bighash/BigHash.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ class BigHash final : public Engine, folly::NonCopyableNonMovable {
271271
// PercentileStats generates outputs in integers, so amplify by 100x
272272
mutable util::PercentileStats bucketExpirationsDist_x100_;
273273
mutable util::PercentileStats bhLifetimeSecs_;
274+
mutable util::PercentileStats lookupLatency_;
275+
mutable util::PercentileStats insertLatency_;
274276

275277
friend class ValidBucketChecker;
276278
};

cachelib/navy/bighash/tests/BigHashTest.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,28 @@ TEST(BigHash, SimpleStats) {
184184
}
185185
}
186186

187+
TEST(BigHash, LatencyStats) {
188+
BigHash::Config config;
189+
setLayout(config, 64, 1);
190+
auto device = std::make_unique<NiceMock<MockDevice>>(config.cacheSize, 64);
191+
config.device = device.get();
192+
193+
BigHash bh(std::move(config));
194+
195+
Buffer value;
196+
uint32_t lat = 0;
197+
EXPECT_EQ(Status::Ok,
198+
bh.insert(makeHK("key"), makeView("12345"), 0 /* poolId */,
199+
0 /* expiryTime */));
200+
EXPECT_EQ(Status::Ok, bh.lookup(makeHK("key"), value, lat));
201+
202+
MockCounterVisitor helper;
203+
EXPECT_CALL(helper, call(_, _)).Times(AtLeast(0));
204+
EXPECT_CALL(helper, call(strPiece("navy_bh_lookup_latency_us_p99"), _));
205+
EXPECT_CALL(helper, call(strPiece("navy_bh_insert_latency_us_p99"), _));
206+
bh.getCounters({toCallback(helper)});
207+
}
208+
187209
TEST(BigHash, EvictionStats) {
188210
BigHash::Config config;
189211
setLayout(config, 64, 1);

0 commit comments

Comments
 (0)