Skip to content

feat(library-config)!: make libdd-library-config no_std compatible#1770

Open
pawelchcki wants to merge 32 commits intomainfrom
pawel/no-std-library-config
Open

feat(library-config)!: make libdd-library-config no_std compatible#1770
pawelchcki wants to merge 32 commits intomainfrom
pawel/no-std-library-config

Conversation

@pawelchcki
Copy link
Copy Markdown
Contributor

@pawelchcki pawelchcki commented Mar 20, 2026

What does this PR do?

Make libdd-library-config and libdd-library-config-ffi usable in no_std environments.

Motivation

Enable library config parsing in contexts without a full std runtime (e.g. injected into processes).

Key changes

  • Replace serde_yaml with yaml_serde (no_std-compatible), HashMap with BTreeMap
  • Add no_std_entry feature for standalone staticlib builds (allocator, panic handler)
  • Add ddog_library_configurator_get_from_bytes FFI function (works in both std and no_std)
  • Propagate std feature to workspace consumers of libdd-common-ffi

Uses a fork of yaml_serde pending upstream no_std support: yaml/yaml-serde#7

How to test

cargo check -p libdd-library-config --no-default-features
cargo check -p libdd-library-config-ffi --no-default-features
cargo check -p libdd-library-config-ffi --all-features
cargo check --workspace

…fig-ffi no_std compatible

Add no_std support to both crates with std enabled by default. Core
types and the matching engine compile under no_std+alloc, while
file I/O, YAML parsing, and FFI bindings are gated behind the std
feature flag.
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 20, 2026

📚 Documentation Check Results

⚠️ 325 documentation warning(s) found

📦 libdd-common - 175 warning(s)

📦 libdd-library-config - 150 warning(s)


Updated: 2026-04-08 11:36:13 UTC | Commit: c238708 | missing-docs job results

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 20, 2026

Clippy Allow Annotation Report

Comparing clippy allow annotations between branches:

  • Base Branch: origin/main
  • PR Branch: origin/pawel/no-std-library-config

Summary by Rule

Rule Base Branch PR Branch Change
expect_used 2 2 No change (0%)
panic 1 1 No change (0%)
unwrap_used 1 1 No change (0%)
Total 4 4 No change (0%)

Annotation Counts by File

File Base Branch PR Branch Change
libdd-common-ffi/src/cstr.rs 1 1 No change (0%)
libdd-common-ffi/src/slice.rs 2 2 No change (0%)
libdd-common/src/cstr.rs 1 1 No change (0%)

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 21 21 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 55 55 No change (0%)
libdd-common 10 10 No change (0%)
libdd-common-ffi 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 8 8 No change (0%)
libdd-trace-utils 15 15 No change (0%)
Total 196 196 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.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 20, 2026

🔒 Cargo Deny Results

No issues found!

📦 libdd-common - ✅ No issues

📦 libdd-library-config - ✅ No issues


Updated: 2026-04-08 11:39:22 UTC | Commit: c238708 | dependency-check job results

Add dlmalloc (non-Linux) and rustix-dlmalloc (Linux) as global
allocators, a panic handler, and no-std-dev/no-std-release profiles
with panic="abort" to support building the FFI crate as
staticlib/cdylib without std.
… builds

Define minimal #[repr(C)] FFI types (Slice, CharSlice, CStr, AsBytes)
locally for no_std, matching libdd-common-ffi layout. This enables
ddog_library_configurator_new, with_local_path, with_fleet_path,
with_process_info, and drop to compile and link without std.
Add CString and Vec types to the local ffi_types module for no_std,
with proper Drop impls using alloc::ffi::CString. Un-gate the
LibraryConfig struct while keeping rs_vec_to_ffi and
logged_result_to_ffi_with_messages behind std.
@datadog-prod-us1-3
Copy link
Copy Markdown

datadog-prod-us1-3 bot commented Mar 20, 2026

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: bc5fdf6 | Docs | Datadog PR Page | Was this helpful? React with 👍/👎 or give us feedback!

Replace the custom ffi_types::CString and Vec wrappers with a
re-export of alloc::ffi::CString. In no_std mode LibraryConfig
fields are alloc::ffi::CString (no C header generation happens
without std anyway).
@dd-octo-sts
Copy link
Copy Markdown
Contributor

dd-octo-sts bot commented Mar 20, 2026

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 7.63 MB 7.63 MB 0% (0 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 82.89 MB 82.93 MB +.05% (+43.74 KB) 🔍
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.08 MB 10.08 MB +.05% (+5.93 KB) 🔍
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 98.86 MB 98.96 MB +.10% (+102.84 KB) 🔍
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 24.98 MB 25.02 MB +.14% (+38.00 KB) 🔍
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 77.85 KB 78.50 KB +.83% (+664 B) 🔍
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 182.40 MB 183.30 MB +.49% (+928.00 KB) 🔍
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 904.68 MB 906.71 MB +.22% (+2.03 MB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 7.85 MB 7.86 MB +.15% (+12.50 KB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 77.85 KB 78.50 KB +.83% (+664 B) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 23.51 MB 23.51 MB +.03% (+8.00 KB) 🔍
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 45.85 MB 45.89 MB +.09% (+44.05 KB) 🔍
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 21.48 MB 21.51 MB +.14% (+31.00 KB) 🔍
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 79.06 KB 79.72 KB +.83% (+674 B) 🔍
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 186.41 MB 187.31 MB +.48% (+928.00 KB) 🔍
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 889.47 MB 891.47 MB +.22% (+1.99 MB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.09 MB 6.10 MB +.09% (+6.00 KB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 79.06 KB 79.72 KB +.83% (+674 B) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 25.16 MB 25.17 MB +.06% (+16.00 KB) 🔍
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 43.33 MB 43.37 MB +.09% (+40.83 KB) 🔍
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 74.07 MB 74.12 MB +.05% (+45.37 KB) 🔍
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 8.49 MB 8.49 MB +.04% (+4.00 KB) 🔍
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 91.32 MB 91.43 MB +.12% (+116.61 KB) 🔍
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.13 MB 10.15 MB +.16% (+16.93 KB) 🔍

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Mar 20, 2026

Codecov Report

❌ Patch coverage is 40.15152% with 79 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.49%. Comparing base (d2685bc) to head (6263db2).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1770      +/-   ##
==========================================
- Coverage   71.51%   71.49%   -0.03%     
==========================================
  Files         426      426              
  Lines       67369    67427      +58     
==========================================
+ Hits        48179    48204      +25     
- Misses      19190    19223      +33     
Components Coverage Δ
libdd-crashtracker 65.99% <ø> (-0.02%) ⬇️
libdd-crashtracker-ffi 34.09% <ø> (ø)
libdd-alloc 98.77% <ø> (ø)
libdd-data-pipeline 86.67% <ø> (+0.01%) ⬆️
libdd-data-pipeline-ffi 74.97% <ø> (+0.11%) ⬆️
libdd-common 79.09% <47.82%> (-0.08%) ⬇️
libdd-common-ffi 73.64% <47.82%> (-0.23%) ⬇️
libdd-telemetry 62.80% <ø> (ø)
libdd-telemetry-ffi 16.75% <ø> (ø)
libdd-dogstatsd-client 82.64% <ø> (ø)
datadog-ipc 73.10% <ø> (ø)
libdd-profiling 82.13% <ø> (ø)
libdd-profiling-ffi 64.94% <ø> (ø)
datadog-sidecar 30.56% <ø> (+0.31%) ⬆️
datdog-sidecar-ffi 8.92% <ø> (+1.49%) ⬆️
spawn-worker 54.69% <ø> (ø)
libdd-tinybytes 93.16% <ø> (ø)
libdd-trace-normalization 81.71% <ø> (ø)
libdd-trace-obfuscation 87.24% <ø> (ø)
libdd-trace-protobuf 68.25% <ø> (ø)
libdd-trace-utils 88.73% <ø> (ø)
datadog-tracer-flare 86.88% <ø> (ø)
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
Copy Markdown

pr-commenter bot commented Mar 20, 2026

Benchmarks

Comparison

Benchmark execution time: 2026-03-20 20:49:20

Comparing candidate commit 3243266 in PR branch pawel/no-std-library-config with baseline commit 5d5a596 in branch main.

Found 14 performance improvements and 0 performance regressions! Performance is the same for 45 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:credit_card/is_card_number/ 3782-8224-6310-005

  • 🟩 execution_time [-3.491µs; -3.213µs] or [-4.360%; -4.013%]
  • 🟩 throughput [+523892.248op/s; +570070.617op/s] or [+4.194%; +4.564%]

scenario:credit_card/is_card_number/ 378282246310005

  • 🟩 execution_time [-15.872µs; -15.714µs] or [-18.814%; -18.627%]
  • 🟩 throughput [+2718514.960op/s; +2740916.111op/s] or [+22.932%; +23.121%]

scenario:credit_card/is_card_number/378282246310005

  • 🟩 execution_time [-5.647µs; -5.530µs] or [-8.018%; -7.853%]
  • 🟩 throughput [+1211504.087op/s; +1235522.463op/s] or [+8.532%; +8.701%]

scenario:credit_card/is_card_number/37828224631000521389798

  • 🟩 execution_time [-7.458µs; -7.420µs] or [-14.038%; -13.967%]
  • 🟩 throughput [+3056203.836op/s; +3073912.169op/s] or [+16.236%; +16.330%]

scenario:credit_card/is_card_number_no_luhn/ 378282246310005

  • 🟩 execution_time [-4.763µs; -4.710µs] or [-8.086%; -7.997%]
  • 🟩 throughput [+1476664.639op/s; +1492285.631op/s] or [+8.698%; +8.790%]

scenario:credit_card/is_card_number_no_luhn/378282246310005

  • 🟩 execution_time [-5.135µs; -5.075µs] or [-9.228%; -9.120%]
  • 🟩 throughput [+1804975.558op/s; +1825414.378op/s] or [+10.043%; +10.157%]

scenario:credit_card/is_card_number_no_luhn/37828224631000521389798

  • 🟩 execution_time [-7.428µs; -7.387µs] or [-13.979%; -13.903%]
  • 🟩 throughput [+3039350.567op/s; +3058359.021op/s] or [+16.150%; +16.251%]

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 3243266 1774038746 pawel/no-std-library-config
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 49.114ms 49.583ms ± 1.225ms 49.458ms ± 0.076ms 49.507ms 49.631ms 57.430ms 62.017ms 25.39% 8.308 71.149 2.46% 0.087ms 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 [49.413ms; 49.753ms] or [-0.342%; +0.342%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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 12.948ms 12.981ms ± 0.016ms 12.980ms ± 0.011ms 12.991ms 13.006ms 13.019ms 13.040ms 0.46% 0.411 0.176 0.12% 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 [12.979ms; 12.983ms] 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 3243266 1774038746 pawel/no-std-library-config
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 186.083µs 186.470µs ± 0.200µs 186.460µs ± 0.157µs 186.621µs 186.796µs 186.897µs 187.261µs 0.43% 0.387 0.161 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 5340139.519op/s 5362797.113op/s ± 5748.120op/s 5363076.958op/s ± 4528.355op/s 5367452.800op/s 5371467.422op/s 5373211.201op/s 5373955.421op/s 0.20% -0.381 0.144 0.11% 406.453op/s 1 200
normalization/normalize_name/normalize_name/bad-name execution_time 17.882µs 17.956µs ± 0.035µs 17.954µs ± 0.021µs 17.974µs 18.017µs 18.054µs 18.073µs 0.66% 0.614 0.642 0.19% 0.002µs 1 200
normalization/normalize_name/normalize_name/bad-name throughput 55332649.192op/s 55693007.668op/s ± 107863.069op/s 55697659.997op/s ± 65174.739op/s 55768691.153op/s 55851433.879op/s 55906006.909op/s 55921000.074op/s 0.40% -0.601 0.617 0.19% 7627.071op/s 1 200
normalization/normalize_name/normalize_name/good execution_time 10.338µs 10.537µs ± 0.123µs 10.534µs ± 0.043µs 10.574µs 10.631µs 10.721µs 11.998µs 13.90% 8.298 96.366 1.17% 0.009µs 1 200
normalization/normalize_name/normalize_name/good throughput 83344224.908op/s 94915170.699op/s ± 1019481.724op/s 94928993.899op/s ± 383407.414op/s 95362493.090op/s 95958810.295op/s 96372104.864op/s 96731501.200op/s 1.90% -7.297 81.238 1.07% 72088.244op/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 [186.442µs; 186.498µ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 [5362000.478op/s; 5363593.747op/s] or [-0.015%; +0.015%] None None None
normalization/normalize_name/normalize_name/bad-name execution_time [17.951µs; 17.960µs] or [-0.027%; +0.027%] None None None
normalization/normalize_name/normalize_name/bad-name throughput [55678058.884op/s; 55707956.452op/s] or [-0.027%; +0.027%] None None None
normalization/normalize_name/normalize_name/good execution_time [10.520µs; 10.554µs] or [-0.162%; +0.162%] None None None
normalization/normalize_name/normalize_name/good throughput [94773880.337op/s; 95056461.061op/s] or [-0.149%; +0.149%] None None None

Group 4

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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 159.525µs 160.684µs ± 0.386µs 160.639µs ± 0.202µs 160.854µs 161.367µs 161.749µs 162.426µs 1.11% 1.014 2.668 0.24% 0.027µ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 [160.630µs; 160.737µs] or [-0.033%; +0.033%] None None None

Group 5

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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.891µs 3.913µs ± 0.003µs 3.912µs ± 0.001µs 3.914µs 3.918µs 3.920µs 3.921µs 0.21% -1.311 12.437 0.08% 0.000µs 1 200
credit_card/is_card_number/ throughput 255062089.714op/s 255570178.439op/s ± 195452.472op/s 255602181.072op/s ± 97781.372op/s 255684390.472op/s 255795574.180op/s 255840982.755op/s 256984511.382op/s 0.54% 1.340 12.664 0.08% 13820.577op/s 1 200
credit_card/is_card_number/ 3782-8224-6310-005 execution_time 74.611µs 76.708µs ± 0.874µs 76.693µs ± 0.628µs 77.317µs 78.079µs 79.230µs 79.438µs 3.58% 0.255 0.050 1.14% 0.062µs 1 200
credit_card/is_card_number/ 3782-8224-6310-005 throughput 12588500.280op/s 13038085.647op/s ± 148261.337op/s 13039046.402op/s ± 105886.017op/s 13144877.877op/s 13274049.067op/s 13331540.374op/s 13402819.278op/s 2.79% -0.189 -0.040 1.13% 10483.660op/s 1 200
credit_card/is_card_number/ 378282246310005 execution_time 68.370µs 68.568µs ± 0.074µs 68.561µs ± 0.044µs 68.613µs 68.679µs 68.713µs 69.055µs 0.72% 1.295 8.178 0.11% 0.005µs 1 200
credit_card/is_card_number/ 378282246310005 throughput 14481164.667op/s 14584149.457op/s ± 15761.225op/s 14585454.655op/s ± 9300.720op/s 14593816.241op/s 14606389.714op/s 14618270.167op/s 14626342.042op/s 0.28% -1.267 7.986 0.11% 1114.487op/s 1 200
credit_card/is_card_number/37828224631 execution_time 3.894µs 3.914µs ± 0.003µs 3.914µs ± 0.002µs 3.915µs 3.917µs 3.919µs 3.920µs 0.17% -1.998 15.114 0.07% 0.000µs 1 200
credit_card/is_card_number/37828224631 throughput 255072891.869op/s 255519590.296op/s ± 172317.122op/s 255501951.170op/s ± 107391.353op/s 255630771.555op/s 255750170.106op/s 255820726.352op/s 256828410.286op/s 0.52% 2.025 15.348 0.07% 12184.661op/s 1 200
credit_card/is_card_number/378282246310005 execution_time 64.612µs 64.838µs ± 0.156µs 64.806µs ± 0.089µs 64.907µs 65.122µs 65.381µs 65.555µs 1.16% 1.430 3.012 0.24% 0.011µs 1 200
credit_card/is_card_number/378282246310005 throughput 15254338.038op/s 15423109.014op/s ± 36911.446op/s 15430714.550op/s ± 21231.847op/s 15449721.970op/s 15468930.653op/s 15473065.402op/s 15477095.446op/s 0.30% -1.409 2.916 0.24% 2610.033op/s 1 200
credit_card/is_card_number/37828224631000521389798 execution_time 45.400µs 45.686µs ± 0.131µs 45.695µs ± 0.095µs 45.776µs 45.896µs 45.935µs 45.963µs 0.59% -0.153 -0.711 0.29% 0.009µs 1 200
credit_card/is_card_number/37828224631000521389798 throughput 21756643.302op/s 21888547.819op/s ± 62631.822op/s 21884462.109op/s ± 45304.908op/s 21933555.603op/s 21999054.708op/s 22017762.846op/s 22026405.134op/s 0.65% 0.164 -0.708 0.29% 4428.739op/s 1 200
credit_card/is_card_number/x371413321323331 execution_time 6.430µs 6.436µs ± 0.003µs 6.436µs ± 0.002µs 6.438µs 6.442µs 6.447µs 6.449µs 0.20% 0.999 1.586 0.05% 0.000µs 1 200
credit_card/is_card_number/x371413321323331 throughput 155069423.004op/s 155378556.187op/s ± 83694.159op/s 155385090.803op/s ± 51513.289op/s 155440616.634op/s 155491588.433op/s 155516760.118op/s 155522536.206op/s 0.09% -0.994 1.573 0.05% 5918.071op/s 1 200
credit_card/is_card_number_no_luhn/ execution_time 3.898µs 3.913µs ± 0.002µs 3.913µs ± 0.001µs 3.914µs 3.917µs 3.918µs 3.919µs 0.16% -0.892 7.006 0.06% 0.000µs 1 200
credit_card/is_card_number_no_luhn/ throughput 255168943.812op/s 255566246.776op/s ± 155944.121op/s 255573426.283op/s ± 89853.071op/s 255663183.419op/s 255777375.235op/s 255850615.125op/s 256557169.473op/s 0.38% 0.907 7.104 0.06% 11026.915op/s 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time 61.457µs 62.681µs ± 0.505µs 62.714µs ± 0.358µs 63.009µs 63.470µs 63.597µs 63.845µs 1.80% -0.200 -0.421 0.80% 0.036µs 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput 15662866.622op/s 15954835.016op/s ± 128844.795op/s 15945455.999op/s ± 91470.929op/s 16040868.187op/s 16188204.580op/s 16262951.172op/s 16271499.983op/s 2.04% 0.237 -0.397 0.81% 9110.703op/s 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time 53.950µs 54.165µs ± 0.076µs 54.163µs ± 0.045µs 54.210µs 54.295µs 54.340µs 54.369µs 0.38% 0.011 0.245 0.14% 0.005µs 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 throughput 18392775.636op/s 18462268.490op/s ± 25982.182op/s 18462793.778op/s ± 15292.387op/s 18476289.379op/s 18507208.285op/s 18524449.569op/s 18535675.615op/s 0.39% -0.001 0.244 0.14% 1837.218op/s 1 200
credit_card/is_card_number_no_luhn/37828224631 execution_time 3.897µs 3.913µs ± 0.002µs 3.912µs ± 0.001µs 3.914µs 3.917µs 3.919µs 3.921µs 0.22% -0.530 8.566 0.06% 0.000µs 1 200
credit_card/is_card_number_no_luhn/37828224631 throughput 255036318.728op/s 255577507.017op/s ± 157555.171op/s 255597367.349op/s ± 83988.573op/s 255669490.968op/s 255759536.405op/s 255870573.921op/s 256591057.300op/s 0.39% 0.549 8.668 0.06% 11140.833op/s 1 200
credit_card/is_card_number_no_luhn/378282246310005 execution_time 50.313µs 50.538µs ± 0.106µs 50.525µs ± 0.059µs 50.585µs 50.721µs 50.872µs 50.990µs 0.92% 1.022 1.928 0.21% 0.007µs 1 200
credit_card/is_card_number_no_luhn/378282246310005 throughput 19611700.221op/s 19787263.316op/s ± 41307.198op/s 19792110.865op/s ± 23113.761op/s 19814976.655op/s 19840734.128op/s 19861670.598op/s 19875536.978op/s 0.42% -1.004 1.869 0.21% 2920.860op/s 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time 45.396µs 45.728µs ± 0.140µs 45.738µs ± 0.101µs 45.835µs 45.936µs 45.969µs 45.988µs 0.55% -0.279 -0.735 0.30% 0.010µs 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput 21744567.656op/s 21868880.636op/s ± 66803.566op/s 21863575.284op/s ± 48344.984op/s 21911825.814op/s 21989595.426op/s 22005589.151op/s 22028365.897op/s 0.75% 0.290 -0.727 0.30% 4723.725op/s 1 200
credit_card/is_card_number_no_luhn/x371413321323331 execution_time 6.430µs 6.438µs ± 0.004µs 6.437µs ± 0.003µs 6.440µs 6.445µs 6.448µs 6.454µs 0.26% 0.641 0.886 0.06% 0.000µs 1 200
credit_card/is_card_number_no_luhn/x371413321323331 throughput 154949005.425op/s 155333051.866op/s ± 97351.367op/s 155344526.474op/s ± 63541.584op/s 155402793.370op/s 155478687.787op/s 155505433.774op/s 155529307.066op/s 0.12% -0.637 0.874 0.06% 6883.781op/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.913µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number/ throughput [255543090.606op/s; 255597266.272op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 execution_time [76.587µs; 76.829µs] or [-0.158%; +0.158%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 throughput [13017538.052op/s; 13058633.243op/s] or [-0.158%; +0.158%] None None None
credit_card/is_card_number/ 378282246310005 execution_time [68.557µs; 68.578µs] or [-0.015%; +0.015%] None None None
credit_card/is_card_number/ 378282246310005 throughput [14581965.103op/s; 14586333.811op/s] or [-0.015%; +0.015%] None None None
credit_card/is_card_number/37828224631 execution_time [3.913µs; 3.914µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/37828224631 throughput [255495708.800op/s; 255543471.791op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/378282246310005 execution_time [64.817µs; 64.860µs] or [-0.033%; +0.033%] None None None
credit_card/is_card_number/378282246310005 throughput [15417993.443op/s; 15428224.585op/s] or [-0.033%; +0.033%] None None None
credit_card/is_card_number/37828224631000521389798 execution_time [45.668µs; 45.704µs] or [-0.040%; +0.040%] None None None
credit_card/is_card_number/37828224631000521389798 throughput [21879867.651op/s; 21897227.987op/s] or [-0.040%; +0.040%] None None None
credit_card/is_card_number/x371413321323331 execution_time [6.435µs; 6.436µs] or [-0.007%; +0.007%] None None None
credit_card/is_card_number/x371413321323331 throughput [155366956.982op/s; 155390155.393op/s] or [-0.007%; +0.007%] None None None
credit_card/is_card_number_no_luhn/ execution_time [3.913µs; 3.913µs] or [-0.008%; +0.008%] None None None
credit_card/is_card_number_no_luhn/ throughput [255544634.421op/s; 255587859.132op/s] or [-0.008%; +0.008%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time [62.611µs; 62.751µs] or [-0.112%; +0.112%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput [15936978.367op/s; 15972691.666op/s] or [-0.112%; +0.112%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time [54.154µs; 54.175µs] or [-0.020%; +0.020%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 throughput [18458667.609op/s; 18465869.370op/s] or [-0.020%; +0.020%] None None None
credit_card/is_card_number_no_luhn/37828224631 execution_time [3.912µs; 3.913µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/37828224631 throughput [255555671.386op/s; 255599342.648op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/378282246310005 execution_time [50.523µs; 50.552µs] or [-0.029%; +0.029%] None None None
credit_card/is_card_number_no_luhn/378282246310005 throughput [19781538.536op/s; 19792988.097op/s] or [-0.029%; +0.029%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time [45.708µs; 45.747µs] or [-0.042%; +0.042%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput [21859622.304op/s; 21878138.968op/s] or [-0.042%; +0.042%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 execution_time [6.437µs; 6.438µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 throughput [155319559.903op/s; 155346543.829op/s] or [-0.009%; +0.009%] None None None

Group 6

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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 189.970ns 192.206ns ± 1.751ns 192.055ns ± 1.247ns 193.198ns 195.589ns 196.831ns 200.229ns 4.26% 1.045 1.610 0.91% 0.124ns 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 [191.964ns; 192.449ns] or [-0.126%; +0.126%] None None None

Group 7

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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 5.017µs 5.075µs ± 0.028µs 5.070µs ± 0.020µs 5.092µs 5.136µs 5.138µs 5.144µs 1.46% 0.818 0.080 0.56% 0.002µ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 [5.071µs; 5.079µs] or [-0.077%; +0.077%] None None None

Group 8

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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.066µs 146.725µs ± 1.713µs 146.419µs ± 0.592µs 147.120µs 148.560µs 152.883µs 161.733µs 10.46% 4.936 34.787 1.16% 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.488µs; 146.963µs] or [-0.162%; +0.162%] None None None

Group 9

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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 34.319µs 34.772µs ± 0.755µs 34.433µs ± 0.055µs 34.523µs 36.364µs 36.394µs 38.026µs 10.43% 1.824 1.907 2.17% 0.053µ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 [34.668µs; 34.877µs] or [-0.301%; +0.301%] None None None

Group 10

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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.219ms 4.224ms ± 0.003ms 4.224ms ± 0.002ms 4.226ms 4.228ms 4.232ms 4.254ms 0.72% 3.861 32.638 0.08% 0.000ms 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.224ms; 4.225ms] or [-0.011%; +0.011%] None None None

Group 11

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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/2598 execution_time 3.402ms 3.435ms ± 0.032ms 3.424ms ± 0.007ms 3.433ms 3.520ms 3.543ms 3.556ms 3.86% 2.182 3.872 0.93% 0.002ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
receiver_entry_point/report/2598 execution_time [3.430ms; 3.439ms] or [-0.129%; +0.129%] None None None

Group 12

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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.930ms 13.973ms ± 0.025ms 13.970ms ± 0.012ms 13.983ms 14.016ms 14.067ms 14.104ms 0.96% 1.815 6.138 0.18% 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.970ms; 13.977ms] or [-0.025%; +0.025%] None None None

Group 13

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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.368µs 86.727µs ± 0.133µs 86.719µs ± 0.053µs 86.770µs 86.849µs 87.037µs 88.082µs 1.57% 5.415 53.044 0.15% 0.009µ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.709µs; 86.745µs] or [-0.021%; +0.021%] None None None

Group 14

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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 495.453µs 497.119µs ± 1.855µs 496.327µs ± 0.402µs 497.004µs 500.559µs 503.511µs 506.162µs 1.98% 1.724 2.866 0.37% 0.131µs 1 200
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput 1975652.931op/s 2011619.765op/s ± 7459.876op/s 2014800.839op/s ± 1632.194op/s 2016158.107op/s 2017615.917op/s 2018271.327op/s 2018356.504op/s 0.18% -1.703 2.728 0.37% 527.493op/s 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time 377.107µs 377.948µs ± 0.420µs 377.940µs ± 0.294µs 378.210µs 378.697µs 379.002µs 379.275µs 0.35% 0.425 -0.165 0.11% 0.030µs 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput 2636611.134op/s 2645871.277op/s ± 2936.437op/s 2645926.134op/s ± 2063.075op/s 2648127.091op/s 2650181.783op/s 2650969.736op/s 2651765.742op/s 0.22% -0.420 -0.174 0.11% 207.637op/s 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time 168.540µs 168.878µs ± 0.133µs 168.866µs ± 0.077µs 168.961µs 169.118µs 169.229µs 169.283µs 0.25% 0.357 0.312 0.08% 0.009µs 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput 5907277.450op/s 5921433.873op/s ± 4669.255op/s 5921857.646op/s ± 2683.541op/s 5924190.817op/s 5928745.128op/s 5931178.265op/s 5933307.144op/s 0.19% -0.352 0.308 0.08% 330.166op/s 1 200
normalization/normalize_service/normalize_service/[empty string] execution_time 36.827µs 37.034µs ± 0.123µs 37.067µs ± 0.103µs 37.138µs 37.199µs 37.235µs 37.247µs 0.48% -0.190 -1.455 0.33% 0.009µs 1 200
normalization/normalize_service/normalize_service/[empty string] throughput 26847786.874op/s 27002749.368op/s ± 89872.594op/s 26977882.674op/s ± 75057.453op/s 27099282.655op/s 27134688.371op/s 27141319.393op/s 27153928.466op/s 0.65% 0.195 -1.456 0.33% 6354.952op/s 1 200
normalization/normalize_service/normalize_service/test_ASCII execution_time 46.217µs 46.316µs ± 0.065µs 46.304µs ± 0.036µs 46.352µs 46.422µs 46.452µs 46.820µs 1.11% 2.710 16.959 0.14% 0.005µs 1 200
normalization/normalize_service/normalize_service/test_ASCII throughput 21358573.247op/s 21590865.579op/s ± 29993.568op/s 21596511.169op/s ± 16688.328op/s 21611003.159op/s 21625825.688op/s 21630327.091op/s 21637186.203op/s 0.19% -2.662 16.462 0.14% 2120.866op/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 [496.862µs; 497.376µs] or [-0.052%; +0.052%] None None None
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput [2010585.898op/s; 2012653.632op/s] or [-0.051%; +0.051%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time [377.890µs; 378.006µs] or [-0.015%; +0.015%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput [2645464.316op/s; 2646278.239op/s] or [-0.015%; +0.015%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time [168.860µs; 168.897µs] or [-0.011%; +0.011%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput [5920786.760op/s; 5922080.987op/s] or [-0.011%; +0.011%] None None None
normalization/normalize_service/normalize_service/[empty string] execution_time [37.017µs; 37.051µs] or [-0.046%; +0.046%] None None None
normalization/normalize_service/normalize_service/[empty string] throughput [26990293.890op/s; 27015204.845op/s] or [-0.046%; +0.046%] None None None
normalization/normalize_service/normalize_service/test_ASCII execution_time [46.307µs; 46.325µs] or [-0.019%; +0.019%] None None None
normalization/normalize_service/normalize_service/test_ASCII throughput [21586708.759op/s; 21595022.399op/s] or [-0.019%; +0.019%] None None None

Group 15

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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.307µs 2.353µs ± 0.013µs 2.352µs ± 0.004µs 2.359µs 2.374µs 2.378µs 2.380µs 1.17% -0.982 2.559 0.56% 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.351µs; 2.355µs] or [-0.077%; +0.077%] None None None

Group 16

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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_timestamped_x1000 execution_time 4.232ms 4.236ms ± 0.008ms 4.235ms ± 0.001ms 4.236ms 4.240ms 4.246ms 4.345ms 2.60% 11.941 154.706 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_timestamped_x1000 execution_time [4.235ms; 4.237ms] or [-0.027%; +0.027%] None None None

Group 17

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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.096µs 729.441µs ± 0.612µs 729.423µs ± 0.354µs 729.797µs 730.541µs 730.960µs 732.439µs 0.41% 0.754 2.186 0.08% 0.043µ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.356µs; 729.526µs] or [-0.012%; +0.012%] None None None

Group 18

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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 235.877ns 249.118ns ± 14.979ns 242.679ns ± 4.069ns 251.441ns 283.017ns 290.129ns 292.849ns 20.67% 1.504 0.953 6.00% 1.059ns 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 [247.042ns; 251.194ns] or [-0.833%; +0.833%] None None None

Group 19

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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.207µs 3.205µs ± 1.418µs 2.982µs ± 0.030µs 3.014µs 3.684µs 13.945µs 14.734µs 394.17% 7.332 55.007 44.14% 0.100µ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.009µs; 3.402µs] or [-6.132%; +6.132%] None None None

Group 20

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 3243266 1774038746 pawel/no-std-library-config
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 18.194µs 26.725µs ± 10.111µs 18.670µs ± 0.400µs 35.281µs 45.520µs 46.194µs 70.428µs 277.22% 0.925 0.612 37.74% 0.715µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
two way interface execution_time [25.323µs; 28.126µs] or [-5.244%; +5.244%] None None None

Baseline

Omitted due to size.

cbindgen doesn't evaluate cfg(not(feature = "std")) and picks up
the ffi_types module types, causing redefinitions with common.h.
Exclude Slice_CChar, CharSlice, CStr, Error, and Vec_U8 from the
generated header since they are already provided by common.h.

Also simplify ffi_types::CString to a re-export of alloc::ffi::CString.
- Fix import ordering for rustfmt (cfg(not(...)) before cfg(feature))
- Remove ddog_CStr from cbindgen exclude list (not in common.h)
- Regenerate LICENSE-3rdparty.yml for new deps
… builds

Make the minimum subset of libdd-common-ffi work in no_std+alloc so that
libdd-library-config-ffi can use the real FFI types instead of duplicating
them in a local ffi_types module (~55 lines removed).

- Add std feature to libdd-common-ffi (default on), gating std-only modules
- Replace std:: imports with core::/alloc:: equivalents in slice.rs and cstr.rs
- Replace std::ffi::CStr with core::ffi::CStr in libdd-common cstr macros
- Make libdd-common-ffi a non-optional dependency of libdd-library-config-ffi
- Delete the duplicated ffi_types module from libdd-library-config-ffi
- Remove cbindgen exclude list (no longer needed without ffi_types)
…wn dep

BTreeMap from alloc::collections works in both std and no_std without
needing the hashbrown crate. The config maps are small, so O(log n) vs
O(1) is negligible, and deterministic iteration order is a bonus.
… YAML parsing

yaml-peg supports no_std+alloc, enabling parse_stable_config_slice to
work without std. Moved trim_bytes into parse_stable_config_slice so
all callers (including get_config_from_bytes) benefit from whitespace
trimming. Removed serde_yaml dependency.
…staticlib/cdylib compat

The staticlib/cdylib crate types require an unwinding runtime that doesn't
exist in no_std. Gate #![no_std] on the new no_std_entry feature so that
--no-default-features compiles with implicit std, while true no_std builds
use --features no_std_entry with -Zbuild-std panic=abort.
@pawelchcki pawelchcki force-pushed the pawel/no-std-library-config branch from ee51658 to e77ef42 Compare March 20, 2026 20:07
…eature to consumers

Make vec.rs no_std-compatible (core/alloc imports, gate anyhow impl).
Move vec module out of #[cfg(feature = "std")] gate since it only needs
alloc. Add features = ["std"] to all workspace crates that depend on
libdd-common-ffi with default-features = false, since they all need the
std-gated types (Handle, Result, Error, etc).
Ok(s) => s,
Err(e) => return LoggedResult::Err(anyhow::Error::msg(e)),
};
match yaml_peg::serde::from_str::<StableConfig>(s) {
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.

I don't feel good replacing serde_yaml with a basically unknown yaml parser crate

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.

yes but, https://github.com/dtolnay/serde-yaml was deprecated 2 years ago and stopped receiving any updates. same https://github.com/sebastienrousseau/serde_yml

https://github.com/jayvdb/advisory-db/blob/main/crates/serde_yaml/RUSTSEC-0000-0000.md#recommended-alternatives

yaml_peg is one of recommended alternatives, although with caveat. Generally looks like the state of yaml parsing in Rust is not_great:tm:

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.

I used to rely on https://github.com/Ethiraric/yaml-rust2 and/or https://github.com/saphyr-rs/saphyr. They are not super active, but still slightly more than yaml-peg? Alas, they don't have a no_std feature it seems...

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.

@yannham yesterday I found https://github.com/yaml/yaml-serde - which is resurected serde-yaml now under new auspices.

Luckily converting it into no_std was super simple yaml/yaml-serde#7

Copy link
Copy Markdown
Contributor

@bantonsson bantonsson left a comment

Choose a reason for hiding this comment

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

I'm not super confident about the changes either. Besides, is there a need for no_std right now, or is it just a nice to have?

@pawelchcki
Copy link
Copy Markdown
Contributor Author

If you're good with the idea of these changes, I'll be happy to add more testing to cover more of the yaml edgecases.
@bantonsson @paullegranddc
I can also make serde_yaml the default if std is enabled - this is not large problem.

Making this a no_std will also help with pushing these changes to other 3 repositories (httpd and maybe even cpp)

The difference in artifact size is hundreds of kB vs MB of size - I can also add tests in libdatadog which will show you that.

@pawelchcki pawelchcki marked this pull request as draft March 24, 2026 15:34
@pawelchcki
Copy link
Copy Markdown
Contributor Author

pawelchcki commented Mar 24, 2026

I converted back to draft, as it looks like the consesus leans towards slight ok-go on this issue. Because of it I need to add more tests and push this change through some automated code reviews.

- Replace yaml_peg with yaml_serde (serde on libyaml-rs) for YAML parsing
- Fix panic on comment-only YAML by using unwrap_or_default
- Add yaml wrapper module to isolate YAML dependency
- Add tests for comment-only and empty YAML inputs
- Remove unused no-std-dev/no-std-release profiles
…comments

- Add ddog_library_configurator_get_from_bytes FFI function available in
  both std and no_std builds, completing the no_std FFI surface
- Add LibraryConfigBytesResult type and drop function for the new API
- Refactor vec_to_ffi to use alloc::ffi types, making it no_std-compatible
- Change get_config_from_bytes to take &ProcessInfo (only borrows internally)
- Add SAFETY comments on unsafe blocks (abort, CStr::from_bytes_with_nul_unchecked)
- Document rust_eh_personality linkage constraint and panic handler behavior
- Add comment explaining no_std_entry feature gating on #![no_std]
- Fix safety doc reference (std::str::from_raw_parts -> core::slice::from_raw_parts)
- Document ConfigMap duplicate key behavior
- Fix typo: varriable -> variable
…config

# Conflicts:
#	Cargo.lock
#	LICENSE-3rdparty.yml
#	libdd-common-ffi/Cargo.toml
#	libdd-library-config/Cargo.toml
Avoid full lockfile regeneration that pulled newer transitive deps
incompatible with MSRV 1.84.1.
@pawelchcki pawelchcki marked this pull request as ready for review April 8, 2026 10:36
@pawelchcki pawelchcki requested a review from a team as a code owner April 8, 2026 10:36
@pawelchcki pawelchcki requested review from mabdinur and removed request for a team April 8, 2026 10:36
@pawelchcki
Copy link
Copy Markdown
Contributor Author

@codex review

Copy link
Copy Markdown

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

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: 464fcecca5

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…c safety

Ensures ddog_library_configurator_get_from_bytes returns
LibraryConfigBytesResult::Err on panic (e.g. invalid FFI slice input)
instead of aborting the process in std+catch_panic+unwind builds.
…le return types

Accept an error constructor parameter instead of hardcoding
LibraryConfigLoggedResult::Err, so both get and get_from_bytes
share the same panic-catching logic.
@pawelchcki
Copy link
Copy Markdown
Contributor Author

@paullegranddc @bantonsson not sure if you'd strongly prefer to wait until yaml/yaml-serde#7 is merged ? If you'r ok with branch version the this PR is now ready to review.

If not, I can mark it again as draft

@pawelchcki pawelchcki requested a review from yannham April 9, 2026 16:51
@pawelchcki
Copy link
Copy Markdown
Contributor Author

image

…port

Introduce a no_std-compatible ConfigRead trait so 3rd-party libraries can
provide custom file readers (in-memory, sandboxed, etc.) instead of
relying on std::fs. get_config_from_file now delegates to the new
get_config_from_reader + StdConfigRead.
- Fix TOCTOU in StdConfigRead::read() by reading from already-opened
  file handle instead of re-opening via fs::read()
- Propagate debug logs through get_config_from_bytes (returns
  LoggedResult instead of anyhow::Result), add logs to
  LibraryConfigBytesResult FFI type
- Use thiserror for ConfigReadError to get core::error::Error impl
  (works in no_std via default-features = false)
- Fix ConfigMap deserializer expecting message (stale HashMap reference)
- Add no_std CI build step for library-config crates
…e yaml wrapper

- Move MAX_CONFIG_FILE_SIZE, ConfigReadError, ConfigRead trait, and
  StdConfigRead into dedicated config_read.rs module
- Remove yaml::from_bytes wrapper — yaml_serde::from_slice already
  handles empty, comment-only, and whitespace-only documents
- Remove unused trim_bytes utility
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.

6 participants