Skip to content

Conversation

danielsn
Copy link
Contributor

@danielsn danielsn commented Aug 13, 2025

What does this PR do?

Initial implementation of OTel protocol for libdatadog.

Motivation

OTel is coming, we should see how hard it is to create the signal, and what gotchas we run into

Additional Notes

  • Otel is a moving target, this will need to change as the OTel format does.
  • I hardwired it to FFI. If you use this branch, you get OTel but not pprof
  • Still working on how best to support links / endpoints.

How to test the change?

  • I had claude write tests for me. That should be sufficient, right?

@github-actions github-actions bot added the profiling Relates to the profiling* modules. label Aug 13, 2025
@pr-commenter
Copy link

pr-commenter bot commented Aug 14, 2025

Benchmarks

Comparison

Benchmark execution time: 2025-09-16 20:10:07

Comparing candidate commit d77157c in PR branch dsn/otel-proto with baseline commit 0262f08 in branch main.

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

scenario:benching serializing traces from their internal representation to msgpack

  • 🟥 execution_time [+780.329µs; +792.783µs] or [+5.549%; +5.638%]

scenario:credit_card/is_card_number/37828224631000521389798

  • 🟩 execution_time [-7.100µs; -7.055µs] or [-13.604%; -13.517%]
  • 🟩 throughput [+2994883.368op/s; +3016823.837op/s] or [+15.632%; +15.746%]

scenario:credit_card/is_card_number_no_luhn/ 378282246310005

  • 🟩 execution_time [-5.406µs; -5.359µs] or [-9.254%; -9.174%]
  • 🟩 throughput [+1730394.044op/s; +1744229.848op/s] or [+10.108%; +10.189%]

scenario:credit_card/is_card_number_no_luhn/378282246310005

  • 🟩 execution_time [-5.072µs; -5.019µs] or [-9.250%; -9.154%]
  • 🟩 throughput [+1839105.105op/s; +1856741.598op/s] or [+10.085%; +10.181%]

scenario:credit_card/is_card_number_no_luhn/37828224631000521389798

  • 🟩 execution_time [-7.138µs; -7.099µs] or [-13.669%; -13.595%]
  • 🟩 throughput [+3013560.480op/s; +3032252.834op/s] or [+15.736%; +15.834%]

scenario:normalization/normalize_name/normalize_name/good

  • 🟩 execution_time [-661.954ns; -636.195ns] or [-6.309%; -6.063%]
  • 🟩 throughput [+6162704.325op/s; +6414104.853op/s] or [+6.466%; +6.730%]

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 d77157c 1758032199 dsn/otel-proto
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.100µs 159.804µs ± 0.262µs 159.751µs ± 0.122µs 159.901µs 160.215µs 160.729µs 161.125µs 0.86% 1.575 5.008 0.16% 0.019µ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 [159.768µs; 159.841µs] or [-0.023%; +0.023%] None None None

Group 2

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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 60.712ms 61.302ms ± 2.422ms 61.000ms ± 0.070ms 61.065ms 61.294ms 78.609ms 83.191ms 36.38% 8.060 63.769 3.94% 0.171ms 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 [60.966ms; 61.637ms] or [-0.547%; +0.547%] None None None

Group 3

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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.911µs ± 0.003µs 3.911µs ± 0.001µs 3.912µs 3.915µs 3.917µs 3.919µs 0.22% -1.450 14.819 0.06% 0.000µs 1 200
credit_card/is_card_number/ throughput 255167923.845op/s 255705755.671op/s ± 165212.527op/s 255721697.986op/s ± 94688.911op/s 255812794.256op/s 255868273.050op/s 255912319.963op/s 256946318.116op/s 0.48% 1.479 15.045 0.06% 11682.290op/s 1 200
credit_card/is_card_number/ 3782-8224-6310-005 execution_time 77.044µs 77.843µs ± 0.832µs 77.642µs ± 0.399µs 78.096µs 79.484µs 80.904µs 81.639µs 5.15% 2.079 5.042 1.07% 0.059µs 1 200
credit_card/is_card_number/ 3782-8224-6310-005 throughput 12249004.602op/s 12847842.100op/s ± 134404.503op/s 12879561.436op/s ± 66535.732op/s 12943179.529op/s 12970753.193op/s 12978759.604op/s 12979583.015op/s 0.78% -1.995 4.602 1.04% 9503.834op/s 1 200
credit_card/is_card_number/ 378282246310005 execution_time 70.826µs 71.110µs ± 0.303µs 71.011µs ± 0.138µs 71.210µs 71.614µs 72.092µs 72.929µs 2.70% 2.077 6.747 0.42% 0.021µs 1 200
credit_card/is_card_number/ 378282246310005 throughput 13711958.432op/s 14062919.250op/s ± 59354.498op/s 14082387.270op/s ± 27332.276op/s 14106811.474op/s 14115572.087op/s 14118324.484op/s 14119185.149op/s 0.26% -2.022 6.329 0.42% 4196.997op/s 1 200
credit_card/is_card_number/37828224631 execution_time 3.897µ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.21% -0.616 3.923 0.07% 0.000µs 1 200
credit_card/is_card_number/37828224631 throughput 255063209.192op/s 255624019.024op/s ± 180178.139op/s 255606269.185op/s ± 107769.518op/s 255736787.737op/s 255910278.920op/s 255942274.702op/s 256623820.090op/s 0.40% 0.628 3.977 0.07% 12740.518op/s 1 200
credit_card/is_card_number/378282246310005 execution_time 67.573µs 67.946µs ± 0.374µs 67.810µs ± 0.152µs 68.067µs 68.650µs 69.292µs 70.070µs 3.33% 2.174 6.477 0.55% 0.026µs 1 200
credit_card/is_card_number/378282246310005 throughput 14271406.819op/s 14717923.563op/s ± 80030.592op/s 14747139.232op/s ± 33075.217op/s 14773732.375op/s 14786752.473op/s 14794108.895op/s 14798817.625op/s 0.35% -2.114 6.061 0.54% 5659.017op/s 1 200
credit_card/is_card_number/37828224631000521389798 execution_time 44.691µs 45.117µs ± 0.160µs 45.115µs ± 0.103µs 45.218µs 45.335µs 45.421µs 45.934µs 1.82% 0.937 4.084 0.35% 0.011µs 1 200
credit_card/is_card_number/37828224631000521389798 throughput 21770530.566op/s 22164655.906op/s ± 78327.160op/s 22165709.684op/s ± 50479.021op/s 22215289.153op/s 22279395.527op/s 22306235.015op/s 22375989.394op/s 0.95% -0.883 3.827 0.35% 5538.567op/s 1 200
credit_card/is_card_number/x371413321323331 execution_time 6.027µs 6.037µs ± 0.016µs 6.034µs ± 0.002µs 6.037µs 6.044µs 6.110µs 6.172µs 2.29% 5.599 35.158 0.26% 0.001µs 1 200
credit_card/is_card_number/x371413321323331 throughput 162013770.584op/s 165638597.481op/s ± 429132.261op/s 165721265.827op/s ± 60242.741op/s 165775929.337op/s 165856455.900op/s 165883885.356op/s 165909915.319op/s 0.11% -5.554 34.528 0.26% 30344.233op/s 1 200
credit_card/is_card_number_no_luhn/ execution_time 3.892µs 3.911µs ± 0.003µs 3.911µs ± 0.001µs 3.912µs 3.915µs 3.919µs 3.923µs 0.30% -0.695 13.706 0.07% 0.000µs 1 200
credit_card/is_card_number_no_luhn/ throughput 254939439.171op/s 255697414.344op/s ± 172442.412op/s 255713821.333op/s ± 78648.903op/s 255791074.414op/s 255882401.932op/s 255918260.658op/s 256920810.616op/s 0.47% 0.726 13.878 0.07% 12193.520op/s 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time 65.027µs 65.422µs ± 0.045µs 65.422µs ± 0.021µs 65.443µs 65.480µs 65.511µs 65.621µs 0.30% -2.804 30.077 0.07% 0.003µs 1 200
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput 15239025.611op/s 15285434.494op/s ± 10510.322op/s 15285462.761op/s ± 5015.621op/s 15290510.328op/s 15296025.634op/s 15299284.096op/s 15378224.414op/s 0.61% 2.854 30.522 0.07% 743.192op/s 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time 52.955µs 53.031µs ± 0.030µs 53.033µs ± 0.018µs 53.047µs 53.081µs 53.103µs 53.140µs 0.20% 0.208 0.729 0.06% 0.002µs 1 200
credit_card/is_card_number_no_luhn/ 378282246310005 throughput 18818159.823op/s 18856787.411op/s ± 10765.547op/s 18856262.898op/s ± 6324.564op/s 18862786.081op/s 18875029.751op/s 18881777.501op/s 18883975.059op/s 0.15% -0.203 0.723 0.06% 761.239op/s 1 200
credit_card/is_card_number_no_luhn/37828224631 execution_time 3.895µs 3.911µs ± 0.003µs 3.911µs ± 0.001µs 3.912µs 3.915µs 3.917µs 3.918µs 0.18% -0.868 7.582 0.06% 0.000µs 1 200
credit_card/is_card_number_no_luhn/37828224631 throughput 255236415.726op/s 255695809.707op/s ± 165490.851op/s 255705670.370op/s ± 76756.290op/s 255776504.972op/s 255933610.743op/s 255985402.668op/s 256754702.925op/s 0.41% 0.886 7.687 0.06% 11701.970op/s 1 200
credit_card/is_card_number_no_luhn/378282246310005 execution_time 49.733µs 49.790µs ± 0.031µs 49.784µs ± 0.018µs 49.803µs 49.851µs 49.881µs 49.930µs 0.29% 1.150 1.952 0.06% 0.002µs 1 200
credit_card/is_card_number_no_luhn/378282246310005 throughput 20028149.015op/s 20084455.501op/s ± 12431.868op/s 20086581.159op/s ± 7275.504op/s 20093483.183op/s 20099639.116op/s 20105385.852op/s 20107276.823op/s 0.10% -1.145 1.933 0.06% 879.066op/s 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time 44.700µs 45.099µs ± 0.134µs 45.114µs ± 0.095µs 45.197µs 45.306µs 45.370µs 45.383µs 0.60% -0.236 -0.418 0.30% 0.009µs 1 200
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput 22034857.557op/s 22173459.771op/s ± 65880.455op/s 22166265.169op/s ± 46475.408op/s 22222946.316op/s 22284005.358op/s 22319862.965op/s 22371193.320op/s 0.92% 0.249 -0.407 0.30% 4658.452op/s 1 200
credit_card/is_card_number_no_luhn/x371413321323331 execution_time 6.027µs 6.036µs ± 0.009µs 6.035µs ± 0.003µs 6.037µs 6.041µs 6.100µs 6.109µs 1.23% 6.142 43.556 0.15% 0.001µs 1 200
credit_card/is_card_number_no_luhn/x371413321323331 throughput 163692588.677op/s 165682734.275op/s ± 249521.895op/s 165699701.747op/s ± 72236.748op/s 165780212.762op/s 165884312.412op/s 165911709.317op/s 165929015.227op/s 0.14% -6.106 43.207 0.15% 17643.862op/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.910µs; 3.911µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/ throughput [255682858.804op/s; 255728652.538op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 execution_time [77.727µs; 77.958µs] or [-0.148%; +0.148%] None None None
credit_card/is_card_number/ 3782-8224-6310-005 throughput [12829214.928op/s; 12866469.271op/s] or [-0.145%; +0.145%] None None None
credit_card/is_card_number/ 378282246310005 execution_time [71.068µs; 71.152µs] or [-0.059%; +0.059%] None None None
credit_card/is_card_number/ 378282246310005 throughput [14054693.287op/s; 14071145.212op/s] or [-0.058%; +0.058%] None None None
credit_card/is_card_number/37828224631 execution_time [3.912µs; 3.912µs] or [-0.010%; +0.010%] None None None
credit_card/is_card_number/37828224631 throughput [255599048.067op/s; 255648989.981op/s] or [-0.010%; +0.010%] None None None
credit_card/is_card_number/378282246310005 execution_time [67.895µs; 67.998µs] or [-0.076%; +0.076%] None None None
credit_card/is_card_number/378282246310005 throughput [14706832.093op/s; 14729015.033op/s] or [-0.075%; +0.075%] None None None
credit_card/is_card_number/37828224631000521389798 execution_time [45.095µs; 45.140µs] or [-0.049%; +0.049%] None None None
credit_card/is_card_number/37828224631000521389798 throughput [22153800.515op/s; 22175511.297op/s] or [-0.049%; +0.049%] None None None
credit_card/is_card_number/x371413321323331 execution_time [6.035µs; 6.039µs] or [-0.036%; +0.036%] None None None
credit_card/is_card_number/x371413321323331 throughput [165579123.877op/s; 165698071.085op/s] or [-0.036%; +0.036%] None None None
credit_card/is_card_number_no_luhn/ execution_time [3.911µs; 3.911µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/ throughput [255673515.484op/s; 255721313.204op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 execution_time [65.416µs; 65.428µs] or [-0.010%; +0.010%] None None None
credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 throughput [15283977.864op/s; 15286891.123op/s] or [-0.010%; +0.010%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 execution_time [53.027µs; 53.036µs] or [-0.008%; +0.008%] None None None
credit_card/is_card_number_no_luhn/ 378282246310005 throughput [18855295.409op/s; 18858279.412op/s] or [-0.008%; +0.008%] None None None
credit_card/is_card_number_no_luhn/37828224631 execution_time [3.911µs; 3.911µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/37828224631 throughput [255672874.266op/s; 255718745.147op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/378282246310005 execution_time [49.785µs; 49.794µs] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/378282246310005 throughput [20082732.563op/s; 20086178.438op/s] or [-0.009%; +0.009%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 execution_time [45.081µs; 45.118µs] or [-0.041%; +0.041%] None None None
credit_card/is_card_number_no_luhn/37828224631000521389798 throughput [22164329.374op/s; 22182590.169op/s] or [-0.041%; +0.041%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 execution_time [6.034µs; 6.037µs] or [-0.021%; +0.021%] None None None
credit_card/is_card_number_no_luhn/x371413321323331 throughput [165648152.940op/s; 165717315.610op/s] or [-0.021%; +0.021%] None None None

Group 4

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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.199ms 6.269ms ± 0.060ms 6.254ms ± 0.017ms 6.280ms 6.362ms 6.404ms 6.854ms 9.60% 5.216 45.151 0.95% 0.004ms 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.260ms; 6.277ms] or [-0.132%; +0.132%] None None None

Group 5

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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.471µs 185.960µs ± 0.477µs 185.883µs ± 0.152µs 186.045µs 186.394µs 188.121µs 190.849µs 2.67% 6.460 57.527 0.26% 0.034µs 1 200
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput 5239745.196op/s 5377534.216op/s ± 13582.913op/s 5379734.259op/s ± 4394.749op/s 5383739.673op/s 5388478.919op/s 5389773.489op/s 5391674.123op/s 0.22% -6.326 55.570 0.25% 960.457op/s 1 200
normalization/normalize_name/normalize_name/bad-name execution_time 17.195µs 17.420µs ± 0.137µs 17.404µs ± 0.092µs 17.514µs 17.675µs 17.810µs 17.849µs 2.56% 0.665 0.019 0.78% 0.010µs 1 200
normalization/normalize_name/normalize_name/bad-name throughput 56026881.698op/s 57407606.879op/s ± 447870.258op/s 57458399.532op/s ± 306781.178op/s 57762393.195op/s 58013413.803op/s 58132224.153op/s 58157962.843op/s 1.22% -0.629 -0.051 0.78% 31669.210op/s 1 200
normalization/normalize_name/normalize_name/good execution_time 9.802µs 9.844µs ± 0.078µs 9.810µs ± 0.004µs 9.845µs 9.985µs 10.205µs 10.430µs 6.33% 3.766 19.312 0.79% 0.006µs 1 200
normalization/normalize_name/normalize_name/good throughput 95873137.152op/s 101595850.788op/s ± 784754.092op/s 101941558.694op/s ± 36583.732op/s 101965918.476op/s 102000144.992op/s 102019523.983op/s 102021902.779op/s 0.08% -3.606 17.585 0.77% 55490.494op/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.894µs; 186.026µs] or [-0.036%; +0.036%] None None None
normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... throughput [5375651.755op/s; 5379416.677op/s] or [-0.035%; +0.035%] None None None
normalization/normalize_name/normalize_name/bad-name execution_time [17.401µs; 17.439µs] or [-0.109%; +0.109%] None None None
normalization/normalize_name/normalize_name/bad-name throughput [57345536.369op/s; 57469677.390op/s] or [-0.108%; +0.108%] None None None
normalization/normalize_name/normalize_name/good execution_time [9.833µs; 9.854µs] or [-0.110%; +0.110%] None None None
normalization/normalize_name/normalize_name/good throughput [101487091.418op/s; 101704610.157op/s] or [-0.107%; +0.107%] None None None

Group 6

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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.325µs 2.374µs ± 0.021µs 2.369µs ± 0.004µs 2.381µs 2.402µs 2.412µs 2.588µs 9.22% 5.451 54.707 0.87% 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.371µs; 2.377µs] or [-0.121%; +0.121%] None None None

Group 7

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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.941µs 5.020µs ± 0.045µs 5.028µs ± 0.050µs 5.050µs 5.087µs 5.093µs 5.094µs 1.32% 0.141 -1.411 0.90% 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 [5.014µs; 5.027µs] or [-0.125%; +0.125%] None None None

Group 8

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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.990µs 89.231µs ± 0.161µs 89.215µs ± 0.088µs 89.306µs 89.409µs 89.645µs 90.677µs 1.64% 4.131 32.318 0.18% 0.011µ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 [89.209µs; 89.254µs] or [-0.025%; +0.025%] None None None

Group 9

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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.326µs 24.950µs ± 10.165µs 17.519µs ± 0.099µs 34.681µs 44.581µs 54.216µs 73.377µs 318.85% 1.228 1.571 40.64% 0.719µs 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
two way interface execution_time [23.542µs; 26.359µs] or [-5.646%; +5.646%] None None None

Group 10

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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.241µs 3.246µs ± 1.484µs 3.029µs ± 0.022µs 3.050µs 3.690µs 14.024µs 15.871µs 423.97% 7.431 56.328 45.59% 0.105µ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.040µs; 3.452µs] or [-6.335%; +6.335%] None None None

Group 11

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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 239.319ns 248.620ns ± 12.082ns 243.986ns ± 3.103ns 248.578ns 273.759ns 291.953ns 292.118ns 19.73% 2.123 3.770 4.85% 0.854ns 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 [246.946ns; 250.295ns] or [-0.673%; +0.673%] None None None

Group 12

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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.817ms 14.849ms ± 0.030ms 14.843ms ± 0.009ms 14.854ms 14.895ms 14.972ms 15.077ms 1.58% 3.919 20.471 0.20% 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 [14.845ms; 14.853ms] or [-0.028%; +0.028%] None None None

Group 13

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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 534.245µs 535.078µs ± 0.440µs 535.040µs ± 0.254µs 535.300µs 535.730µs 536.159µs 538.353µs 0.62% 2.218 14.034 0.08% 0.031µs 1 200
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput 1857516.265op/s 1868888.820op/s ± 1535.105op/s 1869020.166op/s ± 886.348op/s 1869834.856op/s 1871009.192op/s 1871374.644op/s 1871801.628op/s 0.15% -2.191 13.785 0.08% 108.548op/s 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time 379.766µs 380.536µs ± 1.173µs 380.358µs ± 0.194µs 380.616µs 381.114µs 388.949µs 390.083µs 2.56% 7.147 53.337 0.31% 0.083µs 1 200
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput 2563558.987op/s 2627894.439op/s ± 7928.611op/s 2629105.062op/s ± 1339.995op/s 2630280.961op/s 2632053.290op/s 2632998.549op/s 2633202.856op/s 0.16% -7.107 52.915 0.30% 560.637op/s 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time 194.933µs 195.305µs ± 0.152µs 195.306µs ± 0.103µs 195.409µs 195.548µs 195.641µs 195.791µs 0.25% 0.190 -0.142 0.08% 0.011µs 1 200
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput 5107489.811op/s 5120188.809op/s ± 3987.675op/s 5120168.330op/s ± 2711.243op/s 5122889.181op/s 5126499.512op/s 5128437.784op/s 5129967.040op/s 0.19% -0.186 -0.146 0.08% 281.971op/s 1 200
normalization/normalize_service/normalize_service/[empty string] execution_time 37.508µs 37.661µs ± 0.057µs 37.664µs ± 0.042µs 37.704µs 37.756µs 37.775µs 37.811µs 0.39% -0.104 -0.372 0.15% 0.004µs 1 200
normalization/normalize_service/normalize_service/[empty string] throughput 26447613.260op/s 26552579.925op/s ± 39846.558op/s 26550573.232op/s ± 29345.861op/s 26580715.027op/s 26618700.195op/s 26648870.384op/s 26660809.752op/s 0.42% 0.112 -0.369 0.15% 2817.577op/s 1 200
normalization/normalize_service/normalize_service/test_ASCII execution_time 45.794µs 45.884µs ± 0.050µs 45.880µs ± 0.034µs 45.913µs 45.964µs 46.053µs 46.081µs 0.44% 0.913 1.487 0.11% 0.004µs 1 200
normalization/normalize_service/normalize_service/test_ASCII throughput 21700948.008op/s 21794236.692op/s ± 23725.217op/s 21795911.205op/s ± 16054.351op/s 21812772.504op/s 21825975.760op/s 21834316.493op/s 21836932.013op/s 0.19% -0.904 1.458 0.11% 1677.626op/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 [535.017µs; 535.139µs] or [-0.011%; +0.011%] None None None
normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... throughput [1868676.069op/s; 1869101.571op/s] or [-0.011%; +0.011%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて execution_time [380.374µs; 380.699µs] or [-0.043%; +0.043%] None None None
normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて throughput [2626795.610op/s; 2628993.268op/s] or [-0.042%; +0.042%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters execution_time [195.284µs; 195.326µs] or [-0.011%; +0.011%] None None None
normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters throughput [5119636.156op/s; 5120741.462op/s] or [-0.011%; +0.011%] None None None
normalization/normalize_service/normalize_service/[empty string] execution_time [37.653µs; 37.669µs] or [-0.021%; +0.021%] None None None
normalization/normalize_service/normalize_service/[empty string] throughput [26547057.575op/s; 26558102.274op/s] or [-0.021%; +0.021%] None None None
normalization/normalize_service/normalize_service/test_ASCII execution_time [45.877µs; 45.891µs] or [-0.015%; +0.015%] None None None
normalization/normalize_service/normalize_service/test_ASCII throughput [21790948.605op/s; 21797524.779op/s] or [-0.015%; +0.015%] None None None

Group 14

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
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 33.837µs 34.492µs ± 1.135µs 33.964µs ± 0.071µs 34.139µs 36.889µs 36.940µs 38.508µs 13.38% 1.731 1.202 3.28% 0.080µ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.335µs; 34.649µs] or [-0.456%; +0.456%] None None None

Group 15

cpu_model git_commit_sha git_commit_date git_branch
Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz d77157c 1758032199 dsn/otel-proto
scenario metric min mean ± sd median ± mad p75 p95 p99 max peak_to_median_ratio skewness kurtosis cv sem runs sample_size
concentrator/add_spans_to_concentrator execution_time 8.250ms 8.267ms ± 0.010ms 8.265ms ± 0.005ms 8.272ms 8.287ms 8.305ms 8.315ms 0.61% 1.764 4.747 0.13% 0.001ms 1 200
scenario metric 95% CI mean Shapiro-Wilk pvalue Ljung-Box pvalue (lag=1) Dip test pvalue
concentrator/add_spans_to_concentrator execution_time [8.265ms; 8.268ms] or [-0.018%; +0.018%] None None None

Baseline

Omitted due to size.

@datadog-datadog-prod-us1
Copy link

datadog-datadog-prod-us1 bot commented Aug 14, 2025

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: d77157c | Docs | Was this helpful? Give us feedback!

@codecov-commenter
Copy link

codecov-commenter commented Aug 14, 2025

Codecov Report

❌ Patch coverage is 97.24771% with 24 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.96%. Comparing base (4e1d7bb) to head (d77157c).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1181      +/-   ##
==========================================
+ Coverage   71.61%   71.96%   +0.34%     
==========================================
  Files         354      362       +8     
  Lines       55939    56838     +899     
==========================================
+ Hits        40063    40903     +840     
- Misses      15876    15935      +59     
Components Coverage Δ
datadog-crashtracker 49.30% <ø> (-0.03%) ⬇️
datadog-crashtracker-ffi 5.93% <ø> (ø)
datadog-alloc 98.73% <ø> (ø)
data-pipeline 90.21% <ø> (ø)
data-pipeline-ffi 88.19% <ø> (ø)
ddcommon 84.29% <ø> (ø)
ddcommon-ffi 73.84% <ø> (ø)
ddtelemetry 59.98% <ø> (ø)
ddtelemetry-ffi 21.24% <ø> (ø)
dogstatsd-client 83.26% <ø> (ø)
datadog-ipc 82.39% <ø> (ø)
datadog-profiling 79.38% <97.35%> (+2.48%) ⬆️
datadog-profiling-ffi 62.07% <0.00%> (-0.05%) ⬇️
datadog-sidecar 36.64% <ø> (-0.42%) ⬇️
datdog-sidecar-ffi 9.26% <ø> (-2.01%) ⬇️
spawn-worker 55.35% <ø> (ø)
tinybytes 92.22% <ø> (ø)
datadog-trace-normalization 98.24% <ø> (ø)
datadog-trace-obfuscation 94.17% <ø> (ø)
datadog-trace-protobuf 77.10% <ø> (ø)
datadog-trace-utils 89.78% <ø> (ø)
datadog-tracer-flare 53.15% <ø> (-2.94%) ⬇️
datadog-log 76.31% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Member

@ivoanjo ivoanjo left a comment

Choose a reason for hiding this comment

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

I've given it a pass! Overall seems quite reasonable, but I have two big comments I'd like to leave on the overall thing:

  • I think we should really really keep somewhere in the crate a list of all the gaps that currently exist and things that would get us to a 100% great implementation. I fear there's too many things lost in small "TODO this" "missing that", and especially on the efficiency side -- serializing everything in-memory first, not streaming; the duplication of samples, etc, those are things that can easily get lost if the code seems to work fine, so I think it's mega-important for us to clearly record them, even though we may not address them in this PR

  • I think this PR would benefit from a trimming down of AI output verbosity. More tests + more comments aren't actually always good, and there's so much trivial stuff and duplication that it was really hard + a huge slog to actually go through this PR and find the important parts (while making sure the other parts were sane).

Comment on lines 502 to 533
fn test_sample_conversion_with_labels() {
// Create an internal profile with sample types
let sample_types = [crate::api::ValueType::new("cpu", "nanoseconds")];
let mut internal_profile = InternalProfile::new(&sample_types, None);

// Add a function and location
let function = crate::api::Function {
name: "test_function",
system_name: "test_system",
filename: "test_file.rs",
};
let _function_id = internal_profile.add_function(&function);

// Add a mapping
let mapping = crate::api::Mapping {
memory_start: 0x1000,
memory_limit: 0x2000,
file_offset: 0,
filename: "test_binary",
build_id: "test_build_id",
};
let _mapping_id = internal_profile.add_mapping(&mapping);

let location = crate::api::Location {
mapping,
function,
address: 0x1000,
line: 42,
};
let location_id = internal_profile.add_location(&location).unwrap();

let _stack_trace_id = internal_profile.add_stacktrace(vec![location_id]);
Copy link
Member

Choose a reason for hiding this comment

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

This is more of a test design choice, but I find that with such a complex file with some many tests, we would benefit from deduplicating common test setup code. Each test case is costing us 30+ lines of code just to get to the interesting bits, and thus it makes it really hard to follow what's actually being tested from the boring always-the-same details.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Took a first pass at doing so

@gyuheon0h
Copy link
Contributor

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 70.47 MB 86.25 MB +22.39% (+15.78 MB) 🚨
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 6.75 MB 7.00 MB +3.69% (+256.00 KB) ⚠️
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 82.75 MB 99.24 MB +19.92% (+16.48 MB) 🚨
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 8.80 MB 9.08 MB +3.27% (+295.19 KB) ⚠️
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 17.89 MB 18.88 MB +5.54% (+1016.00 KB) 🚨
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 65.01 KB 65.01 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 124.63 MB 128.14 MB +2.81% (+3.50 MB) ⚠️
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 647.28 MB 657.56 MB +1.58% (+10.28 MB) ⚠️
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 5.55 MB 5.93 MB +6.92% (+393.50 KB) 🚨
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 65.01 KB 65.01 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 17.23 MB 18.69 MB +8.47% (+1.46 MB) 🚨
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 31.57 MB 38.09 MB +20.63% (+6.51 MB) 🚨
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 15.23 MB 15.94 MB +4.65% (+726.00 KB) ⚠️
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 66.01 KB 66.01 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 126.82 MB 130.41 MB +2.83% (+3.59 MB) ⚠️
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 637.65 MB 647.35 MB +1.52% (+9.69 MB) ⚠️
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 4.23 MB 4.53 MB +7.14% (+310.00 KB) 🚨
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 66.01 KB 66.01 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 18.35 MB 19.84 MB +8.12% (+1.49 MB) 🚨
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 29.68 MB 35.67 MB +20.18% (+5.99 MB) 🚨
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 63.02 MB 73.85 MB +17.19% (+10.83 MB) 🚨
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 8.06 MB 8.36 MB +3.77% (+312.00 KB) ⚠️
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 77.38 MB 93.67 MB +21.05% (+16.29 MB) 🚨
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 9.40 MB 9.72 MB +3.44% (+331.44 KB) ⚠️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
profiling Relates to the profiling* modules.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants