Skip to content

Optimize the return type of ExportSpans#7405

Merged
MrAlias merged 5 commits intoopen-telemetry:mainfrom
MrAlias:stdouttrace-optimize-end
Sep 25, 2025
Merged

Optimize the return type of ExportSpans#7405
MrAlias merged 5 commits intoopen-telemetry:mainfrom
MrAlias:stdouttrace-optimize-end

Conversation

@MrAlias
Copy link
Copy Markdown
Contributor

@MrAlias MrAlias commented Sep 24, 2025

Do not allocate a return function from ExportSpans to the heap. Use the added ExportOp type instead.

Benchmarks

stdouttrace

goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/exporters/stdout/stdouttrace
cpu: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
                                      │ main.bmark.results │ stdouttrace-optimize-end.bmark.results │
                                      │       sec/op       │     sec/op       vs base               │
ExporterExportSpans/Observability-8            23.37µ ± 2%       22.79µ ± 3%  -2.50% (p=0.025 n=10)
ExporterExportSpans/NoObservability-8          23.07µ ± 7%       22.29µ ± 1%  -3.38% (p=0.000 n=10)
geomean                                        23.22µ            22.54µ       -2.94%

                                      │ main.bmark.results │ stdouttrace-optimize-end.bmark.results │
                                      │        B/op        │      B/op        vs base               │
ExporterExportSpans/Observability-8           4.253Ki ± 0%      4.190Ki ± 0%  -1.47% (p=0.000 n=10)
ExporterExportSpans/NoObservability-8         3.975Ki ± 0%      3.975Ki ± 0%       ~ (p=0.474 n=10)
geomean                                       4.111Ki           4.081Ki       -0.74%

                                      │ main.bmark.results │ stdouttrace-optimize-end.bmark.results │
                                      │     allocs/op      │   allocs/op    vs base                 │
ExporterExportSpans/Observability-8             67.00 ± 0%      66.00 ± 0%  -1.49% (p=0.000 n=10)
ExporterExportSpans/NoObservability-8           64.00 ± 0%      64.00 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                         65.48           64.99       -0.75%
¹ all samples are equal

stdouttrace/internal/observ


goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/exporters/stdout/stdouttrace/internal/observ
cpu: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
                                          │ main.bmark.results │ stdouttrace-optimize-end.bmark.results │
                                          │       sec/op       │     sec/op      vs base                │
InstrumentationExportSpans/NoError-8               197.9n ± 7%      153.3n ± 5%  -22.51% (p=0.000 n=10)
InstrumentationExportSpans/PartialError-8          754.4n ± 6%      663.2n ± 6%  -12.08% (p=0.001 n=10)
InstrumentationExportSpans/FullError-8             772.8n ± 4%      669.2n ± 4%  -13.39% (p=0.000 n=10)
geomean                                            486.8n           408.3n       -16.13%

                                          │ main.bmark.results │ stdouttrace-optimize-end.bmark.results  │
                                          │        B/op        │    B/op     vs base                     │
InstrumentationExportSpans/NoError-8                64.00 ± 0%    0.00 ± 0%  -100.00% (p=0.000 n=10)
InstrumentationExportSpans/PartialError-8           280.0 ± 0%   216.0 ± 0%   -22.86% (p=0.000 n=10)
InstrumentationExportSpans/FullError-8              280.0 ± 0%   216.0 ± 0%   -22.86% (p=0.000 n=10)
geomean                                             171.2                    ?                       ¹ ²
¹ summaries must be >0 to compute geomean
² ratios must be >0 to compute geomean

                                          │ main.bmark.results │ stdouttrace-optimize-end.bmark.results  │
                                          │     allocs/op      │ allocs/op   vs base                     │
InstrumentationExportSpans/NoError-8                1.000 ± 0%   0.000 ± 0%  -100.00% (p=0.000 n=10)
InstrumentationExportSpans/PartialError-8           3.000 ± 0%   2.000 ± 0%   -33.33% (p=0.000 n=10)
InstrumentationExportSpans/FullError-8              3.000 ± 0%   2.000 ± 0%   -33.33% (p=0.000 n=10)
geomean                                             2.080                    ?                       ¹ ²
¹ summaries must be >0 to compute geomean
² ratios must be >0 to compute geomean

@MrAlias MrAlias added this to the v1.39.0 milestone Sep 24, 2025
@MrAlias MrAlias added Skip Changelog PRs that do not require a CHANGELOG.md entry pkg:exporter:stdout Related to the stdout exporter package labels Sep 24, 2025
@codecov
Copy link
Copy Markdown

codecov Bot commented Sep 24, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 85.5%. Comparing base (63ed041) to head (2c70513).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##            main   #7405     +/-   ##
=======================================
- Coverage   85.5%   85.5%   -0.1%     
=======================================
  Files        277     277             
  Lines      24644   24648      +4     
=======================================
+ Hits       21078   21079      +1     
- Misses      3187    3190      +3     
  Partials     379     379             
Files with missing lines Coverage Δ
...out/stdouttrace/internal/observ/instrumentation.go 100.0% <100.0%> (ø)
exporters/stdout/stdouttrace/trace.go 73.8% <100.0%> (ø)

... and 2 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@MrAlias MrAlias marked this pull request as ready for review September 24, 2025 00:20
@MrAlias MrAlias merged commit 88d3fed into open-telemetry:main Sep 25, 2025
30 checks passed
@MrAlias MrAlias deleted the stdouttrace-optimize-end branch September 25, 2025 16:07
@flc1125 flc1125 mentioned this pull request Oct 13, 2025
46 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pkg:exporter:stdout Related to the stdout exporter package Skip Changelog PRs that do not require a CHANGELOG.md entry

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants