Skip to content

Conversation

bwplotka
Copy link
Member

@bwplotka bwplotka commented Feb 12, 2025

Depends on #15731

This implements what's discussed in #15731 (comment)

It's quite complex due to https://protobuf.dev/programming-guides/serialization-not-canonical/ and magic suffixes/labels for classic series, but seems doable.

…(...)

Simplified the interface given no one is using the return argument.
Renamed for clarity too.

Found and discussed #15731 (comment)

Signed-off-by: bwplotka <bwplotka@gmail.com>
Signed-off-by: bwplotka <bwplotka@gmail.com>

Update model/textparse/protobufparse.go

Co-authored-by: George Krajcsovits <krajorama@users.noreply.github.com>
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>

Addressing comments.

Signed-off-by: bwplotka <bwplotka@gmail.com>

decoder: reuse histograms and summaries.

Signed-off-by: bwplotka <bwplotka@gmail.com>

optimize help returning (5% of mem utilization).

Signed-off-by: bwplotka <bwplotka@gmail.com>

Apply suggestions from code review

Co-authored-by: George Krajcsovits <krajorama@users.noreply.github.com>
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>

Update prompb/io/prometheus/client/decoder.go

Co-authored-by: George Krajcsovits <krajorama@users.noreply.github.com>
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>

Fix build.

Signed-off-by: bwplotka <bwplotka@gmail.com>
@bwplotka
Copy link
Member Author

Initial results are pretty compelling though:

benchstat protoopt-v1.txt protoopt-v2.txt         
goos: darwin
goarch: arm64
pkg: github.com/prometheus/prometheus/scrape
cpu: Apple M1 Pro
                                                      │ protoopt-v1.txt │          protoopt-v2.txt           │
                                                      │     sec/op      │   sec/op     vs base               │
ScrapeLoopAppend/data=1Fam1000Gauges/fmt=PromText-2        557.2µ ± 18%   551.1µ ± 9%        ~ (p=0.818 n=6)
ScrapeLoopAppend/data=1Fam1000Gauges/fmt=OMText-2          513.4µ ±  2%   511.0µ ± 8%        ~ (p=1.000 n=6)
ScrapeLoopAppend/data=1Fam1000Gauges/fmt=PromProto-2       563.7µ ±  2%   399.3µ ± 6%  -29.17% (p=0.002 n=6)
ScrapeLoopAppend/data=237FamsAllTypes/fmt=PromText-2       754.4µ ±  3%   767.8µ ± 2%   +1.78% (p=0.041 n=6)
ScrapeLoopAppend/data=237FamsAllTypes/fmt=OMText-2         748.1µ ±  3%   763.4µ ± 4%        ~ (p=0.310 n=6)
ScrapeLoopAppend/data=237FamsAllTypes/fmt=PromProto-2      725.5µ ±  3%   467.2µ ± 4%  -35.60% (p=0.002 n=6)
geomean                                                    635.8µ         559.9µ       -11.94%

                                                      │ protoopt-v1.txt │           protoopt-v2.txt            │
                                                      │      B/op       │     B/op       vs base               │
ScrapeLoopAppend/data=1Fam1000Gauges/fmt=PromText-2       342.9Ki ±  7%   345.9Ki ±  2%        ~ (p=1.000 n=6)
ScrapeLoopAppend/data=1Fam1000Gauges/fmt=OMText-2         342.1Ki ±  3%   349.8Ki ±  6%        ~ (p=0.394 n=6)
ScrapeLoopAppend/data=1Fam1000Gauges/fmt=PromProto-2      465.1Ki ±  3%   459.1Ki ±  3%        ~ (p=0.065 n=6)
ScrapeLoopAppend/data=237FamsAllTypes/fmt=PromText-2      311.6Ki ± 11%   333.1Ki ±  9%        ~ (p=0.310 n=6)
ScrapeLoopAppend/data=237FamsAllTypes/fmt=OMText-2        350.2Ki ±  2%   346.8Ki ± 13%        ~ (p=0.240 n=6)
ScrapeLoopAppend/data=237FamsAllTypes/fmt=PromProto-2     393.5Ki ±  2%   318.9Ki ±  4%  -18.96% (p=0.002 n=6)
geomean                                                   364.4Ki         356.3Ki         -2.23%

                                                      │ protoopt-v1.txt │           protoopt-v2.txt           │
                                                      │    allocs/op    │ allocs/op   vs base                 │
ScrapeLoopAppend/data=1Fam1000Gauges/fmt=PromText-2          13.00 ± 8%   13.00 ± 8%        ~ (p=1.000 n=6)
ScrapeLoopAppend/data=1Fam1000Gauges/fmt=OMText-2            14.00 ± 7%   13.50 ± 4%        ~ (p=1.000 n=6)
ScrapeLoopAppend/data=1Fam1000Gauges/fmt=PromProto-2         23.50 ± 2%   22.00 ± 0%   -6.38% (p=0.002 n=6)
ScrapeLoopAppend/data=237FamsAllTypes/fmt=PromText-2         14.00 ± 0%   14.00 ± 0%        ~ (p=1.000 n=6) ¹
ScrapeLoopAppend/data=237FamsAllTypes/fmt=OMText-2           15.00 ± 0%   15.00 ± 0%        ~ (p=1.000 n=6) ¹
ScrapeLoopAppend/data=237FamsAllTypes/fmt=PromProto-2      2226.00 ± 0%   32.00 ± 0%  -98.56% (p=0.002 n=6)
geomean                                                      35.49        17.21       -51.52%
¹ all samples are equal

Depends on #15731

Signed-off-by: bwplotka <bwplotka@gmail.com>
@bwplotka
Copy link
Member Author

/prombench main --bench.version=bench/protofirst

@prombot
Copy link
Contributor

prombot commented Feb 12, 2025

⏱️ Welcome to Prometheus Benchmarking Tool. ⏱️

Compared versions: PR-16020 and main

Custom benchmark version: bench/protofirst branch

After the successful deployment (check status here), the benchmarking results can be viewed at:

Available Commands:

  • To restart benchmark: /prombench restart main --bench.version=bench/protofirst
  • To stop benchmark: /prombench cancel
  • To print help: /prombench help

@bwplotka
Copy link
Member Author

/prombench cancel

@prombot
Copy link
Contributor

prombot commented Feb 13, 2025

Benchmark cancel is in progress.

@bwplotka
Copy link
Member Author

Something is off with the prombench results I expected bigger improvement. Might need some work, but pausing it given #15731 makes native histogram parsing good enough (on par really with other protocols), focusing on other things for the next weeks.

Anybody can continue this work if they want!

@bwplotka bwplotka closed this Feb 13, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants