mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Prometheus: Reduce allocations parsing exemplars (#58959)
* Prometheus: Reduce allocations parsing exemplars This reduces allocations for parsing exemplars. name old time/op new time/op delta ExemplarJson-8 24.7ms ±15% 17.6ms ± 2% -28.72% (p=0.008 n=5+5) name old alloc/op new alloc/op delta ExemplarJson-8 4.70MB ± 0% 3.58MB ± 0% -23.79% (p=0.008 n=5+5) name old allocs/op new allocs/op delta ExemplarJson-8 72.6k ± 0% 69.1k ± 0% -4.81% (p=0.008 n=5+5) * Ensure pairs is reset
This commit is contained in:
@@ -227,8 +227,8 @@ func readArrayData(iter *jsoniter.Iterator) backend.DataResponse {
|
||||
}
|
||||
|
||||
// For consistent ordering read values to an array not a map
|
||||
func readLabelsAsPairs(iter *jsoniter.Iterator) [][2]string {
|
||||
pairs := make([][2]string, 0, 10)
|
||||
func readLabelsAsPairs(iter *jsoniter.Iterator, pairs [][2]string) [][2]string {
|
||||
pairs = pairs[:0]
|
||||
for k := iter.ReadObject(); k != ""; k = iter.ReadObject() {
|
||||
pairs = append(pairs, [2]string{k, iter.ReadString()})
|
||||
}
|
||||
@@ -269,7 +269,7 @@ func readLabelsOrExemplars(iter *jsoniter.Iterator) (*data.Frame, [][2]string) {
|
||||
|
||||
case "labels":
|
||||
max := 0
|
||||
for _, pair := range readLabelsAsPairs(iter) {
|
||||
for _, pair := range readLabelsAsPairs(iter, pairs) {
|
||||
k := pair[0]
|
||||
v := pair[1]
|
||||
f, ok := lookup[k]
|
||||
@@ -304,6 +304,7 @@ func readLabelsOrExemplars(iter *jsoniter.Iterator) (*data.Frame, [][2]string) {
|
||||
}
|
||||
default:
|
||||
v := fmt.Sprintf("%v", iter.Read())
|
||||
pairs = pairs[:0]
|
||||
pairs = append(pairs, [2]string{l1Field, v})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user