Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Iterator Perfomance Improvements #3667

Merged
merged 21 commits into from May 15, 2024
Merged

Conversation

joe-elliott
Copy link
Member

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

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
Copy link
Member Author

joe-elliott commented May 10, 2024

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>
@@ -668,7 +668,7 @@ func mapSpanAttr(e entry) traceql.Static {
case columnPathSpanDuration:
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
Member 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
Member

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
Member 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>
Copy link
Collaborator

@ie-pham ie-pham left a comment

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
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants