Skip to content

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

Merged
gh-worker-dd-mergequeue-cf854d[bot] merged 4 commits into
mainfrom
vianney/configure-restart-after-fork
Jul 27, 2026
Merged

feat(trace_exporter)!: add restart_after_fork configuration option [APMSP-3843]#2263
gh-worker-dd-mergequeue-cf854d[bot] merged 4 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
@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: 60.00%
Overall Coverage: 74.60% (-0.06%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 898bb80 | 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 Outdated
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-27 10:12:38

Comparing candidate commit 898bb80 in PR branch vianney/configure-restart-after-fork with baseline commit be0b543 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-27 10:09:19

Comparing candidate commit 898bb80 in PR branch vianney/configure-restart-after-fork with baseline commit be0b543 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 8259CL CPU @ 2.50GHz 898bb80 1785145369 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 56.297ms 56.533ms ± 0.149ms 56.516ms ± 0.072ms 56.589ms 56.783ms 57.031ms 57.444ms 1.64% 2.029 7.855 0.26% 0.011ms 1 200
trace_buffer/1_senders/10us_delay throughput 15667.548op/s 15919.905op/s ± 41.675op/s 15924.798op/s ± 20.415op/s 15944.256op/s 15970.948op/s 15977.293op/s 15986.647op/s 0.39% -1.984 7.553 0.26% 2.947op/s 1 200
trace_buffer/1_senders/1us_delay execution_time 50.026ms 50.082ms ± 0.028ms 50.081ms ± 0.011ms 50.090ms 50.135ms 50.185ms 50.192ms 0.22% 1.034 2.657 0.06% 0.002ms 1 200
trace_buffer/1_senders/1us_delay throughput 17931.321op/s 17970.699op/s ± 9.966op/s 17970.941op/s ± 4.100op/s 17975.743op/s 17986.839op/s 17989.802op/s 17990.689op/s 0.11% -1.028 2.640 0.06% 0.705op/s 1 200
trace_buffer/1_senders/no_delay execution_time 330.805µs 339.973µs ± 3.279µs 340.219µs ± 2.105µs 341.919µs 343.934µs 349.695µs 355.959µs 4.63% 0.765 3.167 0.96% 0.232µs 1 200
trace_buffer/1_senders/no_delay throughput 2528381.265op/s 2647514.174op/s ± 25361.292op/s 2645355.528op/s ± 16356.827op/s 2665152.725op/s 2684044.523op/s 2695879.106op/s 2720632.345op/s 2.85% -0.638 2.694 0.96% 1793.314op/s 1 200
trace_buffer/2_senders/10us_delay execution_time 56.697ms 57.102ms ± 0.159ms 57.094ms ± 0.100ms 57.187ms 57.388ms 57.513ms 57.571ms 0.84% 0.393 0.100 0.28% 0.011ms 1 200
trace_buffer/2_senders/10us_delay throughput 31265.729op/s 31522.883op/s ± 87.518op/s 31526.835op/s ± 55.303op/s 31581.597op/s 31655.409op/s 31679.444op/s 31747.795op/s 0.70% -0.377 0.084 0.28% 6.188op/s 1 200
trace_buffer/2_senders/1us_delay execution_time 50.063ms 50.119ms ± 0.036ms 50.113ms ± 0.017ms 50.130ms 50.190ms 50.237ms 50.249ms 0.27% 1.244 1.494 0.07% 0.003ms 1 200
trace_buffer/2_senders/1us_delay throughput 35821.730op/s 35914.377op/s ± 25.946op/s 35918.602op/s ± 12.466op/s 35932.781op/s 35944.870op/s 35948.633op/s 35954.393op/s 0.10% -1.239 1.481 0.07% 1.835op/s 1 200
trace_buffer/2_senders/no_delay execution_time 849.039µs 903.357µs ± 18.310µs 905.467µs ± 12.302µs 917.047µs 929.444µs 937.021µs 968.272µs 6.94% -0.260 0.258 2.02% 1.295µs 1 200
trace_buffer/2_senders/no_delay throughput 1858981.667op/s 1993387.953op/s ± 40670.822op/s 1987924.043op/s ± 26836.187op/s 2023226.010op/s 2064363.849op/s 2099316.075op/s 2120043.817op/s 6.65% 0.390 0.240 2.04% 2875.861op/s 1 200
trace_buffer/4_senders/10us_delay execution_time 57.127ms 57.449ms ± 0.156ms 57.431ms ± 0.094ms 57.538ms 57.723ms 57.839ms 57.936ms 0.88% 0.498 0.249 0.27% 0.011ms 1 200
trace_buffer/4_senders/10us_delay throughput 62137.317op/s 62664.467op/s ± 169.575op/s 62684.221op/s ± 102.684op/s 62782.481op/s 62911.449op/s 62989.204op/s 63017.130op/s 0.53% -0.482 0.224 0.27% 11.991op/s 1 200
trace_buffer/4_senders/1us_delay execution_time 50.114ms 50.170ms ± 0.038ms 50.162ms ± 0.016ms 50.180ms 50.252ms 50.284ms 50.364ms 0.40% 1.745 4.151 0.07% 0.003ms 1 200
trace_buffer/4_senders/1us_delay throughput 71479.685op/s 71756.077op/s ± 53.809op/s 71767.456op/s ± 22.840op/s 71788.398op/s 71815.908op/s 71827.923op/s 71835.611op/s 0.09% -1.738 4.113 0.07% 3.805op/s 1 200
trace_buffer/4_senders/no_delay execution_time 2.235ms 2.446ms ± 0.058ms 2.449ms ± 0.042ms 2.488ms 2.536ms 2.553ms 2.599ms 6.12% -0.351 0.016 2.38% 0.004ms 1 200
trace_buffer/4_senders/no_delay throughput 1385398.896op/s 1472919.989op/s ± 35450.116op/s 1470120.363op/s ± 24732.385op/s 1496094.565op/s 1533863.662op/s 1552002.500op/s 1610490.171op/s 9.55% 0.491 0.276 2.40% 2506.702op/s 1 200
trace_buffer/8_senders/10us_delay execution_time 57.655ms 57.980ms ± 0.216ms 57.908ms ± 0.112ms 58.151ms 58.398ms 58.487ms 58.539ms 1.09% 0.791 -0.463 0.37% 0.015ms 1 200
trace_buffer/8_senders/10us_delay throughput 122994.330op/s 124181.796op/s ± 460.571op/s 124336.114op/s ± 241.217op/s 124539.396op/s 124705.422op/s 124814.231op/s 124879.998op/s 0.44% -0.780 -0.481 0.37% 32.567op/s 1 200
trace_buffer/8_senders/1us_delay execution_time 50.215ms 50.292ms ± 0.062ms 50.276ms ± 0.028ms 50.310ms 50.411ms 50.504ms 50.532ms 0.51% 1.695 3.070 0.12% 0.004ms 1 200
trace_buffer/8_senders/1us_delay throughput 142485.121op/s 143162.895op/s ± 177.185op/s 143210.499op/s ± 79.973op/s 143273.139op/s 143345.823op/s 143371.840op/s 143383.037op/s 0.12% -1.686 3.036 0.12% 12.529op/s 1 200
trace_buffer/8_senders/no_delay execution_time 5.666ms 6.492ms ± 0.194ms 6.527ms ± 0.112ms 6.638ms 6.722ms 6.796ms 6.806ms 4.27% -1.273 2.075 2.98% 0.014ms 1 200
trace_buffer/8_senders/no_delay throughput 1057928.802op/s 1110001.663op/s ± 34537.748op/s 1103122.238op/s ± 18854.478op/s 1122697.384op/s 1175736.756op/s 1228475.886op/s 1270721.138op/s 15.19% 1.513 3.106 3.10% 2442.188op/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.513ms; 56.554ms] or [-0.036%; +0.036%] None None None
trace_buffer/1_senders/10us_delay throughput [15914.130op/s; 15925.681op/s] or [-0.036%; +0.036%] None None None
trace_buffer/1_senders/1us_delay execution_time [50.078ms; 50.085ms] or [-0.008%; +0.008%] None None None
trace_buffer/1_senders/1us_delay throughput [17969.318op/s; 17972.080op/s] or [-0.008%; +0.008%] None None None
trace_buffer/1_senders/no_delay execution_time [339.518µs; 340.427µs] or [-0.134%; +0.134%] None None None
trace_buffer/1_senders/no_delay throughput [2643999.342op/s; 2651029.005op/s] or [-0.133%; +0.133%] None None None
trace_buffer/2_senders/10us_delay execution_time [57.080ms; 57.124ms] or [-0.039%; +0.039%] None None None
trace_buffer/2_senders/10us_delay throughput [31510.754op/s; 31535.012op/s] or [-0.038%; +0.038%] None None None
trace_buffer/2_senders/1us_delay execution_time [50.114ms; 50.124ms] or [-0.010%; +0.010%] None None None
trace_buffer/2_senders/1us_delay throughput [35910.781op/s; 35917.973op/s] or [-0.010%; +0.010%] None None None
trace_buffer/2_senders/no_delay execution_time [900.819µs; 905.894µs] or [-0.281%; +0.281%] None None None
trace_buffer/2_senders/no_delay throughput [1987751.369op/s; 1999024.538op/s] or [-0.283%; +0.283%] None None None
trace_buffer/4_senders/10us_delay execution_time [57.428ms; 57.471ms] or [-0.038%; +0.038%] None None None
trace_buffer/4_senders/10us_delay throughput [62640.965op/s; 62687.968op/s] or [-0.038%; +0.038%] None None None
trace_buffer/4_senders/1us_delay execution_time [50.165ms; 50.175ms] or [-0.010%; +0.010%] None None None
trace_buffer/4_senders/1us_delay throughput [71748.620op/s; 71763.534op/s] or [-0.010%; +0.010%] None None None
trace_buffer/4_senders/no_delay execution_time [2.437ms; 2.454ms] or [-0.330%; +0.330%] None None None
trace_buffer/4_senders/no_delay throughput [1468006.944op/s; 1477833.034op/s] or [-0.334%; +0.334%] None None None
trace_buffer/8_senders/10us_delay execution_time [57.950ms; 58.010ms] or [-0.052%; +0.052%] None None None
trace_buffer/8_senders/10us_delay throughput [124117.966op/s; 124245.627op/s] or [-0.051%; +0.051%] None None None
trace_buffer/8_senders/1us_delay execution_time [50.284ms; 50.301ms] or [-0.017%; +0.017%] None None None
trace_buffer/8_senders/1us_delay throughput [143138.339op/s; 143187.451op/s] or [-0.017%; +0.017%] None None None
trace_buffer/8_senders/no_delay execution_time [6.466ms; 6.519ms] or [-0.413%; +0.413%] None None None
trace_buffer/8_senders/no_delay throughput [1105215.064op/s; 1114788.263op/s] or [-0.431%; +0.431%] None None None

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 898bb80 1785145369 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.068µs 1.088µs ± 0.007µs 1.091µs ± 0.002µs 1.093µs 1.094µs 1.099µs 1.101µs 0.89% -1.075 -0.077 0.67% 0.001µ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.087µs; 1.089µs] or [-0.094%; +0.094%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 898bb80 1785145369 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.434µs 15.736µs ± 0.193µs 15.695µs ± 0.097µs 15.808µs 16.111µs 16.246µs 16.770µs 6.85% 1.519 3.984 1.23% 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.709µs; 15.763µs] or [-0.170%; +0.170%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 898bb80 1785145369 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.568ms 8.596ms ± 0.016ms 8.593ms ± 0.010ms 8.605ms 8.626ms 8.648ms 8.656ms 0.73% 1.045 1.257 0.19% 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.594ms; 8.598ms] or [-0.026%; +0.026%] 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 be0b543 1784918029 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.288ms 56.509ms ± 0.120ms 56.485ms ± 0.067ms 56.559ms 56.710ms 56.872ms 57.270ms 1.39% 1.882 7.880 0.21% 0.009ms 1 200
trace_buffer/1_senders/10us_delay throughput 15715.077op/s 15926.714op/s ± 33.769op/s 15933.555op/s ± 19.030op/s 15951.666op/s 15970.969op/s 15977.384op/s 15989.212op/s 0.35% -1.842 7.591 0.21% 2.388op/s 1 200
trace_buffer/1_senders/1us_delay execution_time 50.023ms 50.078ms ± 0.032ms 50.079ms ± 0.013ms 50.088ms 50.137ms 50.193ms 50.210ms 0.26% 0.949 2.133 0.06% 0.002ms 1 200
trace_buffer/1_senders/1us_delay throughput 17924.739op/s 17971.929op/s ± 11.440op/s 17971.672op/s ± 4.721op/s 17978.127op/s 17988.753op/s 17990.069op/s 17991.745op/s 0.11% -0.943 2.113 0.06% 0.809op/s 1 200
trace_buffer/1_senders/no_delay execution_time 336.473µs 343.835µs ± 4.258µs 343.780µs ± 1.424µs 344.914µs 347.865µs 353.060µs 388.428µs 12.99% 6.096 59.818 1.24% 0.301µs 1 200
trace_buffer/1_senders/no_delay throughput 2317031.100op/s 2617910.735op/s ± 30303.247op/s 2617954.546op/s ± 10887.948op/s 2630019.754op/s 2657757.966op/s 2662013.394op/s 2674807.048op/s 2.17% -5.243 48.446 1.15% 2142.763op/s 1 200
trace_buffer/2_senders/10us_delay execution_time 56.567ms 57.003ms ± 0.277ms 56.921ms ± 0.157ms 57.148ms 57.557ms 57.661ms 57.811ms 1.56% 0.856 -0.049 0.48% 0.020ms 1 200
trace_buffer/2_senders/10us_delay throughput 31135.976op/s 31578.267op/s ± 152.700op/s 31622.769op/s ± 87.141op/s 31690.608op/s 31769.365op/s 31789.163op/s 31820.748op/s 0.63% -0.838 -0.083 0.48% 10.798op/s 1 200
trace_buffer/2_senders/1us_delay execution_time 50.056ms 50.112ms ± 0.034ms 50.104ms ± 0.018ms 50.130ms 50.181ms 50.204ms 50.217ms 0.23% 0.978 0.556 0.07% 0.002ms 1 200
trace_buffer/2_senders/1us_delay throughput 35844.274op/s 35919.715op/s ± 24.179op/s 35925.538op/s ± 13.086op/s 35936.826op/s 35950.327op/s 35957.858op/s 35959.433op/s 0.09% -0.974 0.549 0.07% 1.710op/s 1 200
trace_buffer/2_senders/no_delay execution_time 848.601µs 905.428µs ± 16.925µs 906.684µs ± 9.925µs 916.207µs 931.664µs 942.521µs 947.978µs 4.55% -0.392 0.566 1.86% 1.197µs 1 200
trace_buffer/2_senders/no_delay throughput 1898778.353op/s 1988706.631op/s ± 37495.912op/s 1985256.668op/s ± 21727.582op/s 2007924.905op/s 2055799.742op/s 2087188.843op/s 2121137.647op/s 6.84% 0.529 0.742 1.88% 2651.361op/s 1 200
trace_buffer/4_senders/10us_delay execution_time 57.101ms 57.398ms ± 0.158ms 57.376ms ± 0.083ms 57.449ms 57.760ms 57.855ms 57.958ms 1.01% 1.026 1.196 0.27% 0.011ms 1 200
trace_buffer/4_senders/10us_delay throughput 62114.045op/s 62720.495op/s ± 172.200op/s 62744.015op/s ± 90.825op/s 62841.754op/s 62957.374op/s 62984.990op/s 63046.465op/s 0.48% -1.008 1.153 0.27% 12.176op/s 1 200
trace_buffer/4_senders/1us_delay execution_time 50.120ms 50.167ms ± 0.032ms 50.158ms ± 0.013ms 50.178ms 50.232ms 50.279ms 50.319ms 0.32% 1.703 3.648 0.06% 0.002ms 1 200
trace_buffer/4_senders/1us_delay throughput 71543.918op/s 71760.564op/s ± 46.275op/s 71773.621op/s ± 19.138op/s 71786.615op/s 71813.206op/s 71826.323op/s 71827.943op/s 0.08% -1.697 3.622 0.06% 3.272op/s 1 200
trace_buffer/4_senders/no_delay execution_time 2.094ms 2.365ms ± 0.092ms 2.372ms ± 0.055ms 2.425ms 2.505ms 2.542ms 2.552ms 7.59% -0.366 -0.110 3.88% 0.007ms 1 200
trace_buffer/4_senders/no_delay throughput 1410821.461op/s 1524333.630op/s ± 60461.431op/s 1517870.486op/s ± 35462.407op/s 1554392.951op/s 1639852.489op/s 1685802.375op/s 1718977.397op/s 13.25% 0.578 0.192 3.96% 4275.269op/s 1 200
trace_buffer/8_senders/10us_delay execution_time 57.639ms 57.947ms ± 0.239ms 57.851ms ± 0.096ms 58.082ms 58.405ms 58.590ms 58.965ms 1.93% 1.282 1.254 0.41% 0.017ms 1 200
trace_buffer/8_senders/10us_delay throughput 122105.709op/s 124252.534op/s ± 509.631op/s 124457.415op/s ± 207.587op/s 124606.115op/s 124777.348op/s 124876.365op/s 124916.495op/s 0.37% -1.262 1.165 0.41% 36.036op/s 1 200
trace_buffer/8_senders/1us_delay execution_time 50.212ms 50.297ms ± 0.057ms 50.279ms ± 0.033ms 50.328ms 50.403ms 50.444ms 50.540ms 0.52% 1.326 2.465 0.11% 0.004ms 1 200
trace_buffer/8_senders/1us_delay throughput 142460.447op/s 143149.123op/s ± 160.876op/s 143200.981op/s ± 93.933op/s 143257.416op/s 143335.774op/s 143378.975op/s 143391.372op/s 0.13% -1.316 2.424 0.11% 11.376op/s 1 200
trace_buffer/8_senders/no_delay execution_time 5.964ms 6.535ms ± 0.126ms 6.554ms ± 0.070ms 6.616ms 6.686ms 6.731ms 6.783ms 3.49% -1.512 3.890 1.92% 0.009ms 1 200
trace_buffer/8_senders/no_delay throughput 1061486.403op/s 1102253.869op/s ± 21941.135op/s 1098504.864op/s ± 11712.560op/s 1111169.116op/s 1137533.224op/s 1178598.029op/s 1207228.482op/s 9.90% 1.732 4.934 1.99% 1551.473op/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.492ms; 56.526ms] or [-0.030%; +0.030%] None None None
trace_buffer/1_senders/10us_delay throughput [15922.033op/s; 15931.394op/s] or [-0.029%; +0.029%] None None None
trace_buffer/1_senders/1us_delay execution_time [50.074ms; 50.083ms] or [-0.009%; +0.009%] None None None
trace_buffer/1_senders/1us_delay throughput [17970.343op/s; 17973.514op/s] or [-0.009%; +0.009%] None None None
trace_buffer/1_senders/no_delay execution_time [343.244µs; 344.425µs] or [-0.172%; +0.172%] None None None
trace_buffer/1_senders/no_delay throughput [2613710.997op/s; 2622110.474op/s] or [-0.160%; +0.160%] None None None
trace_buffer/2_senders/10us_delay execution_time [56.964ms; 57.041ms] or [-0.067%; +0.067%] None None None
trace_buffer/2_senders/10us_delay throughput [31557.105op/s; 31599.430op/s] or [-0.067%; +0.067%] None None None
trace_buffer/2_senders/1us_delay execution_time [50.107ms; 50.116ms] or [-0.009%; +0.009%] None None None
trace_buffer/2_senders/1us_delay throughput [35916.364op/s; 35923.066op/s] or [-0.009%; +0.009%] None None None
trace_buffer/2_senders/no_delay execution_time [903.083µs; 907.774µs] or [-0.259%; +0.259%] None None None
trace_buffer/2_senders/no_delay throughput [1983510.058op/s; 1993903.204op/s] or [-0.261%; +0.261%] None None None
trace_buffer/4_senders/10us_delay execution_time [57.376ms; 57.420ms] or [-0.038%; +0.038%] None None None
trace_buffer/4_senders/10us_delay throughput [62696.630op/s; 62744.361op/s] or [-0.038%; +0.038%] 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.151op/s; 71766.977op/s] or [-0.009%; +0.009%] None None None
trace_buffer/4_senders/no_delay execution_time [2.353ms; 2.378ms] or [-0.540%; +0.540%] None None None
trace_buffer/4_senders/no_delay throughput [1515954.257op/s; 1532713.003op/s] or [-0.550%; +0.550%] None None None
trace_buffer/8_senders/10us_delay execution_time [57.914ms; 57.981ms] or [-0.057%; +0.057%] None None None
trace_buffer/8_senders/10us_delay throughput [124181.904op/s; 124323.164op/s] or [-0.057%; +0.057%] None None None
trace_buffer/8_senders/1us_delay execution_time [50.289ms; 50.305ms] or [-0.016%; +0.016%] None None None
trace_buffer/8_senders/1us_delay throughput [143126.828op/s; 143171.419op/s] or [-0.016%; +0.016%] None None None
trace_buffer/8_senders/no_delay execution_time [6.517ms; 6.552ms] or [-0.267%; +0.267%] None None None
trace_buffer/8_senders/no_delay throughput [1099213.039op/s; 1105294.700op/s] or [-0.276%; +0.276%] None None None

Group 1

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz be0b543 1784918029 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.060µs 1.075µs ± 0.008µs 1.074µs ± 0.005µs 1.080µs 1.090µs 1.095µs 1.101µs 2.56% 0.624 0.295 0.74% 0.001µ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.074µs; 1.076µs] or [-0.102%; +0.102%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz be0b543 1784918029 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.349µs 15.706µs ± 0.168µs 15.674µs ± 0.102µs 15.790µs 16.032µs 16.127µs 16.344µs 4.28% 0.720 0.573 1.07% 0.012µ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.682µs; 15.729µs] or [-0.148%; +0.148%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz be0b543 1784918029 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.674ms 8.706ms ± 0.018ms 8.704ms ± 0.013ms 8.718ms 8.736ms 8.764ms 8.766ms 0.71% 0.749 0.486 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.703ms; 8.708ms] or [-0.029%; +0.029%] 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.a 88.18 MB 88.18 MB +0% (+6.13 KB) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 8.13 MB 8.13 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.93 MB 10.93 MB +0% (+992 B) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 99.46 MB 99.46 MB +0% (+2.46 KB) 👌
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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This effectively resets the concentrator state by force flushing, the buckets are dropped not sent. Re-initializing the concentrator from the stats exporter would require to store all the parameters required to create the concentrator. Since the concentrator config can be updated by the TraceExporter this also means we have to update these parameters and update the concentrator handle in the TraceExporter.

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

@gh-worker-devflow-routing-ef8351

gh-worker-devflow-routing-ef8351 Bot commented Jul 27, 2026

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-07-27 14:20:26 UTC ℹ️ Start processing command devflow:merge


2026-07-27 14:20:31 UTC ℹ️ MergeQueue: pull request added to the queue

The expected merge time in main is approximately 1h (p90).


2026-07-27 15:31:25 UTCMergeQueue: The checks failed on this merge request

Tests failed on this commit 27b6f10:

What to do next?

  • Investigate the failures and when ready, re-add your pull request to the queue!
  • If your PR checks are green, try to rebase/merge. It might be because the CI run is a bit old.
  • Any question, go check the FAQ.

@gh-worker-dd-mergequeue-cf854d
gh-worker-dd-mergequeue-cf854d Bot merged commit 3f4be28 into main Jul 27, 2026
175 checks passed
@gh-worker-dd-mergequeue-cf854d
gh-worker-dd-mergequeue-cf854d Bot deleted the vianney/configure-restart-after-fork branch July 27, 2026 16:25
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