Skip to content
Open
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
15 changes: 10 additions & 5 deletions cache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,10 @@ func (c *Cache[V]) Cleanup() uint64 {
defer c.mu.Unlock()

// collect old data
var totalFreed uint64
var (
bytesFreed uint64
entriesFreed uint64
)
if len(c.payload) > c.maxPayloadSize {
c.maxPayloadSize = len(c.payload)
}
Expand All @@ -117,13 +120,14 @@ func (c *Cache[V]) Cleanup() uint64 {
}
delete(c.payload, k)
e.deleted = true
totalFreed += e.size
bytesFreed += e.size
entriesFreed++
}

c.recreatePayload()
c.metrics.reportReleased(totalFreed)
c.metrics.reportReleased(bytesFreed, entriesFreed)

return totalFreed
return bytesFreed
}

func (c *Cache[V]) Evict(key uint32) {
Expand Down Expand Up @@ -294,13 +298,14 @@ func (c *Cache[V]) Release() {
c.mu.Lock()
defer c.mu.Unlock()

entriesFreed := uint64(len(c.payload))
var totalFreed uint64
for _, e := range c.payload {
totalFreed += e.size
e.gen.size.Sub(e.size)
}

c.metrics.reportReleased(totalFreed)
c.metrics.reportReleased(totalFreed, entriesFreed)

c.payload = nil
c.released = true
Expand Down
6 changes: 4 additions & 2 deletions cache/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ type Metrics struct {
SizeRead prometheus.Counter
SizeOccupied prometheus.Counter
SizeReleased prometheus.Counter
EntriesReleased prometheus.Counter
MapsRecreated prometheus.Counter
MissLatency prometheus.Counter
}
Expand Down Expand Up @@ -57,9 +58,10 @@ func (m *Metrics) reportMiss(size uint64, latencySec float64) {
}
}

func (m *Metrics) reportReleased(freed uint64) {
func (m *Metrics) reportReleased(freedBytes, freedEntries uint64) {
if m != nil {
m.SizeReleased.Add(float64(freed))
m.SizeReleased.Add(float64(freedBytes))
m.EntriesReleased.Add(float64(freedEntries))
}
}

Expand Down
5 changes: 3 additions & 2 deletions docs/en/internal/cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,11 +187,12 @@ Each metric is collected separately for each layer.
invalidation
- SizeOccupied - counter of size of the values added to cache on miss
- SizeRead - counter of size of the values retrieved on hit
- SizeReleased - counter of size of data we released
- SizeReleased - counter of size of data we released
- EntriesReleased - counter of entries removed from cache
- MapsRecreated - counter of events we recreate cache maps

As a rule, `TouchTotal = HitsTotal + MissTotal + PanicsTotal`.
Also `TotalSize = SizeOccupied - SizeReleased`.
Also `TotalSize = SizeOccupied - SizeReleased` and `TotalEntries = MissTotal - EntriesReleased`.
MissTotal and SizeOccupied are the metrics to optimize cache.
HitsTotal and SizeRead are the metrics to optimize cache use.
Rising WaitTotal means concurrent access to the same not-yet-cached value.
Expand Down
5 changes: 3 additions & 2 deletions docs/ru/internal/cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,11 +187,12 @@ Each metric is collected separately for each layer.
invalidation
- SizeOccupied - counter of size of the values added to cache on miss
- SizeRead - counter of size of the values retrieved on hit
- SizeReleased - counter of size of data we released
- SizeReleased - counter of size of data we released
- EntriesReleased - counter of entries removed from cache
- MapsRecreated - counter of events we recreate cache maps

As a rule, `TouchTotal = HitsTotal + MissTotal + PanicsTotal`.
Also `TotalSize = SizeOccupied - SizeReleased`.
Also `TotalSize = SizeOccupied - SizeReleased` and `TotalEntries = MissTotal - EntriesReleased`.
MissTotal and SizeOccupied are the metrics to optimize cache.
HitsTotal and SizeRead are the metrics to optimize cache use.
Rising WaitTotal means concurrent access to the same not-yet-cached value.
Expand Down
3 changes: 3 additions & 0 deletions fracmanager/cache_maintainer_metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ type CacheMaintainerMetrics struct {
SizeRead *prometheus.CounterVec
SizeOccupied *prometheus.CounterVec
SizeReleased *prometheus.CounterVec
EntriesReleased *prometheus.CounterVec
MapsRecreated *prometheus.CounterVec
MissLatency *prometheus.CounterVec

Expand All @@ -37,6 +38,7 @@ func newDefaultCacheMetrics() *CacheMaintainerMetrics {
SizeRead: cacheSizeRead,
SizeOccupied: cacheSizeOccupied,
SizeReleased: cacheSizeReleased,
EntriesReleased: cacheEntriesReleased,
MapsRecreated: cacheMapsRecreated,
MissLatency: cacheMissLatencySec,

Expand All @@ -59,6 +61,7 @@ func (m *CacheMaintainerMetrics) GetLayerMetrics(layerName string) *cache.Metric
SizeRead: m.SizeRead.WithLabelValues(layerName),
SizeOccupied: m.SizeOccupied.WithLabelValues(layerName),
SizeReleased: m.SizeReleased.WithLabelValues(layerName),
EntriesReleased: m.EntriesReleased.WithLabelValues(layerName),
MapsRecreated: m.MapsRecreated.WithLabelValues(layerName),
MissLatency: m.MissLatency.WithLabelValues(layerName),
}
Expand Down
6 changes: 6 additions & 0 deletions fracmanager/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ var (
Name: "size_released_bytes_total",
Help: "Size in bytes released from cache",
}, []string{"layer"})
cacheEntriesReleased = promauto.NewCounterVec(prometheus.CounterOpts{
Namespace: "seq_db_store",
Subsystem: "cache",
Name: "entries_released_total",
Help: "Number of cache entries released by layer",
}, []string{"layer"})
cacheHitsTotal = promauto.NewCounterVec(prometheus.CounterOpts{
Namespace: "seq_db_store",
Subsystem: "cache",
Expand Down
Loading