Skip to content

Conversation

@morrisonlevi
Copy link
Contributor

What does this PR do?

This adds the ProfilesDictionary data structure, which holds deduplicated functions, mappings, and strings and gives back IDs to the inserted elements.

Motivation

This is another stepping stone for my new profiling API with long-lived functions, mappings, and strings.

Additional Notes

This is stacked on top of PR #1347.

How to test the change?

Regular testing applies, just additions here (that are currently unused).

@morrisonlevi morrisonlevi added the profiling Relates to the profiling* modules. label Nov 15, 2025
@github-actions github-actions bot removed the profiling Relates to the profiling* modules. label Nov 15, 2025
@pr-commenter
Copy link

pr-commenter bot commented Nov 15, 2025

Benchmarks

Comparison

Benchmark execution time: 2025-11-19 22:08:07

Comparing candidate commit 89b7a8e in PR branch levi/profiles_dictionary with baseline commit a3f9e86 in branch main.

Found 0 performance improvements and 1 performance regressions! Performance is the same for 54 metrics, 2 unstable metrics.

scenario:benching deserializing traces from msgpack to their internal representation

  • 🟥 execution_time [+3.601ms; +4.563ms] or [+5.815%; +7.367%]

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 89b7a8e 1763589202 levi/profiles_dictionary
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.925µs 25.489µs ± 9.200µs 18.197µs ± 0.209µs 34.002µs 42.211µs 43.944µs 54.396µs 198.92% 0.730 -0.824 36.00% 0.651µ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.214µs; 26.764µs] or [-5.002%; +5.002%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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.829µs 160.465µs ± 0.420µs 160.393µs ± 0.128µs 160.573µs 160.939µs 161.084µs 165.141µs 2.96% 7.169 75.544 0.26% 0.030µ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.407µs; 160.523µs] or [-0.036%; +0.036%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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 65.512ms 66.011ms ± 2.411ms 65.687ms ± 0.063ms 65.765ms 66.135ms 83.208ms 87.759ms 33.60% 8.043 63.567 3.64% 0.170ms 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 [65.677ms; 66.346ms] or [-0.506%; +0.506%] None None None

Group 4

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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.815µs 534.637µs ± 0.721µs 534.582µs ± 0.252µs 534.842µs 535.178µs 535.500µs 543.481µs 1.66% 9.260 111.460 0.13% 0.051µs 1 200
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput 1839989.532op/s 1870431.580op/s ± 2491.957op/s 1870620.719op/s ± 881.084op/s 1871350.849op/s 1872648.739op/s 1873131.982op/s 1873306.517op/s 0.14% -9.148 109.658 0.13% 176.208op/s 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time 379.877µs 380.701µs ± 0.342µs 380.672µs ± 0.248µs 380.949µs 381.277µs 381.574µs 381.858µs 0.31% 0.318 -0.048 0.09% 0.024µs 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput 2618775.711op/s 2626734.831op/s ± 2358.324op/s 2626932.373op/s ± 1714.160op/s 2628442.335op/s 2630345.409op/s 2630901.187op/s 2632431.325op/s 0.21% -0.313 -0.055 0.09% 166.759op/s 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time 195.555µs 196.249µs ± 0.252µs 196.237µs ± 0.148µs 196.404µs 196.698µs 196.860µs 196.916µs 0.35% 0.033 0.232 0.13% 0.018µs 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput 5078299.358op/s 5095584.052op/s ± 6543.194op/s 5095879.646op/s ± 3853.158op/s 5099289.884op/s 5107085.091op/s 5109820.753op/s 5113662.590op/s 0.35% -0.024 0.232 0.13% 462.674op/s 1 200
normalization/normalize_service/normalize_service/[empty string] execution_time 36.775µs 37.010µs ± 0.104µs 37.008µs ± 0.042µs 37.049µs 37.119µs 37.168µs 38.143µs 3.07% 6.367 68.663 0.28% 0.007µs 1 200
normalization/normalize_service/normalize_service/[empty string] throughput 26216850.545op/s 27019940.646op/s ± 74668.730op/s 27021207.998op/s ± 30818.617op/s 27053253.465op/s 27100703.979op/s 27158609.083op/s 27192669.868op/s 0.63% -6.117 65.229 0.28% 5279.877op/s 1 200
normalization/normalize_service/normalize_service/test_ASCII execution_time 44.903µs 45.096µs ± 0.175µs 45.067µs ± 0.148µs 45.220µs 45.366µs 45.431µs 46.246µs 2.61% 1.630 7.683 0.39% 0.012µs 1 200
normalization/normalize_service/normalize_service/test_ASCII throughput 21623694.379op/s 22175357.969op/s ± 85302.249op/s 22188966.173op/s ± 72995.024op/s 22257049.061op/s 22268808.570op/s 22269898.446op/s 22270188.359op/s 0.37% -1.551 7.023 0.38% 6031.780op/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.537µs; 534.737µs] or [-0.019%; +0.019%] None None None
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput [1870086.219op/s; 1870776.942op/s] or [-0.018%; +0.018%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time [380.654µs; 380.748µs] or [-0.012%; +0.012%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput [2626407.989op/s; 2627061.672op/s] or [-0.012%; +0.012%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time [196.214µs; 196.284µs] or [-0.018%; +0.018%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput [5094677.228op/s; 5096490.876op/s] or [-0.018%; +0.018%] None None None
normalization/normalize_service/normalize_service/[empty string] execution_time [36.996µs; 37.024µs] or [-0.039%; +0.039%] None None None
normalization/normalize_service/normalize_service/[empty string] throughput [27009592.278op/s; 27030289.014op/s] or [-0.038%; +0.038%] None None None
normalization/normalize_service/normalize_service/test_ASCII execution_time [45.072µs; 45.120µs] or [-0.054%; +0.054%] None None None
normalization/normalize_service/normalize_service/test_ASCII throughput [22163535.897op/s; 22187180.040op/s] or [-0.053%; +0.053%] None None None

Group 5

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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 88.250µs 88.490µs ± 0.134µs 88.475µs ± 0.040µs 88.516µs 88.630µs 89.040µs 89.708µs 1.39% 4.892 37.787 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 [88.471µs; 88.508µs] or [-0.021%; +0.021%] None None None

Group 6

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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.627ms 10.664ms ± 0.018ms 10.662ms ± 0.011ms 10.676ms 10.694ms 10.710ms 10.749ms 0.81% 1.209 3.543 0.17% 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.662ms; 10.667ms] or [-0.023%; +0.023%] None None None

Group 7

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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.393µs 2.446µs ± 0.020µs 2.446µs ± 0.011µs 2.459µs 2.477µs 2.483µs 2.489µs 1.74% -0.332 -0.151 0.82% 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.443µs; 2.448µs] or [-0.114%; +0.114%] None None None

Group 8

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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 145.156µs 147.145µs ± 1.812µs 146.879µs ± 0.648µs 147.604µs 149.078µs 153.224µs 165.934µs 12.97% 6.391 58.671 1.23% 0.128µ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.894µs; 147.397µs] or [-0.171%; +0.171%] None None None

Group 9

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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.514ns 192.812ns ± 9.718ns 191.929ns ± 1.416ns 193.070ns 195.835ns 202.889ns 325.814ns 69.76% 12.931 174.223 5.03% 0.687ns 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.465ns; 194.159ns] or [-0.699%; +0.699%] None None None

Group 10

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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.451µs 34.733µs ± 0.418µs 34.570µs ± 0.049µs 34.633µs 35.424µs 35.601µs 38.376µs 11.01% 4.055 27.620 1.20% 0.030µ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.675µs; 34.791µs] or [-0.167%; +0.167%] None None None

Group 11

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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 242.327ns 253.589ns ± 13.600ns 247.495ns ± 3.787ns 254.725ns 282.662ns 293.915ns 297.067ns 20.03% 1.678 1.665 5.35% 0.962ns 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 [251.704ns; 255.474ns] or [-0.743%; +0.743%] None None None

Group 12

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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 14.937ms 14.997ms ± 0.042ms 14.988ms ± 0.015ms 15.011ms 15.076ms 15.114ms 15.369ms 2.54% 4.139 29.893 0.28% 0.003ms 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 [14.991ms; 15.003ms] or [-0.039%; +0.039%] None None None

Group 13

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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.897µs 3.914µs ± 0.002µs 3.914µs ± 0.001µs 3.916µs 3.918µs 3.919µs 3.923µs 0.24% -1.281 11.334 0.06% 0.000µs 1 200
credit_card/is_card_number/ throughput 254877017.847op/s 255476607.767op/s ± 158001.211op/s 255477729.099op/s ± 89840.595op/s 255573751.816op/s 255682211.798op/s 255746391.613op/s 256584934.888op/s 0.43% 1.303 11.483 0.06% 11172.373op/s 1 200
credit_card/is_card_number/ 3782-8224-6310-005 execution_time 77.834µs 79.283µs ± 0.683µs 79.196µs ± 0.413µs 79.632µs 80.696µs 80.820µs 80.918µs 2.17% 0.455 -0.234 0.86% 0.048µs 1 200
credit_card/is_card_number/ 3782-8224-6310-005 throughput 12358222.499op/s 12613924.316op/s ± 108272.541op/s 12626833.916op/s ± 65885.370op/s 12690114.436op/s 12775294.619op/s 12824826.304op/s 12847779.710op/s 1.75% -0.415 -0.264 0.86% 7656.025op/s 1 200
credit_card/is_card_number/ 378282246310005 execution_time 71.441µs 71.749µs ± 0.509µs 71.546µs ± 0.050µs 71.670µs 72.859µs 73.998µs 74.158µs 3.65% 2.850 8.202 0.71% 0.036µs 1 200
credit_card/is_card_number/ 378282246310005 throughput 13484772.465op/s 13938233.927op/s ± 96962.217op/s 13976953.410op/s ± 9683.757op/s 13983795.927op/s 13993008.743op/s 13996357.267op/s 13997575.620op/s 0.15% -2.807 7.900 0.69% 6856.264op/s 1 200
credit_card/is_card_number/37828224631 execution_time 3.895µs 3.915µs ± 0.004µs 3.914µs ± 0.002µs 3.917µs 3.923µs 3.926µs 3.946µs 0.81% 2.192 15.048 0.11% 0.000µs 1 200
credit_card/is_card_number/37828224631 throughput 253425057.003op/s 255406211.304op/s ± 284687.299op/s 255471898.091op/s ± 105498.096op/s 255557941.376op/s 255654004.694op/s 255723963.560op/s 256730380.348op/s 0.49% -2.151 14.845 0.11% 20130.432op/s 1 200
credit_card/is_card_number/378282246310005 execution_time 68.226µs 68.585µs ± 0.479µs 68.372µs ± 0.076µs 68.590µs 69.656µs 70.324µs 71.182µs 4.11% 2.461 6.497 0.70% 0.034µs 1 200
credit_card/is_card_number/378282246310005 throughput 14048418.355op/s 14581157.687op/s ± 100202.222op/s 14625853.390op/s ± 16288.893op/s 14636547.826op/s 14644669.243op/s 14652914.429op/s 14657076.120op/s 0.21% -2.411 6.136 0.69% 7085.367op/s 1 200
credit_card/is_card_number/37828224631000521389798 execution_time 45.455µs 45.730µs ± 0.102µs 45.737µs ± 0.064µs 45.796µs 45.873µs 45.919µs 46.184µs 0.98% 0.403 2.316 0.22% 0.007µs 1 200
credit_card/is_card_number/37828224631000521389798 throughput 21652490.382op/s 21867591.807op/s ± 48885.398op/s 21864229.029op/s ± 30603.250op/s 21899000.325op/s 21952754.558op/s 21972627.296op/s 21999684.973op/s 0.62% -0.375 2.228 0.22% 3456.720op/s 1 200
credit_card/is_card_number/x371413321323331 execution_time 6.559µs 6.614µs ± 0.017µs 6.616µs ± 0.012µs 6.629µs 6.636µs 6.641µs 6.642µs 0.39% -0.770 0.491 0.26% 0.001µs 1 200
credit_card/is_card_number/x371413321323331 throughput 150555473.075op/s 151185362.519op/s ± 388706.579op/s 151145083.856op/s ± 282186.419op/s 151418761.544op/s 151904436.959op/s 152390191.097op/s 152473128.249op/s 0.88% 0.784 0.529 0.26% 27485.706op/s 1 200
credit_card/is_card_number_no_luhn/ execution_time 3.897µs 3.914µs ± 0.002µs 3.914µs ± 0.001µs 3.916µs 3.918µs 3.919µs 3.920µs 0.15% -1.612 13.402 0.06% 0.000µs 1 200
credit_card/is_card_number_no_luhn/ throughput 255122877.363op/s 255492599.169op/s ± 154624.542op/s 255503334.323op/s ± 93616.823op/s 255590926.472op/s 255673236.519op/s 255741038.998op/s 256635483.698op/s 0.44% 1.635 13.597 0.06% 10933.606op/s 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time 65.604µs 65.711µs ± 0.052µs 65.702µs ± 0.034µs 65.741µs 65.806µs 65.844µs 65.866µs 0.25% 0.566 -0.170 0.08% 0.004µs 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput 15182321.824op/s 15218217.789op/s ± 12038.436op/s 15220271.651op/s ± 7828.598op/s 15226627.072op/s 15235013.072op/s 15238265.112op/s 15242903.133op/s 0.15% -0.563 -0.175 0.08% 851.246op/s 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time 53.361µs 53.437µs ± 0.041µs 53.433µs ± 0.029µs 53.462µs 53.521µs 53.541µs 53.561µs 0.24% 0.636 0.049 0.08% 0.003µs 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 throughput 18670290.027op/s 18713704.618op/s ± 14376.361op/s 18715106.406op/s ± 10027.106op/s 18725070.694op/s 18733447.461op/s 18737968.088op/s 18740143.980op/s 0.13% -0.632 0.042 0.08% 1016.562op/s 1 200
credit_card/is_card_number_no_luhn/37828224631 execution_time 3.893µs 3.916µs ± 0.003µs 3.916µs ± 0.002µs 3.918µs 3.920µs 3.920µs 3.928µs 0.30% -1.905 16.563 0.08% 0.000µs 1 200
credit_card/is_card_number_no_luhn/37828224631 throughput 254596107.440op/s 255380038.157op/s ± 195492.751op/s 255368497.998op/s ± 118732.106op/s 255497112.884op/s 255643469.673op/s 255694110.470op/s 256877299.014op/s 0.59% 1.940 16.827 0.08% 13823.425op/s 1 200
credit_card/is_card_number_no_luhn/378282246310005 execution_time 50.137µs 50.207µs ± 0.032µs 50.204µs ± 0.019µs 50.226µs 50.262µs 50.296µs 50.340µs 0.27% 0.901 1.780 0.06% 0.002µs 1 200
credit_card/is_card_number_no_luhn/378282246310005 throughput 19864744.925op/s 19917411.710op/s ± 12813.204op/s 19918813.904op/s ± 7525.394op/s 19925283.177op/s 19935281.405op/s 19939837.583op/s 19945333.829op/s 0.13% -0.895 1.761 0.06% 906.030op/s 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time 45.494µs 45.723µs ± 0.095µs 45.719µs ± 0.073µs 45.799µs 45.866µs 45.918µs 45.949µs 0.50% -0.053 -0.471 0.21% 0.007µs 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput 21763051.645op/s 21870823.044op/s ± 45510.173op/s 21872782.603op/s ± 35074.126op/s 21902568.338op/s 21942623.675op/s 21971385.007op/s 21980748.478op/s 0.49% 0.062 -0.469 0.21% 3218.055op/s 1 200
credit_card/is_card_number_no_luhn/x371413321323331 execution_time 6.552µs 6.616µs ± 0.020µs 6.618µs ± 0.013µs 6.631µs 6.643µs 6.649µs 6.664µs 0.69% -0.822 0.684 0.31% 0.001µs 1 200
credit_card/is_card_number_no_luhn/x371413321323331 throughput 150070346.714op/s 151159719.326op/s ± 463385.222op/s 151110623.191op/s ± 302086.729op/s 151443195.727op/s 152082131.732op/s 152501353.414op/s 152625414.188op/s 1.00% 0.841 0.722 0.31% 32766.283op/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.914µs; 3.915µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/ throughput [255454710.319op/s; 255498505.215op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 execution_time [79.189µs; 79.378µs] or [-0.119%; +0.119%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 throughput [12598918.783op/s; 12628929.849op/s] or [-0.119%; +0.119%] None None None
credit_card/is_card_number/ 378282246310005 execution_time [71.678µs; 71.819µs] or [-0.098%; +0.098%] None None None
credit_card/is_card_number/ 378282246310005 throughput [13924795.896op/s; 13951671.958op/s] or [-0.096%; +0.096%] None None None
credit_card/is_card_number/37828224631 execution_time [3.915µs; 3.916µs] or [-0.015%; +0.015%] None None None
credit_card/is_card_number/37828224631 throughput [255366756.383op/s; 255445666.226op/s] or [-0.015%; +0.015%] None None None
credit_card/is_card_number/378282246310005 execution_time [68.519µs; 68.651µs] or [-0.097%; +0.097%] None None None
credit_card/is_card_number/378282246310005 throughput [14567270.623op/s; 14595044.751op/s] or [-0.095%; +0.095%] None None None
credit_card/is_card_number/37828224631000521389798 execution_time [45.716µs; 45.744µs] or [-0.031%; +0.031%] None None None
credit_card/is_card_number/37828224631000521389798 throughput [21860816.761op/s; 21874366.853op/s] or [-0.031%; +0.031%] None None None
credit_card/is_card_number/x371413321323331 execution_time [6.612µs; 6.617µs] or [-0.036%; +0.036%] None None None
credit_card/is_card_number/x371413321323331 throughput [151131491.525op/s; 151239233.512op/s] or [-0.036%; +0.036%] None None None
credit_card/is_card_number_no_luhn/ execution_time [3.914µs; 3.914µs] or [-0.008%; +0.008%] None None None
credit_card/is_card_number_no_luhn/ throughput [255471169.695op/s; 255514028.643op/s] or [-0.008%; +0.008%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time [65.704µs; 65.718µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput [15216549.377op/s; 15219886.200op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time [53.431µs; 53.442µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 throughput [18711712.193op/s; 18715697.044op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/37828224631 execution_time [3.915µs; 3.916µs] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/37828224631 throughput [255352944.742op/s; 255407131.572op/s] or [-0.011%; +0.011%] None None None
credit_card/is_card_number_no_luhn/378282246310005 execution_time [50.203µs; 50.212µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/378282246310005 throughput [19915635.923op/s; 19919187.497op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time [45.710µs; 45.736µs] or [-0.029%; +0.029%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput [21864515.772op/s; 21877130.317op/s] or [-0.029%; +0.029%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 execution_time [6.613µs; 6.618µs] or [-0.042%; +0.042%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 throughput [151095498.591op/s; 151223940.061op/s] or [-0.042%; +0.042%] None None None

Group 14

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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.227µs ± 1.450µs 2.993µs ± 0.029µs 3.020µs 3.667µs 14.287µs 14.792µs 394.17% 7.281 54.399 44.80% 0.103µ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.027µs; 3.428µs] or [-6.225%; +6.225%] None None None

Group 15

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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 6.102ms 6.393ms ± 0.072ms 6.410ms ± 0.016ms 6.423ms 6.452ms 6.561ms 6.582ms 2.68% -1.832 4.849 1.12% 0.005ms 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 [6.383ms; 6.403ms] or [-0.156%; +0.156%] None None None

Group 16

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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.989µs 5.065µs ± 0.057µs 5.027µs ± 0.025µs 5.108µs 5.172µs 5.179µs 5.181µs 3.06% 0.602 -1.054 1.13% 0.004µ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.057µs; 5.073µs] or [-0.157%; +0.157%] None None None

Group 17

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz 89b7a8e 1763589202 levi/profiles_dictionary
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 206.285µs 206.757µs ± 0.348µs 206.703µs ± 0.157µs 206.860µs 207.207µs 208.340µs 208.880µs 1.05% 3.054 14.333 0.17% 0.025µs 1 200
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput 4787448.294op/s 4836616.552op/s ± 8088.620op/s 4837860.732op/s ± 3678.087op/s 4841429.448op/s 4845111.286op/s 4847083.064op/s 4847653.323op/s 0.20% -3.019 14.074 0.17% 571.952op/s 1 200
normalization/normalize_name/normalize_name/bad-name execution_time 18.191µs 18.297µs ± 0.139µs 18.279µs ± 0.040µs 18.325µs 18.439µs 18.511µs 20.003µs 9.43% 9.447 112.656 0.76% 0.010µs 1 200
normalization/normalize_name/normalize_name/bad-name throughput 49992984.178op/s 54656358.710op/s ± 387550.252op/s 54708493.383op/s ± 119615.034op/s 54805529.602op/s 54958558.591op/s 54969836.296op/s 54972721.519op/s 0.48% -8.878 103.182 0.71% 27403.941op/s 1 200
normalization/normalize_name/normalize_name/good execution_time 10.653µs 10.813µs ± 0.067µs 10.804µs ± 0.041µs 10.851µs 10.943µs 10.977µs 10.980µs 1.63% 0.411 -0.104 0.62% 0.005µs 1 200
normalization/normalize_name/normalize_name/good throughput 91072129.126op/s 92484604.436op/s ± 569258.965op/s 92559465.037op/s ± 352762.985op/s 92892309.396op/s 93286182.845op/s 93750227.901op/s 93869729.034op/s 1.42% -0.379 -0.120 0.61% 40252.687op/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 [206.709µs; 206.805µs] or [-0.023%; +0.023%] None None None
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput [4835495.547op/s; 4837737.557op/s] or [-0.023%; +0.023%] None None None
normalization/normalize_name/normalize_name/bad-name execution_time [18.278µs; 18.316µs] or [-0.105%; +0.105%] None None None
normalization/normalize_name/normalize_name/bad-name throughput [54602647.972op/s; 54710069.447op/s] or [-0.098%; +0.098%] None None None
normalization/normalize_name/normalize_name/good execution_time [10.804µs; 10.822µs] or [-0.086%; +0.086%] None None None
normalization/normalize_name/normalize_name/good throughput [92405710.618op/s; 92563498.254op/s] or [-0.085%; +0.085%] None None None

Baseline

Omitted due to size.

@codecov-commenter
Copy link

codecov-commenter commented Nov 15, 2025

Codecov Report

❌ Patch coverage is 61.98347% with 46 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.15%. Comparing base (a3f9e86) to head (89b7a8e).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1349      +/-   ##
==========================================
- Coverage   71.19%   71.15%   -0.04%     
==========================================
  Files         392      396       +4     
  Lines       62677    62798     +121     
==========================================
+ Hits        44622    44685      +63     
- Misses      18055    18113      +58     
Components Coverage Δ
libdd-crashtracker 59.91% <ø> (+0.01%) ⬆️
libdd-crashtracker-ffi 15.31% <ø> (ø)
libdd-alloc 98.73% <ø> (ø)
libdd-data-pipeline 86.00% <ø> (-0.02%) ⬇️
libdd-data-pipeline-ffi 77.63% <ø> (ø)
libdd-common 80.93% <ø> (ø)
libdd-common-ffi 73.90% <ø> (ø)
libdd-telemetry 60.02% <ø> (ø)
libdd-telemetry-ffi 21.24% <ø> (ø)
libdd-dogstatsd-client 83.75% <ø> (ø)
datadog-ipc 82.61% <ø> (ø)
libdd-profiling 79.44% <61.98%> (-0.24%) ⬇️
libdd-profiling-ffi 62.13% <ø> (ø)
datadog-sidecar 36.98% <ø> (ø)
datdog-sidecar-ffi 16.40% <ø> (ø)
spawn-worker 55.18% <ø> (ø)
libdd-tinybytes 92.44% <ø> (ø)
libdd-trace-normalization 98.24% <ø> (ø)
datadog-trace-obfuscation 94.17% <ø> (ø)
libdd-trace-protobuf 59.65% <ø> (ø)
libdd-trace-utils 90.25% <ø> (ø)
datadog-tracer-flare 62.06% <ø> (ø)
libdd-log 75.57% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@dd-octo-sts
Copy link

dd-octo-sts bot commented Nov 15, 2025

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 85.96 MB 85.96 MB 0% (0 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 7.38 MB 7.38 MB 0% (0 B) 👌
aarch64-apple-darwin
Artifact Baseline Commit Change
/aarch64-apple-darwin/lib/libdatadog_profiling.a 57.99 MB 57.99 MB 0% (0 B) 👌
/aarch64-apple-darwin/lib/libdatadog_profiling.dylib 8.43 MB 8.43 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 99.70 MB 99.70 MB 0% (0 B) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 9.53 MB 9.53 MB 0% (0 B) 👌
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 19.57 MB 19.57 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 69.82 KB 69.82 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 138.54 MB 138.88 MB +.24% (+352.00 KB) 🔍
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 735.58 MB 737.25 MB +.22% (+1.67 MB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 6.34 MB 6.34 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 69.82 KB 69.82 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 19.67 MB 19.67 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 38.64 MB 38.64 MB 0% (0 B) 👌
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 16.70 MB 16.70 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 70.90 KB 70.90 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 141.11 MB 141.44 MB +.23% (+344.00 KB) 🔍
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 724.31 MB 725.64 MB +.18% (+1.32 MB) 🔍
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 4.87 MB 4.87 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 70.90 KB 70.90 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 20.90 MB 20.90 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 36.39 MB 36.39 MB 0% (0 B) 👌
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 74.32 MB 74.32 MB 0% (0 B) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 8.85 MB 8.85 MB 0% (0 B) 👌
x86_64-apple-darwin
Artifact Baseline Commit Change
/x86_64-apple-darwin/lib/libdatadog_profiling.a 59.35 MB 59.35 MB 0% (0 B) 👌
/x86_64-apple-darwin/lib/libdatadog_profiling.dylib 9.47 MB 9.47 MB 0% (0 B) 👌
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 93.93 MB 93.93 MB 0% (0 B) 👌
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.28 MB 10.28 MB 0% (0 B) 👌

@morrisonlevi morrisonlevi marked this pull request as ready for review November 17, 2025 17:04
@morrisonlevi morrisonlevi requested a review from a team as a code owner November 17, 2025 17:04
Base automatically changed from levi/sharded to main November 17, 2025 17:39
@dd-mergequeue dd-mergequeue bot requested a review from a team as a code owner November 17, 2025 17:39
Copy link

@KowalskiThomas KowalskiThomas left a comment

Choose a reason for hiding this comment

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

What I see makes sense to me but I'll let someone better versed in Rust make review!

/// Pprof representations. Omits the start line to save space because Datadog
/// doesn't use this in any way.
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Hash)]
#[repr(C)]
Copy link
Contributor

Choose a reason for hiding this comment

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

Is there a reason for this to be repr[c]?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, although I haven't looked to see if this messes up cbindgen. Sometimes a repr(C) will cause it to pick up this definition instead of some other definition, since it doesn't understand modules and namespaces.

The reason is that it makes Function and Function2 layout-compatible, aside from the case of a null StringId2. Converting from Function to Function2 is free, and the reverse is just the code required to coerce nulls into empty strings.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Just checked and no differences in API (yet):

cargo clean
git switch levi/profiles_dictionary
cargo run --bin release --features profiling --release -- --out $PWD/release2

cargo clean
git switch main
cargo run --bin release --features profiling --release -- --out $PWD/release1

diff release{1,2}/include/datadog/profiling.h

Copy link
Contributor

Choose a reason for hiding this comment

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

Do we have an assertion or test that would fail if the two are not compatible?

}
}

impl From<Function2> for Function {
Copy link
Contributor

Choose a reason for hiding this comment

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

Not for this PR, but it feels like someone OUGHT to have a crate to do this

/// `FunctionId2` converts to a `None`.
///
/// # Safety
/// The pointer object must still be alive. In general this means the
Copy link
Contributor

Choose a reason for hiding this comment

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

Any other requirements?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't think so. If the profiles dictionary is alive, this should be safe.

/// Pprof representations. Omits the start line to save space because Datadog
/// doesn't use this in any way.
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Hash)]
#[repr(C)]
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we have an assertion or test that would fail if the two are not compatible?

Comment on lines +55 to +57
/// performed on; it is not generally guaranteed that ids from one dictionary
/// can be used in another dictionary, even if it happens to work by
/// implementation detail.
Copy link
Contributor

Choose a reason for hiding this comment

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

Is there any way to detect this error?

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.

5 participants