Skip to content

Commit 47d0df2

Browse files
disylhfacebook-github-bot
authored andcommitted
Add NVM rejection stats by NVM engine pair
Summary: As title, these rejection stats could be used to build alert and monitoring on long retention arena in Ucache Reviewed By: therealgymmy Differential Revision: D70494519 fbshipit-source-id: 70a688244f5b460cf4f466367f7d64a1eb52845f
1 parent 8695f82 commit 47d0df2

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

cachelib/navy/driver/Driver.cpp

+45-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,14 @@ Driver::Driver(Config&& config, ValidConfigTag)
6363
scheduler_{std::move(config.scheduler)},
6464
selector_{std::move(config.selector)},
6565
enginePairs_{std::move(config.enginePairs)},
66-
admissionPolicy_{std::move(config.admissionPolicy)} {
66+
admissionPolicy_{std::move(config.admissionPolicy)},
67+
rejectedCountByEngine_{enginePairs_.size() > 1 ? enginePairs_.size() : 0},
68+
rejectedConcurrentInsertsCountByEngine_{
69+
enginePairs_.size() > 1 ? enginePairs_.size() : 0},
70+
rejectedParcelMemoryCountByEngine_{
71+
enginePairs_.size() > 1 ? enginePairs_.size() : 0},
72+
rejectedBytesByEngine_{enginePairs_.size() > 1 ? enginePairs_.size()
73+
: 0} {
6774
getRandomAllocDist = getDist(enginePairs_);
6875
XLOGF(INFO, "Max concurrent inserts: {}", maxConcurrentInserts_);
6976
XLOGF(INFO, "Max parcel memory: {}", maxParcelMemory_);
@@ -123,6 +130,7 @@ bool Driver::admissionTest(HashedKey hk, BufferView value) const {
123130
size_t parcelSize = hk.key().size() + value.size();
124131
auto currParcelMemory = parcelMemory_.add_fetch(parcelSize);
125132
auto currConcurrentInserts = concurrentInserts_.add_fetch(1);
133+
auto enginePairIndex = selectEnginePair(hk);
126134

127135
if (!admissionPolicy_ ||
128136
admissionPolicy_->accept(hk, value, estimateWriteSize(hk, value))) {
@@ -133,13 +141,25 @@ bool Driver::admissionTest(HashedKey hk, BufferView value) const {
133141
return true;
134142
} else {
135143
rejectedParcelMemoryCount_.inc();
144+
if (rejectedParcelMemoryCountByEngine_.size() > enginePairIndex) {
145+
rejectedParcelMemoryCountByEngine_[enginePairIndex].inc();
146+
}
136147
}
137148
} else {
138149
rejectedConcurrentInsertsCount_.inc();
150+
if (rejectedConcurrentInsertsCountByEngine_.size() > enginePairIndex) {
151+
rejectedConcurrentInsertsCountByEngine_[enginePairIndex].inc();
152+
}
139153
}
140154
}
141155
rejectedCount_.inc();
142156
rejectedBytes_.add(parcelSize);
157+
if (rejectedCountByEngine_.size() > enginePairIndex) {
158+
rejectedCountByEngine_[enginePairIndex].inc();
159+
}
160+
if (rejectedBytesByEngine_.size() > enginePairIndex) {
161+
rejectedBytesByEngine_[enginePairIndex].add(parcelSize);
162+
}
143163

144164
// Revert counter modifications. Remember, can't assign back atomic.
145165
concurrentInserts_.dec();
@@ -152,6 +172,15 @@ Status Driver::insertAsync(HashedKey hk, BufferView value, InsertCallback cb) {
152172
if (hk.key().size() > kMaxKeySize) {
153173
rejectedCount_.inc();
154174
rejectedBytes_.add(hk.key().size() + value.size());
175+
176+
auto enginePairIndex = selectEnginePair(hk);
177+
if (rejectedCountByEngine_.size() > enginePairIndex) {
178+
rejectedCountByEngine_[enginePairIndex].inc();
179+
}
180+
if (rejectedBytesByEngine_.size() > enginePairIndex) {
181+
rejectedBytesByEngine_[enginePairIndex].add(hk.key().size() +
182+
value.size());
183+
}
155184
return Status::Rejected;
156185
}
157186

@@ -306,6 +335,21 @@ void Driver::getCounters(const CounterVisitor& visitor) const {
306335
visitor(folly::to<std::string>(name, "_", idx, suffix), count);
307336
}};
308337
enginePairs_[idx].getCounters(pv);
338+
339+
visitor(folly::to<std::string>("navy_rejected_", idx, suffix),
340+
rejectedCountByEngine_[idx].get(),
341+
CounterVisitor::CounterType::RATE);
342+
visitor(folly::to<std::string>("navy_rejected_concurrent_inserts_", idx,
343+
suffix),
344+
rejectedConcurrentInsertsCountByEngine_[idx].get(),
345+
CounterVisitor::CounterType::RATE);
346+
visitor(
347+
folly::to<std::string>("navy_rejected_parcel_memory_", idx, suffix),
348+
rejectedParcelMemoryCountByEngine_[idx].get(),
349+
CounterVisitor::CounterType::RATE);
350+
visitor(folly::to<std::string>("navy_rejected_bytes_", idx, suffix),
351+
rejectedBytesByEngine_[idx].get(),
352+
CounterVisitor::CounterType::RATE);
309353
}
310354
visitor("navy_total_usable_size", getUsableSize());
311355
} else {

cachelib/navy/driver/Driver.h

+4
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ class Driver final : public AbstractCache {
189189
mutable TLCounter rejectedBytes_;
190190
mutable TLCounter acceptedCount_;
191191
mutable TLCounter acceptedBytes_;
192+
mutable std::vector<TLCounter> rejectedCountByEngine_;
193+
mutable std::vector<TLCounter> rejectedConcurrentInsertsCountByEngine_;
194+
mutable std::vector<TLCounter> rejectedParcelMemoryCountByEngine_;
195+
mutable std::vector<TLCounter> rejectedBytesByEngine_;
192196

193197
// atomic counters in asynchronized path
194198

0 commit comments

Comments
 (0)