Skip to content

fix(data-pipeline): make OTLP trace metrics mode-independent - #2316

Draft
mabdinur wants to merge 13 commits into
mainfrom
munir/otlp-trace-metrics-fixes
Draft

fix(data-pipeline): make OTLP trace metrics mode-independent#2316
mabdinur wants to merge 13 commits into
mainfrom
munir/otlp-trace-metrics-fixes

Conversation

@mabdinur

@mabdinur mabdinur commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Aligns libdatadog OTLP trace metrics with the shared cross-tracer contract in system-tests#7466.

  • Always emits available OTel and datadog.* metric attributes, independent of DD_TRACE_OTEL_SEMANTICS_ENABLED; the configuration remains available for OTLP trace export and downstream compatibility.
  • Emits required SMC dimensions with canonical values, including SPAN_KIND_INTERNAL as the fallback span kind.
  • Emits datadog.is_trace_root only when known, boolean datadog.span.top_level, array-valued process/peer tags, additional metric tags, and non-empty datadog.svc_src.
  • Keeps span-kind normalization private to the metrics mapper and consolidates unit coverage to minimize the diff.

Validation

  • cargo nextest run -p libdd-data-pipeline (159 passed)
  • cargo check -p libdd-data-pipeline
  • cargo +stable clippy -p libdd-data-pipeline --all-targets -- -D warnings
  • cargo +nightly-2026-07-26 fmt --all -- --check
  • cargo test -p libdd-data-pipeline --doc (2 passed)

Fixes several OTLP Span Metrics Connector attribute conventions on the
`traces.span.sdk.metrics.duration` histogram export:

- process_tags/peer_tags: emit as a single `datadog.{process,peer}_tags`
  arrayValue instead of fanning out per-key attributes.
- is_trace_root: rename `_datadog.is_trace_root` to `datadog.is_trace_root`
  and always emit true/false rather than only when true.
- span.kind: canonicalize to the OTel SMC uppercase convention
  (e.g. `SPAN_KIND_SERVER`) instead of the raw Datadog tag value.
- status.code: emit the SMC string convention (`STATUS_CODE_OK`/
  `STATUS_CODE_ERROR`) unconditionally on every data point, replacing the
  int enum that was only set on error.

Companion system-tests spec: DataDog/system-tests#7363
@mabdinur mabdinur added the AI Generated PR largely written by AI tools label Aug 4, 2026
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

📚 Documentation Check Results

⚠️ 1279 documentation warning(s) found

📦 libdd-data-pipeline - 1279 warning(s)


Updated: 2026-08-07 18:10:15 UTC | Commit: 9d0fea6 | missing-docs job results

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

🔒 Cargo Deny Results

⚠️ 3 issue(s) found, showing only errors (advisories, bans, sources)

📦 libdd-data-pipeline - 3 error(s)

Show output
error[vulnerability]: Invalid pointer dereference in `fmt::Pointer` impl for `Atomic` and `Shared` when the underlying pointer is invalid
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:75:1
   │
75 │ crossbeam-epoch 0.9.18 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
   │
   ├ ID: RUSTSEC-2026-0204
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0204
   ├ Affected versions of `fmt::Display` dereference the underlying pointer. This causes a invalid pointer dereference e.g., when a pointer created with `Atomic::null` or `Shared::null`. `fmt::Debug` impls and pre-0.9 `fmt::Display` impls, which do not dereference pointers, are not affected by this issue.
   ├ Announcement: https://github.com/crossbeam-rs/crossbeam/pull/1276
   ├ Solution: Upgrade to >=0.9.20 (try `cargo update -p crossbeam-epoch`)
   ├ crossbeam-epoch v0.9.18
     └── crossbeam-deque v0.8.5
         └── rayon-core v1.12.1
             └── rayon v1.10.0
                 └── criterion v0.5.1
                     ├── libdd-common v5.1.0
                     │   ├── libdd-capabilities-impl v3.0.0
                     │   │   ├── libdd-data-pipeline v7.0.0
                     │   │   ├── libdd-shared-runtime v2.0.0
                     │   │   │   ├── libdd-data-pipeline v7.0.0 (*)
                     │   │   │   ├── libdd-dogstatsd-client v4.0.0
                     │   │   │   │   ├── libdd-data-pipeline v7.0.0 (*)
                     │   │   │   │   └── libdd-trace-stats v6.0.0
                     │   │   │   │       └── libdd-data-pipeline v7.0.0 (*)
                     │   │   │   ├── libdd-telemetry v6.0.0
                     │   │   │   │   ├── libdd-data-pipeline v7.0.0 (*)
                     │   │   │   │   └── libdd-trace-stats v6.0.0 (*)
                     │   │   │   └── libdd-trace-stats v6.0.0 (*)
                     │   │   ├── (dev) libdd-telemetry v6.0.0 (*)
                     │   │   ├── libdd-trace-stats v6.0.0 (*)
                     │   │   └── libdd-trace-utils v9.0.0
                     │   │       ├── libdd-data-pipeline v7.0.0 (*)
                     │   │       ├── libdd-trace-obfuscation v5.0.0
                     │   │       │   └── libdd-trace-stats v6.0.0 (*)
                     │   │       ├── libdd-trace-stats v6.0.0 (*)
                     │   │       └── (dev) libdd-trace-utils v9.0.0 (*)
                     │   ├── libdd-data-pipeline v7.0.0 (*)
                     │   ├── libdd-dogstatsd-client v4.0.0 (*)
                     │   ├── libdd-shared-runtime v2.0.0 (*)
                     │   ├── libdd-telemetry v6.0.0 (*)
                     │   ├── libdd-trace-obfuscation v5.0.0 (*)
                     │   ├── libdd-trace-stats v6.0.0 (*)
                     │   └── libdd-trace-utils v9.0.0 (*)
                     ├── (dev) libdd-data-pipeline v7.0.0 (*)
                     ├── (dev) libdd-ddsketch v1.1.0
                     │   ├── libdd-data-pipeline v7.0.0 (*)
                     │   ├── libdd-telemetry v6.0.0 (*)
                     │   └── libdd-trace-stats v6.0.0 (*)
                     ├── (dev) libdd-trace-normalization v3.0.0
                     │   ├── libdd-data-pipeline v7.0.0 (*)
                     │   └── libdd-trace-utils v9.0.0 (*)
                     ├── (dev) libdd-trace-obfuscation v5.0.0 (*)
                     ├── (dev) libdd-trace-stats v6.0.0 (*)
                     └── (dev) libdd-trace-utils v9.0.0 (*)

error[unsound]: Rand is unsound with a custom logger using `rand::rng()`
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:220:1
    │
220 │ rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unsound advisory detected
    │
    ├ ID: RUSTSEC-2026-0097
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0097
    ├ It has been reported (by [@lopopolo](https://github.com/lopopolo)) that the `rand` library is [unsound](https://rust-lang.github.io/unsafe-code-guidelines/glossary.html#soundness-of-code--of-a-library) (i.e. that safe code using the public API can cause Undefined Behaviour) when all the following conditions are met:
      
      - The `log` and `thread_rng` features are enabled
      - A [custom logger](https://docs.rs/log/latest/log/#implementing-a-logger) is defined
      - The custom logger accesses `rand::rng()` (previously `rand::thread_rng()`) and calls any `TryRng` (previously `RngCore`) methods on `ThreadRng`
      - The `ThreadRng` (attempts to) reseed while called from the custom logger (this happens every 64 kB of generated data)
      - Trace-level logging is enabled or warn-level logging is enabled and the random source (the `getrandom` crate) is unable to provide a new seed
      
      `TryRng` (previously `RngCore`) methods for `ThreadRng` use `unsafe` code to cast `*mut BlockRng<ReseedingCore>` to `&mut BlockRng<ReseedingCore>`. When all the above conditions are met this results in an aliased mutable reference, violating the Stacked Borrows rules. Miri is able to detect this violation in sample code. Since construction of [aliased mutable references is Undefined Behaviour](https://doc.rust-lang.org/stable/nomicon/references.html), the behaviour of optimized builds is hard to predict.
    ├ Announcement: https://github.com/rust-random/rand/pull/1763
    ├ Solution: Upgrade to >=0.10.1 OR <0.10.0, >=0.9.3 OR <0.9.0, >=0.8.6 (try `cargo update -p rand`)
    ├ rand v0.8.5
      ├── libdd-common v5.1.0
      │   ├── libdd-capabilities-impl v3.0.0
      │   │   ├── libdd-data-pipeline v7.0.0
      │   │   ├── libdd-shared-runtime v2.0.0
      │   │   │   ├── libdd-data-pipeline v7.0.0 (*)
      │   │   │   ├── libdd-dogstatsd-client v4.0.0
      │   │   │   │   ├── libdd-data-pipeline v7.0.0 (*)
      │   │   │   │   └── libdd-trace-stats v6.0.0
      │   │   │   │       └── libdd-data-pipeline v7.0.0 (*)
      │   │   │   ├── libdd-telemetry v6.0.0
      │   │   │   │   ├── libdd-data-pipeline v7.0.0 (*)
      │   │   │   │   └── libdd-trace-stats v6.0.0 (*)
      │   │   │   └── libdd-trace-stats v6.0.0 (*)
      │   │   ├── (dev) libdd-telemetry v6.0.0 (*)
      │   │   ├── libdd-trace-stats v6.0.0 (*)
      │   │   └── libdd-trace-utils v9.0.0
      │   │       ├── libdd-data-pipeline v7.0.0 (*)
      │   │       ├── libdd-trace-obfuscation v5.0.0
      │   │       │   └── libdd-trace-stats v6.0.0 (*)
      │   │       ├── libdd-trace-stats v6.0.0 (*)
      │   │       └── (dev) libdd-trace-utils v9.0.0 (*)
      │   ├── libdd-data-pipeline v7.0.0 (*)
      │   ├── libdd-dogstatsd-client v4.0.0 (*)
      │   ├── libdd-shared-runtime v2.0.0 (*)
      │   ├── libdd-telemetry v6.0.0 (*)
      │   ├── libdd-trace-obfuscation v5.0.0 (*)
      │   ├── libdd-trace-stats v6.0.0 (*)
      │   └── libdd-trace-utils v9.0.0 (*)
      ├── (dev) libdd-data-pipeline v7.0.0 (*)
      ├── (dev) libdd-ddsketch v1.1.0
      │   ├── libdd-data-pipeline v7.0.0 (*)
      │   ├── libdd-telemetry v6.0.0 (*)
      │   └── libdd-trace-stats v6.0.0 (*)
      ├── (dev) libdd-trace-normalization v3.0.0
      │   ├── libdd-data-pipeline v7.0.0 (*)
      │   └── libdd-trace-utils v9.0.0 (*)
      ├── (dev) libdd-trace-stats v6.0.0 (*)
      ├── libdd-trace-utils v9.0.0 (*)
      └── proptest v1.5.0
          └── (dev) libdd-tinybytes v1.1.1
              ├── libdd-data-pipeline v7.0.0 (*)
              ├── (dev) libdd-tinybytes v1.1.1 (*)
              └── libdd-trace-utils v9.0.0 (*)

error[vulnerability]: Denial of Service via Stack Exhaustion
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:291:1
    │
291 │ time 0.3.41 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0009
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0009
    ├ ## Impact
      
      When user-provided input is provided to any type that parses with the RFC 2822 format, a denial of
      service attack via stack exhaustion is possible. The attack relies on formally deprecated and
      rarely-used features that are part of the RFC 2822 format used in a malicious manner. Ordinary,
      non-malicious input will never encounter this scenario.
      
      ## Patches
      
      A limit to the depth of recursion was added in v0.3.47. From this version, an error will be returned
      rather than exhausting the stack.
      
      ## Workarounds
      
      Limiting the length of user input is the simplest way to avoid stack exhaustion, as the amount of
      the stack consumed would be at most a factor of the length of the input.
    ├ Announcement: https://github.com/time-rs/time/blob/main/CHANGELOG.md#0347-2026-02-05
    ├ Solution: Upgrade to >=0.3.47 (try `cargo update -p time`)
    ├ time v0.3.41
      └── tracing-appender v0.2.3
          └── libdd-log v1.0.0
              └── (dev) libdd-data-pipeline v7.0.0

advisories FAILED, bans ok, sources ok

Updated: 2026-08-07 18:12:08 UTC | Commit: 9d0fea6 | dependency-check job results

@datadog-datadog-prod-us1

datadog-datadog-prod-us1 Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
Patch Coverage: 97.50%
Overall Coverage: 75.97% (+0.02%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 81bf31c | Docs | Datadog PR Page | Give us feedback!

@pr-commenter

pr-commenter Bot commented Aug 4, 2026

Copy link
Copy Markdown

Benchmarks

Comparison

Benchmark execution time: 2026-08-07 18:21:48

Comparing candidate commit 81bf31c in PR branch munir/otlp-trace-metrics-fixes with baseline commit fbdace3 in branch main.

Found 0 performance improvements and 2 performance regressions! Performance is the same for 22 metrics, 0 unstable metrics.

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

scenario:trace_buffer/8_senders/no_delay

  • 🟥 execution_time [+267.715µs; +326.865µs] or [+4.255%; +5.195%]
  • 🟥 throughput [-57875.344op/s; -46909.243op/s] or [-5.053%; -4.096%]

Candidate

Candidate benchmark details

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 81bf31c 1786125657 munir/otlp-trace-metrics-fixes
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
trace_buffer/1_senders/10us_delay execution_time 56.286ms 56.635ms ± 0.171ms 56.609ms ± 0.095ms 56.720ms 56.946ms 57.265ms 57.413ms 1.42% 1.261 3.128 0.30% 0.012ms 1 200
trace_buffer/1_senders/10us_delay throughput 15675.759op/s 15891.406op/s ± 47.920op/s 15898.524op/s ± 26.677op/s 15923.406op/s 15953.634op/s 15971.554op/s 15989.670op/s 0.57% -1.229 2.992 0.30% 3.388op/s 1 200
trace_buffer/1_senders/1us_delay execution_time 50.007ms 50.091ms ± 0.036ms 50.084ms ± 0.012ms 50.097ms 50.152ms 50.200ms 50.217ms 0.26% 0.968 1.675 0.07% 0.003ms 1 200
trace_buffer/1_senders/1us_delay throughput 17922.241op/s 17967.329op/s ± 12.858op/s 17969.633op/s ± 4.178op/s 17973.762op/s 17987.913op/s 17993.758op/s 17997.637op/s 0.16% -0.962 1.664 0.07% 0.909op/s 1 200
trace_buffer/1_senders/no_delay execution_time 329.686µs 338.463µs ± 4.533µs 338.100µs ± 2.433µs 340.556µs 344.232µs 352.777µs 370.039µs 9.45% 2.764 14.958 1.34% 0.321µs 1 200
trace_buffer/1_senders/no_delay throughput 2432173.473op/s 2659537.398op/s ± 34427.219op/s 2661937.211op/s ± 19039.572op/s 2680912.135op/s 2698190.653op/s 2718593.829op/s 2729869.586op/s 2.55% -2.415 12.253 1.29% 2434.372op/s 1 200
trace_buffer/2_senders/10us_delay execution_time 56.766ms 57.160ms ± 0.202ms 57.145ms ± 0.146ms 57.302ms 57.497ms 57.632ms 57.659ms 0.90% 0.322 -0.500 0.35% 0.014ms 1 200
trace_buffer/2_senders/10us_delay throughput 31218.201op/s 31491.139op/s ± 111.188op/s 31498.945op/s ± 80.001op/s 31566.300op/s 31665.710op/s 31694.152op/s 31709.153op/s 0.67% -0.307 -0.513 0.35% 7.862op/s 1 200
trace_buffer/2_senders/1us_delay execution_time 50.009ms 50.113ms ± 0.037ms 50.107ms ± 0.020ms 50.127ms 50.185ms 50.215ms 50.228ms 0.24% 0.741 0.892 0.07% 0.003ms 1 200
trace_buffer/2_senders/1us_delay throughput 35836.843op/s 35919.076op/s ± 26.301op/s 35923.015op/s ± 14.545op/s 35937.688op/s 35952.533op/s 35978.014op/s 35993.685op/s 0.20% -0.736 0.887 0.07% 1.860op/s 1 200
trace_buffer/2_senders/no_delay execution_time 826.040µs 878.608µs ± 19.343µs 879.044µs ± 11.050µs 888.668µs 908.847µs 917.126µs 1000.805µs 13.85% 1.123 7.050 2.20% 1.368µs 1 200
trace_buffer/2_senders/no_delay throughput 1798552.260op/s 2049662.856op/s ± 44260.472op/s 2047680.245op/s ± 25969.274op/s 2077191.156op/s 2120171.515op/s 2153823.272op/s 2179072.342op/s 6.42% -0.676 4.496 2.15% 3129.688op/s 1 200
trace_buffer/4_senders/10us_delay execution_time 57.167ms 57.480ms ± 0.146ms 57.471ms ± 0.090ms 57.565ms 57.754ms 57.899ms 57.926ms 0.79% 0.479 0.340 0.25% 0.010ms 1 200
trace_buffer/4_senders/10us_delay throughput 62148.375op/s 62630.820op/s ± 158.368op/s 62639.919op/s ± 97.755op/s 62731.692op/s 62871.431op/s 62926.942op/s 62972.961op/s 0.53% -0.463 0.316 0.25% 11.198op/s 1 200
trace_buffer/4_senders/1us_delay execution_time 50.082ms 50.168ms ± 0.037ms 50.162ms ± 0.017ms 50.180ms 50.238ms 50.288ms 50.370ms 0.41% 1.780 5.459 0.07% 0.003ms 1 200
trace_buffer/4_senders/1us_delay throughput 71470.423op/s 71758.649op/s ± 53.075op/s 71766.829op/s ± 24.193op/s 71789.420op/s 71821.394op/s 71838.214op/s 71882.191op/s 0.16% -1.770 5.409 0.07% 3.753op/s 1 200
trace_buffer/4_senders/no_delay execution_time 1.999ms 2.286ms ± 0.084ms 2.282ms ± 0.062ms 2.347ms 2.425ms 2.452ms 2.496ms 9.35% -0.157 0.201 3.67% 0.006ms 1 200
trace_buffer/4_senders/no_delay throughput 1442469.869op/s 1576938.103op/s ± 58626.053op/s 1577358.376op/s ± 43124.824op/s 1619919.087op/s 1661107.692op/s 1742714.088op/s 1801212.441op/s 14.19% 0.416 0.700 3.71% 4145.488op/s 1 200
trace_buffer/8_senders/10us_delay execution_time 57.562ms 57.878ms ± 0.225ms 57.808ms ± 0.101ms 57.964ms 58.281ms 58.537ms 59.176ms 2.37% 2.336 8.945 0.39% 0.016ms 1 200
trace_buffer/8_senders/10us_delay throughput 121671.094op/s 124401.871op/s ± 478.536op/s 124551.286op/s ± 217.986op/s 124723.649op/s 124846.010op/s 124962.442op/s 125083.226op/s 0.43% -2.273 8.474 0.38% 33.838op/s 1 200
trace_buffer/8_senders/1us_delay execution_time 50.211ms 50.294ms ± 0.063ms 50.272ms ± 0.030ms 50.318ms 50.425ms 50.500ms 50.506ms 0.46% 1.432 1.852 0.12% 0.004ms 1 200
trace_buffer/8_senders/1us_delay throughput 142558.074op/s 143158.299op/s ± 178.418op/s 143220.381op/s ± 85.309op/s 143281.350op/s 143348.011op/s 143381.545op/s 143395.570op/s 0.12% -1.425 1.828 0.12% 12.616op/s 1 200
trace_buffer/8_senders/no_delay execution_time 6.107ms 6.590ms ± 0.104ms 6.609ms ± 0.066ms 6.658ms 6.730ms 6.798ms 6.832ms 3.39% -0.974 2.574 1.57% 0.007ms 1 200
trace_buffer/8_senders/no_delay throughput 1053809.411op/s 1092919.244op/s ± 17539.621op/s 1089482.009op/s ± 10894.419op/s 1104529.617op/s 1120312.347op/s 1135940.250op/s 1179057.451op/s 8.22% 1.156 3.368 1.60% 1240.239op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
trace_buffer/1_senders/10us_delay execution_time [56.611ms; 56.659ms] or [-0.042%; +0.042%] None None None
trace_buffer/1_senders/10us_delay throughput [15884.765op/s; 15898.048op/s] or [-0.042%; +0.042%] None None None
trace_buffer/1_senders/1us_delay execution_time [50.086ms; 50.096ms] or [-0.010%; +0.010%] None None None
trace_buffer/1_senders/1us_delay throughput [17965.547op/s; 17969.111op/s] or [-0.010%; +0.010%] None None None
trace_buffer/1_senders/no_delay execution_time [337.835µs; 339.091µs] or [-0.186%; +0.186%] None None None
trace_buffer/1_senders/no_delay throughput [2654766.116op/s; 2664308.679op/s] or [-0.179%; +0.179%] None None None
trace_buffer/2_senders/10us_delay execution_time [57.132ms; 57.188ms] or [-0.049%; +0.049%] None None None
trace_buffer/2_senders/10us_delay throughput [31475.730op/s; 31506.549op/s] or [-0.049%; +0.049%] None None None
trace_buffer/2_senders/1us_delay execution_time [50.108ms; 50.118ms] or [-0.010%; +0.010%] None None None
trace_buffer/2_senders/1us_delay throughput [35915.431op/s; 35922.721op/s] or [-0.010%; +0.010%] None None None
trace_buffer/2_senders/no_delay execution_time [875.927µs; 881.289µs] or [-0.305%; +0.305%] None None None
trace_buffer/2_senders/no_delay throughput [2043528.781op/s; 2055796.932op/s] or [-0.299%; +0.299%] None None None
trace_buffer/4_senders/10us_delay execution_time [57.460ms; 57.500ms] or [-0.035%; +0.035%] None None None
trace_buffer/4_senders/10us_delay throughput [62608.872op/s; 62652.769op/s] or [-0.035%; +0.035%] None None None
trace_buffer/4_senders/1us_delay execution_time [50.163ms; 50.173ms] or [-0.010%; +0.010%] None None None
trace_buffer/4_senders/1us_delay throughput [71751.294op/s; 71766.005op/s] or [-0.010%; +0.010%] None None None
trace_buffer/4_senders/no_delay execution_time [2.274ms; 2.298ms] or [-0.510%; +0.510%] None None None
trace_buffer/4_senders/no_delay throughput [1568813.095op/s; 1585063.110op/s] or [-0.515%; +0.515%] None None None
trace_buffer/8_senders/10us_delay execution_time [57.847ms; 57.909ms] or [-0.054%; +0.054%] None None None
trace_buffer/8_senders/10us_delay throughput [124335.550op/s; 124468.192op/s] or [-0.053%; +0.053%] None None None
trace_buffer/8_senders/1us_delay execution_time [50.285ms; 50.303ms] or [-0.017%; +0.017%] None None None
trace_buffer/8_senders/1us_delay throughput [143133.572op/s; 143183.026op/s] or [-0.017%; +0.017%] None None None
trace_buffer/8_senders/no_delay execution_time [6.575ms; 6.604ms] or [-0.219%; +0.219%] None None None
trace_buffer/8_senders/no_delay throughput [1090488.421op/s; 1095350.067op/s] or [-0.222%; +0.222%] None None None

Baseline

Baseline benchmark details

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fbdace3 1786121056 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
trace_buffer/1_senders/10us_delay execution_time 56.341ms 56.594ms ± 0.150ms 56.580ms ± 0.094ms 56.672ms 56.847ms 57.053ms 57.272ms 1.22% 1.133 2.244 0.26% 0.011ms 1 200
trace_buffer/1_senders/10us_delay throughput 15714.462op/s 15902.722op/s ± 42.052op/s 15906.674op/s ± 26.362op/s 15933.993op/s 15958.039op/s 15972.063op/s 15974.218op/s 0.42% -1.109 2.151 0.26% 2.973op/s 1 200
trace_buffer/1_senders/1us_delay execution_time 50.025ms 50.079ms ± 0.027ms 50.079ms ± 0.010ms 50.087ms 50.139ms 50.171ms 50.194ms 0.23% 0.987 2.857 0.05% 0.002ms 1 200
trace_buffer/1_senders/1us_delay throughput 17930.265op/s 17971.750op/s ± 9.748op/s 17971.658op/s ± 3.705op/s 17975.686op/s 17988.541op/s 17990.702op/s 17990.928op/s 0.11% -0.981 2.839 0.05% 0.689op/s 1 200
trace_buffer/1_senders/no_delay execution_time 330.548µs 338.233µs ± 4.859µs 337.653µs ± 1.535µs 339.255µs 343.322µs 348.191µs 390.716µs 15.72% 6.576 66.798 1.43% 0.344µs 1 200
trace_buffer/1_senders/no_delay throughput 2303463.234op/s 2661392.014op/s ± 35178.660op/s 2665456.810op/s ± 12063.357op/s 2676015.277op/s 2698719.661op/s 2709112.536op/s 2722751.310op/s 2.15% -5.563 52.445 1.32% 2487.507op/s 1 200
trace_buffer/2_senders/10us_delay execution_time 56.630ms 57.111ms ± 0.229ms 57.095ms ± 0.146ms 57.256ms 57.537ms 57.671ms 57.732ms 1.11% 0.426 -0.317 0.40% 0.016ms 1 200
trace_buffer/2_senders/10us_delay throughput 31178.758op/s 31518.234op/s ± 125.935op/s 31526.162op/s ± 80.865op/s 31604.599op/s 31706.768op/s 31740.789op/s 31785.469op/s 0.82% -0.408 -0.337 0.40% 8.905op/s 1 200
trace_buffer/2_senders/1us_delay execution_time 50.021ms 50.116ms ± 0.039ms 50.108ms ± 0.020ms 50.131ms 50.205ms 50.222ms 50.237ms 0.26% 1.087 1.043 0.08% 0.003ms 1 200
trace_buffer/2_senders/1us_delay throughput 35830.228op/s 35916.759op/s ± 27.582op/s 35922.336op/s ± 14.304op/s 35936.137op/s 35947.704op/s 35960.483op/s 35984.777op/s 0.17% -1.082 1.035 0.08% 1.950op/s 1 200
trace_buffer/2_senders/no_delay execution_time 849.664µs 895.921µs ± 18.833µs 894.451µs ± 12.895µs 907.824µs 923.917µs 941.554µs 1001.429µs 11.96% 0.924 3.911 2.10% 1.332µs 1 200
trace_buffer/2_senders/no_delay throughput 1797431.848op/s 2009973.624op/s ± 41573.460op/s 2012406.789op/s ± 29265.544op/s 2039589.269op/s 2072387.288op/s 2093493.603op/s 2118485.271op/s 5.27% -0.641 2.493 2.06% 2939.688op/s 1 200
trace_buffer/4_senders/10us_delay execution_time 57.136ms 57.485ms ± 0.154ms 57.469ms ± 0.100ms 57.574ms 57.753ms 57.888ms 57.955ms 0.85% 0.474 0.180 0.27% 0.011ms 1 200
trace_buffer/4_senders/10us_delay throughput 62116.773op/s 62625.930op/s ± 167.307op/s 62642.660op/s ± 108.590op/s 62747.414op/s 62857.073op/s 62976.874op/s 63007.090op/s 0.58% -0.459 0.160 0.27% 11.830op/s 1 200
trace_buffer/4_senders/1us_delay execution_time 50.107ms 50.166ms ± 0.034ms 50.161ms ± 0.015ms 50.177ms 50.232ms 50.261ms 50.330ms 0.34% 1.342 2.839 0.07% 0.002ms 1 200
trace_buffer/4_senders/1us_delay throughput 71527.656op/s 71761.075op/s ± 48.245op/s 71769.002op/s ± 20.936op/s 71788.661op/s 71825.101op/s 71834.089op/s 71846.229op/s 0.11% -1.336 2.811 0.07% 3.411op/s 1 200
trace_buffer/4_senders/no_delay execution_time 2.062ms 2.312ms ± 0.085ms 2.319ms ± 0.060ms 2.374ms 2.440ms 2.476ms 2.560ms 10.39% -0.328 0.112 3.67% 0.006ms 1 200
trace_buffer/4_senders/no_delay throughput 1406226.929op/s 1559355.265op/s ± 58269.533op/s 1552311.730op/s ± 39751.679op/s 1593537.299op/s 1656087.001op/s 1716610.513op/s 1745575.995op/s 12.45% 0.551 0.347 3.73% 4120.278op/s 1 200
trace_buffer/8_senders/10us_delay execution_time 57.665ms 57.917ms ± 0.172ms 57.866ms ± 0.103ms 58.010ms 58.236ms 58.366ms 58.498ms 1.09% 0.944 0.202 0.30% 0.012ms 1 200
trace_buffer/8_senders/10us_delay throughput 123080.462op/s 124316.910op/s ± 368.194op/s 124424.712op/s ± 221.263op/s 124595.370op/s 124747.925op/s 124845.401op/s 124859.167op/s 0.35% -0.933 0.171 0.30% 26.035op/s 1 200
trace_buffer/8_senders/1us_delay execution_time 50.211ms 50.303ms ± 0.060ms 50.285ms ± 0.035ms 50.334ms 50.416ms 50.476ms 50.548ms 0.52% 1.149 1.576 0.12% 0.004ms 1 200
trace_buffer/8_senders/1us_delay throughput 142439.589op/s 143133.358op/s ± 169.863op/s 143185.151op/s ± 99.261op/s 143258.277op/s 143336.289op/s 143385.662op/s 143393.734op/s 0.15% -1.141 1.545 0.12% 12.011op/s 1 200
trace_buffer/8_senders/no_delay execution_time 5.465ms 6.292ms ± 0.186ms 6.310ms ± 0.121ms 6.432ms 6.514ms 6.558ms 6.626ms 5.01% -1.312 3.093 2.95% 0.013ms 1 200
trace_buffer/8_senders/no_delay throughput 1086658.555op/s 1145311.537op/s ± 35462.543op/s 1141115.510op/s ± 22071.978op/s 1163115.362op/s 1205349.499op/s 1292494.019op/s 1317392.317op/s 15.45% 1.646 4.730 3.09% 2507.580op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
trace_buffer/1_senders/10us_delay execution_time [56.574ms; 56.615ms] or [-0.037%; +0.037%] None None None
trace_buffer/1_senders/10us_delay throughput [15896.894op/s; 15908.550op/s] or [-0.037%; +0.037%] None None None
trace_buffer/1_senders/1us_delay execution_time [50.075ms; 50.082ms] or [-0.008%; +0.008%] None None None
trace_buffer/1_senders/1us_delay throughput [17970.399op/s; 17973.101op/s] or [-0.008%; +0.008%] None None None
trace_buffer/1_senders/no_delay execution_time [337.559µs; 338.906µs] or [-0.199%; +0.199%] None None None
trace_buffer/1_senders/no_delay throughput [2656516.590op/s; 2666267.438op/s] or [-0.183%; +0.183%] None None None
trace_buffer/2_senders/10us_delay execution_time [57.079ms; 57.142ms] or [-0.055%; +0.055%] None None None
trace_buffer/2_senders/10us_delay throughput [31500.781op/s; 31535.687op/s] or [-0.055%; +0.055%] None None None
trace_buffer/2_senders/1us_delay execution_time [50.111ms; 50.121ms] or [-0.011%; +0.011%] None None None
trace_buffer/2_senders/1us_delay throughput [35912.936op/s; 35920.581op/s] or [-0.011%; +0.011%] None None None
trace_buffer/2_senders/no_delay execution_time [893.311µs; 898.531µs] or [-0.291%; +0.291%] None None None
trace_buffer/2_senders/no_delay throughput [2004211.942op/s; 2015735.305op/s] or [-0.287%; +0.287%] None None None
trace_buffer/4_senders/10us_delay execution_time [57.463ms; 57.506ms] or [-0.037%; +0.037%] None None None
trace_buffer/4_senders/10us_delay throughput [62602.743op/s; 62649.117op/s] or [-0.037%; +0.037%] None None None
trace_buffer/4_senders/1us_delay execution_time [50.162ms; 50.171ms] or [-0.009%; +0.009%] None None None
trace_buffer/4_senders/1us_delay throughput [71754.389op/s; 71767.762op/s] or [-0.009%; +0.009%] None None None
trace_buffer/4_senders/no_delay execution_time [2.300ms; 2.324ms] or [-0.510%; +0.510%] None None None
trace_buffer/4_senders/no_delay throughput [1551279.668op/s; 1567430.861op/s] or [-0.518%; +0.518%] None None None
trace_buffer/8_senders/10us_delay execution_time [57.893ms; 57.941ms] or [-0.041%; +0.041%] None None None
trace_buffer/8_senders/10us_delay throughput [124265.882op/s; 124367.938op/s] or [-0.041%; +0.041%] None None None
trace_buffer/8_senders/1us_delay execution_time [50.295ms; 50.311ms] or [-0.016%; +0.016%] None None None
trace_buffer/8_senders/1us_delay throughput [143109.817op/s; 143156.900op/s] or [-0.016%; +0.016%] None None None
trace_buffer/8_senders/no_delay execution_time [6.266ms; 6.318ms] or [-0.410%; +0.410%] None None None
trace_buffer/8_senders/no_delay throughput [1140396.770op/s; 1150226.305op/s] or [-0.429%; +0.429%] None None None

@dd-octo-sts

dd-octo-sts Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 89.19 MB 89.28 MB +.09% (+85.95 KB) 🔍
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 8.20 MB 8.20 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.06 MB 11.06 MB +0% (+568 B) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 100.37 MB 100.45 MB +.08% (+87.38 KB) 🔍
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 26.63 MB 26.64 MB +.04% (+13.00 KB) 🔍
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 94.56 KB 94.56 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 191.42 MB 191.51 MB +.04% (+96.00 KB) 🔍
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 1001.70 MB 1001.87 MB +.01% (+179.13 KB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 8.71 MB 8.73 MB +.15% (+13.50 KB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 94.56 KB 94.56 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 25.62 MB 25.63 MB +.06% (+16.00 KB) 🔍
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 51.01 MB 51.05 MB +.07% (+40.61 KB) 🔍
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 23.22 MB 23.23 MB +.06% (+15.00 KB) 🔍
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 96.04 KB 96.04 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 196.33 MB 196.44 MB +.05% (+120.00 KB) 🔍
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 990.83 MB 991.01 MB +.01% (+184.37 KB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.73 MB 6.74 MB +.07% (+5.50 KB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 96.04 KB 96.04 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 27.55 MB 27.57 MB +.05% (+16.00 KB) 🔍
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 48.56 MB 48.59 MB +.06% (+31.79 KB) 🔍
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 79.47 MB 79.53 MB +.08% (+65.10 KB) 🔍
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 9.13 MB 9.13 MB +.04% (+4.00 KB) 🔍
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 95.12 MB 95.19 MB +.06% (+66.64 KB) 🔍
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.14 MB 11.15 MB +.03% (+4.25 KB) 🔍

Always emit available Datadog attributes for OTLP trace metrics and map non-empty service_source values to datadog.svc_src.

BREAKING CHANGE: OtlpMetricsConfig and map_stats_to_otlp_metrics no longer accept the OTel trace-semantics setting.
@mabdinur mabdinur changed the title fix(data-pipeline): correct OTLP trace-metrics attribute shapes fix(data-pipeline)!: make OTLP trace metrics mode-independent Aug 6, 2026
Retain the OTel semantics field and mapper argument for downstream callers while keeping OTLP trace-metrics output unconditional.
@mabdinur mabdinur changed the title fix(data-pipeline)!: make OTLP trace metrics mode-independent fix(data-pipeline): make OTLP trace metrics mode-independent Aug 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI Generated PR largely written by AI tools data-pipeline

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant