Skip to content

chore(heap-profiling): remove free USDT when live-heap is not available [PROF-15190]#2225

Draft
scottgerring wants to merge 2 commits into
mainfrom
sgg/no-live-heap-no-probe
Draft

chore(heap-profiling): remove free USDT when live-heap is not available [PROF-15190]#2225
scottgerring wants to merge 2 commits into
mainfrom
sgg/no-live-heap-no-probe

Conversation

@scottgerring

Copy link
Copy Markdown
Member

What does this PR do?

When the user does not opt into the live-heap feature, we should not emit the free USDT. This lets an attached profiler know that live heap is not available, making its life easier (e.g., it knows not to track sampled allocations).

Motivation

What inspired you to submit this pull request?

Additional Notes

Anything else we should know when reviewing?

How to test the change?

Describe here in detail how the change can be validated.

@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

📚 Documentation Check Results

⚠️ 44 documentation warning(s) found

📦 libdd-profiling-heap-sampler - 44 warning(s)


Updated: 2026-07-10 15:33:23 UTC | Commit: 364bc66 | missing-docs job results

@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

🔒 Cargo Deny Results

No issues found!

📦 libdd-profiling-heap-sampler - ✅ No issues


Updated: 2026-07-10 15:35:11 UTC | Commit: 364bc66 | dependency-check job results

@datadog-datadog-prod-us1-2

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

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
Patch Coverage: 100.00%
Overall Coverage: 74.32% (-0.00%)

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

@scottgerring scottgerring marked this pull request as ready for review July 10, 2026 13:54
@scottgerring scottgerring requested a review from a team as a code owner July 10, 2026 13:54

@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: 8dc38196df

ℹ️ 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-profiling-heap-sampler/src/probes.c Outdated
Comment thread libdd-profiling-heap-sampler/include/datadog/heap/probes.h Outdated

Copilot AI 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.

Pull request overview

Adjusts the heap-sampler USDT probe emission so external profilers can detect whether “live-heap” correlation is supported by checking for the presence/absence of the ddheap:free USDT note.

Changes:

  • Gate ddheap:free USDT emission behind DD_HEAP_LIVE_TRACKING in dd_probe_free.
  • Stop calling dd_probe_free on the sampled-free slow path when live-heap tracking is disabled.
  • Document that the dd_probe_free symbol always exists, but the USDT note is only present with live-heap tracking enabled.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
libdd-profiling-heap-sampler/src/probes.c Conditionally emits the ddheap:free USDT based on DD_HEAP_LIVE_TRACKING.
libdd-profiling-heap-sampler/src/allocation_freed.c Skips firing the free probe when live-heap tracking is disabled.
libdd-profiling-heap-sampler/include/datadog/heap/probes.h Clarifies probe behavior and how external profilers can infer live-heap support.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread libdd-profiling-heap-sampler/src/probes.c
@pr-commenter

pr-commenter Bot commented Jul 10, 2026

Copy link
Copy Markdown

Benchmarks

Comparison

Benchmark execution time: 2026-07-10 15:50:30

Comparing candidate commit 9f3653e in PR branch sgg/no-live-heap-no-probe with baseline commit a41a0f4 in branch main.

Found 1 performance improvements and 1 performance regressions! Performance is the same for 38 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:alloc_free/sampled_system_fast_path/4096

  • 🟥 execution_time [+11.566ns; +11.902ns] or [+12.497%; +12.860%]

scenario:alloc_free/system/4096

  • 🟩 execution_time [-16.258ns; -16.033ns] or [-15.342%; -15.131%]

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 9f3653e 1783697425 sgg/no-live-heap-no-probe
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/sampled_system_fast_path/16 execution_time 26.003ns 26.611ns ± 0.135ns 26.603ns ± 0.072ns 26.682ns 26.835ns 27.008ns 27.064ns 1.73% -0.044 3.089 0.51% 0.010ns 1 200
alloc_free/sampled_system_fast_path/256 execution_time 26.063ns 26.645ns ± 0.133ns 26.648ns ± 0.055ns 26.700ns 26.850ns 26.989ns 27.360ns 2.67% 0.069 6.513 0.50% 0.009ns 1 200
alloc_free/sampled_system_fast_path/4096 execution_time 102.018ns 104.285ns ± 1.188ns 104.198ns ± 0.162ns 104.372ns 104.808ns 105.943ns 119.915ns 15.08% 11.453 148.554 1.14% 0.084ns 1 200
alloc_free/sampled_system_fast_path/64 execution_time 26.348ns 26.655ns ± 0.118ns 26.655ns ± 0.058ns 26.710ns 26.846ns 26.928ns 27.364ns 2.66% 1.049 5.924 0.44% 0.008ns 1 200
alloc_free/sampled_system_fast_path/65536 execution_time 99.859ns 101.052ns ± 0.359ns 101.071ns ± 0.155ns 101.218ns 101.547ns 101.758ns 102.862ns 1.77% 0.358 5.329 0.35% 0.025ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/sampled_system_fast_path/16 execution_time [26.592ns; 26.630ns] or [-0.071%; +0.071%] None None None
alloc_free/sampled_system_fast_path/256 execution_time [26.627ns; 26.664ns] or [-0.069%; +0.069%] None None None
alloc_free/sampled_system_fast_path/4096 execution_time [104.120ns; 104.449ns] or [-0.158%; +0.158%] None None None
alloc_free/sampled_system_fast_path/64 execution_time [26.639ns; 26.672ns] or [-0.062%; +0.062%] None None None
alloc_free/sampled_system_fast_path/65536 execution_time [101.003ns; 101.102ns] or [-0.049%; +0.049%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 9f3653e 1783697425 sgg/no-live-heap-no-probe
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/noop/16 execution_time 0.400ns 0.402ns ± 0.000ns 0.402ns ± 0.000ns 0.402ns 0.403ns 0.403ns 0.404ns 0.51% 0.895 10.448 0.08% 0.000ns 1 200
alloc_free/noop/256 execution_time 0.400ns 0.402ns ± 0.003ns 0.402ns ± 0.000ns 0.402ns 0.403ns 0.403ns 0.442ns 10.05% 13.761 189.908 0.71% 0.000ns 1 200
alloc_free/noop/4096 execution_time 0.400ns 0.402ns ± 0.001ns 0.402ns ± 0.000ns 0.402ns 0.403ns 0.404ns 0.407ns 1.21% 4.284 39.147 0.13% 0.000ns 1 200
alloc_free/noop/64 execution_time 0.400ns 0.402ns ± 0.000ns 0.402ns ± 0.000ns 0.402ns 0.402ns 0.403ns 0.403ns 0.35% -1.183 11.519 0.08% 0.000ns 1 200
alloc_free/noop/65536 execution_time 0.400ns 0.402ns ± 0.000ns 0.402ns ± 0.000ns 0.402ns 0.402ns 0.405ns 0.406ns 0.97% 4.188 30.176 0.12% 0.000ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/noop/16 execution_time [0.402ns; 0.402ns] or [-0.012%; +0.012%] None None None
alloc_free/noop/256 execution_time [0.402ns; 0.403ns] or [-0.099%; +0.099%] None None None
alloc_free/noop/4096 execution_time [0.402ns; 0.402ns] or [-0.018%; +0.018%] None None None
alloc_free/noop/64 execution_time [0.402ns; 0.402ns] or [-0.011%; +0.011%] None None None
alloc_free/noop/65536 execution_time [0.402ns; 0.402ns] or [-0.017%; +0.017%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 9f3653e 1783697425 sgg/no-live-heap-no-probe
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/sampled_system_slow_path/16 execution_time 83.070ns 83.318ns ± 0.080ns 83.308ns ± 0.026ns 83.341ns 83.417ns 83.631ns 83.908ns 0.72% 2.774 17.449 0.10% 0.006ns 1 200
alloc_free/sampled_system_slow_path/256 execution_time 82.502ns 83.272ns ± 0.095ns 83.272ns ± 0.028ns 83.301ns 83.372ns 83.506ns 83.816ns 0.65% -1.569 26.545 0.11% 0.007ns 1 200
alloc_free/sampled_system_slow_path/4096 execution_time 153.751ns 154.502ns ± 0.259ns 154.485ns ± 0.118ns 154.599ns 154.861ns 155.369ns 155.978ns 0.97% 1.968 9.298 0.17% 0.018ns 1 200
alloc_free/sampled_system_slow_path/64 execution_time 82.829ns 83.359ns ± 0.104ns 83.355ns ± 0.027ns 83.385ns 83.457ns 83.610ns 84.345ns 1.19% 3.355 42.983 0.12% 0.007ns 1 200
alloc_free/sampled_system_slow_path/65536 execution_time 154.766ns 155.514ns ± 0.167ns 155.502ns ± 0.070ns 155.574ns 155.769ns 156.009ns 156.509ns 0.65% 0.810 8.906 0.11% 0.012ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/sampled_system_slow_path/16 execution_time [83.307ns; 83.330ns] or [-0.013%; +0.013%] None None None
alloc_free/sampled_system_slow_path/256 execution_time [83.259ns; 83.285ns] or [-0.016%; +0.016%] None None None
alloc_free/sampled_system_slow_path/4096 execution_time [154.466ns; 154.537ns] or [-0.023%; +0.023%] None None None
alloc_free/sampled_system_slow_path/64 execution_time [83.344ns; 83.373ns] or [-0.017%; +0.017%] None None None
alloc_free/sampled_system_slow_path/65536 execution_time [155.491ns; 155.537ns] or [-0.015%; +0.015%] None None None

Group 4

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 9f3653e 1783697425 sgg/no-live-heap-no-probe
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sampler_only/slow_path/16 execution_time 60.761ns 60.978ns ± 0.063ns 60.975ns ± 0.022ns 60.997ns 61.053ns 61.244ns 61.405ns 0.71% 2.572 15.949 0.10% 0.004ns 1 200
sampler_only/slow_path/256 execution_time 60.653ns 61.001ns ± 0.087ns 60.991ns ± 0.021ns 61.017ns 61.068ns 61.243ns 61.935ns 1.55% 6.349 68.390 0.14% 0.006ns 1 200
sampler_only/slow_path/4096 execution_time 61.182ns 61.348ns ± 0.053ns 61.347ns ± 0.027ns 61.372ns 61.415ns 61.555ns 61.614ns 0.43% 1.188 6.369 0.09% 0.004ns 1 200
sampler_only/slow_path/64 execution_time 60.736ns 60.991ns ± 0.199ns 60.974ns ± 0.022ns 60.999ns 61.056ns 61.144ns 63.707ns 4.48% 12.764 171.713 0.33% 0.014ns 1 200
sampler_only/slow_path/65536 execution_time 65.007ns 65.323ns ± 0.096ns 65.316ns ± 0.046ns 65.368ns 65.480ns 65.569ns 65.818ns 0.77% 0.702 4.030 0.15% 0.007ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sampler_only/slow_path/16 execution_time [60.969ns; 60.986ns] or [-0.014%; +0.014%] None None None
sampler_only/slow_path/256 execution_time [60.989ns; 61.013ns] or [-0.020%; +0.020%] None None None
sampler_only/slow_path/4096 execution_time [61.340ns; 61.355ns] or [-0.012%; +0.012%] None None None
sampler_only/slow_path/64 execution_time [60.964ns; 61.019ns] or [-0.045%; +0.045%] None None None
sampler_only/slow_path/65536 execution_time [65.310ns; 65.337ns] or [-0.020%; +0.020%] None None None

Group 5

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 9f3653e 1783697425 sgg/no-live-heap-no-probe
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/sampled_noop_fast_path/16 execution_time 14.401ns 14.475ns ± 0.055ns 14.471ns ± 0.005ns 14.476ns 14.495ns 14.522ns 15.219ns 5.17% 12.707 170.710 0.38% 0.004ns 1 200
alloc_free/sampled_noop_fast_path/256 execution_time 14.401ns 14.472ns ± 0.020ns 14.471ns ± 0.005ns 14.476ns 14.490ns 14.514ns 14.685ns 1.48% 6.363 66.852 0.14% 0.001ns 1 200
alloc_free/sampled_noop_fast_path/4096 execution_time 14.402ns 14.471ns ± 0.017ns 14.471ns ± 0.005ns 14.475ns 14.491ns 14.534ns 14.576ns 0.73% 1.360 14.288 0.12% 0.001ns 1 200
alloc_free/sampled_noop_fast_path/64 execution_time 14.403ns 14.472ns ± 0.013ns 14.471ns ± 0.005ns 14.476ns 14.491ns 14.503ns 14.553ns 0.56% 0.668 11.159 0.09% 0.001ns 1 200
alloc_free/sampled_noop_fast_path/65536 execution_time 14.401ns 14.473ns ± 0.015ns 14.473ns ± 0.005ns 14.477ns 14.492ns 14.521ns 14.545ns 0.50% 0.266 8.393 0.10% 0.001ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/sampled_noop_fast_path/16 execution_time [14.468ns; 14.483ns] or [-0.052%; +0.052%] None None None
alloc_free/sampled_noop_fast_path/256 execution_time [14.470ns; 14.475ns] or [-0.019%; +0.019%] None None None
alloc_free/sampled_noop_fast_path/4096 execution_time [14.469ns; 14.473ns] or [-0.016%; +0.016%] None None None
alloc_free/sampled_noop_fast_path/64 execution_time [14.470ns; 14.473ns] or [-0.012%; +0.012%] None None None
alloc_free/sampled_noop_fast_path/65536 execution_time [14.471ns; 14.475ns] or [-0.014%; +0.014%] None None None

Group 6

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 9f3653e 1783697425 sgg/no-live-heap-no-probe
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/sampled_noop_slow_path/16 execution_time 61.577ns 62.003ns ± 0.069ns 62.002ns ± 0.030ns 62.033ns 62.096ns 62.234ns 62.373ns 0.60% -0.288 11.833 0.11% 0.005ns 1 200
alloc_free/sampled_noop_slow_path/256 execution_time 61.534ns 61.770ns ± 0.073ns 61.763ns ± 0.024ns 61.790ns 61.852ns 61.983ns 62.411ns 1.05% 3.618 29.920 0.12% 0.005ns 1 200
alloc_free/sampled_noop_slow_path/4096 execution_time 61.980ns 62.380ns ± 0.085ns 62.376ns ± 0.025ns 62.399ns 62.448ns 62.620ns 63.296ns 1.47% 6.100 69.939 0.14% 0.006ns 1 200
alloc_free/sampled_noop_slow_path/64 execution_time 61.791ns 62.005ns ± 0.064ns 62.004ns ± 0.029ns 62.032ns 62.090ns 62.176ns 62.418ns 0.67% 1.372 9.574 0.10% 0.005ns 1 200
alloc_free/sampled_noop_slow_path/65536 execution_time 65.935ns 66.497ns ± 0.086ns 66.491ns ± 0.036ns 66.532ns 66.631ns 66.739ns 66.905ns 0.62% -0.444 11.862 0.13% 0.006ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/sampled_noop_slow_path/16 execution_time [61.993ns; 62.013ns] or [-0.015%; +0.015%] None None None
alloc_free/sampled_noop_slow_path/256 execution_time [61.760ns; 61.781ns] or [-0.016%; +0.016%] None None None
alloc_free/sampled_noop_slow_path/4096 execution_time [62.369ns; 62.392ns] or [-0.019%; +0.019%] None None None
alloc_free/sampled_noop_slow_path/64 execution_time [61.996ns; 62.014ns] or [-0.014%; +0.014%] None None None
alloc_free/sampled_noop_slow_path/65536 execution_time [66.485ns; 66.509ns] or [-0.018%; +0.018%] None None None

Group 7

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 9f3653e 1783697425 sgg/no-live-heap-no-probe
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/system/16 execution_time 14.002ns 14.264ns ± 0.088ns 14.261ns ± 0.038ns 14.299ns 14.375ns 14.526ns 14.800ns 3.78% 1.006 7.966 0.62% 0.006ns 1 200
alloc_free/system/256 execution_time 14.099ns 14.297ns ± 0.064ns 14.290ns ± 0.033ns 14.327ns 14.416ns 14.494ns 14.563ns 1.91% 0.887 2.583 0.44% 0.004ns 1 200
alloc_free/system/4096 execution_time 87.226ns 89.821ns ± 0.666ns 89.815ns ± 0.372ns 90.189ns 90.860ns 91.872ns 92.560ns 3.06% 0.381 3.462 0.74% 0.047ns 1 200
alloc_free/system/64 execution_time 14.007ns 14.294ns ± 0.080ns 14.286ns ± 0.038ns 14.333ns 14.409ns 14.489ns 14.911ns 4.38% 2.131 17.248 0.56% 0.006ns 1 200
alloc_free/system/65536 execution_time 86.647ns 88.304ns ± 0.287ns 88.308ns ± 0.143ns 88.445ns 88.676ns 88.963ns 89.851ns 1.75% -0.091 9.614 0.32% 0.020ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/system/16 execution_time [14.252ns; 14.276ns] or [-0.085%; +0.085%] None None None
alloc_free/system/256 execution_time [14.288ns; 14.306ns] or [-0.062%; +0.062%] None None None
alloc_free/system/4096 execution_time [89.728ns; 89.913ns] or [-0.103%; +0.103%] None None None
alloc_free/system/64 execution_time [14.283ns; 14.305ns] or [-0.078%; +0.078%] None None None
alloc_free/system/65536 execution_time [88.264ns; 88.343ns] or [-0.045%; +0.045%] None None None

Group 8

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 9f3653e 1783697425 sgg/no-live-heap-no-probe
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sampler_only/fast_path/16 execution_time 13.601ns 13.669ns ± 0.014ns 13.668ns ± 0.005ns 13.673ns 13.687ns 13.725ns 13.743ns 0.55% 0.840 10.187 0.11% 0.001ns 1 200
sampler_only/fast_path/256 execution_time 13.601ns 13.670ns ± 0.023ns 13.667ns ± 0.004ns 13.671ns 13.692ns 13.705ns 13.947ns 2.04% 8.744 102.091 0.17% 0.002ns 1 200
sampler_only/fast_path/4096 execution_time 13.603ns 13.670ns ± 0.016ns 13.669ns ± 0.005ns 13.673ns 13.685ns 13.715ns 13.838ns 1.24% 5.486 56.179 0.12% 0.001ns 1 200
sampler_only/fast_path/64 execution_time 13.604ns 13.668ns ± 0.014ns 13.666ns ± 0.004ns 13.670ns 13.685ns 13.712ns 13.774ns 0.79% 2.632 20.958 0.10% 0.001ns 1 200
sampler_only/fast_path/65536 execution_time 13.601ns 13.669ns ± 0.021ns 13.668ns ± 0.005ns 13.672ns 13.688ns 13.716ns 13.912ns 1.79% 7.408 84.592 0.16% 0.002ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sampler_only/fast_path/16 execution_time [13.667ns; 13.671ns] or [-0.015%; +0.015%] None None None
sampler_only/fast_path/256 execution_time [13.667ns; 13.673ns] or [-0.023%; +0.023%] None None None
sampler_only/fast_path/4096 execution_time [13.668ns; 13.673ns] or [-0.017%; +0.017%] None None None
sampler_only/fast_path/64 execution_time [13.666ns; 13.670ns] or [-0.014%; +0.014%] None None None
sampler_only/fast_path/65536 execution_time [13.666ns; 13.672ns] or [-0.022%; +0.022%] 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 a41a0f4 1783685334 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/sampled_system_fast_path/16 execution_time 25.995ns 26.641ns ± 0.123ns 26.651ns ± 0.062ns 26.710ns 26.802ns 26.903ns 26.936ns 1.07% -1.329 4.732 0.46% 0.009ns 1 200
alloc_free/sampled_system_fast_path/256 execution_time 26.058ns 26.647ns ± 0.138ns 26.654ns ± 0.072ns 26.722ns 26.830ns 26.978ns 27.265ns 2.30% -0.234 4.975 0.52% 0.010ns 1 200
alloc_free/sampled_system_fast_path/4096 execution_time 91.925ns 92.551ns ± 0.248ns 92.557ns ± 0.112ns 92.652ns 92.811ns 93.102ns 94.262ns 1.84% 2.822 18.446 0.27% 0.018ns 1 200
alloc_free/sampled_system_fast_path/64 execution_time 26.080ns 26.645ns ± 0.141ns 26.651ns ± 0.072ns 26.718ns 26.845ns 26.994ns 27.199ns 2.06% -0.302 2.855 0.53% 0.010ns 1 200
alloc_free/sampled_system_fast_path/65536 execution_time 99.952ns 101.098ns ± 0.309ns 101.090ns ± 0.170ns 101.271ns 101.552ns 101.917ns 102.350ns 1.25% 0.158 2.039 0.30% 0.022ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/sampled_system_fast_path/16 execution_time [26.624ns; 26.658ns] or [-0.064%; +0.064%] None None None
alloc_free/sampled_system_fast_path/256 execution_time [26.628ns; 26.666ns] or [-0.072%; +0.072%] None None None
alloc_free/sampled_system_fast_path/4096 execution_time [92.517ns; 92.585ns] or [-0.037%; +0.037%] None None None
alloc_free/sampled_system_fast_path/64 execution_time [26.625ns; 26.665ns] or [-0.073%; +0.073%] None None None
alloc_free/sampled_system_fast_path/65536 execution_time [101.055ns; 101.141ns] or [-0.042%; +0.042%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz a41a0f4 1783685334 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/noop/16 execution_time 0.400ns 0.402ns ± 0.000ns 0.402ns ± 0.000ns 0.402ns 0.402ns 0.404ns 0.404ns 0.62% 2.205 16.984 0.09% 0.000ns 1 200
alloc_free/noop/256 execution_time 0.400ns 0.402ns ± 0.000ns 0.402ns ± 0.000ns 0.402ns 0.403ns 0.403ns 0.404ns 0.43% 0.102 10.451 0.09% 0.000ns 1 200
alloc_free/noop/4096 execution_time 0.400ns 0.402ns ± 0.000ns 0.402ns ± 0.000ns 0.402ns 0.403ns 0.403ns 0.407ns 1.26% 4.838 53.524 0.12% 0.000ns 1 200
alloc_free/noop/64 execution_time 0.400ns 0.402ns ± 0.001ns 0.402ns ± 0.000ns 0.402ns 0.403ns 0.404ns 0.407ns 1.31% 5.097 42.982 0.14% 0.000ns 1 200
alloc_free/noop/65536 execution_time 0.400ns 0.402ns ± 0.000ns 0.402ns ± 0.000ns 0.402ns 0.402ns 0.403ns 0.407ns 1.18% 4.426 46.589 0.12% 0.000ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/noop/16 execution_time [0.402ns; 0.402ns] or [-0.013%; +0.013%] None None None
alloc_free/noop/256 execution_time [0.402ns; 0.402ns] or [-0.013%; +0.013%] None None None
alloc_free/noop/4096 execution_time [0.402ns; 0.402ns] or [-0.017%; +0.017%] None None None
alloc_free/noop/64 execution_time [0.402ns; 0.402ns] or [-0.019%; +0.019%] None None None
alloc_free/noop/65536 execution_time [0.402ns; 0.402ns] or [-0.017%; +0.017%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz a41a0f4 1783685334 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/sampled_system_slow_path/16 execution_time 82.973ns 83.338ns ± 0.078ns 83.338ns ± 0.029ns 83.365ns 83.454ns 83.574ns 83.806ns 0.56% 0.809 8.791 0.09% 0.006ns 1 200
alloc_free/sampled_system_slow_path/256 execution_time 82.995ns 83.421ns ± 0.076ns 83.423ns ± 0.032ns 83.449ns 83.528ns 83.631ns 83.750ns 0.39% -0.778 8.865 0.09% 0.005ns 1 200
alloc_free/sampled_system_slow_path/4096 execution_time 150.009ns 150.665ns ± 0.223ns 150.652ns ± 0.086ns 150.735ns 150.989ns 151.530ns 152.007ns 0.90% 2.050 10.673 0.15% 0.016ns 1 200
alloc_free/sampled_system_slow_path/64 execution_time 82.970ns 83.378ns ± 0.093ns 83.373ns ± 0.034ns 83.407ns 83.469ns 83.773ns 84.032ns 0.79% 2.710 19.043 0.11% 0.007ns 1 200
alloc_free/sampled_system_slow_path/65536 execution_time 154.714ns 155.479ns ± 0.314ns 155.447ns ± 0.066ns 155.511ns 155.669ns 156.143ns 158.765ns 2.13% 7.153 66.834 0.20% 0.022ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/sampled_system_slow_path/16 execution_time [83.327ns; 83.348ns] or [-0.013%; +0.013%] None None None
alloc_free/sampled_system_slow_path/256 execution_time [83.410ns; 83.432ns] or [-0.013%; +0.013%] None None None
alloc_free/sampled_system_slow_path/4096 execution_time [150.634ns; 150.696ns] or [-0.021%; +0.021%] None None None
alloc_free/sampled_system_slow_path/64 execution_time [83.365ns; 83.391ns] or [-0.015%; +0.015%] None None None
alloc_free/sampled_system_slow_path/65536 execution_time [155.436ns; 155.523ns] or [-0.028%; +0.028%] None None None

Group 4

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz a41a0f4 1783685334 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sampler_only/slow_path/16 execution_time 60.392ns 60.982ns ± 0.085ns 60.977ns ± 0.019ns 60.998ns 61.056ns 61.193ns 61.739ns 1.25% 2.254 43.479 0.14% 0.006ns 1 200
sampler_only/slow_path/256 execution_time 60.328ns 60.495ns ± 0.048ns 60.493ns ± 0.021ns 60.512ns 60.583ns 60.635ns 60.692ns 0.33% 0.660 3.094 0.08% 0.003ns 1 200
sampler_only/slow_path/4096 execution_time 60.814ns 61.349ns ± 0.078ns 61.343ns ± 0.027ns 61.374ns 61.422ns 61.650ns 61.697ns 0.58% -0.879 16.673 0.13% 0.005ns 1 200
sampler_only/slow_path/64 execution_time 60.768ns 60.978ns ± 0.059ns 60.975ns ± 0.023ns 61.000ns 61.054ns 61.195ns 61.361ns 0.63% 2.039 13.088 0.10% 0.004ns 1 200
sampler_only/slow_path/65536 execution_time 64.421ns 64.898ns ± 0.102ns 64.900ns ± 0.037ns 64.935ns 65.014ns 65.113ns 65.673ns 1.19% 1.695 19.248 0.16% 0.007ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sampler_only/slow_path/16 execution_time [60.970ns; 60.994ns] or [-0.019%; +0.019%] None None None
sampler_only/slow_path/256 execution_time [60.489ns; 60.502ns] or [-0.011%; +0.011%] None None None
sampler_only/slow_path/4096 execution_time [61.338ns; 61.360ns] or [-0.018%; +0.018%] None None None
sampler_only/slow_path/64 execution_time [60.970ns; 60.986ns] or [-0.013%; +0.013%] None None None
sampler_only/slow_path/65536 execution_time [64.884ns; 64.912ns] or [-0.022%; +0.022%] None None None

Group 5

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz a41a0f4 1783685334 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/sampled_noop_fast_path/16 execution_time 14.402ns 14.473ns ± 0.020ns 14.471ns ± 0.005ns 14.477ns 14.493ns 14.550ns 14.647ns 1.22% 3.857 32.033 0.14% 0.001ns 1 200
alloc_free/sampled_noop_fast_path/256 execution_time 14.401ns 14.477ns ± 0.065ns 14.471ns ± 0.005ns 14.477ns 14.492ns 14.531ns 15.369ns 6.21% 13.213 179.757 0.45% 0.005ns 1 200
alloc_free/sampled_noop_fast_path/4096 execution_time 14.436ns 14.475ns ± 0.038ns 14.471ns ± 0.005ns 14.476ns 14.491ns 14.523ns 14.949ns 3.30% 10.584 126.032 0.26% 0.003ns 1 200
alloc_free/sampled_noop_fast_path/64 execution_time 14.401ns 14.472ns ± 0.013ns 14.471ns ± 0.005ns 14.477ns 14.491ns 14.509ns 14.525ns 0.37% -0.750 10.598 0.09% 0.001ns 1 200
alloc_free/sampled_noop_fast_path/65536 execution_time 14.401ns 14.471ns ± 0.013ns 14.471ns ± 0.005ns 14.475ns 14.485ns 14.525ns 14.530ns 0.41% 0.029 10.426 0.09% 0.001ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/sampled_noop_fast_path/16 execution_time [14.470ns; 14.476ns] or [-0.019%; +0.019%] None None None
alloc_free/sampled_noop_fast_path/256 execution_time [14.468ns; 14.486ns] or [-0.062%; +0.062%] None None None
alloc_free/sampled_noop_fast_path/4096 execution_time [14.470ns; 14.480ns] or [-0.036%; +0.036%] None None None
alloc_free/sampled_noop_fast_path/64 execution_time [14.470ns; 14.474ns] or [-0.012%; +0.012%] None None None
alloc_free/sampled_noop_fast_path/65536 execution_time [14.469ns; 14.473ns] or [-0.013%; +0.013%] None None None

Group 6

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz a41a0f4 1783685334 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/sampled_noop_slow_path/16 execution_time 61.594ns 62.019ns ± 0.078ns 62.017ns ± 0.028ns 62.044ns 62.097ns 62.271ns 62.512ns 0.80% 1.425 15.887 0.13% 0.006ns 1 200
alloc_free/sampled_noop_slow_path/256 execution_time 61.667ns 62.039ns ± 0.098ns 62.029ns ± 0.022ns 62.057ns 62.116ns 62.288ns 63.138ns 1.79% 7.047 79.078 0.16% 0.007ns 1 200
alloc_free/sampled_noop_slow_path/4096 execution_time 61.941ns 62.401ns ± 0.068ns 62.403ns ± 0.029ns 62.428ns 62.474ns 62.626ns 62.734ns 0.53% -0.588 14.830 0.11% 0.005ns 1 200
alloc_free/sampled_noop_slow_path/64 execution_time 61.446ns 61.733ns ± 0.112ns 61.728ns ± 0.026ns 61.753ns 61.807ns 61.895ns 63.082ns 2.19% 8.684 104.533 0.18% 0.008ns 1 200
alloc_free/sampled_noop_slow_path/65536 execution_time 65.894ns 66.499ns ± 0.115ns 66.496ns ± 0.032ns 66.535ns 66.638ns 66.806ns 67.237ns 1.11% 0.204 15.809 0.17% 0.008ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/sampled_noop_slow_path/16 execution_time [62.008ns; 62.030ns] or [-0.017%; +0.017%] None None None
alloc_free/sampled_noop_slow_path/256 execution_time [62.026ns; 62.053ns] or [-0.022%; +0.022%] None None None
alloc_free/sampled_noop_slow_path/4096 execution_time [62.392ns; 62.411ns] or [-0.015%; +0.015%] None None None
alloc_free/sampled_noop_slow_path/64 execution_time [61.717ns; 61.748ns] or [-0.025%; +0.025%] None None None
alloc_free/sampled_noop_slow_path/65536 execution_time [66.483ns; 66.515ns] or [-0.024%; +0.024%] None None None

Group 7

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz a41a0f4 1783685334 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
alloc_free/system/16 execution_time 14.066ns 14.273ns ± 0.073ns 14.268ns ± 0.033ns 14.303ns 14.378ns 14.476ns 14.692ns 2.97% 1.464 7.288 0.51% 0.005ns 1 200
alloc_free/system/256 execution_time 14.053ns 14.281ns ± 0.073ns 14.277ns ± 0.037ns 14.308ns 14.394ns 14.534ns 14.672ns 2.76% 1.285 6.688 0.51% 0.005ns 1 200
alloc_free/system/4096 execution_time 104.015ns 105.966ns ± 0.458ns 105.930ns ± 0.213ns 106.147ns 106.744ns 107.338ns 108.171ns 2.12% 0.868 5.407 0.43% 0.032ns 1 200
alloc_free/system/64 execution_time 14.003ns 14.276ns ± 0.064ns 14.273ns ± 0.034ns 14.307ns 14.405ns 14.472ns 14.489ns 1.51% 0.338 2.344 0.45% 0.005ns 1 200
alloc_free/system/65536 execution_time 87.021ns 88.314ns ± 0.246ns 88.328ns ± 0.112ns 88.432ns 88.645ns 88.842ns 89.468ns 1.29% -0.513 6.557 0.28% 0.017ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
alloc_free/system/16 execution_time [14.263ns; 14.284ns] or [-0.071%; +0.071%] None None None
alloc_free/system/256 execution_time [14.270ns; 14.291ns] or [-0.071%; +0.071%] None None None
alloc_free/system/4096 execution_time [105.903ns; 106.030ns] or [-0.060%; +0.060%] None None None
alloc_free/system/64 execution_time [14.268ns; 14.285ns] or [-0.062%; +0.062%] None None None
alloc_free/system/65536 execution_time [88.280ns; 88.348ns] or [-0.039%; +0.039%] None None None

Group 8

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz a41a0f4 1783685334 main
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sampler_only/fast_path/16 execution_time 13.601ns 13.669ns ± 0.014ns 13.668ns ± 0.005ns 13.674ns 13.683ns 13.705ns 13.795ns 0.93% 2.636 31.498 0.11% 0.001ns 1 200
sampler_only/fast_path/256 execution_time 13.601ns 13.667ns ± 0.014ns 13.666ns ± 0.004ns 13.670ns 13.684ns 13.701ns 13.788ns 0.89% 2.640 32.855 0.10% 0.001ns 1 200
sampler_only/fast_path/4096 execution_time 13.601ns 13.667ns ± 0.015ns 13.666ns ± 0.004ns 13.670ns 13.683ns 13.713ns 13.761ns 0.70% 1.597 15.268 0.11% 0.001ns 1 200
sampler_only/fast_path/64 execution_time 13.602ns 13.669ns ± 0.013ns 13.668ns ± 0.005ns 13.673ns 13.684ns 13.707ns 13.747ns 0.57% 0.374 13.933 0.09% 0.001ns 1 200
sampler_only/fast_path/65536 execution_time 13.603ns 13.668ns ± 0.014ns 13.667ns ± 0.005ns 13.673ns 13.683ns 13.713ns 13.751ns 0.61% 1.519 12.591 0.10% 0.001ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sampler_only/fast_path/16 execution_time [13.667ns; 13.671ns] or [-0.015%; +0.015%] None None None
sampler_only/fast_path/256 execution_time [13.665ns; 13.669ns] or [-0.014%; +0.014%] None None None
sampler_only/fast_path/4096 execution_time [13.665ns; 13.669ns] or [-0.015%; +0.015%] None None None
sampler_only/fast_path/64 execution_time [13.667ns; 13.670ns] or [-0.013%; +0.013%] None None None
sampler_only/fast_path/65536 execution_time [13.666ns; 13.670ns] or [-0.014%; +0.014%] None None None

@dd-octo-sts

dd-octo-sts Bot commented Jul 10, 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 7.88 MB 7.88 MB 0% (0 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 85.88 MB 85.88 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 97.10 MB 97.10 MB 0% (0 B) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.61 MB 10.61 MB 0% (0 B) 👌
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 25.45 MB 25.45 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 88.44 KB 88.44 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 184.54 MB 184.54 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 946.77 MB 946.77 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 8.32 MB 8.32 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 88.44 KB 88.44 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 24.62 MB 24.62 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 49.03 MB 49.03 MB 0% (0 B) 👌
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 22.05 MB 22.05 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 89.82 KB 89.82 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 188.76 MB 188.76 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 935.45 MB 935.45 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.43 MB 6.43 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 89.82 KB 89.82 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 26.43 MB 26.43 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 46.66 MB 46.66 MB 0% (0 B) 👌
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 76.58 MB 76.58 MB 0% (0 B) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 8.78 MB 8.78 MB 0% (0 B) 👌
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 92.10 MB 92.10 MB 0% (0 B) 👌
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.69 MB 10.69 MB 0% (0 B) 👌

@scottgerring scottgerring force-pushed the sgg/no-live-heap-no-probe branch from c0ccf7c to 9f3653e Compare July 10, 2026 15:31
/* Fire with the user-visible pointer, matching what was reported at alloc
* time, so the profiler can correlate the two events by address. */
* time, so the profiler can correlate the two events by address. Safe to
* call unconditionally: dd_probe_free is a no-op USDT-wise when live-heap

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.

is there a test for this

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants