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
8 changes: 6 additions & 2 deletions cache/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
SizeRead prometheus.Counter
SizeOccupied prometheus.Counter
SizeReleased prometheus.Counter
EntriesOccupied prometheus.Counter
EntriesReleased prometheus.Counter
MapsRecreated prometheus.Counter
MissLatency prometheus.Counter
}
Expand Down Expand Up @@ -54,12 +56,14 @@
m.MissTotal.Inc()
m.SizeOccupied.Add(float64(size))
m.MissLatency.Add(latencySec)
m.EntriesOccupied.Inc()
}
}

func (m *Metrics) reportReleased(freed uint64) {
func (m *Metrics) reportReleased(freedBytes uint64, freedEntries uint64) {

Check failure on line 63 in cache/metrics.go

View workflow job for this annotation

GitHub Actions / lint

paramTypeCombine: func(freedBytes uint64, freedEntries uint64) could be replaced with func(freedBytes, freedEntries uint64) (gocritic)
if m != nil {
m.SizeReleased.Add(float64(freed))
m.SizeReleased.Add(float64(freedBytes))
m.EntriesReleased.Add(float64(freedEntries))
}
}

Expand Down
6 changes: 4 additions & 2 deletions docs/en/internal/cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,12 +186,14 @@ Each metric is collected separately for each layer.
- ReattemptsTotal - number of times access method had to reattempt due to entry
invalidation
- SizeOccupied - counter of size of the values added to cache on miss
- EntriesOccupied - counter of entries 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 = EntriesOccupied - 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
6 changes: 4 additions & 2 deletions docs/ru/internal/cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,12 +186,14 @@ Each metric is collected separately for each layer.
- ReattemptsTotal - number of times access method had to reattempt due to entry
invalidation
- SizeOccupied - counter of size of the values added to cache on miss
- EntriesOccupied - counter of entries 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 = EntriesOccupied - 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
6 changes: 6 additions & 0 deletions fracmanager/cache_maintainer_metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ type CacheMaintainerMetrics struct {
SizeRead *prometheus.CounterVec
SizeOccupied *prometheus.CounterVec
SizeReleased *prometheus.CounterVec
EntriesOccupied *prometheus.CounterVec
EntriesReleased *prometheus.CounterVec
MapsRecreated *prometheus.CounterVec
MissLatency *prometheus.CounterVec

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

Expand All @@ -59,6 +63,8 @@ func (m *CacheMaintainerMetrics) GetLayerMetrics(layerName string) *cache.Metric
SizeRead: m.SizeRead.WithLabelValues(layerName),
SizeOccupied: m.SizeOccupied.WithLabelValues(layerName),
SizeReleased: m.SizeReleased.WithLabelValues(layerName),
EntriesOccupied: m.EntriesOccupied.WithLabelValues(layerName),
EntriesReleased: m.EntriesReleased.WithLabelValues(layerName),
MapsRecreated: m.MapsRecreated.WithLabelValues(layerName),
MissLatency: m.MissLatency.WithLabelValues(layerName),
}
Expand Down
12 changes: 12 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 Expand Up @@ -93,6 +99,12 @@ var (
Name: "miss_size_bytes_total",
Help: "Total size occupied in cache by layer in bytes",
}, []string{"layer"})
cacheEntriesOccupied = promauto.NewCounterVec(prometheus.CounterOpts{
Namespace: "seq_db_store",
Subsystem: "cache",
Name: "miss_entries_total",
Help: "Number of cache entries occupied by layer on miss",
}, []string{"layer"})
cacheMapsRecreated = promauto.NewCounterVec(prometheus.CounterOpts{
Namespace: "seq_db_store",
Subsystem: "cache",
Expand Down
Loading