Skip to content

Iterator Perfomance Improvements - #3667

Merged
joe-elliott merged 21 commits into
grafana:mainfrom
joe-elliott:faster-please
May 15, 2024
Merged

Iterator Perfomance Improvements#3667
joe-elliott merged 21 commits into
grafana:mainfrom
joe-elliott:faster-please

Conversation

@joe-elliott

@joe-elliott joe-elliott commented May 10, 2024

Copy link
Copy Markdown
Collaborator

What this PR does:
A series of performance improvements that came from investigating the perf on tag value search.

  • Change RowNumber from [6]int64 to [6]int32. See below for improvements specific to this.
  • Diminished the role of the GenericPredicate and included a note to not use it. There is one predicate still using this, but I would like to remove them all. GenericPredicate was creating not inlineable function calls to do simple comparisons.
  • Use unsafeToString in the tag filters.
  • Added a set of templated predicates that are generated by make gen-parquet-query to replace the usage of GenericPredicate. This is included in make vendor-check so CI will confirm that the template and code do not drift.
  • Removed the SyncIterator InstrumentedPredicate.
  • Removed FloatBetweenPredicate. It was not used
Tag Values Benches
goos: darwin
goarch: arm64
pkg: github.com/grafana/tempo/tempodb/encoding/vparquet3
                                                                                                           │ before-tv.txt │            after-tv.txt             │
                                                                                                           │    sec/op     │   sec/op     vs base                │
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"}-11                                  259.3m ± 1%   247.8m ± 3%   -4.44% (p=0.000 n=10)
FetchTagValues/tag:_span.component,_query:_{resource.namespace="tempo-ops"}-11                                 234.0m ± 0%   223.6m ± 1%   -4.46% (p=0.000 n=10)
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"_&&_span.http.status_code=200}-11     389.5m ± 1%   373.7m ± 3%   -4.05% (p=0.000 n=10)
FetchTagValues/tag:_resource.namespace,_query:_{span.http.status_code=200}-11                                   2.139 ± 0%    1.542 ± 2%  -27.90% (p=0.000 n=10)
geomean                                                                                                        474.2m        422.7m       -10.85%

                                                                                                           │ before-tv.txt │             after-tv.txt             │
                                                                                                           │     B/op      │     B/op      vs base                │
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"}-11                                 101.0Mi ± 3%   100.4Mi ± 3%        ~ (p=0.853 n=10)
FetchTagValues/tag:_span.component,_query:_{resource.namespace="tempo-ops"}-11                                9.202Mi ± 6%   9.180Mi ± 3%        ~ (p=0.853 n=10)
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"_&&_span.http.status_code=200}-11    101.4Mi ± 7%   103.3Mi ± 3%        ~ (p=0.393 n=10)
FetchTagValues/tag:_resource.namespace,_query:_{span.http.status_code=200}-11                                 48.98Mi ± 1%   12.76Mi ± 3%  -73.95% (p=0.000 n=10)
geomean                                                                                                       46.35Mi        33.20Mi       -28.37%

                                                                                                           │ before-tv.txt │            after-tv.txt             │
                                                                                                           │   allocs/op   │  allocs/op   vs base                │
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"}-11                                  142.9k ± 0%   131.1k ± 0%   -8.30% (p=0.000 n=10)
FetchTagValues/tag:_span.component,_query:_{resource.namespace="tempo-ops"}-11                                 139.6k ± 0%   125.0k ± 0%  -10.44% (p=0.000 n=10)
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"_&&_span.http.status_code=200}-11     161.6k ± 0%   146.2k ± 0%   -9.57% (p=0.000 n=10)
FetchTagValues/tag:_resource.namespace,_query:_{span.http.status_code=200}-11                                 2474.3k ± 0%   125.1k ± 0%  -94.94% (p=0.000 n=10)
geomean                                                                                                        298.9k        131.6k       -55.98%
TraceQL Search Benches
goos: darwin
goarch: arm64
pkg: github.com/grafana/tempo/tempodb/encoding/vparquet3
                                                    │ before-tql.txt │            after-tql.txt            │
                                                    │     sec/op     │   sec/op     vs base                │
BackendBlockTraceQL/spanAttValMatch-11                   148.2m ± 1%   136.9m ± 4%   -7.65% (p=0.000 n=10)
BackendBlockTraceQL/spanAttValNoMatch-11                 6.453m ± 0%   6.255m ± 4%   -3.07% (p=0.023 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch-11             60.26m ± 0%   55.93m ± 1%   -7.19% (p=0.000 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch-11           6.447m ± 0%   6.246m ± 1%   -3.11% (p=0.002 n=10)
BackendBlockTraceQL/resourceAttValMatch-11               544.4m ± 1%   499.5m ± 0%   -8.24% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValNoMatch-11             6.412m ± 0%   6.304m ± 3%   -1.68% (p=0.023 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch-11         99.61m ± 0%   90.03m ± 0%   -9.62% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01-11      6.392m ± 0%   6.321m ± 1%   -1.11% (p=0.002 n=10)
BackendBlockTraceQL/mixedValNoMatch-11                   233.6m ± 2%   193.2m ± 0%  -17.26% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd-11             6.413m ± 0%   6.337m ± 1%   -1.18% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr-11              206.3m ± 0%   180.8m ± 0%  -12.36% (p=0.000 n=10)
BackendBlockTraceQL/count-11                             372.9m ± 0%   352.5m ± 0%   -5.49% (p=0.001 n=10)
BackendBlockTraceQL/struct-11                            684.6m ± 1%   655.4m ± 1%   -4.27% (p=0.000 n=10)
BackendBlockTraceQL/||-11                                58.85m ± 0%   55.97m ± 1%   -4.89% (p=0.000 n=10)
BackendBlockTraceQL/mixed-11                             84.88m ± 0%   73.70m ± 0%  -13.17% (p=0.000 n=10)
BackendBlockTraceQL/complex-11                           6.743m ± 0%   6.727m ± 0%        ~ (p=0.063 n=10)
geomean                                                  51.15m        47.87m        -6.41%

                                                    │ before-tql.txt │            after-tql.txt             │
                                                    │      B/s       │     B/s       vs base                │
BackendBlockTraceQL/spanAttValMatch-11                  204.6Mi ± 1%   221.6Mi ± 3%   +8.29% (p=0.000 n=10)
BackendBlockTraceQL/spanAttValNoMatch-11                386.0Mi ± 0%   398.2Mi ± 4%   +3.17% (p=0.023 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch-11            524.1Mi ± 0%   564.7Mi ± 1%   +7.75% (p=0.000 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch-11          386.3Mi ± 0%   398.7Mi ± 1%   +3.21% (p=0.002 n=10)
BackendBlockTraceQL/resourceAttValMatch-11              54.77Mi ± 1%   59.69Mi ± 0%   +8.98% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValNoMatch-11            234.1Mi ± 0%   238.2Mi ± 3%   +1.71% (p=0.022 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch-11        300.1Mi ± 0%   332.0Mi ± 0%  +10.64% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01-11     246.0Mi ± 0%   248.8Mi ± 1%   +1.12% (p=0.001 n=10)
BackendBlockTraceQL/mixedValNoMatch-11                  13.78Mi ± 2%   16.65Mi ± 0%  +20.84% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd-11            275.8Mi ± 0%   279.1Mi ± 0%   +1.20% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr-11             65.13Mi ± 0%   74.32Mi ± 0%  +14.11% (p=0.000 n=10)
BackendBlockTraceQL/count-11                            78.73Mi ± 0%   83.29Mi ± 0%   +5.80% (p=0.001 n=10)
BackendBlockTraceQL/struct-11                           12.79Mi ± 1%   13.37Mi ± 1%   +4.47% (p=0.000 n=10)
BackendBlockTraceQL/||-11                               509.3Mi ± 0%   535.4Mi ± 1%   +5.14% (p=0.000 n=10)
BackendBlockTraceQL/mixed-11                            347.9Mi ± 0%   400.7Mi ± 0%  +15.16% (p=0.000 n=10)
BackendBlockTraceQL/complex-11                          441.4Mi ± 2%   441.7Mi ± 1%        ~ (p=0.986 n=10)
geomean                                                 164.8Mi        176.0Mi        +6.83%

                                                    │ before-tql.txt │            after-tql.txt            │
                                                    │    MB_io/op    │  MB_io/op   vs base                 │
BackendBlockTraceQL/spanAttValMatch-11                    31.80 ± 0%   31.80 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/spanAttValNoMatch-11                  2.612 ± 0%   2.612 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/spanAttIntrinsicMatch-11              33.11 ± 0%   33.11 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/spanAttIntrinsicNoMatch-11            2.612 ± 0%   2.612 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttValMatch-11                31.27 ± 0%   31.27 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttValNoMatch-11              1.574 ± 0%   1.574 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttIntrinsicMatch-11          31.34 ± 0%   31.34 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttIntrinsicMatch#01-11       1.649 ± 0%   1.649 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixedValNoMatch-11                    3.373 ± 0%   3.373 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixedValMixedMatchAnd-11              1.855 ± 0%   1.855 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixedValMixedMatchOr-11               14.09 ± 0%   14.09 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/count-11                              30.78 ± 0%   30.78 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/struct-11                             9.185 ± 0%   9.185 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/||-11                                 31.43 ± 0%   31.43 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixed-11                              30.96 ± 0%   30.96 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/complex-11                            3.127 ± 2%   3.119 ± 2%       ~ (p=0.542 n=10)
geomean                                                   8.838        8.837       -0.02%
¹ all samples are equal

                                                    │ before-tql.txt │             after-tql.txt             │
                                                    │      B/op      │     B/op       vs base                │
BackendBlockTraceQL/spanAttValMatch-11                 89.99Mi ±  1%   88.15Mi ±  1%   -2.05% (p=0.000 n=10)
BackendBlockTraceQL/spanAttValNoMatch-11               6.671Mi ±  1%   6.714Mi ±  1%        ~ (p=0.105 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch-11           15.13Mi ±  3%   15.02Mi ±  4%        ~ (p=0.684 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch-11         6.668Mi ±  2%   6.736Mi ±  1%   +1.02% (p=0.035 n=10)
BackendBlockTraceQL/resourceAttValMatch-11             691.0Mi ±  1%   626.9Mi ±  1%   -9.27% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValNoMatch-11           6.697Mi ±  1%   6.802Mi ±  2%   +1.57% (p=0.002 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch-11       56.55Mi ±  0%   55.71Mi ±  0%   -1.47% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01-11    6.658Mi ±  1%   6.790Mi ±  1%   +1.99% (p=0.000 n=10)
BackendBlockTraceQL/mixedValNoMatch-11                 7.484Mi ± 14%   7.314Mi ±  6%        ~ (p=0.516 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd-11           6.709Mi ±  1%   6.810Mi ±  1%   +1.50% (p=0.009 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr-11            8.302Mi ±  7%   8.248Mi ±  4%        ~ (p=0.383 n=10)
BackendBlockTraceQL/count-11                           477.4Mi ±  1%   417.4Mi ±  0%  -12.55% (p=0.000 n=10)
BackendBlockTraceQL/struct-11                          16.27Mi ± 17%   16.19Mi ± 21%        ~ (p=0.393 n=10)
BackendBlockTraceQL/||-11                              12.96Mi ±  3%   13.05Mi ±  2%        ~ (p=0.579 n=10)
BackendBlockTraceQL/mixed-11                           14.13Mi ±  4%   13.95Mi ±  2%        ~ (p=0.481 n=10)
BackendBlockTraceQL/complex-11                         7.026Mi ±  1%   6.951Mi ±  1%   -1.06% (p=0.005 n=10)
geomean                                                19.51Mi         19.19Mi         -1.61%

                                                    │ before-tql.txt │           after-tql.txt            │
                                                    │   allocs/op    │  allocs/op   vs base               │
BackendBlockTraceQL/spanAttValMatch-11                   873.7k ± 0%   873.7k ± 0%  -0.00% (p=0.001 n=10)
BackendBlockTraceQL/spanAttValNoMatch-11                 101.3k ± 0%   101.3k ± 0%  -0.01% (p=0.000 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch-11             156.1k ± 0%   156.1k ± 0%  -0.01% (p=0.002 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch-11           101.2k ± 0%   101.2k ± 0%  -0.01% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValMatch-11               4.744M ± 0%   4.744M ± 0%  -0.00% (p=0.001 n=10)
BackendBlockTraceQL/resourceAttValNoMatch-11             101.3k ± 0%   101.3k ± 0%  -0.01% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch-11         570.9k ± 0%   570.9k ± 0%  -0.00% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01-11      101.3k ± 0%   101.3k ± 0%  -0.01% (p=0.000 n=10)
BackendBlockTraceQL/mixedValNoMatch-11                   102.1k ± 0%   102.0k ± 0%  -0.02% (p=0.011 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd-11             101.3k ± 0%   101.3k ± 0%  -0.01% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr-11              106.2k ± 0%   106.2k ± 0%  -0.01% (p=0.000 n=10)
BackendBlockTraceQL/count-11                             2.750M ± 0%   2.750M ± 0%  -0.00% (p=0.050 n=10)
BackendBlockTraceQL/struct-11                            127.5k ± 2%   127.2k ± 1%       ~ (p=0.190 n=10)
BackendBlockTraceQL/||-11                                165.9k ± 0%   165.9k ± 0%  -0.02% (p=0.000 n=10)
BackendBlockTraceQL/mixed-11                             178.1k ± 0%   178.1k ± 0%  -0.02% (p=0.000 n=10)
BackendBlockTraceQL/complex-11                           101.7k ± 0%   101.7k ± 0%  -0.02% (p=0.000 n=10)
geomean                                                  225.6k        225.5k       -0.02%
TraceQL Metrics Benches
goos: darwin
goarch: arm64
pkg: github.com/grafana/tempo/tempodb/encoding/vparquet3
                                                                             │ before-qr.txt │            after-qr.txt             │
                                                                             │    sec/op     │   sec/op     vs base                │
BackendBlockQueryRange/{}_|_rate()/5-11                                          385.2m ± 1%   374.2m ± 3%   -2.85% (p=0.007 n=10)
BackendBlockQueryRange/{}_|_rate()/7-11                                          397.1m ± 2%   377.7m ± 2%   -4.87% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                                506.7m ± 2%   486.7m ± 4%   -3.94% (p=0.019 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                                643.8m ± 2%   632.9m ± 3%   -1.70% (p=0.009 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11               359.3m ± 3%   349.1m ± 2%   -2.86% (p=0.043 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11               492.0m ± 2%   471.4m ± 3%   -4.18% (p=0.001 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                       595.2m ± 1%   565.5m ± 2%   -5.00% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                       709.7m ± 0%   684.4m ± 1%   -3.56% (p=0.000 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11     70.72m ± 4%   66.50m ± 3%   -5.96% (p=0.000 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11     72.15m ± 1%   67.62m ± 1%   -6.29% (p=0.000 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5-11                              82.05m ± 1%   71.41m ± 3%  -12.97% (p=0.000 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/7-11                              82.38m ± 0%   70.98m ± 1%  -13.85% (p=0.000 n=10)
geomean                                                                          266.5m        251.2m        -5.74%

                                                                             │ before-qr.txt │            after-qr.txt             │
                                                                             │   MB_IO/op    │  MB_IO/op   vs base                 │
BackendBlockQueryRange/{}_|_rate()/5-11                                           23.63 ± 0%   23.63 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()/7-11                                           23.63 ± 0%   23.63 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                                 29.57 ± 0%   29.57 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                                 29.57 ± 0%   29.57 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11                24.20 ± 0%   24.20 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11                24.20 ± 0%   24.20 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                        28.15 ± 0%   28.15 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                        28.15 ± 0%   28.15 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11      24.20 ± 0%   24.20 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11      24.20 ± 0%   24.20 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/5-11                               25.57 ± 0%   25.57 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/7-11                               25.57 ± 0%   25.57 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                                                           25.79        25.79       +0.00%
¹ all samples are equal

                                                                             │ before-qr.txt │             after-qr.txt             │
                                                                             │   spans/op    │  spans/op    vs base                 │
BackendBlockQueryRange/{}_|_rate()/5-11                                          626.1k ± 0%   626.1k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()/7-11                                          1.352M ± 0%   1.352M ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                                626.1k ± 0%   626.1k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                                1.352M ± 0%   1.352M ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11               626.1k ± 0%   626.1k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11               1.352M ± 0%   1.352M ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                       626.1k ± 0%   626.1k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                       1.352M ± 0%   1.352M ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11     22.72k ± 0%   22.72k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11     84.34k ± 0%   84.34k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/5-11                              11.52k ± 0%   11.52k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/7-11                              39.60k ± 0%   39.60k ± 0%       ~ (p=1.000 n=10) ¹
geomean                                                                          295.8k        295.8k       +0.00%
¹ all samples are equal

                                                                             │ before-qr.txt │            after-qr.txt             │
                                                                             │    spans/s    │   spans/s    vs base                │
BackendBlockQueryRange/{}_|_rate()/5-11                                          1.626M ± 1%   1.673M ± 3%   +2.93% (p=0.007 n=10)
BackendBlockQueryRange/{}_|_rate()/7-11                                          3.404M ± 2%   3.578M ± 2%   +5.12% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                                1.236M ± 2%   1.287M ± 4%   +4.11% (p=0.019 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                                2.099M ± 2%   2.136M ± 3%   +1.73% (p=0.009 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11               1.742M ± 3%   1.794M ± 2%   +2.94% (p=0.043 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11               2.747M ± 2%   2.867M ± 3%   +4.37% (p=0.001 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                       1.052M ± 1%   1.107M ± 2%   +5.26% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                       1.904M ± 0%   1.975M ± 1%   +3.70% (p=0.000 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11     321.2k ± 4%   341.6k ± 3%   +6.33% (p=0.000 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11     1.169M ± 1%   1.247M ± 1%   +6.71% (p=0.000 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5-11                              140.4k ± 1%   161.3k ± 3%  +14.91% (p=0.000 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/7-11                              480.7k ± 0%   557.9k ± 1%  +16.07% (p=0.000 n=10)
geomean                                                                          1.110M        1.177M        +6.09%

                                                                             │ before-qr.txt  │             after-qr.txt              │
                                                                             │      B/op      │     B/op       vs base                │
BackendBlockQueryRange/{}_|_rate()/5-11                                        88.60Mi ±  10%   92.23Mi ± 12%        ~ (p=0.684 n=10)
BackendBlockQueryRange/{}_|_rate()/7-11                                        91.51Mi ±  12%   93.41Mi ±  8%        ~ (p=0.796 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                              40.25Mi ±  19%   34.65Mi ± 55%        ~ (p=0.353 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                              37.29Mi ±  46%   38.25Mi ± 20%        ~ (p=0.315 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11             28.01Mi ±  58%   31.89Mi ±  9%  +13.83% (p=0.043 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11             21.40Mi ± 116%   30.93Mi ± 49%        ~ (p=0.353 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                     129.9Mi ±  17%   144.9Mi ± 24%        ~ (p=0.393 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                     149.8Mi ±   8%   147.2Mi ± 14%        ~ (p=0.436 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11   14.57Mi ±  27%   13.18Mi ± 16%        ~ (p=0.218 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11   13.82Mi ±  17%   13.39Mi ± 18%        ~ (p=0.529 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5-11                            9.456Mi ±  11%   9.313Mi ± 12%        ~ (p=0.971 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/7-11                            9.348Mi ±  10%   9.950Mi ± 10%        ~ (p=0.481 n=10)
geomean                                                                        34.16Mi          35.44Mi         +3.74%

                                                                             │ before-qr.txt │            after-qr.txt             │
                                                                             │   allocs/op   │  allocs/op    vs base               │
BackendBlockQueryRange/{}_|_rate()/5-11                                         313.1k ± 17%   313.1k ± 17%       ~ (p=0.869 n=10)
BackendBlockQueryRange/{}_|_rate()/7-11                                         313.1k ± 17%   313.1k ± 17%       ~ (p=0.928 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                               142.0k ±  1%   140.1k ±  6%       ~ (p=0.280 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                               144.5k ±  0%   144.5k ±  0%       ~ (p=0.853 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11              134.5k ±  0%   134.5k ±  0%       ~ (p=0.138 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11              134.6k ±  0%   134.6k ± 81%       ~ (p=0.955 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                      368.0k ± 23%   451.5k ± 19%       ~ (p=0.075 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                      497.1k ± 16%   495.8k ± 16%       ~ (p=0.684 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11    115.8k ±  0%   115.8k ±  0%       ~ (p=0.148 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11    115.8k ±  0%   115.8k ±  0%       ~ (p=0.324 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5-11                             109.4k ±  0%   109.4k ±  0%       ~ (p=0.196 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/7-11                             109.4k ±  0%   109.4k ±  1%       ~ (p=0.306 n=10)
geomean                                                                         178.8k         181.7k        +1.58%

Checklist

  • Tests updated
  • Documentation added
  • CHANGELOG.md updated - the order of entries should be [CHANGE], [FEATURE], [ENHANCEMENT], [BUGFIX]
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
@joe-elliott

joe-elliott commented May 10, 2024

Copy link
Copy Markdown
Collaborator Author

Gains due to the int64 -> int32 RowNumber conversion:

Tag Values
goos: darwin
goarch: arm64
pkg: github.com/grafana/tempo/tempodb/encoding/vparquet3
                                                                                                           │ after-n64-tv.txt │            after-tv.txt            │
                                                                                                           │      sec/op      │   sec/op     vs base               │
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"}-11                                     258.4m ± 0%   247.8m ± 3%  -4.10% (p=0.000 n=10)
FetchTagValues/tag:_span.component,_query:_{resource.namespace="tempo-ops"}-11                                    231.2m ± 1%   223.6m ± 1%  -3.30% (p=0.000 n=10)
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"_&&_span.http.status_code=200}-11        389.1m ± 0%   373.7m ± 3%  -3.96% (p=0.000 n=10)
FetchTagValues/tag:_resource.namespace,_query:_{span.http.status_code=200}-11                                      1.631 ± 1%    1.542 ± 2%  -5.43% (p=0.000 n=10)
geomean                                                                                                           441.3m        422.7m       -4.20%

                                                                                                           │ after-n64-tv.txt │            after-tv.txt             │
                                                                                                           │       B/op       │     B/op      vs base               │
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"}-11                                    101.9Mi ± 5%   100.4Mi ± 3%       ~ (p=0.218 n=10)
FetchTagValues/tag:_span.component,_query:_{resource.namespace="tempo-ops"}-11                                   9.370Mi ± 8%   9.180Mi ± 3%       ~ (p=0.123 n=10)
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"_&&_span.http.status_code=200}-11       102.8Mi ± 3%   103.3Mi ± 3%       ~ (p=0.393 n=10)
FetchTagValues/tag:_resource.namespace,_query:_{span.http.status_code=200}-11                                    12.93Mi ± 5%   12.76Mi ± 3%       ~ (p=0.436 n=10)
geomean                                                                                                          33.57Mi        33.20Mi       -1.09%

                                                                                                           │ after-n64-tv.txt │            after-tv.txt            │
                                                                                                           │    allocs/op     │  allocs/op   vs base               │
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"}-11                                     131.1k ± 0%   131.1k ± 0%       ~ (p=0.060 n=10)
FetchTagValues/tag:_span.component,_query:_{resource.namespace="tempo-ops"}-11                                    125.1k ± 0%   125.0k ± 0%  -0.01% (p=0.019 n=10)
FetchTagValues/tag:_span.http.url,_query:_{resource.namespace="tempo-ops"_&&_span.http.status_code=200}-11        146.2k ± 0%   146.2k ± 0%       ~ (p=0.171 n=10)
FetchTagValues/tag:_resource.namespace,_query:_{span.http.status_code=200}-11                                     125.1k ± 0%   125.1k ± 0%       ~ (p=0.839 n=10)
geomean                                                                                                           131.6k        131.6k       -0.00%
TraceQL Search
goos: darwin
goarch: arm64
pkg: github.com/grafana/tempo/tempodb/encoding/vparquet3
                                                    │ after-n64-tql.txt │            after-tql.txt            │
                                                    │      sec/op       │   sec/op     vs base                │
BackendBlockTraceQL/spanAttValMatch-11                      147.7m ± 1%   136.9m ± 4%   -7.34% (p=0.000 n=10)
BackendBlockTraceQL/spanAttValNoMatch-11                    6.515m ± 3%   6.255m ± 4%   -3.98% (p=0.005 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch-11                59.75m ± 0%   55.93m ± 1%   -6.40% (p=0.000 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch-11              6.711m ± 3%   6.246m ± 1%   -6.92% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValMatch-11                  543.7m ± 0%   499.5m ± 0%   -8.13% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValNoMatch-11                6.626m ± 1%   6.304m ± 3%   -4.85% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch-11            99.70m ± 3%   90.03m ± 0%   -9.70% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01-11         6.556m ± 0%   6.321m ± 1%   -3.57% (p=0.000 n=10)
BackendBlockTraceQL/mixedValNoMatch-11                      235.4m ± 1%   193.2m ± 0%  -17.90% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd-11                6.463m ± 1%   6.337m ± 1%   -1.95% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr-11                 207.2m ± 0%   180.8m ± 0%  -12.72% (p=0.000 n=10)
BackendBlockTraceQL/count-11                                368.2m ± 0%   352.5m ± 0%   -4.27% (p=0.002 n=10)
BackendBlockTraceQL/struct-11                               728.8m ± 2%   655.4m ± 1%  -10.07% (p=0.000 n=10)
BackendBlockTraceQL/||-11                                   58.45m ± 0%   55.97m ± 1%   -4.23% (p=0.000 n=10)
BackendBlockTraceQL/mixed-11                                77.42m ± 0%   73.70m ± 0%   -4.80% (p=0.000 n=10)
BackendBlockTraceQL/complex-11                              6.812m ± 0%   6.727m ± 0%   -1.24% (p=0.002 n=10)
geomean                                                     51.39m        47.87m        -6.85%

                                                    │ after-n64-tql.txt │            after-tql.txt             │
                                                    │        B/s        │     B/s       vs base                │
BackendBlockTraceQL/spanAttValMatch-11                     205.3Mi ± 1%   221.6Mi ± 3%   +7.92% (p=0.000 n=10)
BackendBlockTraceQL/spanAttValNoMatch-11                   382.3Mi ± 3%   398.2Mi ± 4%   +4.15% (p=0.005 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch-11               528.5Mi ± 0%   564.7Mi ± 1%   +6.84% (p=0.000 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch-11             371.1Mi ± 3%   398.7Mi ± 1%   +7.44% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValMatch-11                 54.84Mi ± 0%   59.69Mi ± 0%   +8.85% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValNoMatch-11               226.6Mi ± 1%   238.2Mi ± 3%   +5.10% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch-11           299.8Mi ± 2%   332.0Mi ± 0%  +10.75% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01-11        239.9Mi ± 0%   248.8Mi ± 1%   +3.71% (p=0.000 n=10)
BackendBlockTraceQL/mixedValNoMatch-11                     13.67Mi ± 1%   16.65Mi ± 0%  +21.81% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd-11               273.7Mi ± 1%   279.1Mi ± 0%   +1.99% (p=0.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr-11                64.86Mi ± 0%   74.32Mi ± 0%  +14.58% (p=0.000 n=10)
BackendBlockTraceQL/count-11                               79.73Mi ± 0%   83.29Mi ± 0%   +4.47% (p=0.001 n=10)
BackendBlockTraceQL/struct-11                              12.02Mi ± 2%   13.37Mi ± 1%  +11.19% (p=0.000 n=10)
BackendBlockTraceQL/||-11                                  512.8Mi ± 0%   535.4Mi ± 1%   +4.42% (p=0.000 n=10)
BackendBlockTraceQL/mixed-11                               381.4Mi ± 0%   400.7Mi ± 0%   +5.05% (p=0.000 n=10)
BackendBlockTraceQL/complex-11                             436.7Mi ± 1%   441.7Mi ± 1%        ~ (p=0.123 n=10)
geomean                                                    164.0Mi        176.0Mi        +7.35%

                                                    │ after-n64-tql.txt │            after-tql.txt            │
                                                    │     MB_io/op      │  MB_io/op   vs base                 │
BackendBlockTraceQL/spanAttValMatch-11                       31.80 ± 0%   31.80 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/spanAttValNoMatch-11                     2.612 ± 0%   2.612 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/spanAttIntrinsicMatch-11                 33.11 ± 0%   33.11 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/spanAttIntrinsicNoMatch-11               2.612 ± 0%   2.612 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttValMatch-11                   31.27 ± 0%   31.27 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttValNoMatch-11                 1.574 ± 0%   1.574 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttIntrinsicMatch-11             31.34 ± 0%   31.34 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/resourceAttIntrinsicMatch#01-11          1.649 ± 0%   1.649 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixedValNoMatch-11                       3.373 ± 0%   3.373 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixedValMixedMatchAnd-11                 1.855 ± 0%   1.855 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixedValMixedMatchOr-11                  14.09 ± 0%   14.09 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/count-11                                 30.78 ± 0%   30.78 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/struct-11                                9.185 ± 0%   9.185 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/||-11                                    31.43 ± 0%   31.43 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/mixed-11                                 30.96 ± 0%   30.96 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockTraceQL/complex-11                               3.114 ± 1%   3.119 ± 2%       ~ (p=0.912 n=10)
geomean                                                      8.836        8.837       +0.01%
¹ all samples are equal

                                                    │ after-n64-tql.txt │             after-tql.txt             │
                                                    │       B/op        │     B/op       vs base                │
BackendBlockTraceQL/spanAttValMatch-11                    90.45Mi ±  1%   88.15Mi ±  1%   -2.55% (p=0.000 n=10)
BackendBlockTraceQL/spanAttValNoMatch-11                  6.663Mi ±  1%   6.714Mi ±  1%        ~ (p=0.063 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch-11              15.69Mi ±  3%   15.02Mi ±  4%   -4.25% (p=0.007 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch-11            6.805Mi ±  1%   6.736Mi ±  1%        ~ (p=0.075 n=10)
BackendBlockTraceQL/resourceAttValMatch-11                691.6Mi ±  1%   626.9Mi ±  1%   -9.35% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttValNoMatch-11              6.840Mi ±  1%   6.802Mi ±  2%        ~ (p=0.353 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch-11          56.60Mi ±  1%   55.71Mi ±  0%   -1.56% (p=0.000 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01-11       6.859Mi ±  0%   6.790Mi ±  1%   -1.00% (p=0.005 n=10)
BackendBlockTraceQL/mixedValNoMatch-11                    7.483Mi ± 14%   7.314Mi ±  6%        ~ (p=0.631 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd-11              6.819Mi ±  1%   6.810Mi ±  1%        ~ (p=1.000 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr-11               8.435Mi ± 10%   8.248Mi ±  4%        ~ (p=0.631 n=10)
BackendBlockTraceQL/count-11                              480.6Mi ±  1%   417.4Mi ±  0%  -13.15% (p=0.000 n=10)
BackendBlockTraceQL/struct-11                             16.95Mi ± 22%   16.19Mi ± 21%        ~ (p=0.796 n=10)
BackendBlockTraceQL/||-11                                 12.98Mi ±  3%   13.05Mi ±  2%        ~ (p=0.529 n=10)
BackendBlockTraceQL/mixed-11                              13.74Mi ±  3%   13.95Mi ±  2%        ~ (p=0.218 n=10)
BackendBlockTraceQL/complex-11                            6.959Mi ±  1%   6.951Mi ±  1%        ~ (p=1.000 n=10)
geomean                                                   19.70Mi         19.19Mi         -2.56%

                                                    │ after-n64-tql.txt │           after-tql.txt            │
                                                    │     allocs/op     │  allocs/op   vs base               │
BackendBlockTraceQL/spanAttValMatch-11                      873.7k ± 0%   873.7k ± 0%       ~ (p=0.171 n=10)
BackendBlockTraceQL/spanAttValNoMatch-11                    101.3k ± 0%   101.3k ± 0%       ~ (p=0.103 n=10)
BackendBlockTraceQL/spanAttIntrinsicMatch-11                156.1k ± 0%   156.1k ± 0%       ~ (p=0.782 n=10)
BackendBlockTraceQL/spanAttIntrinsicNoMatch-11              101.2k ± 0%   101.2k ± 0%       ~ (p=0.051 n=10)
BackendBlockTraceQL/resourceAttValMatch-11                  4.744M ± 0%   4.744M ± 0%  -0.00% (p=0.003 n=10)
BackendBlockTraceQL/resourceAttValNoMatch-11                101.3k ± 0%   101.3k ± 0%       ~ (p=0.471 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch-11            570.9k ± 0%   570.9k ± 0%       ~ (p=0.445 n=10)
BackendBlockTraceQL/resourceAttIntrinsicMatch#01-11         101.3k �� 0%   101.3k ± 0%  -0.00% (p=0.004 n=10)
BackendBlockTraceQL/mixedValNoMatch-11                      102.0k ± 0%   102.0k ± 0%       ~ (p=0.897 n=10)
BackendBlockTraceQL/mixedValMixedMatchAnd-11                101.3k ± 0%   101.3k ± 0%       ~ (p=0.976 n=10)
BackendBlockTraceQL/mixedValMixedMatchOr-11                 106.2k ± 0%   106.2k ± 0%       ~ (p=0.668 n=10)
BackendBlockTraceQL/count-11                                2.750M ± 0%   2.750M ± 0%  -0.00% (p=0.003 n=10)
BackendBlockTraceQL/struct-11                               127.3k ± 3%   127.2k ± 1%       ~ (p=0.529 n=10)
BackendBlockTraceQL/||-11                                   165.9k ± 0%   165.9k ± 0%       ~ (p=0.446 n=10)
BackendBlockTraceQL/mixed-11                                178.0k ± 0%   178.1k ± 0%       ~ (p=0.325 n=10)
BackendBlockTraceQL/complex-11                              101.7k ± 0%   101.7k ± 0%       ~ (p=0.985 n=10)
geomean                                                     225.5k        225.5k       -0.01%
TraceQL Metrics
goos: darwin
goarch: arm64
pkg: github.com/grafana/tempo/tempodb/encoding/vparquet3
                                                                             │ after-n64-qr.txt │            after-qr.txt            │
                                                                             │      sec/op      │   sec/op     vs base               │
BackendBlockQueryRange/{}_|_rate()/5-11                                             400.0m ± 2%   374.2m ± 3%  -6.45% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()/7-11                                             412.1m ± 2%   377.7m ± 2%  -8.33% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                                   512.8m ± 4%   486.7m ± 4%  -5.09% (p=0.001 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                                   649.8m ± 4%   632.9m ± 3%  -2.61% (p=0.005 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11                  364.9m ± 3%   349.1m ± 2%  -4.34% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11                  503.5m ± 1%   471.4m ± 3%  -6.37% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                          607.1m ± 1%   565.5m ± 2%  -6.86% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                          719.5m ± 1%   684.4m ± 1%  -4.89% (p=0.000 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11        72.60m ± 3%   66.50m ± 3%  -8.40% (p=0.000 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11        71.75m ± 1%   67.62m ± 1%  -5.76% (p=0.000 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5-11                                 74.05m ± 0%   71.41m ± 3%  -3.57% (p=0.000 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/7-11                                 74.52m ± 0%   70.98m ± 1%  -4.76% (p=0.000 n=10)
geomean                                                                             266.2m        251.2m       -5.63%

                                                                             │ after-n64-qr.txt │            after-qr.txt             │
                                                                             │     MB_IO/op     │  MB_IO/op   vs base                 │
BackendBlockQueryRange/{}_|_rate()/5-11                                              23.63 ± 0%   23.63 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()/7-11                                              23.63 ± 0%   23.63 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                                    29.57 ± 0%   29.57 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                                    29.57 ± 0%   29.57 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11                   24.20 ± 0%   24.20 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11                   24.20 ± 0%   24.20 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                           28.15 ± 0%   28.15 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                           28.15 ± 0%   28.15 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11         24.20 ± 0%   24.20 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11         24.20 ± 0%   24.20 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/5-11                                  25.57 ± 0%   25.57 ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/7-11                                  25.57 ± 0%   25.57 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                                                              25.79        25.79       +0.00%
¹ all samples are equal

                                                                             │ after-n64-qr.txt │             after-qr.txt             │
                                                                             │     spans/op     │  spans/op    vs base                 │
BackendBlockQueryRange/{}_|_rate()/5-11                                             626.1k ± 0%   626.1k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()/7-11                                             1.352M ± 0%   1.352M ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                                   626.1k ± 0%   626.1k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                                   1.352M ± 0%   1.352M ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11                  626.1k ± 0%   626.1k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11                  1.352M ± 0%   1.352M ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                          626.1k ± 0%   626.1k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                          1.352M ± 0%   1.352M ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11        22.72k ± 0%   22.72k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11        84.34k ± 0%   84.34k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/5-11                                 11.52k ± 0%   11.52k ± 0%       ~ (p=1.000 n=10) ¹
BackendBlockQueryRange/{status=error}_|_rate()/7-11                                 39.60k ± 0%   39.60k ± 0%       ~ (p=1.000 n=10) ¹
geomean                                                                             295.8k        295.8k       +0.00%
¹ all samples are equal

                                                                             │ after-n64-qr.txt │            after-qr.txt            │
                                                                             │     spans/s      │   spans/s    vs base               │
BackendBlockQueryRange/{}_|_rate()/5-11                                             1.565M ± 2%   1.673M ± 3%  +6.90% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()/7-11                                             3.280M ± 2%   3.578M ± 2%  +9.09% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                                   1.221M ± 4%   1.287M ± 4%  +5.37% (p=0.001 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                                   2.080M ± 4%   2.136M ± 3%  +2.68% (p=0.005 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11                  1.716M ± 3%   1.794M ± 2%  +4.54% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11                  2.684M ± 1%   2.867M ± 3%  +6.81% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                          1.031M ± 1%   1.107M ± 2%  +7.37% (p=0.000 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                          1.878M ± 1%   1.975M ± 1%  +5.14% (p=0.000 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11        312.9k ± 3%   341.6k ± 3%  +9.17% (p=0.000 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11        1.175M ± 1%   1.247M ± 1%  +6.11% (p=0.000 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5-11                                 155.5k ± 0%   161.3k ± 3%  +3.71% (p=0.000 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/7-11                                 531.4k ± 0%   557.9k ± 1%  +5.00% (p=0.000 n=10)
geomean                                                                             1.111M        1.177M       +5.97%

                                                                             │ after-n64-qr.txt │             after-qr.txt             │
                                                                             │       B/op       │     B/op       vs base               │
BackendBlockQueryRange/{}_|_rate()/5-11                                           88.91Mi ±  9%   92.23Mi ± 12%       ~ (p=0.579 n=10)
BackendBlockQueryRange/{}_|_rate()/7-11                                           95.82Mi ± 10%   93.41Mi ±  8%       ~ (p=0.579 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                                 45.59Mi ± 47%   34.65Mi ± 55%       ~ (p=0.105 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                                 39.72Mi ± 52%   38.25Mi ± 20%       ~ (p=0.912 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11                28.28Mi ± 70%   31.89Mi ±  9%       ~ (p=0.143 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11                30.29Mi ± 63%   30.93Mi ± 49%       ~ (p=0.684 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                        140.9Mi ± 26%   144.9Mi ± 24%       ~ (p=0.684 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                        133.4Mi ± 18%   147.2Mi ± 14%       ~ (p=0.353 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11      14.38Mi ± 17%   13.18Mi ± 16%       ~ (p=0.218 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11      14.37Mi ± 31%   13.39Mi ± 18%       ~ (p=0.315 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5-11                               9.416Mi ±  8%   9.313Mi ± 12%       ~ (p=0.796 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/7-11                               9.319Mi ± 12%   9.950Mi ± 10%       ~ (p=0.796 n=10)
geomean                                                                           35.85Mi         35.44Mi        -1.13%

                                                                             │ after-n64-qr.txt │             after-qr.txt             │
                                                                             │    allocs/op     │  allocs/op    vs base                │
BackendBlockQueryRange/{}_|_rate()/5-11                                            313.1k ± 17%   313.1k ± 17%        ~ (p=0.343 n=10)
BackendBlockQueryRange/{}_|_rate()/7-11                                            340.2k ±  8%   313.1k ± 17%        ~ (p=0.280 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/5-11                                  142.1k ±  0%   140.1k ±  6%        ~ (p=0.123 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(name)/7-11                                  144.5k ±  0%   144.5k ±  0%        ~ (p=0.912 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/5-11                 134.5k ±  0%   134.5k ±  0%        ~ (p=0.226 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(resource.service.name)/7-11                 134.8k ±  0%   134.6k ± 81%        ~ (p=0.288 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/5-11                         410.9k ± 11%   451.5k ± 19%        ~ (p=0.631 n=10)
BackendBlockQueryRange/{}_|_rate()_by_(span.http.url)/7-11                         416.3k ± 19%   495.8k ± 16%  +19.10% (p=0.035 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/5-11       115.8k ±  0%   115.8k ±  0%        ~ (p=0.781 n=10)
BackendBlockQueryRange/{resource.service.name=`loki-ingester`}_|_rate()/7-11       115.8k ±  0%   115.8k ±  0%        ~ (p=0.138 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/5-11                                109.4k ±  1%   109.4k ±  0%        ~ (p=0.670 n=10)
BackendBlockQueryRange/{status=error}_|_rate()/7-11                                109.4k ±  0%   109.4k ±  1%        ~ (p=0.138 n=10)
geomean                                                                            179.1k         181.7k         +1.43%
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>
return traceql.NewStaticDuration(time.Duration(e.Value.Int64()))
case columnPathSpanName:
return traceql.NewStaticString(e.Value.String())
return traceql.NewStaticString(unsafeToString(e.Value.ByteArray()))

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these unsafeToString calls massively reduce allocations b/c it prevents a clone on the string. The danger is in parquet-go reusing the backing buffer in a way that causes the value of the string to change.

Should we clone those strings that pass the test here:

https://github.com/grafana/tempo/blob/main/tempodb/encoding/vparquet3/block_autocomplete.go#L652-L655

i.e. only clone those strings that are passed up to the caller?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should be able to use the interner, so strings are cloned only once.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh! i forgot about the interner in the SyncIterator which actually does make a copy of the values returned here. so this unsafeToString call should be perfectly fine.

it's just mimicking this pattern already present in traceql search:

https://github.com/grafana/tempo/blob/main/tempodb/encoding/vparquet3/block_traceql.go#L2265

Signed-off-by: Joe Elliott <number101010@gmail.com>
Signed-off-by: Joe Elliott <number101010@gmail.com>

@ie-pham ie-pham left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@joe-elliott
joe-elliott merged commit 9775796 into grafana:main May 15, 2024
mattdurham pushed a commit to mattdurham/tempo that referenced this pull request Jun 18, 2026
* steal benches

Signed-off-by: Joe Elliott <number101010@gmail.com>

* Gen floats, ints and bool predicates

Signed-off-by: Joe Elliott <number101010@gmail.com>

* remove string allocs

Signed-off-by: Joe Elliott <number101010@gmail.com>

* added gen to make

Signed-off-by: Joe Elliott <number101010@gmail.com>

* Gen strings

Signed-off-by: Joe Elliott <number101010@gmail.com>

* patch up vp2 and vp4

Signed-off-by: Joe Elliott <number101010@gmail.com>

* remove instrumented predicate

Signed-off-by: Joe Elliott <number101010@gmail.com>

* int32 rns

Signed-off-by: Joe Elliott <number101010@gmail.com>

* skip nulls

Signed-off-by: Joe Elliott <number101010@gmail.com>

* vp4 unsafe string

Signed-off-by: Joe Elliott <number101010@gmail.com>

* revert isnull check due to impact on query range

Signed-off-by: Joe Elliott <number101010@gmail.com>

* remove string range cond

Signed-off-by: Joe Elliott <number101010@gmail.com>

* changelog

Signed-off-by: Joe Elliott <number101010@gmail.com>

* lint and tests

Signed-off-by: Joe Elliott <number101010@gmail.com>

* exclude

Signed-off-by: Joe Elliott <number101010@gmail.com>

* again

Signed-off-by: Joe Elliott <number101010@gmail.com>

* fix second line

Signed-off-by: Joe Elliott <number101010@gmail.com>

* fix bool pred

Signed-off-by: Joe Elliott <number101010@gmail.com>

* change generated file name and exclude

Signed-off-by: Joe Elliott <number101010@gmail.com>

* additional tests

Signed-off-by: Joe Elliott <number101010@gmail.com>

---------

Signed-off-by: Joe Elliott <number101010@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

3 participants