diff options
Diffstat (limited to 'src/zenserver/cache/cachedisklayer.cpp')
| -rw-r--r-- | src/zenserver/cache/cachedisklayer.cpp | 59 |
1 files changed, 51 insertions, 8 deletions
diff --git a/src/zenserver/cache/cachedisklayer.cpp b/src/zenserver/cache/cachedisklayer.cpp index 9e6f86d79..3cee3197b 100644 --- a/src/zenserver/cache/cachedisklayer.cpp +++ b/src/zenserver/cache/cachedisklayer.cpp @@ -662,10 +662,13 @@ ZenCacheDiskLayer::CacheBucket::GetStandaloneCacheValue(const DiskLocation& Loc, bool ZenCacheDiskLayer::CacheBucket::Get(const IoHash& HashKey, ZenCacheValue& OutValue) { + metrics::RequestStats::Scope StatsScope(m_GetOps, 0); + RwLock::SharedLockScope _(m_IndexLock); auto It = m_Index.find(HashKey); if (It == m_Index.end()) { + m_MissCount++; return false; } size_t EntryIndex = It.value(); @@ -710,18 +713,31 @@ ZenCacheDiskLayer::CacheBucket::Get(const IoHash& HashKey, ZenCacheValue& OutVal } } } - - return (bool)OutValue.Value; + if (OutValue.Value) + { + m_HitCount++; + StatsScope.SetBytes(OutValue.Value.GetSize()); + return true; + } + else + { + m_MissCount++; + return false; + } } void ZenCacheDiskLayer::CacheBucket::Put(const IoHash& HashKey, const ZenCacheValue& Value) { + metrics::RequestStats::Scope $(m_PutOps, Value.Value.Size()); + if (Value.Value.Size() >= m_LargeObjectThreshold) { return PutStandaloneCacheValue(HashKey, Value); } PutInlineCacheValue(HashKey, Value); + + m_WriteCount++; } bool @@ -1568,6 +1584,17 @@ ZenCacheDiskLayer::CacheBucket::UpdateAccessTimes(const std::vector<zen::access_ } } +ZenCacheDiskLayer::BucketStats +ZenCacheDiskLayer::CacheBucket::Stats() +{ + return ZenCacheDiskLayer::BucketStats{.TotalSize = TotalSize(), + .HitCount = m_HitCount, + .MissCount = m_MissCount, + .WriteCount = m_WriteCount, + .PutOps = m_PutOps.Snapshot(), + .GetOps = m_GetOps.Snapshot()}; +} + uint64_t ZenCacheDiskLayer::CacheBucket::EntryCount() const { @@ -2116,17 +2143,33 @@ ZenCacheDiskLayer::TotalSize() const return TotalSize; } +ZenCacheDiskLayer::DiskStats +ZenCacheDiskLayer::Stats() const +{ + ZenCacheDiskLayer::DiskStats Stats = {}; + { + RwLock::SharedLockScope _(m_Lock); + Stats.BucketStats.reserve(m_Buckets.size()); + for (auto& Kv : m_Buckets) + { + Stats.BucketStats.emplace_back(NamedBucketStats{.BucketName = Kv.first, .Stats = Kv.second->Stats()}); + } + } + return Stats; +} + ZenCacheDiskLayer::Info ZenCacheDiskLayer::GetInfo() const { ZenCacheDiskLayer::Info Info = {.Config = {.RootDir = m_RootDir}, .TotalSize = TotalSize()}; - - RwLock::SharedLockScope _(m_Lock); - Info.BucketNames.reserve(m_Buckets.size()); - for (auto& Kv : m_Buckets) { - Info.BucketNames.push_back(Kv.first); - Info.EntryCount += Kv.second->EntryCount(); + RwLock::SharedLockScope _(m_Lock); + Info.BucketNames.reserve(m_Buckets.size()); + for (auto& Kv : m_Buckets) + { + Info.BucketNames.push_back(Kv.first); + Info.EntryCount += Kv.second->EntryCount(); + } } return Info; } |