Skip to content

feat(trace_exporter)!: add restart_after_fork configuration option [APMSP-3843]#2263

Open
VianneyRuhlmann wants to merge 3 commits into
mainfrom
vianney/configure-restart-after-fork
Open

feat(trace_exporter)!: add restart_after_fork configuration option [APMSP-3843]#2263
VianneyRuhlmann wants to merge 3 commits into
mainfrom
vianney/configure-restart-after-fork

Conversation

@VianneyRuhlmann

@VianneyRuhlmann VianneyRuhlmann commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What does this PR do?

This adds a config option to the trace exporter to allow background workers to not be restarted in child. This used to be the default behavior and is now opt-in. This feature is only used in dd-trace-py so it will only be a breaking change there.

Note: This change also exposed that both the StatsExporter and OtlpStatsExporter were missing the reset implementation. It 's added as part of this PR.

Motivation

In python, the TraceExporter is currently recreated on forks, this is a legacy of the old thread architecture in python. To avoid restarting the workers in the child just to shut them down when recreating, we skip the restart on the trace exporter background workers. We want to change this behavior in dd-trace-py (DataDog/dd-trace-py#18929) as well as allow dd-trace-rb to use the workers in the intended way. Once dd-trace-py has transitioned this can be removed.

Additional Notes

Anything else we should know when reviewing?

How to test the change?

Describe here in detail how the change can be validated.

@VianneyRuhlmann
VianneyRuhlmann marked this pull request as ready for review July 22, 2026 16:25
@VianneyRuhlmann
VianneyRuhlmann requested a review from a team as a code owner July 22, 2026 16:25
@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

📚 Documentation Check Results

⚠️ 2108 documentation warning(s) found

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

📦 libdd-trace-stats - 888 warning(s)


Updated: 2026-07-23 13:10:22 UTC | Commit: f4b7cad | missing-docs job results

@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

🔒 Cargo Deny Results

⚠️ 5 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:218:1
    │
218 │ 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:287:1
    │
287 │ 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

📦 libdd-trace-stats - 2 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:66:1
   │
66 │ 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-shared-runtime v2.0.0
                     │   │   │   ├── libdd-telemetry v6.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-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-dogstatsd-client v4.0.0
                     │   │   └── libdd-trace-stats v6.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-ddsketch v1.1.0
                     │   ├── libdd-telemetry v6.0.0 (*)
                     │   └── libdd-trace-stats v6.0.0 (*)
                     ├── (dev) libdd-trace-normalization v3.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:198:1
    │
198 │ 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-shared-runtime v2.0.0
      │   │   │   ├── libdd-telemetry v6.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-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-dogstatsd-client v4.0.0
      │   │   └── libdd-trace-stats v6.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-ddsketch v1.1.0
      │   ├── libdd-telemetry v6.0.0 (*)
      │   └── libdd-trace-stats v6.0.0 (*)
      ├── (dev) libdd-trace-normalization v3.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
              ├── (dev) libdd-tinybytes v1.1.1 (*)
              └── libdd-trace-utils v9.0.0 (*)

advisories FAILED, bans ok, sources ok

Updated: 2026-07-23 13:11:49 UTC | Commit: f4b7cad | dependency-check job results

@datadog-datadog-prod-us1-2

datadog-datadog-prod-us1-2 Bot commented Jul 22, 2026

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
Patch Coverage: 53.85%
Overall Coverage: 74.65% (-0.00%)

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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5f92c2c317

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

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

Comment thread libdd-data-pipeline/src/trace_exporter/builder.rs
Comment thread libdd-data-pipeline/src/trace_exporter/builder.rs
Comment thread libdd-data-pipeline/src/trace_exporter/stats.rs
@pr-commenter

pr-commenter Bot commented Jul 22, 2026

Copy link
Copy Markdown

Benchmarks

Comparison

Benchmark execution time: 2026-07-23 13:19:04

Comparing candidate commit ca5e3de in PR branch vianney/configure-restart-after-fork with baseline commit 919c275 in branch main.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 24 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 ----------------------------------'

Benchmark execution time: 2026-07-23 13:16:49

Comparing candidate commit ca5e3de in PR branch vianney/configure-restart-after-fork with baseline commit 919c275 in branch main.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 3 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 ----------------------------------'

Candidate

Candidate benchmark details

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz ca5e3de 1784812061 vianney/configure-restart-after-fork
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 59.947ms 60.078ms ± 0.033ms 60.069ms ± 0.008ms 60.081ms 60.131ms 60.209ms 60.224ms 0.26% 1.697 7.102 0.05% 0.002ms 1 200
trace_buffer/1_senders/10us_delay throughput 14944.295op/s 14980.646op/s ± 8.129op/s 14982.650op/s ± 2.038op/s 14984.034op/s 14987.803op/s 14995.035op/s 15013.236op/s 0.20% -1.687 7.086 0.05% 0.575op/s 1 200
trace_buffer/1_senders/1us_delay execution_time 50.135ms 50.446ms ± 0.217ms 50.403ms ± 0.111ms 50.526ms 50.902ms 51.217ms 51.306ms 1.79% 1.554 2.921 0.43% 0.015ms 1 200
trace_buffer/1_senders/1us_delay throughput 17541.891op/s 17841.093op/s ± 76.088op/s 17855.935op/s ± 39.550op/s 17891.893op/s 17928.159op/s 17940.483op/s 17951.527op/s 0.54% -1.522 2.793 0.43% 5.380op/s 1 200
trace_buffer/1_senders/no_delay execution_time 349.768µs 357.921µs ± 3.825µs 357.645µs ± 1.559µs 359.282µs 363.531µs 369.796µs 381.653µs 6.71% 1.636 7.876 1.07% 0.270µs 1 200
trace_buffer/1_senders/no_delay throughput 2358164.880op/s 2514799.069op/s ± 26447.401op/s 2516458.623op/s ± 10919.161op/s 2526999.577op/s 2557446.303op/s 2568520.504op/s 2573136.180op/s 2.25% -1.417 6.610 1.05% 1870.114op/s 1 200
trace_buffer/2_senders/10us_delay execution_time 60.004ms 60.133ms ± 0.041ms 60.130ms ± 0.023ms 60.147ms 60.219ms 60.245ms 60.277ms 0.24% 0.997 1.341 0.07% 0.003ms 1 200
trace_buffer/2_senders/10us_delay throughput 29862.325op/s 29933.681op/s ± 20.597op/s 29935.185op/s ± 11.254op/s 29949.047op/s 29957.341op/s 29961.890op/s 29997.783op/s 0.21% -0.992 1.335 0.07% 1.456op/s 1 200
trace_buffer/2_senders/1us_delay execution_time 50.852ms 51.135ms ± 0.097ms 51.144ms ± 0.056ms 51.201ms 51.290ms 51.347ms 51.383ms 0.47% -0.123 0.175 0.19% 0.007ms 1 200
trace_buffer/2_senders/1us_delay throughput 35030.738op/s 35201.343op/s ± 66.950op/s 35194.401op/s ± 38.550op/s 35232.459op/s 35315.159op/s 35351.793op/s 35396.694op/s 0.57% 0.136 0.181 0.19% 4.734op/s 1 200
trace_buffer/2_senders/no_delay execution_time 1.556ms 1.655ms ± 0.041ms 1.656ms ± 0.029ms 1.684ms 1.717ms 1.743ms 1.768ms 6.81% -0.035 -0.362 2.49% 0.003ms 1 200
trace_buffer/2_senders/no_delay throughput 1017940.324op/s 1088299.641op/s ± 27282.650op/s 1087225.639op/s ± 18915.541op/s 1106970.658op/s 1135133.465op/s 1151958.658op/s 1157092.824op/s 6.43% 0.157 -0.353 2.50% 1929.175op/s 1 200
trace_buffer/4_senders/10us_delay execution_time 60.140ms 60.212ms ± 0.064ms 60.197ms ± 0.024ms 60.226ms 60.303ms 60.411ms 60.695ms 0.83% 3.219 17.574 0.11% 0.005ms 1 200
trace_buffer/4_senders/10us_delay throughput 59313.161op/s 59788.664op/s ± 63.578op/s 59803.786op/s ± 23.826op/s 59826.643op/s 59848.338op/s 59855.685op/s 59860.484op/s 0.09% -3.190 17.280 0.11% 4.496op/s 1 200
trace_buffer/4_senders/1us_delay execution_time 51.179ms 51.368ms ± 0.106ms 51.352ms ± 0.063ms 51.416ms 51.563ms 51.694ms 51.812ms 0.90% 1.222 1.865 0.21% 0.008ms 1 200
trace_buffer/4_senders/1us_delay throughput 69482.587op/s 70082.507op/s ± 144.480op/s 70104.578op/s ± 85.672op/s 70189.248op/s 70261.865op/s 70301.022op/s 70341.323op/s 0.34% -1.207 1.813 0.21% 10.216op/s 1 200
trace_buffer/4_senders/no_delay execution_time 3.502ms 3.601ms ± 0.031ms 3.601ms ± 0.020ms 3.621ms 3.653ms 3.668ms 3.680ms 2.19% -0.197 0.073 0.87% 0.002ms 1 200
trace_buffer/4_senders/no_delay throughput 978265.176op/s 999932.460op/s ± 8762.758op/s 999737.541op/s ± 5589.379op/s 1005318.512op/s 1015221.746op/s 1020953.262op/s 1028016.358op/s 2.83% 0.251 0.119 0.87% 619.621op/s 1 200
trace_buffer/8_senders/10us_delay execution_time 60.236ms 60.322ms ± 0.064ms 60.308ms ± 0.027ms 60.339ms 60.450ms 60.517ms 60.776ms 0.78% 2.634 12.659 0.11% 0.004ms 1 200
trace_buffer/8_senders/10us_delay throughput 118466.906op/s 119358.636op/s ± 125.430op/s 119387.830op/s ± 53.574op/s 119435.956op/s 119483.878op/s 119516.659op/s 119530.262op/s 0.12% -2.610 12.427 0.10% 8.869op/s 1 200
trace_buffer/8_senders/1us_delay execution_time 51.503ms 51.836ms ± 0.198ms 51.808ms ± 0.123ms 51.946ms 52.213ms 52.314ms 52.552ms 1.44% 0.788 0.289 0.38% 0.014ms 1 200
trace_buffer/8_senders/1us_delay throughput 137006.613op/s 138901.551op/s ± 529.625op/s 138973.572op/s ± 331.963op/s 139298.671op/s 139665.231op/s 139779.734op/s 139798.575op/s 0.59% -0.769 0.245 0.38% 37.450op/s 1 200
trace_buffer/8_senders/no_delay execution_time 6.636ms 6.976ms ± 0.086ms 6.984ms ± 0.045ms 7.027ms 7.094ms 7.120ms 7.142ms 2.27% -1.379 3.221 1.23% 0.006ms 1 200
trace_buffer/8_senders/no_delay throughput 1008119.916op/s 1032232.267op/s ± 12936.672op/s 1030962.858op/s ± 6614.994op/s 1037728.138op/s 1054343.333op/s 1077882.516op/s 1085046.797op/s 5.25% 1.503 3.654 1.25% 914.761op/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 [60.073ms; 60.082ms] or [-0.008%; +0.008%] None None None
trace_buffer/1_senders/10us_delay throughput [14979.519op/s; 14981.772op/s] or [-0.008%; +0.008%] None None None
trace_buffer/1_senders/1us_delay execution_time [50.416ms; 50.476ms] or [-0.059%; +0.059%] None None None
trace_buffer/1_senders/1us_delay throughput [17830.548op/s; 17851.638op/s] or [-0.059%; +0.059%] None None None
trace_buffer/1_senders/no_delay execution_time [357.391µs; 358.452µs] or [-0.148%; +0.148%] None None None
trace_buffer/1_senders/no_delay throughput [2511133.713op/s; 2518464.424op/s] or [-0.146%; +0.146%] None None None
trace_buffer/2_senders/10us_delay execution_time [60.127ms; 60.139ms] or [-0.010%; +0.010%] None None None
trace_buffer/2_senders/10us_delay throughput [29930.826op/s; 29936.535op/s] or [-0.010%; +0.010%] None None None
trace_buffer/2_senders/1us_delay execution_time [51.121ms; 51.148ms] or [-0.026%; +0.026%] None None None
trace_buffer/2_senders/1us_delay throughput [35192.064op/s; 35210.621op/s] or [-0.026%; +0.026%] None None None
trace_buffer/2_senders/no_delay execution_time [1.649ms; 1.661ms] or [-0.347%; +0.347%] None None None
trace_buffer/2_senders/no_delay throughput [1084518.529op/s; 1092080.754op/s] or [-0.347%; +0.347%] None None None
trace_buffer/4_senders/10us_delay execution_time [60.203ms; 60.221ms] or [-0.015%; +0.015%] None None None
trace_buffer/4_senders/10us_delay throughput [59779.853op/s; 59797.476op/s] or [-0.015%; +0.015%] None None None
trace_buffer/4_senders/1us_delay execution_time [51.354ms; 51.383ms] or [-0.029%; +0.029%] None None None
trace_buffer/4_senders/1us_delay throughput [70062.483op/s; 70102.531op/s] or [-0.029%; +0.029%] None None None
trace_buffer/4_senders/no_delay execution_time [3.596ms; 3.605ms] or [-0.121%; +0.121%] None None None
trace_buffer/4_senders/no_delay throughput [998718.026op/s; 1001146.894op/s] or [-0.121%; +0.121%] None None None
trace_buffer/8_senders/10us_delay execution_time [60.314ms; 60.331ms] or [-0.015%; +0.015%] None None None
trace_buffer/8_senders/10us_delay throughput [119341.253op/s; 119376.020op/s] or [-0.015%; +0.015%] None None None
trace_buffer/8_senders/1us_delay execution_time [51.809ms; 51.863ms] or [-0.053%; +0.053%] None None None
trace_buffer/8_senders/1us_delay throughput [138828.150op/s; 138974.952op/s] or [-0.053%; +0.053%] None None None
trace_buffer/8_senders/no_delay execution_time [6.964ms; 6.988ms] or [-0.171%; +0.171%] None None None
trace_buffer/8_senders/no_delay throughput [1030439.369op/s; 1034025.166op/s] or [-0.174%; +0.174%] None None None

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz ca5e3de 1784812061 vianney/configure-restart-after-fork
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
two way interface execution_time 15.569µs 15.832µs ± 0.192µs 15.773µs ± 0.074µs 15.889µs 16.216µs 16.570µs 16.940µs 7.40% 2.405 8.154 1.21% 0.014µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
two way interface execution_time [15.806µs; 15.859µs] or [-0.168%; +0.168%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz ca5e3de 1784812061 vianney/configure-restart-after-fork
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
concentrator/add_spans_to_concentrator execution_time 8.562ms 8.589ms ± 0.017ms 8.587ms ± 0.012ms 8.599ms 8.620ms 8.633ms 8.656ms 0.81% 0.756 0.360 0.20% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
concentrator/add_spans_to_concentrator execution_time [8.586ms; 8.591ms] or [-0.028%; +0.028%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz ca5e3de 1784812061 vianney/configure-restart-after-fork
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
write only interface execution_time 1.051µs 1.067µs ± 0.005µs 1.067µs ± 0.002µs 1.069µs 1.076µs 1.077µs 1.079µs 1.10% -0.337 0.324 0.48% 0.000µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
write only interface execution_time [1.066µs; 1.067µs] or [-0.067%; +0.067%] None None None

Baseline

Baseline benchmark details

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz 919c275 1784808097 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 59.982ms 60.085ms ± 0.037ms 60.073ms ± 0.012ms 60.098ms 60.178ms 60.207ms 60.248ms 0.29% 1.772 3.974 0.06% 0.003ms 1 200
trace_buffer/1_senders/10us_delay throughput 14938.376op/s 14978.838op/s ± 9.277op/s 14981.830op/s ± 3.084op/s 14984.096op/s 14988.611op/s 14990.222op/s 15004.487op/s 0.15% -1.767 3.956 0.06% 0.656op/s 1 200
trace_buffer/1_senders/1us_delay execution_time 50.107ms 50.423ms ± 0.136ms 50.408ms ± 0.077ms 50.494ms 50.658ms 50.787ms 50.870ms 0.91% 0.515 0.586 0.27% 0.010ms 1 200
trace_buffer/1_senders/1us_delay throughput 17692.298op/s 17849.236op/s ± 48.085op/s 17854.153op/s ± 27.227op/s 17878.459op/s 17918.518op/s 17958.837op/s 17961.621op/s 0.60% -0.497 0.560 0.27% 3.400op/s 1 200
trace_buffer/1_senders/no_delay execution_time 353.067µs 360.394µs ± 5.684µs 359.516µs ± 1.430µs 361.019µs 367.669µs 375.476µs 420.591µs 16.99% 6.485 62.266 1.57% 0.402µs 1 200
trace_buffer/1_senders/no_delay throughput 2139843.736op/s 2497829.374op/s ± 35997.752op/s 2503362.720op/s ± 9983.583op/s 2513323.018op/s 2534044.615op/s 2543070.597op/s 2549092.420op/s 1.83% -5.535 48.521 1.44% 2545.425op/s 1 200
trace_buffer/2_senders/10us_delay execution_time 59.988ms 60.127ms ± 0.041ms 60.120ms ± 0.022ms 60.145ms 60.209ms 60.265ms 60.279ms 0.26% 0.998 2.286 0.07% 0.003ms 1 200
trace_buffer/2_senders/10us_delay throughput 29861.071op/s 29936.458op/s ± 20.588op/s 29939.874op/s ± 11.068op/s 29950.331op/s 29959.715op/s 29965.855op/s 30006.060op/s 0.22% -0.991 2.277 0.07% 1.456op/s 1 200
trace_buffer/2_senders/1us_delay execution_time 50.972ms 51.207ms ± 0.071ms 51.209ms ± 0.052ms 51.261ms 51.323ms 51.368ms 51.379ms 0.33% -0.128 0.076 0.14% 0.005ms 1 200
trace_buffer/2_senders/1us_delay throughput 35033.583op/s 35151.830op/s ± 48.599op/s 35150.103op/s ± 35.408op/s 35185.105op/s 35229.538op/s 35269.903op/s 35313.399op/s 0.46% 0.137 0.083 0.14% 3.436op/s 1 200
trace_buffer/2_senders/no_delay execution_time 1.561ms 1.654ms ± 0.032ms 1.655ms ± 0.022ms 1.676ms 1.705ms 1.722ms 1.743ms 5.35% -0.026 -0.125 1.92% 0.002ms 1 200
trace_buffer/2_senders/no_delay throughput 1032439.725op/s 1088577.074op/s ± 21039.149op/s 1087644.302op/s ± 14719.441op/s 1103160.757op/s 1120772.598op/s 1131607.229op/s 1153280.939op/s 6.03% 0.135 -0.082 1.93% 1487.693op/s 1 200
trace_buffer/4_senders/10us_delay execution_time 60.117ms 60.189ms ± 0.043ms 60.182ms ± 0.021ms 60.204ms 60.276ms 60.342ms 60.365ms 0.30% 1.817 4.128 0.07% 0.003ms 1 200
trace_buffer/4_senders/10us_delay throughput 59637.271op/s 59811.330op/s ± 42.674op/s 59818.957op/s ± 20.748op/s 59839.319op/s 59857.467op/s 59867.645op/s 59883.425op/s 0.11% -1.811 4.103 0.07% 3.017op/s 1 200
trace_buffer/4_senders/1us_delay execution_time 51.168ms 51.368ms ± 0.120ms 51.343ms ± 0.057ms 51.405ms 51.600ms 51.769ms 51.855ms 1.00% 1.501 2.740 0.23% 0.008ms 1 200
trace_buffer/4_senders/1us_delay throughput 69423.943op/s 70082.570op/s ± 162.758op/s 70116.384op/s ± 77.303op/s 70190.210op/s 70275.321op/s 70327.786op/s 70356.704op/s 0.34% -1.484 2.673 0.23% 11.509op/s 1 200
trace_buffer/4_senders/no_delay execution_time 3.484ms 3.581ms ± 0.034ms 3.582ms ± 0.023ms 3.602ms 3.634ms 3.650ms 3.659ms 2.15% -0.198 -0.037 0.95% 0.002ms 1 200
trace_buffer/4_senders/no_delay throughput 983888.068op/s 1005412.300op/s ± 9611.285op/s 1005083.240op/s ± 6323.005op/s 1011710.383op/s 1021736.741op/s 1031035.379op/s 1033193.464op/s 2.80% 0.253 0.024 0.95% 679.621op/s 1 200
trace_buffer/8_senders/10us_delay execution_time 60.212ms 60.341ms ± 0.069ms 60.328ms ± 0.040ms 60.372ms 60.473ms 60.574ms 60.584ms 0.42% 1.265 1.510 0.11% 0.005ms 1 200
trace_buffer/8_senders/10us_delay throughput 118842.298op/s 119321.552op/s ± 136.633op/s 119346.959op/s ± 79.403op/s 119425.474op/s 119472.872op/s 119494.381op/s 119577.298op/s 0.19% -1.259 1.488 0.11% 9.661op/s 1 200
trace_buffer/8_senders/1us_delay execution_time 51.369ms 51.738ms ± 0.186ms 51.709ms ± 0.106ms 51.823ms 52.098ms 52.350ms 52.388ms 1.31% 1.055 1.333 0.36% 0.013ms 1 200
trace_buffer/8_senders/1us_delay throughput 137436.298op/s 139164.716op/s ± 499.075op/s 139241.972op/s ± 285.258op/s 139496.638op/s 139787.453op/s 139988.187op/s 140163.031op/s 0.66% -1.031 1.268 0.36% 35.290op/s 1 200
trace_buffer/8_senders/no_delay execution_time 7.132ms 7.252ms ± 0.050ms 7.250ms ± 0.032ms 7.282ms 7.341ms 7.390ms 7.394ms 1.98% 0.297 0.231 0.69% 0.004ms 1 200
trace_buffer/8_senders/no_delay throughput 973779.236op/s 992867.005op/s ± 6849.823op/s 993036.387op/s ± 4420.106op/s 997478.964op/s 1004092.573op/s 1006471.437op/s 1009494.718op/s 1.66% -0.253 0.189 0.69% 484.356op/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 [60.080ms; 60.090ms] or [-0.009%; +0.009%] None None None
trace_buffer/1_senders/10us_delay throughput [14977.553op/s; 14980.124op/s] or [-0.009%; +0.009%] None None None
trace_buffer/1_senders/1us_delay execution_time [50.404ms; 50.442ms] or [-0.037%; +0.037%] None None None
trace_buffer/1_senders/1us_delay throughput [17842.572op/s; 17855.900op/s] or [-0.037%; +0.037%] None None None
trace_buffer/1_senders/no_delay execution_time [359.606µs; 361.182µs] or [-0.219%; +0.219%] None None None
trace_buffer/1_senders/no_delay throughput [2492840.432op/s; 2502818.316op/s] or [-0.200%; +0.200%] None None None
trace_buffer/2_senders/10us_delay execution_time [60.122ms; 60.133ms] or [-0.010%; +0.010%] None None None
trace_buffer/2_senders/10us_delay throughput [29933.604op/s; 29939.311op/s] or [-0.010%; +0.010%] None None None
trace_buffer/2_senders/1us_delay execution_time [51.197ms; 51.216ms] or [-0.019%; +0.019%] None None None
trace_buffer/2_senders/1us_delay throughput [35145.095op/s; 35158.566op/s] or [-0.019%; +0.019%] None None None
trace_buffer/2_senders/no_delay execution_time [1.650ms; 1.659ms] or [-0.267%; +0.267%] None None None
trace_buffer/2_senders/no_delay throughput [1085661.251op/s; 1091492.898op/s] or [-0.268%; +0.268%] None None None
trace_buffer/4_senders/10us_delay execution_time [60.183ms; 60.195ms] or [-0.010%; +0.010%] None None None
trace_buffer/4_senders/10us_delay throughput [59805.415op/s; 59817.244op/s] or [-0.010%; +0.010%] None None None
trace_buffer/4_senders/1us_delay execution_time [51.352ms; 51.385ms] or [-0.032%; +0.032%] None None None
trace_buffer/4_senders/1us_delay throughput [70060.013op/s; 70105.127op/s] or [-0.032%; +0.032%] None None None
trace_buffer/4_senders/no_delay execution_time [3.576ms; 3.586ms] or [-0.132%; +0.132%] None None None
trace_buffer/4_senders/no_delay throughput [1004080.268op/s; 1006744.332op/s] or [-0.132%; +0.132%] None None None
trace_buffer/8_senders/10us_delay execution_time [60.332ms; 60.351ms] or [-0.016%; +0.016%] None None None
trace_buffer/8_senders/10us_delay throughput [119302.616op/s; 119340.488op/s] or [-0.016%; +0.016%] None None None
trace_buffer/8_senders/1us_delay execution_time [51.712ms; 51.764ms] or [-0.050%; +0.050%] None None None
trace_buffer/8_senders/1us_delay throughput [139095.549op/s; 139233.883op/s] or [-0.050%; +0.050%] None None None
trace_buffer/8_senders/no_delay execution_time [7.245ms; 7.259ms] or [-0.096%; +0.096%] None None None
trace_buffer/8_senders/no_delay throughput [991917.685op/s; 993816.324op/s] or [-0.096%; +0.096%] None None None

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 919c275 1784808097 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
two way interface execution_time 15.299µs 15.599µs ± 0.190µs 15.564µs ± 0.090µs 15.683µs 15.873µs 16.042µs 17.215µs 10.60% 3.327 24.545 1.22% 0.013µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
two way interface execution_time [15.572µs; 15.625µs] or [-0.169%; +0.169%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 919c275 1784808097 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
concentrator/add_spans_to_concentrator execution_time 8.577ms 8.608ms ± 0.018ms 8.604ms ± 0.011ms 8.616ms 8.640ms 8.655ms 8.679ms 0.87% 0.998 1.014 0.21% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
concentrator/add_spans_to_concentrator execution_time [8.605ms; 8.610ms] or [-0.029%; +0.029%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 919c275 1784808097 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
write only interface execution_time 1.076µs 1.095µs ± 0.007µs 1.095µs ± 0.005µs 1.100µs 1.106µs 1.109µs 1.111µs 1.52% -0.078 -0.300 0.63% 0.000µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
write only interface execution_time [1.094µs; 1.096µs] or [-0.087%; +0.087%] None None None

@dd-octo-sts

dd-octo-sts Bot commented Jul 22, 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.so 8.13 MB 8.13 MB 0% (0 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 88.18 MB 88.18 MB +0% (+6.12 KB) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 99.46 MB 99.46 MB +0% (+2.45 KB) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.93 MB 10.93 MB +0% (+992 B) 👌
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 26.59 MB 26.59 MB +0% (+1.00 KB) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 89.18 KB 89.18 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 191.30 MB 191.29 MB -0% (-8.00 KB) 👌
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 1.04 GB 1.04 GB +0% (+9.87 KB) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 8.66 MB 8.66 MB +.01% (+1.00 KB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 89.18 KB 89.18 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 25.36 MB 25.36 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 50.55 MB 50.56 MB +.01% (+8.69 KB) 🔍
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 23.16 MB 23.16 MB +0% (+1.50 KB) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 90.58 KB 90.58 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 195.94 MB 195.94 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 1.03 GB 1.03 GB +0% (+10.27 KB) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.68 MB 6.68 MB +.02% (+1.50 KB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 90.58 KB 90.58 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 27.26 MB 27.26 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 48.13 MB 48.14 MB +.01% (+9.13 KB) 🔍
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 78.64 MB 78.64 MB +0% (+4.59 KB) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 9.05 MB 9.06 MB +.04% (+4.00 KB) 🔍
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 94.14 MB 94.14 MB +0% (+3.02 KB) 👌
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.02 MB 11.02 MB +.04% (+4.73 KB) 🔍

@VianneyRuhlmann
VianneyRuhlmann requested review from a team as code owners July 23, 2026 12:51
@VianneyRuhlmann
VianneyRuhlmann requested review from mabdinur and removed request for a team July 23, 2026 12:51
@github-actions

Copy link
Copy Markdown
Contributor

Clippy Allow Annotation Report

Tracked Clippy allow annotations changed vs main: ✅ -2 (4 → 2)

Rule Base PR Δ
unwrap_used 4 2 ✅ -2
By file and crate

By file

File Base PR Δ
libdd-data-pipeline/src/otlp/metrics.rs 1 0 ✅ -1
libdd-trace-stats/src/stats_exporter.rs 1 0 ✅ -1

By crate

Crate Base PR Δ
libdd-data-pipeline 5 4 ✅ -1
libdd-trace-stats 1 0 ✅ -1

About This Report

This report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality. Panic-inducing macros in particular should be avoided. In the future, this report may become a PR-blocking quality gate.

@VianneyRuhlmann VianneyRuhlmann changed the title feat!: expose restart_after_fork option feat(trace_exporter)!: add restart_after_fork configuration option [APMSP-3843] Jul 23, 2026
let _ = self
.concentrator
.lock_or_panic()
.flush(SystemTime::now(), true);

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.

Should the child flush the concentrator though? I would expect to leave the original concentrator entirely to the parent, and just re-initialize it here to something new.

@yannham

yannham commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Oh, and I forget: how do we make sure we clean this once dd-trace-py doesn't need it anymore? Should we have KTLO ticket or sth?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants