Skip to content

Commit 162f342

Browse files
authored
added stats for dsa submit (pmem#6)
1 parent 01e5ad9 commit 162f342

File tree

7 files changed

+21
-4
lines changed

7 files changed

+21
-4
lines changed

cachelib/allocator/CacheAllocator-inl.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2904,7 +2904,7 @@ PoolStats CacheAllocator<CacheTrait>::getPoolStats(PoolId poolId) const {
29042904
for (const ClassId cid : classIds) {
29052905
uint64_t allocAttempts, evictionAttempts, allocFailures,
29062906
fragmentationSize, classHits, chainedItemEvictions,
2907-
regularItemEvictions, numWritebacks = 0;
2907+
dsaEvictionSubmits, regularItemEvictions, numWritebacks = 0;
29082908
MMContainerStat mmContainerStats;
29092909
for (TierId tid = 0; tid < getNumTiers(); tid++) {
29102910
allocAttempts += (*stats_.allocAttempts)[tid][poolId][cid].get();
@@ -2913,6 +2913,7 @@ PoolStats CacheAllocator<CacheTrait>::getPoolStats(PoolId poolId) const {
29132913
fragmentationSize += (*stats_.fragmentationSize)[tid][poolId][cid].get();
29142914
classHits += (*stats_.cacheHits)[tid][poolId][cid].get();
29152915
chainedItemEvictions += (*stats_.chainedItemEvictions)[tid][poolId][cid].get();
2916+
dsaEvictionSubmits += (*stats_.dsaEvictionSubmits)[tid][poolId][cid].get();
29162917
regularItemEvictions += (*stats_.regularItemEvictions)[tid][poolId][cid].get();
29172918
numWritebacks += (*stats_.numWritebacks)[tid][poolId][cid].get();
29182919
mmContainerStats += getMMContainerStat(tid, poolId, cid);
@@ -2928,6 +2929,7 @@ PoolStats CacheAllocator<CacheTrait>::getPoolStats(PoolId poolId) const {
29282929
fragmentationSize,
29292930
classHits,
29302931
chainedItemEvictions,
2932+
dsaEvictionSubmits,
29312933
regularItemEvictions,
29322934
numWritebacks,
29332935
mmContainerStats}});
@@ -2982,6 +2984,7 @@ PoolStats CacheAllocator<CacheTrait>::getPoolStats(TierId tid, PoolId poolId) co
29822984
(*stats_.fragmentationSize)[tid][poolId][cid].get(),
29832985
classHits,
29842986
(*stats_.chainedItemEvictions)[tid][poolId][cid].get(),
2987+
(*stats_.dsaEvictionSubmits)[tid][poolId][cid].get(),
29852988
(*stats_.regularItemEvictions)[tid][poolId][cid].get(),
29862989
(*stats_.numWritebacks)[tid][poolId][cid].get(),
29872990
getMMContainerStat(tid, poolId, cid)}});

cachelib/allocator/CacheAllocator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2238,6 +2238,7 @@ auto& mmContainer = getMMContainer(tid, pid, cid);
22382238
dml::data_view dstView = dml::make_view(
22392239
reinterpret_cast<uint8_t*>(newItemHandles[index]->getMemory()),
22402240
newItemHandles[index]->getSize());
2241+
(*stats_.dsaEvictionSubmits)[tid][pid][cid].inc();
22412242
if (config_.dsaAsync) {
22422243
dmlHandles.emplace_back(
22432244
dml::submit<dml::hardware>(dml::mem_copy, srcView, dstView));

cachelib/allocator/CacheStats.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ void Stats::init() {
2929
fragmentationSize = std::make_unique<PerTierPerPoolClassAtomicCounters>();
3030
allocFailures = std::make_unique<PerTierPerPoolClassAtomicCounters>();
3131
chainedItemEvictions = std::make_unique<PerTierPerPoolClassAtomicCounters>();
32+
dsaEvictionSubmits = std::make_unique<PerTierPerPoolClassAtomicCounters>();
3233
regularItemEvictions = std::make_unique<PerTierPerPoolClassAtomicCounters>();
3334
numWritebacks = std::make_unique<PerTierPerPoolClassAtomicCounters>();
3435
auto initToZero = [](auto& a) {
@@ -46,6 +47,7 @@ void Stats::init() {
4647
initToZero(*allocFailures);
4748
initToZero(*fragmentationSize);
4849
initToZero(*chainedItemEvictions);
50+
initToZero(*dsaEvictionSubmits);
4951
initToZero(*regularItemEvictions);
5052
initToZero(*numWritebacks);
5153

@@ -57,7 +59,7 @@ struct SizeVerify {};
5759

5860
void Stats::populateGlobalCacheStats(GlobalCacheStats& ret) const {
5961
#ifndef SKIP_SIZE_VERIFY
60-
SizeVerify<sizeof(Stats)> a = SizeVerify<16192>{};
62+
SizeVerify<sizeof(Stats)> a = SizeVerify<16208>{};
6163
std::ignore = a;
6264
#endif
6365
ret.numCacheGets = numCacheGets.get();
@@ -151,6 +153,7 @@ void Stats::populateGlobalCacheStats(GlobalCacheStats& ret) const {
151153
ret.evictionAttempts = accum(*evictionAttempts);
152154
ret.allocFailures = accum(*allocFailures);
153155
auto chainedEvictions = accum(*chainedItemEvictions);
156+
ret.dsaEvictionSubmits = accum(*dsaEvictionSubmits);
154157
auto regularEvictions = accum(*regularItemEvictions);
155158
for (TierId tid = 0; tid < chainedEvictions.size(); tid++) {
156159
ret.numEvictions.push_back(chainedEvictions[tid] + regularEvictions[tid]);
@@ -223,6 +226,7 @@ PoolStats& PoolStats::operator+=(const PoolStats& other) {
223226
d.numHits += s.numHits;
224227
d.numWritebacks += s.numWritebacks;
225228
d.chainedItemEvictions += s.chainedItemEvictions;
229+
d.dsaEvictionSubmits += s.dsaEvictionSubmits;
226230
d.regularItemEvictions += s.regularItemEvictions;
227231
}
228232

cachelib/allocator/CacheStats.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ struct CacheStat {
122122
// number of evictions from this class id that was of a chained item
123123
uint64_t chainedItemEvictions{0};
124124

125+
// number of items submitted via DSA for eviction
126+
uint64_t dsaEvictionSubmits{0};
127+
125128
// number of regular items that were evicted from this classId
126129
uint64_t regularItemEvictions{0};
127130

@@ -462,6 +465,9 @@ struct GlobalCacheStats {
462465
// number of failures to allocate an item due to internal error
463466
std::vector<uint64_t> allocFailures;
464467

468+
// number of dsa evictions submits across all the pools in the cache.
469+
std::vector<uint64_t> dsaEvictionSubmits;
470+
465471
// number of evictions across all the pools in the cache.
466472
std::vector<uint64_t> numEvictions;
467473

cachelib/allocator/CacheStatsInternal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ struct Stats {
230230
std::unique_ptr<PerTierPerPoolClassAtomicCounters> allocFailures{};
231231
std::unique_ptr<PerTierPerPoolClassAtomicCounters> fragmentationSize{};
232232
std::unique_ptr<PerTierPerPoolClassAtomicCounters> chainedItemEvictions{};
233+
std::unique_ptr<PerTierPerPoolClassAtomicCounters> dsaEvictionSubmits{};
233234
std::unique_ptr<PerTierPerPoolClassAtomicCounters> regularItemEvictions{};
234235
std::unique_ptr<PerTierPerPoolClassAtomicCounters> numWritebacks{};
235236

cachelib/cachebench/cache/Cache-inl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,7 @@ Stats Cache<Allocator>::getStats() const {
677677
cacheStats.promotionStats.runCount;
678678

679679
ret.evictAttempts = cacheStats.evictionAttempts;
680+
ret.dsaEvictionSubmits = cacheStats.dsaEvictionSubmits;
680681
ret.allocAttempts = cacheStats.allocAttempts;
681682
ret.allocFailures = cacheStats.allocFailures;
682683

cachelib/cachebench/cache/CacheStats.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ struct Stats {
5454
BackgroundPromotionStats backgndPromoStats;
5555
ReaperStats reaperStats;
5656

57+
std::vector<uint64_t> dsaEvictionSubmits;
5758
std::vector<uint64_t> numEvictions;
5859
std::vector<uint64_t> numWritebacks;
5960
std::vector<uint64_t> numCacheHits;
@@ -167,8 +168,8 @@ struct Stats {
167168
<< std::endl;
168169
}
169170
for (TierId tid = 0; tid < nTiers; tid++) {
170-
out << folly::sformat("Tier {} Evictions : {:,} Writebacks: {:,} Success: {:.2f}%",
171-
tid, numEvictions[tid], numWritebacks[tid],
171+
out << folly::sformat("Tier {} Evictions : {:,} DSA submits: {:,} Writebacks: {:,} Success: {:.2f}%",
172+
tid, numEvictions[tid], dsaEvictionSubmits[tid], numWritebacks[tid],
172173
invertPctFn(numEvictions[tid] - numWritebacks[tid], numEvictions[tid])) << std::endl;
173174
}
174175
auto foreachAC = [&](auto &map, auto cb) {

0 commit comments

Comments
 (0)