Skip to content

OTEP: A Central OpenTelemetry Benchmarks Repository#5118

Merged
jmacd merged 25 commits into
open-telemetry:mainfrom
cijothomas:cijothomas/otep-central-benchmarks
Jun 24, 2026
Merged

OTEP: A Central OpenTelemetry Benchmarks Repository#5118
jmacd merged 25 commits into
open-telemetry:mainfrom
cijothomas:cijothomas/otep-central-benchmarks

Conversation

@cijothomas

@cijothomas cijothomas commented May 27, 2026

Copy link
Copy Markdown
Member

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

@cijothomas
cijothomas requested review from a team as code owners May 27, 2026 18:04
@pellared

Copy link
Copy Markdown
Member

CC @XSAM

Comment thread oteps/5109-central-benchmarks-repository.md
Comment thread oteps/5109-central-benchmarks-repository.md Outdated
Comment thread oteps/5109-central-benchmarks-repository.md
Comment thread oteps/5109-central-benchmarks-repository.md
Comment thread oteps/5109-central-benchmarks-repository.md

@XSAM XSAM left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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.

@bboreham

Copy link
Copy Markdown

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.

@reyang

reyang commented May 29, 2026

Copy link
Copy Markdown
Member

Proposes open-telemetry/benchmarks — a project-owned repository for cross-language scenario definitions, release-over-release benchmark tracking, and a public GitHub Pages dashboard.

Could we work with the opentelemetry-demo project maintainers to use the demo for benchmarks, instead of creating a new thing?

@cijothomas

Copy link
Copy Markdown
Member Author

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.

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).

@cijothomas

Copy link
Copy Markdown
Member Author

Proposes open-telemetry/benchmarks — a project-owned repository for cross-language scenario definitions, release-over-release benchmark tracking, and a public GitHub Pages dashboard.

Could we work with the opentelemetry-demo project maintainers to use the demo for benchmarks, instead of creating a new thing?

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!

Comment thread oteps/5109-central-benchmarks-repository.md Outdated
Comment thread oteps/5109-central-benchmarks-repository.md Outdated
Comment thread oteps/5109-central-benchmarks-repository.md Outdated
Comment thread oteps/5109-central-benchmarks-repository.md
Comment thread oteps/5109-central-benchmarks-repository.md Outdated
cijothomas and others added 4 commits June 1, 2026 10:02
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.
@arminru arminru removed the Skip Changelog Label to skip the changelog check label Jun 2, 2026
Comment thread oteps/5109-central-benchmarks-repository.md
@cijothomas

Copy link
Copy Markdown
Member Author

Would it make sense to have a more generic repository for this (e.g. something like open-telemetry/test-scenarios)?

Even if we only focus on benchmarks at first, I could see basically the same approach being useful for a language-agnostic test suite to ensure spec correctness/compliance with the same structure

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 mx-psi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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 jack-berg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can't volunteer for repo ownership but can help contribute the bits for opentelemetry-java.

Comment thread oteps/5109-central-benchmarks-repository.md Outdated

@braydonk braydonk 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.

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 pellared left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I already approved open-telemetry/community#3495

Details can always be tuned later 😉

@cijothomas
cijothomas requested a review from a team as a code owner June 10, 2026 23:59
@cijothomas

Copy link
Copy Markdown
Member Author

@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)

@jmacd
jmacd added this pull request to the merge queue Jun 24, 2026
Merged via the queue into open-telemetry:main with commit a04f65c Jun 24, 2026
8 of 9 checks passed
@cijothomas
cijothomas deleted the cijothomas/otep-central-benchmarks branch June 26, 2026 08:14
@carlosalberto carlosalberto mentioned this pull request Jul 8, 2026
pull Bot pushed a commit to CodeWeaver13/opentelemetry-specification that referenced this pull request Jul 10, 2026
### 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>
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.