aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/cache/httpstructuredcache.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-10-24 14:54:26 +0200
committerGitHub <[email protected]>2023-10-24 14:54:26 +0200
commit1a144212278aa7158d6b32b63e398db95a7ae868 (patch)
tree58735827b0b706368a82bcaaa8aaa68f211e1d10 /src/zenserver/cache/httpstructuredcache.cpp
parentchunking moved to zenstore (#490) (diff)
downloadzen-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.cpp82
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();
}