Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion cachelib/allocator/CacheAllocator-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -2904,7 +2904,7 @@ PoolStats CacheAllocator<CacheTrait>::getPoolStats(PoolId poolId) const {
for (const ClassId cid : classIds) {
uint64_t allocAttempts, evictionAttempts, allocFailures,
fragmentationSize, classHits, chainedItemEvictions,
regularItemEvictions, numWritebacks = 0;
dsaEvictionSubmits, regularItemEvictions, numWritebacks = 0;
MMContainerStat mmContainerStats;
for (TierId tid = 0; tid < getNumTiers(); tid++) {
allocAttempts += (*stats_.allocAttempts)[tid][poolId][cid].get();
Expand All @@ -2913,6 +2913,7 @@ PoolStats CacheAllocator<CacheTrait>::getPoolStats(PoolId poolId) const {
fragmentationSize += (*stats_.fragmentationSize)[tid][poolId][cid].get();
classHits += (*stats_.cacheHits)[tid][poolId][cid].get();
chainedItemEvictions += (*stats_.chainedItemEvictions)[tid][poolId][cid].get();
dsaEvictionSubmits += (*stats_.dsaEvictionSubmits)[tid][poolId][cid].get();
regularItemEvictions += (*stats_.regularItemEvictions)[tid][poolId][cid].get();
numWritebacks += (*stats_.numWritebacks)[tid][poolId][cid].get();
mmContainerStats += getMMContainerStat(tid, poolId, cid);
Expand All @@ -2928,6 +2929,7 @@ PoolStats CacheAllocator<CacheTrait>::getPoolStats(PoolId poolId) const {
fragmentationSize,
classHits,
chainedItemEvictions,
dsaEvictionSubmits,
regularItemEvictions,
numWritebacks,
mmContainerStats}});
Expand Down Expand Up @@ -2982,6 +2984,7 @@ PoolStats CacheAllocator<CacheTrait>::getPoolStats(TierId tid, PoolId poolId) co
(*stats_.fragmentationSize)[tid][poolId][cid].get(),
classHits,
(*stats_.chainedItemEvictions)[tid][poolId][cid].get(),
(*stats_.dsaEvictionSubmits)[tid][poolId][cid].get(),
(*stats_.regularItemEvictions)[tid][poolId][cid].get(),
(*stats_.numWritebacks)[tid][poolId][cid].get(),
getMMContainerStat(tid, poolId, cid)}});
Expand Down
1 change: 1 addition & 0 deletions cachelib/allocator/CacheAllocator.h
Original file line number Diff line number Diff line change
Expand Up @@ -2238,6 +2238,7 @@ auto& mmContainer = getMMContainer(tid, pid, cid);
dml::data_view dstView = dml::make_view(
reinterpret_cast<uint8_t*>(newItemHandles[index]->getMemory()),
newItemHandles[index]->getSize());
(*stats_.dsaEvictionSubmits)[tid][pid][cid].inc();
if (config_.dsaAsync) {
dmlHandles.emplace_back(
dml::submit<dml::hardware>(dml::mem_copy, srcView, dstView));
Expand Down
6 changes: 5 additions & 1 deletion cachelib/allocator/CacheStats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ void Stats::init() {
fragmentationSize = std::make_unique<PerTierPerPoolClassAtomicCounters>();
allocFailures = std::make_unique<PerTierPerPoolClassAtomicCounters>();
chainedItemEvictions = std::make_unique<PerTierPerPoolClassAtomicCounters>();
dsaEvictionSubmits = std::make_unique<PerTierPerPoolClassAtomicCounters>();
regularItemEvictions = std::make_unique<PerTierPerPoolClassAtomicCounters>();
numWritebacks = std::make_unique<PerTierPerPoolClassAtomicCounters>();
auto initToZero = [](auto& a) {
Expand All @@ -46,6 +47,7 @@ void Stats::init() {
initToZero(*allocFailures);
initToZero(*fragmentationSize);
initToZero(*chainedItemEvictions);
initToZero(*dsaEvictionSubmits);
initToZero(*regularItemEvictions);
initToZero(*numWritebacks);

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

void Stats::populateGlobalCacheStats(GlobalCacheStats& ret) const {
#ifndef SKIP_SIZE_VERIFY
SizeVerify<sizeof(Stats)> a = SizeVerify<16192>{};
SizeVerify<sizeof(Stats)> a = SizeVerify<16208>{};
std::ignore = a;
#endif
ret.numCacheGets = numCacheGets.get();
Expand Down Expand Up @@ -151,6 +153,7 @@ void Stats::populateGlobalCacheStats(GlobalCacheStats& ret) const {
ret.evictionAttempts = accum(*evictionAttempts);
ret.allocFailures = accum(*allocFailures);
auto chainedEvictions = accum(*chainedItemEvictions);
ret.dsaEvictionSubmits = accum(*dsaEvictionSubmits);
auto regularEvictions = accum(*regularItemEvictions);
for (TierId tid = 0; tid < chainedEvictions.size(); tid++) {
ret.numEvictions.push_back(chainedEvictions[tid] + regularEvictions[tid]);
Expand Down Expand Up @@ -223,6 +226,7 @@ PoolStats& PoolStats::operator+=(const PoolStats& other) {
d.numHits += s.numHits;
d.numWritebacks += s.numWritebacks;
d.chainedItemEvictions += s.chainedItemEvictions;
d.dsaEvictionSubmits += s.dsaEvictionSubmits;
d.regularItemEvictions += s.regularItemEvictions;
}

Expand Down
6 changes: 6 additions & 0 deletions cachelib/allocator/CacheStats.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ struct CacheStat {
// number of evictions from this class id that was of a chained item
uint64_t chainedItemEvictions{0};

// number of items submitted via DSA for eviction
uint64_t dsaEvictionSubmits{0};

// number of regular items that were evicted from this classId
uint64_t regularItemEvictions{0};

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

// number of dsa evictions submits across all the pools in the cache.
std::vector<uint64_t> dsaEvictionSubmits;

// number of evictions across all the pools in the cache.
std::vector<uint64_t> numEvictions;

Expand Down
1 change: 1 addition & 0 deletions cachelib/allocator/CacheStatsInternal.h
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ struct Stats {
std::unique_ptr<PerTierPerPoolClassAtomicCounters> allocFailures{};
std::unique_ptr<PerTierPerPoolClassAtomicCounters> fragmentationSize{};
std::unique_ptr<PerTierPerPoolClassAtomicCounters> chainedItemEvictions{};
std::unique_ptr<PerTierPerPoolClassAtomicCounters> dsaEvictionSubmits{};
std::unique_ptr<PerTierPerPoolClassAtomicCounters> regularItemEvictions{};
std::unique_ptr<PerTierPerPoolClassAtomicCounters> numWritebacks{};

Expand Down
1 change: 1 addition & 0 deletions cachelib/cachebench/cache/Cache-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -677,6 +677,7 @@ Stats Cache<Allocator>::getStats() const {
cacheStats.promotionStats.runCount;

ret.evictAttempts = cacheStats.evictionAttempts;
ret.dsaEvictionSubmits = cacheStats.dsaEvictionSubmits;
ret.allocAttempts = cacheStats.allocAttempts;
ret.allocFailures = cacheStats.allocFailures;

Expand Down
5 changes: 3 additions & 2 deletions cachelib/cachebench/cache/CacheStats.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ struct Stats {
BackgroundPromotionStats backgndPromoStats;
ReaperStats reaperStats;

std::vector<uint64_t> dsaEvictionSubmits;
std::vector<uint64_t> numEvictions;
std::vector<uint64_t> numWritebacks;
std::vector<uint64_t> numCacheHits;
Expand Down Expand Up @@ -167,8 +168,8 @@ struct Stats {
<< std::endl;
}
for (TierId tid = 0; tid < nTiers; tid++) {
out << folly::sformat("Tier {} Evictions : {:,} Writebacks: {:,} Success: {:.2f}%",
tid, numEvictions[tid], numWritebacks[tid],
out << folly::sformat("Tier {} Evictions : {:,} DSA submits: {:,} Writebacks: {:,} Success: {:.2f}%",
tid, numEvictions[tid], dsaEvictionSubmits[tid], numWritebacks[tid],
invertPctFn(numEvictions[tid] - numWritebacks[tid], numEvictions[tid])) << std::endl;
}
auto foreachAC = [&](auto &map, auto cb) {
Expand Down