Add full-trace creation benchmark; production-shape the front-half span benchmarks - #12073
Draft
dougqh wants to merge 1 commit into
Draft
Add full-trace creation benchmark; production-shape the front-half span benchmarks#12073dougqh wants to merge 1 commit into
dougqh wants to merge 1 commit into
Conversation
Add TraceCreationBenchmark (full-trace front-half: a web-request arm and a parameterized fan-out arm, children created under an active root scope) as a reference others can key core-optimization gains and regressions off of. Production-shape both front-half benchmarks' fork config (dd.service/env/version + 6 global dd.tags) so mergedTracerTags is a realistically-sized shared bundle; a bare tracer leaves it near-empty and hides any win that scales with tags-per-span. Flag SpanCreationBenchmark's historical table as a pre-config (bare-tracer) baseline, not comparable going forward. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
Author
|
@codex review |
|
Codex Review: Didn't find any major issues. 🎉 Reviewed commit: ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
Contributor
🟢 Java Benchmark SLOs — All performance SLOs passed
PR vs. master results
Commit: Load and DaCapo benchmarks can be triggered manually in the GitLab pipeline. Results will appear in the Benchmarking Platform UI after completion. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds a full-trace front-half JMH benchmark and production-shapes the existing single-span benchmark's tracer config, so tracer core-optimization work has a reference to key gains — and regressions — off of.
New:
TraceCreationBenchmarkOne op = one complete trace (local-root span + children created under an active root scope, so it exercises real parent-context propagation and trace-tag inheritance a single-span bench can't reach). Two arms:
webRequestTrace— fixed realistic request: server root + JDBC-client + HTTP-client + internal child (the headline shape).fanoutTrace—@Param childCount={1,5,10}, the scaling axis: per-trace cost as span count grows exposes how per-span optimizations compound.Isolated via the no-op
DropWriter(front-half only, no serialization/agent I/O). Historical-results table is a(TBD)stub to fill from a committed baseline run.Changed:
SpanCreationBenchmarkProduction-shape the fork config (
dd.service/dd.env/dd.version+ 6 globaldd.tags) somergedTracerTags— the trace-level bundle every span merges — is realistically sized. A bareCoreTracer.builder().build()leaves it near-empty, hiding any win that scales with tags-per-span. The existing 1.53→1.64 historical table is flagged as a pre-config (bare-tracer) baseline, not comparable going forward — re-baseline rather than stitching onto that curve.Why
These are the old-API reference / regression-guard tier: drift-stable, deliberately separate from any new-API showcase benchmarks, so year-over-year comparisons hold and later core changes surface as a delta. Read
gc.alloc.rate.norm(B/op, deterministic) as the primary signal; throughput is directional-only.Notes
ScopeLifecycleBenchmarkdeliberately left unchanged: its spans are built in@Setup, so the fork config never reaches its measured activate/close paths.:dd-trace-core:jmhClasses) and is google-java-format clean.🤖 Generated with Claude Code