diff options
| author | Dan Engelbrecht <[email protected]> | 2023-10-24 14:54:26 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-10-24 14:54:26 +0200 |
| commit | 1a144212278aa7158d6b32b63e398db95a7ae868 (patch) | |
| tree | 58735827b0b706368a82bcaaa8aaa68f211e1d10 /src/zenserver/cache/httpstructuredcache.cpp | |
| parent | chunking moved to zenstore (#490) (diff) | |
| download | zen-1a144212278aa7158d6b32b63e398db95a7ae868.tar.xz zen-1a144212278aa7158d6b32b63e398db95a7ae868.zip | |
merge disk and memory layers (#493)
- Feature: Added `--cache-memlayer-sizethreshold` option to zenserver to control at which size cache entries get cached in memory
- Changed: Merged cache memory layer with cache disk layer to reduce memory and cpu overhead
Diffstat (limited to 'src/zenserver/cache/httpstructuredcache.cpp')
| -rw-r--r-- | src/zenserver/cache/httpstructuredcache.cpp | 82 |
1 files changed, 59 insertions, 23 deletions
diff --git a/src/zenserver/cache/httpstructuredcache.cpp b/src/zenserver/cache/httpstructuredcache.cpp index 91f895b0b..d8bc00c03 100644 --- a/src/zenserver/cache/httpstructuredcache.cpp +++ b/src/zenserver/cache/httpstructuredcache.cpp @@ -366,7 +366,7 @@ HttpStructuredCacheService::ScrubStorage(ScrubContext& Ctx) ZenCacheStore::Info Info = m_CacheStore.GetInfo(); - ZEN_INFO("scrubbing '{}'", Info.Config.BasePath); + ZEN_INFO("scrubbing '{}'", Info.BasePath); m_LastScrubTime = Ctx.ScrubTimestamp(); @@ -712,7 +712,7 @@ HttpStructuredCacheService::HandleCacheRequest(HttpServerRequest& Request) ResponseWriter.BeginObject("Configuration"); { ExtendableStringBuilder<128> BasePathString; - BasePathString << Info.Config.BasePath.u8string(); + BasePathString << Info.BasePath.u8string(); ResponseWriter.AddString("BasePath"sv, BasePathString.ToView()); ResponseWriter.AddBool("AllowAutomaticCreationOfNamespaces", Info.Config.AllowAutomaticCreationOfNamespaces); ResponseWriter.BeginObject("Logging"); @@ -742,7 +742,6 @@ HttpStructuredCacheService::HandleCacheRequest(HttpServerRequest& Request) ResponseWriter.EndObject(); ResponseWriter.AddInteger("DiskEntryCount", Info.DiskEntryCount); - ResponseWriter.AddInteger("MemoryEntryCount", Info.MemoryEntryCount); return Request.WriteResponse(HttpResponseCode::OK, ResponseWriter.Save()); } @@ -772,9 +771,16 @@ HttpStructuredCacheService::HandleCacheNamespaceRequest(HttpServerRequest& Reque ResponseWriter.BeginObject("Configuration"); { ExtendableStringBuilder<128> BasePathString; - BasePathString << Info->Config.RootDir.u8string(); + BasePathString << Info->RootDir.u8string(); ResponseWriter.AddString("RootDir"sv, BasePathString.ToView()); - ResponseWriter.AddInteger("DiskLayerThreshold"sv, Info->Config.DiskLayerThreshold); + ResponseWriter.AddInteger("MaxBlockSize"sv, Info->Config.DiskLayerConfig.BucketConfig.MaxBlockSize); + ResponseWriter.AddInteger("PayloadAlignment"sv, Info->Config.DiskLayerConfig.BucketConfig.PayloadAlignment); + ResponseWriter.AddInteger("MemCacheSizeThreshold"sv, Info->Config.DiskLayerConfig.BucketConfig.MemCacheSizeThreshold); + ResponseWriter.AddInteger("LargeObjectThreshold"sv, Info->Config.DiskLayerConfig.BucketConfig.LargeObjectThreshold); + ResponseWriter.AddInteger("MemCacheTargetFootprintBytes"sv, Info->Config.DiskLayerConfig.MemCacheTargetFootprintBytes); + ResponseWriter.AddInteger("MemCacheTrimIntervalSeconds"sv, Info->Config.DiskLayerConfig.MemCacheTrimIntervalSeconds); + ResponseWriter.AddInteger("MemCacheMaxAgeSeconds"sv, Info->Config.DiskLayerConfig.MemCacheMaxAgeSeconds); + ResponseWriter.AddBool("EnableReferenceCaching"sv, Info->Config.DiskLayerConfig.BucketConfig.EnableReferenceCaching); } ResponseWriter.EndObject(); @@ -791,13 +797,12 @@ HttpStructuredCacheService::HandleCacheNamespaceRequest(HttpServerRequest& Reque ResponseWriter.BeginObject("StorageSize"sv); { - ResponseWriter.AddInteger("DiskSize"sv, Info->DiskLayerInfo.TotalSize); - ResponseWriter.AddInteger("MemorySize"sv, Info->MemoryLayerInfo.TotalSize); + ResponseWriter.AddInteger("DiskSize"sv, Info->DiskLayerInfo.StorageSize.DiskSize); + ResponseWriter.AddInteger("MemorySize"sv, Info->DiskLayerInfo.StorageSize.MemorySize); } ResponseWriter.EndObject(); - ResponseWriter.AddInteger("DiskEntryCount", Info->DiskLayerInfo.EntryCount); - ResponseWriter.AddInteger("MemoryEntryCount", Info->MemoryLayerInfo.EntryCount); + ResponseWriter.AddInteger("EntryCount", Info->DiskLayerInfo.EntryCount); return Request.WriteResponse(HttpResponseCode::OK, ResponseWriter.Save()); } @@ -842,13 +847,12 @@ HttpStructuredCacheService::HandleCacheBucketRequest(HttpServerRequest& Request, ResponseWriter.BeginObject("StorageSize"); { - ResponseWriter.AddInteger("DiskSize", Info->DiskLayerInfo.TotalSize); - ResponseWriter.AddInteger("MemorySize", Info->MemoryLayerInfo.TotalSize); + ResponseWriter.AddInteger("DiskSize", Info->DiskLayerInfo.StorageSize.DiskSize); + ResponseWriter.AddInteger("MemorySize", Info->DiskLayerInfo.StorageSize.MemorySize); } ResponseWriter.EndObject(); ResponseWriter.AddInteger("DiskEntryCount", Info->DiskLayerInfo.EntryCount); - ResponseWriter.AddInteger("MemoryEntryCount", Info->MemoryLayerInfo.EntryCount); return Request.WriteResponse(HttpResponseCode::OK, ResponseWriter.Save()); } @@ -3362,6 +3366,12 @@ HttpStructuredCacheService::HandleStatsRequest(HttpServerRequest& Request) Cbo << "hit_ratio" << (NamespaceTotal > 0 ? (double(NamespaceStats.Stats.HitCount) / double(NamespaceTotal)) : 0.0); EmitSnapshot("read", NamespaceStats.Stats.GetOps, Cbo); EmitSnapshot("write", NamespaceStats.Stats.PutOps, Cbo); + Cbo.BeginObject("size"); + { + Cbo << "disk" << NamespaceStats.Stats.DiskStats.DiskSize; + Cbo << "memory" << NamespaceStats.Stats.DiskStats.MemorySize; + } + Cbo.EndObject(); if (!NamespaceStats.Stats.DiskStats.BucketStats.empty()) { Cbo.BeginArray("buckets"); @@ -3369,24 +3379,50 @@ HttpStructuredCacheService::HandleStatsRequest(HttpServerRequest& Request) { Cbo.BeginObject(); Cbo.AddString("bucket", BucketStats.BucketName); - if (BucketStats.Stats.TotalSize == 0 && BucketStats.Stats.HitCount == 0 && BucketStats.Stats.MissCount == 0 && - BucketStats.Stats.WriteCount == 0) + if (BucketStats.Stats.DiskSize != 0 || BucketStats.Stats.MemorySize != 0) { + Cbo.BeginObject("size"); + { + Cbo << "disk" << BucketStats.Stats.DiskSize; + Cbo << "memory" << BucketStats.Stats.MemorySize; + } Cbo.EndObject(); - continue; } - Cbo << "size" << BucketStats.Stats.TotalSize; - const uint64_t BucketTotal = BucketStats.Stats.HitCount + BucketStats.Stats.MissCount; - if (BucketTotal == 0 && BucketStats.Stats.WriteCount == 0) + + if (BucketStats.Stats.DiskSize == 0 && BucketStats.Stats.DiskHitCount == 0 && + BucketStats.Stats.DiskMissCount == 0 && BucketStats.Stats.DiskWriteCount == 0 && + BucketStats.Stats.MemoryHitCount == 0 && BucketStats.Stats.MemoryMissCount == 0 && + BucketStats.Stats.MemoryWriteCount == 0) { Cbo.EndObject(); continue; } - Cbo << "hits" << BucketStats.Stats.HitCount << "misses" << BucketStats.Stats.MissCount << "writes" - << BucketStats.Stats.WriteCount; - Cbo << "hit_ratio" << (BucketTotal > 0 ? (double(BucketStats.Stats.HitCount) / double(BucketTotal)) : 0.0); - EmitSnapshot("read", BucketStats.Stats.GetOps, Cbo); - EmitSnapshot("write", BucketStats.Stats.PutOps, Cbo); + + const uint64_t BucketDiskTotal = BucketStats.Stats.DiskHitCount + BucketStats.Stats.DiskMissCount; + if (BucketDiskTotal != 0 || BucketStats.Stats.DiskWriteCount != 0) + { + Cbo << "hits" << BucketStats.Stats.DiskHitCount << "misses" << BucketStats.Stats.DiskMissCount << "writes" + << BucketStats.Stats.DiskWriteCount; + Cbo << "hit_ratio" + << (BucketDiskTotal > 0 ? (double(BucketStats.Stats.DiskHitCount) / double(BucketDiskTotal)) : 0.0); + } + + const uint64_t BucketMemoryTotal = BucketStats.Stats.MemoryHitCount + BucketStats.Stats.MemoryMissCount; + if (BucketMemoryTotal != 0 || BucketStats.Stats.MemoryWriteCount != 0) + { + Cbo << "mem_hits" << BucketStats.Stats.MemoryHitCount << "mem_misses" << BucketStats.Stats.MemoryMissCount + << "mem_writes" << BucketStats.Stats.MemoryWriteCount; + Cbo << "mem_hit_ratio" + << (BucketMemoryTotal > 0 ? (double(BucketStats.Stats.MemoryHitCount) / double(BucketMemoryTotal)) + : 0.0); + } + + if (BucketDiskTotal != 0 || BucketStats.Stats.DiskWriteCount != 0 || BucketMemoryTotal != 0 || + BucketStats.Stats.MemoryWriteCount != 0) + { + EmitSnapshot("read", BucketStats.Stats.GetOps, Cbo); + EmitSnapshot("write", BucketStats.Stats.PutOps, Cbo); + } Cbo.EndObject(); } |