OTEP: A Central OpenTelemetry Benchmarks Repository#5118
Conversation
|
CC @XSAM |
XSAM
left a comment
There was a problem hiding this comment.
It looks good overall. My only concern is that some repos' benchmarks are still unstable on bare machines. Like OTel Go's benchmarks with codspeed's runner. related issue: CodSpeedHQ/codspeed-go#62
So, we might need to check the historical benchmark results before adopting a repo's benchmark here.
|
I applaud this initiative. The 5000x spread between results exhibited at https://cijothomas.github.io/otel-benchmarks/ is a little extreme (0.02ns? is it doing anything?) but I guess we can iron out the details. |
Could we work with the opentelemetry-demo project maintainers to use the demo for benchmarks, instead of creating a new thing? |
Thanks for taking a look! That spread is the reality today. Scenario S1b used Enabled() guard and since Metrics SDK is not enabled, this is effectively no-op (or a single bool check internally). Without the Enabled() check, the code has to do work to assemble the attributes and pass it to OTel API. The benchmark is correctly pointing out that (OTel Rust/Java) has non-trivial cost just to assemble the attributes, even when there is no SDK is enabled!. This is exactly the kind of finding the OTEP is designed to surface. We picked this scenario first deliberately: to make it visible whether the OTel API in each language has near-zero cost when no SDK is enabled. That property is what allows library authors to confidently add native OTel instrumentation without paying a tax on users who aren't observing them - a real blocker for many library owners. The S1/S1b deltas above are concrete evidence of where each language's API surface helps or hinders that goal (e.g. IsEnabled on counters being available in some languages and not others). (note: prototype uses Github runners, so not very stable and each run get a diff machine. Which is why this proposes to use the dedicated hardware). |
Thanks @reyang! @martincostello and I did consider this too, and we'll keep re-evaluating as more scenarios land. The way I see it: demo is great for the end-to-end "what does deploying OTel cost a real polyglot app" question - OTel clients + collector + network all bundled into one number. This proposal is for narrower, targeted scenarios that pin down a specific cost (S1 is just API/no-op; future ones include span/log emission, enrichment costs in sdks, sampled-out fast paths, etc.). Both feel valuable and don't really overlap. Totally agree we could host a "run the demo and measure e2e throughput including the sdk/network/collector/backend" scenario here too down the line — that should fit nicely alongside the more focused ones. I can imagine things like "what if a Span filtering is done at the sdk vs in collector? What if we switch from gRCP to HTTP? What if OTel Arrow's proposed OTAP wire-format is used instead of OTLP" etc., with Demo offering A/B testing and the benchmarks showing the total difference etc. There is potential tie-up needed with OTel blueprint efforts too - it is defining reference architectures, and this repo could provide the perf numbers backing them. Intentionally starting with an extremely lean scope and get it running E2E, and then expand! |
Co-authored-by: Martin Costello <martin@martincostello.com>
- Update cadence: harnesses pin SDK versions in manifests; Dependabot/ Renovate opens a PR on each new release, merging triggers the benchmark run. workflow_dispatch is now the ad-hoc escape hatch. - Future possibilities: drop the repository_dispatch bullet (now the default model, no longer future work). - Removes need for cross-repository GitHub App permissions, addressing feedback from @martincostello.
Totally! I've had the same thought a while ago while checking the W3C Trace Context test suite (https://github.com/w3c/trace-context/tree/main/test), which is an important compliance check. I can imagine the spec-compliance matrix in this repo being auto-generated from actual runs instead of maintained by hand. On the name: since this repo will also hold historical perf results (not just scenario definitions), test-scenarios doesn't quite capture the second half. I don't have a better name yet either. My preference is to start narrow with benchmarks, and once we actually expand scope, pick a name that fits - either renaming the repo or creating a sibling and cross-linking. The results are anyway ultimately in the opentelemetry.io website, so the repo itself is not that end-user exposed. I'm intentionally keeping the scope as lean as possible to get an end-to-end version landed first. Historically, language-agnostic initiatives have stalled, partly due to scope creep, so hopefully this plan of deliberately staying slim to get things rolling makes sense. |
mx-psi
left a comment
There was a problem hiding this comment.
I'm happy if we rename the repo later too, I can't come up with a better name right now 😅 My suggestion was only about the name really, I fully agree we should keep the scope as lean as possible :)
jack-berg
left a comment
There was a problem hiding this comment.
Can't volunteer for repo ownership but can help contribute the bits for opentelemetry-java.
braydonk
left a comment
There was a problem hiding this comment.
I had conversations with multiple distinct groups at KubeCon EU 2026 where this idea had come up. I think it's a great idea and I support it.
pellared
left a comment
There was a problem hiding this comment.
I already approved open-telemetry/community#3495
Details can always be tuned later 😉
…al-benchmarks # Conflicts: # CHANGELOG.md
|
@dashpole I think we have enough approvals for this. Could you merge? (and then I'll ask maintainers of community repo to merge the companion community project PR) |
### Context - Clarify that environment variable propagation operational guidance is non-normative and should be documented by language implementations. ([open-telemetry#5165](open-telemetry#5165)) - Clean up implementation guidelines for environment variable propagation carriers. ([open-telemetry#5166](open-telemetry#5166)) - Remove caching behavior suggestions for environment variable propagation carrier implementations. ([open-telemetry#5179](open-telemetry#5179)) - Mark "Environment Variables as Context Propagation Carriers" as Release Candidate. ([open-telemetry#5142](open-telemetry#5142)) ### Traces - Amend the description of Composite/Composable samplers. ([open-telemetry#5161](open-telemetry#5161)) ### Logs - Add ETW (Event Tracing for Windows) example mapping to the logs data model appendix, including the ETW level to `SeverityNumber` mapping. ([open-telemetry#5159](open-telemetry#5159)) ### Profiles - Add Profiles data model (data-model.md). ([open-telemetry#4965](open-telemetry#4965)) ### Supplementary Guidelines - Add non-normative supplementary guidelines for SDK self-observability. ([open-telemetry#5135](open-telemetry#5135)) ### OTEPs - Add OTEP proposing a central OpenTelemetry benchmarks repository. ([open-telemetry#5118](open-telemetry#5118)) - Introduce Policies into the specification. ([open-telemetry#4738](open-telemetry#4738)) --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Proposes
open-telemetry/benchmarks— a project-owned repository for cross-language scenario definitions, release-over-release benchmark tracking, and a public GitHub Pages dashboard.Scope is intentionally minimal: one scenario (API-only counter increment), at least two language harnesses, and a manual per-release update cadence.
A working prototype with .NET, Rust, and Java harnesses and a live dashboard is linked in the Prototypes section.
Project proposal (staffing, maintainers, TC/GC sponsors) is handled in the companion community PR: open-telemetry/community#3495