From fde69dab49396fab96d03f49df74182ecbde3158 Mon Sep 17 00:00:00 2001 From: Fabian Reinartz Date: Thu, 12 Jan 2017 20:00:36 +0100 Subject: [PATCH] Use buffer pool for head appenders --- cmd/tsdb/main.go | 4 ++-- head.go | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/cmd/tsdb/main.go b/cmd/tsdb/main.go index a8ba514ab..fb65ae503 100644 --- a/cmd/tsdb/main.go +++ b/cmd/tsdb/main.go @@ -150,7 +150,7 @@ func (b *writeBenchmark) ingestScrapes(metrics []model.Metric, scrapeCount int) lbls = append(lbls, lset) } - for i := 0; i < scrapeCount; i += 25 { + for i := 0; i < scrapeCount; i += 50 { lbls := lbls for len(lbls) > 0 { l := 1000 @@ -162,7 +162,7 @@ func (b *writeBenchmark) ingestScrapes(metrics []model.Metric, scrapeCount int) wg.Add(1) go func() { - n, err := b.ingestScrapesShard(batch, 25, int64(30000*i)) + n, err := b.ingestScrapesShard(batch, 50, int64(30000*i)) if err != nil { // exitWithError(err) fmt.Println(" err", err) diff --git a/head.go b/head.go index 625480743..cd6210b53 100644 --- a/head.go +++ b/head.go @@ -107,7 +107,21 @@ func (h *headBlock) Stats() BlockStats { func (h *headBlock) Appender() Appender { h.mtx.RLock() - return &headAppender{headBlock: h} + return &headAppender{headBlock: h, samples: getHeadAppendBuffer()} +} + +var headPool = sync.Pool{} + +func getHeadAppendBuffer() []hashedSample { + b := headPool.Get() + if b == nil { + return make([]hashedSample, 0, 512) + } + return b.([]hashedSample) +} + +func putHeadAppendBuffer(b []hashedSample) { + headPool.Put(b[:0]) } type headAppender struct { @@ -213,6 +227,7 @@ func (a *headAppender) createSeries() { } func (a *headAppender) Commit() error { + defer putHeadAppendBuffer(a.samples) defer a.mtx.RUnlock() // Write all new series and samples to the WAL and add it to the