mirror of
https://github.com/prometheus/prometheus.git
synced 2025-02-02 08:31:11 -08:00
promql: inline nextSample function
Move Sample out of loop to reduce allocations, otherwise it escapes to the heap. Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
This commit is contained in:
parent
526ce4ee7a
commit
4584f67e17
|
@ -2921,6 +2921,7 @@ func (ev *evaluator) aggregation(e *parser.AggregateExpr, q float64, inputMatrix
|
||||||
// For a range query, aggregates output in the seriess map.
|
// For a range query, aggregates output in the seriess map.
|
||||||
func (ev *evaluator) aggregationK(e *parser.AggregateExpr, q float64, inputMatrix Matrix, seriesToResult []int, orderedResult []*groupedAggregation, enh *EvalNodeHelper, seriess map[uint64]Series) (Matrix, annotations.Annotations) {
|
func (ev *evaluator) aggregationK(e *parser.AggregateExpr, q float64, inputMatrix Matrix, seriesToResult []int, orderedResult []*groupedAggregation, enh *EvalNodeHelper, seriess map[uint64]Series) (Matrix, annotations.Annotations) {
|
||||||
op := e.Op
|
op := e.Op
|
||||||
|
var s Sample
|
||||||
var annos annotations.Annotations
|
var annos annotations.Annotations
|
||||||
seen := make([]bool, len(orderedResult)) // Which output groups were seen in the input at this timestamp.
|
seen := make([]bool, len(orderedResult)) // Which output groups were seen in the input at this timestamp.
|
||||||
if !convertibleToInt64(q) {
|
if !convertibleToInt64(q) {
|
||||||
|
@ -2935,10 +2936,11 @@ func (ev *evaluator) aggregationK(e *parser.AggregateExpr, q float64, inputMatri
|
||||||
}
|
}
|
||||||
|
|
||||||
for si := range inputMatrix {
|
for si := range inputMatrix {
|
||||||
s, ok := ev.nextSample(enh.Ts, inputMatrix, si)
|
f, _, ok := ev.nextValues(enh.Ts, &inputMatrix[si])
|
||||||
if !ok {
|
if !ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
s = Sample{Metric: inputMatrix[si].Metric, F: f}
|
||||||
|
|
||||||
group := orderedResult[seriesToResult[si]]
|
group := orderedResult[seriesToResult[si]]
|
||||||
// Initialize this group if it's the first time we've seen it.
|
// Initialize this group if it's the first time we've seen it.
|
||||||
|
@ -3111,15 +3113,6 @@ func (ev *evaluator) nextValues(ts int64, series *Series) (f float64, h *histogr
|
||||||
return f, h, true
|
return f, h, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ev *evaluator) nextSample(ts int64, inputMatrix Matrix, si int) (Sample, bool) {
|
|
||||||
f, h, ok := ev.nextValues(ts, &inputMatrix[si])
|
|
||||||
ev.currentSamples++
|
|
||||||
if ev.currentSamples > ev.maxSamples {
|
|
||||||
ev.error(ErrTooManySamples(env))
|
|
||||||
}
|
|
||||||
return Sample{Metric: inputMatrix[si].Metric, F: f, H: h, T: ts}, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
// groupingKey builds and returns the grouping key for the given metric and
|
// groupingKey builds and returns the grouping key for the given metric and
|
||||||
// grouping labels.
|
// grouping labels.
|
||||||
func generateGroupingKey(metric labels.Labels, grouping []string, without bool, buf []byte) (uint64, []byte) {
|
func generateGroupingKey(metric labels.Labels, grouping []string, without bool, buf []byte) (uint64, []byte) {
|
||||||
|
|
Loading…
Reference in a new issue