Skip to content

chore(ci): run crashtracking ffi example tests in CI#1687

Open
gyuheon0h wants to merge 1 commit intomainfrom
gyuheon0h/enable-crashtracker-ffi-ci
Open

chore(ci): run crashtracking ffi example tests in CI#1687
gyuheon0h wants to merge 1 commit intomainfrom
gyuheon0h/enable-crashtracker-ffi-ci

Conversation

@gyuheon0h
Copy link
Contributor

@gyuheon0h gyuheon0h commented Mar 6, 2026

What does this PR do?

Previously, we couldn't run crashtracking FFI examples in CI because the C example had paths like /tmp/libdatadog/bin/libdatadog-crashtracking-receiver and /tmp/crashreports/ baked in, which is variable in CI. Also, the test runner had no way to handle intentional crashes.

This PR

  1. Enables the crashtracking FFI example to run in CI instead of being skipped
  2. Adds ExpectedCrash support to the FFI test runner to validate tests that intentionally crash

examples/ffi/crashtracking.c

  • Make receiver binary and output directory configurable via DDOG_CRASHT_TEST_RECEIVER and DDOG_CRASHT_TEST_OUTPUT_DIR env vars (falls back to hardcoded defaults for manual use)
  • Forward LD_LIBRARY_PATH/DYLD_LIBRARY_PATH to the receiver process so it can find shared libraries
  • Remove the custom signal(SIGSEGV, ...) handler
  • I also ran the clang formatter here

tools/src/bin/ffi_test.rs

  • Remove crashtracking from the skip list
  • Add ExpectedCrash concept: validates the process dies with the expected signal (SIGSEGV) and that a crash report file was produced
  • Extract shared find_receiver_paths() and library_search_path_env() helpers used by both crashtracking and crashtracking_unhandled_exception tests

Motivation

Although FFI examples are not meant to increase test coverage, running the crashtracking example in CI is a QOL improvement that makes sure our public FFI surface is buildable and usable in real-world scenarios.

How to test the change?

crashtracking FFI tests now run in CI
Screenshot 2026-03-06 at 4 46 48 PM

Copy link
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@gyuheon0h gyuheon0h changed the title Enable crashtracking ffi example tests in CI chore(ci): enable crashtracking ffi example tests in CI Mar 6, 2026
@github-actions
Copy link

github-actions bot commented Mar 6, 2026

Clippy Allow Annotation Report

Comparing clippy allow annotations between branches:

  • Base Branch: origin/main
  • PR Branch: origin/gyuheon0h/enable-crashtracker-ffi-ci

Summary by Rule

Rule Base Branch PR Branch Change

Annotation Counts by File

File Base Branch PR Branch Change

Annotation Stats by Crate

Crate Base Branch PR Branch Change
clippy-annotation-reporter 5 5 No change (0%)
datadog-ffe-ffi 1 1 No change (0%)
datadog-ipc 28 28 No change (0%)
datadog-live-debugger 6 6 No change (0%)
datadog-live-debugger-ffi 10 10 No change (0%)
datadog-profiling-replayer 4 4 No change (0%)
datadog-remote-config 3 3 No change (0%)
datadog-sidecar 59 59 No change (0%)
libdd-common 10 10 No change (0%)
libdd-common-ffi 12 12 No change (0%)
libdd-crashtracker 12 12 No change (0%)
libdd-data-pipeline 5 5 No change (0%)
libdd-ddsketch 2 2 No change (0%)
libdd-dogstatsd-client 1 1 No change (0%)
libdd-profiling 13 13 No change (0%)
libdd-telemetry 19 19 No change (0%)
libdd-tinybytes 4 4 No change (0%)
libdd-trace-normalization 2 2 No change (0%)
libdd-trace-obfuscation 9 9 No change (0%)
libdd-trace-utils 15 15 No change (0%)
Total 220 220 No change (0%)

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.

@gyuheon0h gyuheon0h changed the title chore(ci): enable crashtracking ffi example tests in CI chore(ci): run crashtracking ffi example tests in CI Mar 6, 2026
@gyuheon0h gyuheon0h requested a review from r1viollet March 6, 2026 21:33
@gyuheon0h gyuheon0h marked this pull request as ready for review March 6, 2026 21:37
@gyuheon0h gyuheon0h requested review from a team as code owners March 6, 2026 21:37
@codecov-commenter
Copy link

codecov-commenter commented Mar 6, 2026

Codecov Report

❌ Patch coverage is 0% with 79 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.31%. Comparing base (bd94dd9) to head (4b412c1).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1687      +/-   ##
==========================================
- Coverage   71.39%   71.31%   -0.08%     
==========================================
  Files         427      427              
  Lines       62897    62954      +57     
==========================================
- Hits        44903    44897       -6     
- Misses      17994    18057      +63     
Components Coverage Δ
libdd-crashtracker 62.98% <ø> (-0.02%) ⬇️
libdd-crashtracker-ffi 16.56% <ø> (ø)
libdd-alloc 98.77% <ø> (ø)
libdd-data-pipeline 88.02% <ø> (ø)
libdd-data-pipeline-ffi 75.72% <ø> (ø)
libdd-common 79.73% <ø> (ø)
libdd-common-ffi 73.40% <ø> (ø)
libdd-telemetry 62.48% <ø> (ø)
libdd-telemetry-ffi 16.75% <ø> (ø)
libdd-dogstatsd-client 82.64% <ø> (ø)
datadog-ipc 80.35% <ø> (-0.12%) ⬇️
libdd-profiling 81.60% <ø> (ø)
libdd-profiling-ffi 63.65% <ø> (ø)
datadog-sidecar 34.48% <ø> (ø)
datdog-sidecar-ffi 16.55% <ø> (ø)
spawn-worker 54.69% <ø> (ø)
libdd-tinybytes 93.16% <ø> (ø)
libdd-trace-normalization 81.71% <ø> (ø)
libdd-trace-obfuscation 94.69% <ø> (ø)
libdd-trace-protobuf 68.00% <ø> (ø)
libdd-trace-utils 89.07% <ø> (ø)
datadog-tracer-flare 88.95% <ø> (ø)
libdd-log 74.69% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@pr-commenter
Copy link

pr-commenter bot commented Mar 6, 2026

Benchmarks

Comparison

Benchmark execution time: 2026-03-06 21:42:21

Comparing candidate commit fe3215f in PR branch gyuheon0h/enable-crashtracker-ffi-ci with baseline commit bd94dd9 in branch main.

Found 1 performance improvements and 1 performance regressions! Performance is the same for 55 metrics, 2 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:single_flag_killswitch/rules-based

  • 🟥 execution_time [+8.937ns; +9.723ns] or [+4.701%; +5.114%]

scenario:tags/replace_trace_tags

  • 🟩 execution_time [-129.634ns; -121.242ns] or [-5.111%; -4.780%]

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 fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample2_frames_x1000 execution_time 728.364µs 729.787µs ± 0.779µs 729.710µs ± 0.339µs 730.026µs 730.845µs 732.087µs 736.766µs 0.97% 4.077 31.437 0.11% 0.055µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample2_frames_x1000 execution_time [729.679µs; 729.895µs] or [-0.015%; +0.015%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
profile_add_sample_frames_x1000 execution_time 4.174ms 4.179ms ± 0.008ms 4.178ms ± 0.002ms 4.180ms 4.183ms 4.185ms 4.282ms 2.48% 11.733 152.438 0.19% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
profile_add_sample_frames_x1000 execution_time [4.178ms; 4.180ms] or [-0.026%; +0.026%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
ip_address/quantize_peer_ip_address_benchmark execution_time 4.911µs 4.993µs ± 0.037µs 5.006µs ± 0.025µs 5.025µs 5.034µs 5.039µs 5.040µs 0.68% -0.479 -1.333 0.73% 0.003µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
ip_address/quantize_peer_ip_address_benchmark execution_time [4.988µs; 4.998µs] or [-0.102%; +0.102%] None None None

Group 4

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_trace/test_trace execution_time 241.488ns 250.312ns ± 12.106ns 244.741ns ± 2.193ns 252.042ns 283.589ns 286.894ns 289.981ns 18.48% 1.972 2.700 4.82% 0.856ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_trace/test_trace execution_time [248.634ns; 251.990ns] or [-0.670%; +0.670%] None None None

Group 5

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sql/obfuscate_sql_string execution_time 86.337µs 86.510µs ± 0.142µs 86.485µs ± 0.050µs 86.541µs 86.656µs 87.322µs 87.572µs 1.26% 4.586 27.156 0.16% 0.010µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sql/obfuscate_sql_string execution_time [86.490µs; 86.530µs] or [-0.023%; +0.023%] None None None

Group 6

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching string interning on wordpress profile execution_time 160.662µs 161.179µs ± 0.359µs 161.093µs ± 0.163µs 161.304µs 161.783µs 162.430µs 163.455µs 1.47% 2.294 8.731 0.22% 0.025µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching string interning on wordpress profile execution_time [161.129µs; 161.229µs] or [-0.031%; +0.031%] None None None

Group 7

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... execution_time 533.865µs 534.818µs ± 0.814µs 534.726µs ± 0.250µs 534.986µs 535.546µs 536.748µs 544.233µs 1.78% 8.022 88.219 0.15% 0.058µs 1 200
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput 1837447.107op/s 1869797.581op/s ± 2811.714op/s 1870117.069op/s ± 875.670op/s 1870973.898op/s 1872142.574op/s 1872628.090op/s 1873131.276op/s 0.16% -7.904 86.351 0.15% 198.818op/s 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time 380.165µs 381.053µs ± 0.646µs 380.963µs ± 0.200µs 381.218µs 381.548µs 381.945µs 387.328µs 1.67% 6.837 59.502 0.17% 0.046µs 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput 2581789.984op/s 2624312.944op/s ± 4396.461op/s 2624927.280op/s ± 1379.072op/s 2626146.895op/s 2627990.193op/s 2629085.752op/s 2630434.678op/s 0.21% -6.763 58.579 0.17% 310.877op/s 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time 190.029µs 190.516µs ± 0.387µs 190.482µs ± 0.135µs 190.631µs 190.864µs 191.063µs 195.114µs 2.43% 8.426 97.554 0.20% 0.027µs 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput 5125212.220op/s 5248925.949op/s ± 10493.330op/s 5249842.353op/s ± 3725.831op/s 5253323.511op/s 5258453.176op/s 5261573.629op/s 5262363.214op/s 0.24% -8.253 94.835 0.20% 741.991op/s 1 200
normalization/normalize_service/normalize_service/[empty string] execution_time 37.859µs 37.974µs ± 0.060µs 37.967µs ± 0.032µs 38.002µs 38.065µs 38.158µs 38.284µs 0.83% 1.362 4.156 0.16% 0.004µs 1 200
normalization/normalize_service/normalize_service/[empty string] throughput 26120531.708op/s 26333937.100op/s ± 41412.661op/s 26338357.211op/s ± 22188.300op/s 26359797.585op/s 26389009.412op/s 26408988.609op/s 26413527.016op/s 0.29% -1.342 4.056 0.16% 2928.317op/s 1 200
normalization/normalize_service/normalize_service/test_ASCII execution_time 45.814µs 45.942µs ± 0.167µs 45.920µs ± 0.042µs 45.964µs 46.044µs 46.141µs 47.740µs 3.96% 8.369 80.431 0.36% 0.012µs 1 200
normalization/normalize_service/normalize_service/test_ASCII throughput 20946609.884op/s 21767021.463op/s ± 76914.217op/s 21776821.695op/s ± 20070.504op/s 21795862.860op/s 21814389.817op/s 21826929.258op/s 21827389.008op/s 0.23% -8.234 78.419 0.35% 5438.656op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... execution_time [534.706µs; 534.931µs] or [-0.021%; +0.021%] None None None
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput [1869407.905op/s; 1870187.258op/s] or [-0.021%; +0.021%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time [380.964µs; 381.143µs] or [-0.023%; +0.023%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput [2623703.637op/s; 2624922.251op/s] or [-0.023%; +0.023%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time [190.462µs; 190.570µs] or [-0.028%; +0.028%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput [5247471.674op/s; 5250380.223op/s] or [-0.028%; +0.028%] None None None
normalization/normalize_service/normalize_service/[empty string] execution_time [37.966µs; 37.982µs] or [-0.022%; +0.022%] None None None
normalization/normalize_service/normalize_service/[empty string] throughput [26328197.703op/s; 26339676.496op/s] or [-0.022%; +0.022%] None None None
normalization/normalize_service/normalize_service/test_ASCII execution_time [45.918µs; 45.965µs] or [-0.050%; +0.050%] None None None
normalization/normalize_service/normalize_service/test_ASCII throughput [21756361.892op/s; 21777681.034op/s] or [-0.049%; +0.049%] None None None

Group 8

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... execution_time 185.553µs 185.924µs ± 0.204µs 185.918µs ± 0.146µs 186.059µs 186.245µs 186.472µs 186.593µs 0.36% 0.524 0.203 0.11% 0.014µs 1 200
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput 5359244.925op/s 5378560.266op/s ± 5906.643op/s 5378710.285op/s ± 4233.257op/s 5383135.776op/s 5387087.633op/s 5388594.796op/s 5389305.946op/s 0.20% -0.518 0.189 0.11% 417.663op/s 1 200
normalization/normalize_name/normalize_name/bad-name execution_time 17.901µs 18.004µs ± 0.052µs 18.001µs ± 0.037µs 18.044µs 18.080µs 18.118µs 18.253µs 1.40% 0.605 1.547 0.29% 0.004µs 1 200
normalization/normalize_name/normalize_name/bad-name throughput 54786775.853op/s 55544734.129op/s ± 159161.584op/s 55551055.982op/s ± 115706.342op/s 55653293.146op/s 55777417.918op/s 55842987.919op/s 55862381.380op/s 0.56% -0.578 1.433 0.29% 11254.424op/s 1 200
normalization/normalize_name/normalize_name/good execution_time 10.232µs 10.305µs ± 0.041µs 10.300µs ± 0.027µs 10.335µs 10.378µs 10.422µs 10.427µs 1.24% 0.538 -0.069 0.40% 0.003µs 1 200
normalization/normalize_name/normalize_name/good throughput 95900821.114op/s 97042366.836op/s ± 387158.719op/s 97089735.218op/s ± 253961.846op/s 97322094.107op/s 97592139.456op/s 97726430.866op/s 97733978.476op/s 0.66% -0.519 -0.102 0.40% 27376.256op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... execution_time [185.895µs; 185.952µs] or [-0.015%; +0.015%] None None None
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput [5377741.662op/s; 5379378.869op/s] or [-0.015%; +0.015%] None None None
normalization/normalize_name/normalize_name/bad-name execution_time [17.996µs; 18.011µs] or [-0.040%; +0.040%] None None None
normalization/normalize_name/normalize_name/bad-name throughput [55522675.864op/s; 55566792.394op/s] or [-0.040%; +0.040%] None None None
normalization/normalize_name/normalize_name/good execution_time [10.299µs; 10.311µs] or [-0.055%; +0.055%] None None None
normalization/normalize_name/normalize_name/good throughput [96988710.361op/s; 97096023.311op/s] or [-0.055%; +0.055%] None None None

Group 9

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
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 10.603ms 10.642ms ± 0.014ms 10.641ms ± 0.007ms 10.648ms 10.664ms 10.685ms 10.748ms 1.00% 2.130 13.538 0.14% 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 [10.640ms; 10.644ms] or [-0.019%; +0.019%] None None None

Group 10

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
sdk_test_data/rules-based execution_time 144.214µs 146.378µs ± 1.717µs 146.139µs ± 0.473µs 146.615µs 147.749µs 153.507µs 162.825µs 11.42% 5.951 47.619 1.17% 0.121µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
sdk_test_data/rules-based execution_time [146.140µs; 146.616µs] or [-0.163%; +0.163%] None None None

Group 11

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
receiver_entry_point/report/2597 execution_time 3.084ms 3.111ms ± 0.016ms 3.108ms ± 0.007ms 3.116ms 3.141ms 3.179ms 3.205ms 3.12% 2.412 8.678 0.52% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
receiver_entry_point/report/2597 execution_time [3.109ms; 3.114ms] or [-0.072%; +0.072%] None None None

Group 12

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
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.214µs 3.225µs ± 1.432µs 3.000µs ± 0.030µs 3.031µs 3.697µs 14.198µs 14.727µs 390.88% 7.308 54.701 44.29% 0.101µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
write only interface execution_time [3.026µs; 3.423µs] or [-6.153%; +6.153%] None None None

Group 13

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
credit_card/is_card_number/ execution_time 3.892µs 3.912µs ± 0.003µs 3.912µs ± 0.002µs 3.913µs 3.916µs 3.918µs 3.921µs 0.22% -1.869 15.815 0.07% 0.000µs 1 200
credit_card/is_card_number/ throughput 255062038.828op/s 255623389.071op/s ± 170291.298op/s 255632116.892op/s ± 103057.290op/s 255727439.562op/s 255828452.747op/s 255890102.492op/s 256925638.064op/s 0.51% 1.898 16.056 0.07% 12041.413op/s 1 200
credit_card/is_card_number/ 3782-8224-6310-005 execution_time 79.033µs 79.725µs ± 0.402µs 79.698µs ± 0.256µs 79.937µs 80.526µs 80.847µs 80.964µs 1.59% 0.736 0.270 0.50% 0.028µs 1 200
credit_card/is_card_number/ 3782-8224-6310-005 throughput 12351196.267op/s 12543493.219op/s ± 63093.234op/s 12547323.206op/s ± 40214.721op/s 12591783.600op/s 12630894.305op/s 12648474.117op/s 12652951.336op/s 0.84% -0.710 0.217 0.50% 4461.365op/s 1 200
credit_card/is_card_number/ 378282246310005 execution_time 72.242µs 72.905µs ± 0.357µs 72.834µs ± 0.237µs 73.133µs 73.552µs 73.834µs 74.093µs 1.73% 0.701 0.152 0.49% 0.025µs 1 200
credit_card/is_card_number/ 378282246310005 throughput 13496479.832op/s 13716723.279op/s ± 66900.158op/s 13729911.987op/s ± 44768.242op/s 13764276.836op/s 13808701.755op/s 13822265.232op/s 13842378.553op/s 0.82% -0.677 0.101 0.49% 4730.556op/s 1 200
credit_card/is_card_number/37828224631 execution_time 3.892µs 3.912µs ± 0.003µs 3.912µs ± 0.001µs 3.913µs 3.916µs 3.918µs 3.920µs 0.21% -1.622 16.391 0.07% 0.000µs 1 200
credit_card/is_card_number/37828224631 throughput 255104332.282op/s 255632129.008op/s ± 168940.506op/s 255650682.750op/s ± 87799.653op/s 255719753.561op/s 255821435.208op/s 255889481.206op/s 256926744.013op/s 0.50% 1.653 16.640 0.07% 11945.898op/s 1 200
credit_card/is_card_number/378282246310005 execution_time 69.155µs 69.694µs ± 0.338µs 69.658µs ± 0.236µs 69.891µs 70.361µs 70.458µs 70.699µs 1.49% 0.684 -0.189 0.48% 0.024µs 1 200
credit_card/is_card_number/378282246310005 throughput 14144379.937op/s 14348858.319op/s ± 69343.656op/s 14355830.049op/s ± 48754.938op/s 14405264.428op/s 14437857.881op/s 14457283.023op/s 14460247.174op/s 0.73% -0.665 -0.227 0.48% 4903.337op/s 1 200
credit_card/is_card_number/37828224631000521389798 execution_time 52.143µs 52.219µs ± 0.037µs 52.215µs ± 0.022µs 52.240µs 52.283µs 52.315µs 52.356µs 0.27% 0.535 0.420 0.07% 0.003µs 1 200
credit_card/is_card_number/37828224631000521389798 throughput 19099950.639op/s 19149950.853op/s ± 13415.809op/s 19151481.637op/s ± 8198.193op/s 19158553.823op/s 19170160.688op/s 19175467.559op/s 19178085.202op/s 0.14% -0.530 0.411 0.07% 948.641op/s 1 200
credit_card/is_card_number/x371413321323331 execution_time 6.027µs 6.043µs ± 0.020µs 6.039µs ± 0.004µs 6.041µs 6.076µs 6.116µs 6.191µs 2.52% 4.081 21.509 0.32% 0.001µs 1 200
credit_card/is_card_number/x371413321323331 throughput 161525786.626op/s 165482529.255op/s ± 530416.995op/s 165602980.854op/s ± 106412.218op/s 165723099.119op/s 165858551.091op/s 165884283.708op/s 165914690.393op/s 0.19% -4.015 20.788 0.32% 37506.145op/s 1 200
credit_card/is_card_number_no_luhn/ execution_time 3.894µs 3.913µs ± 0.004µs 3.912µs ± 0.002µs 3.915µs 3.919µs 3.927µs 3.930µs 0.44% 0.679 5.767 0.10% 0.000µs 1 200
credit_card/is_card_number_no_luhn/ throughput 254482986.016op/s 255558023.560op/s ± 244974.353op/s 255607955.579op/s ± 114906.045op/s 255698235.685op/s 255822748.874op/s 255915948.026op/s 256813079.248op/s 0.47% -0.658 5.789 0.10% 17322.303op/s 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time 64.212µs 64.488µs ± 0.127µs 64.475µs ± 0.080µs 64.557µs 64.707µs 64.845µs 64.926µs 0.70% 0.637 0.566 0.20% 0.009µs 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput 15402048.255op/s 15506916.242op/s ± 30415.822op/s 15509843.606op/s ± 19305.428op/s 15528917.159op/s 15552305.357op/s 15562749.458op/s 15573343.109op/s 0.41% -0.624 0.540 0.20% 2150.723op/s 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time 57.842µs 58.085µs ± 0.159µs 58.051µs ± 0.084µs 58.150µs 58.395µs 58.615µs 58.764µs 1.23% 1.354 2.509 0.27% 0.011µs 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 throughput 17017228.124op/s 17216184.705op/s ± 46988.178op/s 17226121.513op/s ± 25069.693op/s 17247717.856op/s 17274901.651op/s 17285367.838op/s 17288494.507op/s 0.36% -1.332 2.420 0.27% 3322.566op/s 1 200
credit_card/is_card_number_no_luhn/37828224631 execution_time 3.894µs 3.913µs ± 0.003µs 3.912µs ± 0.002µs 3.914µs 3.918µs 3.920µs 3.922µs 0.26% -0.550 6.651 0.08% 0.000µs 1 200
credit_card/is_card_number_no_luhn/37828224631 throughput 254956534.651op/s 255585201.983op/s ± 197701.478op/s 255614745.489op/s ± 121993.402op/s 255714985.982op/s 255802460.830op/s 255884271.400op/s 256813859.706op/s 0.47% 0.569 6.763 0.08% 13979.606op/s 1 200
credit_card/is_card_number_no_luhn/378282246310005 execution_time 54.565µs 55.047µs ± 0.323µs 55.008µs ± 0.236µs 55.239µs 55.622µs 55.862µs 55.990µs 1.78% 0.682 -0.189 0.59% 0.023µs 1 200
credit_card/is_card_number_no_luhn/378282246310005 throughput 17860274.363op/s 18167067.603op/s ± 106142.525op/s 18179056.210op/s ± 77913.953op/s 18257551.022op/s 18304361.679op/s 18309403.171op/s 18326633.371op/s 0.81% -0.659 -0.239 0.58% 7505.410op/s 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time 52.134µs 52.210µs ± 0.042µs 52.207µs ± 0.025µs 52.228µs 52.282µs 52.343µs 52.428µs 0.42% 1.360 3.767 0.08% 0.003µs 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput 19073747.054op/s 19153386.172op/s ± 15434.485op/s 19154583.525op/s ± 9146.107op/s 19164189.318op/s 19173442.673op/s 19176854.496op/s 19181491.779op/s 0.14% -1.350 3.718 0.08% 1091.383op/s 1 200
credit_card/is_card_number_no_luhn/x371413321323331 execution_time 6.027µs 6.036µs ± 0.010µs 6.034µs ± 0.003µs 6.037µs 6.045µs 6.075µs 6.111µs 1.27% 4.122 20.992 0.16% 0.001µs 1 200
credit_card/is_card_number_no_luhn/x371413321323331 throughput 163637448.149op/s 165664350.840op/s ± 269854.175op/s 165720665.379op/s ± 69135.015op/s 165781518.919op/s 165866979.948op/s 165904788.225op/s 165914078.936op/s 0.12% -4.093 20.672 0.16% 19081.572op/s 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
credit_card/is_card_number/ execution_time [3.912µs; 3.912µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/ throughput [255599788.335op/s; 255646989.807op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 execution_time [79.669µs; 79.780µs] or [-0.070%; +0.070%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 throughput [12534749.103op/s; 12552237.334op/s] or [-0.070%; +0.070%] None None None
credit_card/is_card_number/ 378282246310005 execution_time [72.856µs; 72.955µs] or [-0.068%; +0.068%] None None None
credit_card/is_card_number/ 378282246310005 throughput [13707451.561op/s; 13725994.998op/s] or [-0.068%; +0.068%] None None None
credit_card/is_card_number/37828224631 execution_time [3.912µs; 3.912µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/37828224631 throughput [255608715.479op/s; 255655542.537op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/378282246310005 execution_time [69.647µs; 69.740µs] or [-0.067%; +0.067%] None None None
credit_card/is_card_number/378282246310005 throughput [14339247.955op/s; 14358468.683op/s] or [-0.067%; +0.067%] None None None
credit_card/is_card_number/37828224631000521389798 execution_time [52.214µs; 52.225µs] or [-0.010%; +0.010%] None None None
credit_card/is_card_number/37828224631000521389798 throughput [19148091.551op/s; 19151810.155op/s] or [-0.010%; +0.010%] None None None
credit_card/is_card_number/x371413321323331 execution_time [6.040µs; 6.046µs] or [-0.045%; +0.045%] None None None
credit_card/is_card_number/x371413321323331 throughput [165409018.561op/s; 165556039.949op/s] or [-0.044%; +0.044%] None None None
credit_card/is_card_number_no_luhn/ execution_time [3.912µs; 3.914µs] or [-0.013%; +0.013%] None None None
credit_card/is_card_number_no_luhn/ throughput [255524072.471op/s; 255591974.650op/s] or [-0.013%; +0.013%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time [64.470µs; 64.505µs] or [-0.027%; +0.027%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput [15502700.902op/s; 15511131.582op/s] or [-0.027%; +0.027%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time [58.063µs; 58.107µs] or [-0.038%; +0.038%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 throughput [17209672.595op/s; 17222696.814op/s] or [-0.038%; +0.038%] None None None
credit_card/is_card_number_no_luhn/37828224631 execution_time [3.912µs; 3.913µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/37828224631 throughput [255557802.460op/s; 255612601.507op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/378282246310005 execution_time [55.002µs; 55.091µs] or [-0.081%; +0.081%] None None None
credit_card/is_card_number_no_luhn/378282246310005 throughput [18152357.270op/s; 18181777.936op/s] or [-0.081%; +0.081%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time [52.204µs; 52.216µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput [19151247.101op/s; 19155525.244op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 execution_time [6.035µs; 6.038µs] or [-0.023%; +0.023%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 throughput [165626951.646op/s; 165701750.033op/s] or [-0.023%; +0.023%] None None None

Group 14

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
single_flag_killswitch/rules-based execution_time 197.096ns 199.434ns ± 1.778ns 199.318ns ± 1.302ns 200.358ns 202.556ns 204.445ns 206.580ns 3.64% 0.962 1.120 0.89% 0.126ns 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
single_flag_killswitch/rules-based execution_time [199.187ns; 199.680ns] or [-0.124%; +0.124%] None None None

Group 15

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching serializing traces from their internal representation to msgpack execution_time 13.924ms 13.982ms ± 0.030ms 13.980ms ± 0.013ms 13.992ms 14.015ms 14.094ms 14.149ms 1.21% 1.962 7.557 0.21% 0.002ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching serializing traces from their internal representation to msgpack execution_time [13.978ms; 13.986ms] or [-0.030%; +0.030%] None None None

Group 16

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
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 17.780µs 25.646µs ± 9.390µs 18.271µs ± 0.372µs 34.114µs 42.429µs 43.387µs 59.504µs 225.67% 0.808 -0.249 36.52% 0.664µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
two way interface execution_time [24.345µs; 26.948µs] or [-5.074%; +5.074%] None None None

Group 17

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
redis/obfuscate_redis_string execution_time 32.862µs 33.520µs ± 0.806µs 33.079µs ± 0.144µs 34.555µs 34.679µs 35.823µs 36.867µs 11.45% 1.215 0.548 2.40% 0.057µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
redis/obfuscate_redis_string execution_time [33.408µs; 33.632µs] or [-0.333%; +0.333%] None None None

Group 18

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
benching deserializing traces from msgpack to their internal representation execution_time 48.692ms 48.982ms ± 0.741ms 48.892ms ± 0.092ms 48.991ms 49.077ms 51.686ms 56.875ms 16.33% 8.927 83.854 1.51% 0.052ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
benching deserializing traces from msgpack to their internal representation execution_time [48.879ms; 49.085ms] or [-0.210%; +0.210%] None None None

Group 19

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz fe3215f 1772832290 gyuheon0h/enable-crashtracker-ffi-ci
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
tags/replace_trace_tags execution_time 2.331µs 2.411µs ± 0.019µs 2.413µs ± 0.006µs 2.420µs 2.431µs 2.437µs 2.440µs 1.11% -2.360 6.461 0.78% 0.001µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
tags/replace_trace_tags execution_time [2.408µs; 2.414µs] or [-0.108%; +0.108%] None None None

Baseline

Omitted due to size.

@gyuheon0h gyuheon0h force-pushed the gyuheon0h/enable-crashtracker-ffi-ci branch from fe3215f to 23fe2b7 Compare March 6, 2026 21:59
@dd-octo-sts
Copy link
Contributor

dd-octo-sts bot commented Mar 6, 2026

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 8.70 MB 8.70 MB 0% (0 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 98.65 MB 98.65 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.29 MB 11.29 MB 0% (0 B) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 114.29 MB 114.29 MB 0% (0 B) 👌
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 27.16 MB 27.16 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 76.26 KB 76.26 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 186.03 MB 186.03 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 917.19 MB 917.19 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 9.93 MB 9.93 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 76.26 KB 76.26 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 24.76 MB 24.76 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 51.43 MB 51.43 MB 0% (0 B) 👌
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 22.97 MB 22.97 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 77.44 KB 77.44 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 190.23 MB 190.23 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 900.84 MB 900.84 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 7.53 MB 7.53 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 77.44 KB 77.44 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 26.52 MB 26.52 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 47.06 MB 47.06 MB 0% (0 B) 👌
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 86.54 MB 86.54 MB 0% (0 B) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 10.23 MB 10.23 MB 0% (0 B) 👌
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 107.16 MB 107.16 MB 0% (0 B) 👌
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.98 MB 11.98 MB 0% (0 B) 👌

@gyuheon0h gyuheon0h requested a review from Aaalibaba42 March 6, 2026 22:06
@gyuheon0h gyuheon0h force-pushed the gyuheon0h/enable-crashtracker-ffi-ci branch from 23fe2b7 to 4b412c1 Compare March 6, 2026 22:09
Copy link
Contributor

@r1viollet r1viollet left a comment

Choose a reason for hiding this comment

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

LGTM 🙇

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.

4 participants