Files
f41gh7 db69fc686a lib/promscape: reduce memory allocations for newCompressedLabels
Previously, creation of compressedLabels could require extra memory due
 to re-allocation of tmpBuf and clone of 3 extra fields. It could result
 into extra CPU usage for garbage-collection.

  This commit adds sync.Pool for labels escape with JSON marshal and
  allocates dedicated buffer for job, address and ID strings.

 Optimisations was made based on the following profiles from reported
 issue:

 1) CPU:
 ```
 Showing top 10 nodes out of 172
      flat  flat%   sum%        cum   cum%
    12.17s 17.19% 17.19%     12.25s 17.30%  runtime.cgocall
     5.87s  8.29% 25.48%      5.87s  8.29%  runtime.memmove
     3.45s  4.87% 30.35%      6.66s  9.41%  runtime.tryDeferToSpanScan
```

2) memory go tool pprof -alloc_objects heap_profile.txt
```
Showing top 10 nodes out of 94
      flat  flat%   sum%        cum   cum%
3673568660 26.09% 26.09% 4147984949 29.46%  github.com/valyala/quicktemplate.AppendJSONString
1657933055 11.77% 37.86% 1657933055 11.77%  internal/stringslite.Clone (inline)
1555166274 11.04% 48.91% 1555166274 11.04%  github.com/valyala/gozstd.compress
1254756359  8.91% 57.82% 9433313305 66.99%  github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape.newCompressedLabels
1067036870  7.58% 65.39% 1067036870  7.58%  github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape.appendExtraLabels
```

results of benchstat:
```
benchstat before after
goos: darwin
goarch: arm64
pkg: github.com/VictoriaMetrics/VictoriaMetrics/lib/promscrape
cpu: Apple M1 Pro
                       │ 134/before  │               after                │
                       │   sec/op    │   sec/op     vs base               │
NewCompressedLabels-10   981.3n ± 2%   908.6n ± 2%  -7.40% (p=0.000 n=10)

                       │ 134/before │               after                │
                       │    B/op    │    B/op     vs base                │
NewCompressedLabels-10   891.5 ± 0%   772.0 ± 0%  -13.40% (p=0.000 n=10)

                       │ 134/before  │               after                │
                       │  allocs/op  │ allocs/op   vs base                │
NewCompressedLabels-10   10.000 ± 0%   3.000 ± 0%  -70.00% (p=0.000 n=10)
```

Fixes https://github.com/VictoriaMetrics/VictoriaMetrics/issues/10919
2026-05-14 15:24:25 +02:00
..
2026-05-11 11:20:09 +02:00