Add statistics about buffer reuse

This commit is contained in:
Ingo Oppermann
2024-10-14 15:49:07 +02:00
parent 2f932be97d
commit bc12123191
2 changed files with 8 additions and 0 deletions

View File

@@ -27,6 +27,7 @@ type BufferPool struct {
maxSize uint64 maxSize uint64
alloc uint64 alloc uint64
reuse uint64
recycle uint64 recycle uint64
dump uint64 dump uint64
@@ -35,6 +36,7 @@ type BufferPool struct {
type PoolStats struct { type PoolStats struct {
Alloc uint64 Alloc uint64
Reuse uint64
Recycle uint64 Recycle uint64
Dump uint64 Dump uint64
@@ -53,6 +55,7 @@ func NewBufferPool() *BufferPool {
func (p *BufferPool) Stats() PoolStats { func (p *BufferPool) Stats() PoolStats {
s := PoolStats{ s := PoolStats{
Alloc: atomic.LoadUint64(&p.alloc), Alloc: atomic.LoadUint64(&p.alloc),
Reuse: atomic.LoadUint64(&p.reuse),
Recycle: atomic.LoadUint64(&p.recycle), Recycle: atomic.LoadUint64(&p.recycle),
Dump: atomic.LoadUint64(&p.dump), Dump: atomic.LoadUint64(&p.dump),
DefaultSize: atomic.LoadUint64(&p.defaultSize), DefaultSize: atomic.LoadUint64(&p.defaultSize),
@@ -65,6 +68,7 @@ func (p *BufferPool) Stats() PoolStats {
func (p *BufferPool) Get() *Buffer { func (p *BufferPool) Get() *Buffer {
v := p.pool.Get() v := p.pool.Get()
if v != nil { if v != nil {
atomic.AddUint64(&p.reuse, 1)
return v.(*Buffer) return v.(*Buffer)
} }

View File

@@ -9,6 +9,7 @@ import (
type selfCollector struct { type selfCollector struct {
bufferAllocDescr *metric.Description bufferAllocDescr *metric.Description
bufferReuseDescr *metric.Description
bufferRecycleDescr *metric.Description bufferRecycleDescr *metric.Description
bufferDumpDescr *metric.Description bufferDumpDescr *metric.Description
bufferDefaultSizeDescr *metric.Description bufferDefaultSizeDescr *metric.Description
@@ -28,6 +29,7 @@ func NewSelfCollector() metric.Collector {
c := &selfCollector{} c := &selfCollector{}
c.bufferAllocDescr = metric.NewDesc("self_bufferpool_alloc", "Number of buffer allocations", nil) c.bufferAllocDescr = metric.NewDesc("self_bufferpool_alloc", "Number of buffer allocations", nil)
c.bufferReuseDescr = metric.NewDesc("self_bufferpool_reuse", "Number of buffer reuses", nil)
c.bufferRecycleDescr = metric.NewDesc("self_bufferpool_recycle", "Number of buffer recycles", nil) c.bufferRecycleDescr = metric.NewDesc("self_bufferpool_recycle", "Number of buffer recycles", nil)
c.bufferDumpDescr = metric.NewDesc("self_bufferpool_dump", "Number of buffer dumps", nil) c.bufferDumpDescr = metric.NewDesc("self_bufferpool_dump", "Number of buffer dumps", nil)
c.bufferDefaultSizeDescr = metric.NewDesc("self_bufferpool_default_size", "Default buffer size", nil) c.bufferDefaultSizeDescr = metric.NewDesc("self_bufferpool_default_size", "Default buffer size", nil)
@@ -54,6 +56,7 @@ func (c *selfCollector) Prefix() string {
func (c *selfCollector) Describe() []*metric.Description { func (c *selfCollector) Describe() []*metric.Description {
return []*metric.Description{ return []*metric.Description{
c.bufferAllocDescr, c.bufferAllocDescr,
c.bufferReuseDescr,
c.bufferRecycleDescr, c.bufferRecycleDescr,
c.bufferDumpDescr, c.bufferDumpDescr,
c.bufferDefaultSizeDescr, c.bufferDefaultSizeDescr,
@@ -75,6 +78,7 @@ func (c *selfCollector) Collect() metric.Metrics {
metrics := metric.NewMetrics() metrics := metric.NewMetrics()
metrics.Add(metric.NewValue(c.bufferAllocDescr, float64(bufferstats.Alloc))) metrics.Add(metric.NewValue(c.bufferAllocDescr, float64(bufferstats.Alloc)))
metrics.Add(metric.NewValue(c.bufferReuseDescr, float64(bufferstats.Reuse)))
metrics.Add(metric.NewValue(c.bufferRecycleDescr, float64(bufferstats.Recycle))) metrics.Add(metric.NewValue(c.bufferRecycleDescr, float64(bufferstats.Recycle)))
metrics.Add(metric.NewValue(c.bufferDumpDescr, float64(bufferstats.Dump))) metrics.Add(metric.NewValue(c.bufferDumpDescr, float64(bufferstats.Dump)))
metrics.Add(metric.NewValue(c.bufferDefaultSizeDescr, float64(bufferstats.DefaultSize))) metrics.Add(metric.NewValue(c.bufferDefaultSizeDescr, float64(bufferstats.DefaultSize)))