Use buffer pool for head appenders

pull/5805/head
Fabian Reinartz 8 years ago
parent a317f252b9
commit fde69dab49

@ -150,7 +150,7 @@ func (b *writeBenchmark) ingestScrapes(metrics []model.Metric, scrapeCount int)
lbls = append(lbls, lset) lbls = append(lbls, lset)
} }
for i := 0; i < scrapeCount; i += 25 { for i := 0; i < scrapeCount; i += 50 {
lbls := lbls lbls := lbls
for len(lbls) > 0 { for len(lbls) > 0 {
l := 1000 l := 1000
@ -162,7 +162,7 @@ func (b *writeBenchmark) ingestScrapes(metrics []model.Metric, scrapeCount int)
wg.Add(1) wg.Add(1)
go func() { go func() {
n, err := b.ingestScrapesShard(batch, 25, int64(30000*i)) n, err := b.ingestScrapesShard(batch, 50, int64(30000*i))
if err != nil { if err != nil {
// exitWithError(err) // exitWithError(err)
fmt.Println(" err", err) fmt.Println(" err", err)

@ -107,7 +107,21 @@ func (h *headBlock) Stats() BlockStats {
func (h *headBlock) Appender() Appender { func (h *headBlock) Appender() Appender {
h.mtx.RLock() 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 { type headAppender struct {
@ -213,6 +227,7 @@ func (a *headAppender) createSeries() {
} }
func (a *headAppender) Commit() error { func (a *headAppender) Commit() error {
defer putHeadAppendBuffer(a.samples)
defer a.mtx.RUnlock() defer a.mtx.RUnlock()
// Write all new series and samples to the WAL and add it to the // Write all new series and samples to the WAL and add it to the

Loading…
Cancel
Save