Skip to content

Use libdatadog for dotnet#8186

Draft
NachoEchevarria wants to merge 29 commits intomasterfrom
nacho/UseLibDatadogDotnet
Draft

Use libdatadog for dotnet#8186
NachoEchevarria wants to merge 29 commits intomasterfrom
nacho/UseLibDatadogDotnet

Conversation

@NachoEchevarria
Copy link
Collaborator

@NachoEchevarria NachoEchevarria commented Feb 10, 2026

Summary of changes

Migrate native dependency from DataDog/libdatadog to DataDog/libdatadog-dotnet v1.2.29.

Reason for change

libdatadog-dotnet is a .NET-specific fork of libdatadog with a minimal feature preset tailored to the needs of the .NET tracer, resulting in smaller binaries and a more focused build.

Implementation details

  • Updated build/cmake/FindLibdatadog.cmake: version, download URLs, and SHA256 hashes for all 6 Linux/macOS platform variants
  • Updated build/vcpkg_local_ports/libdatadog/portfile.cmake: download URL and SHA512 hashes for both Windows variants (x64, x86)
  • Updated build/vcpkg_local_ports/libdatadog/vcpkg.json: version string to 1.2.29

All download URLs changed from github.com/DataDog/libdatadog to github.com/DataDog/libdatadog-dotnet.

Test coverage

No test changes — this is a dependency version/source update. Existing CI builds and native profiler tests validate the binary compatibility.

Other details

@NachoEchevarria NachoEchevarria added area:builds project files, build scripts, pipelines, versioning, releases, packages libdatadog Updates to the libdatadog library and Rust integration labels Feb 10, 2026
@pr-commenter
Copy link

pr-commenter bot commented Feb 10, 2026

Benchmarks

Benchmark execution time: 2026-02-18 14:11:01

Comparing candidate commit 07e0d596 in PR branch nacho/UseLibDatadogDotnet with baseline commit 2b393bc in branch master.

Found 8 performance improvements and 6 performance regressions! Performance is the same for 167 metrics, 11 unstable metrics.

scenario:Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces net6.0

  • 🟥 execution_time [+21.574ms; +21.940ms] or [+21.306%; +21.668%]

scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody net6.0

  • 🟥 execution_time [+17.412ms; +23.591ms] or [+8.797%; +11.918%]

scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody netcoreapp3.1

  • 🟥 execution_time [+20.864ms; +26.883ms] or [+10.573%; +13.623%]

scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorMoreComplexBody net6.0

  • 🟩 execution_time [-18.877ms; -13.531ms] or [-8.901%; -6.380%]

scenario:Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs netcoreapp3.1

  • 🟩 execution_time [-22.381ms; -21.492ms] or [-11.075%; -10.636%]

scenario:Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmarkWithAttack netcoreapp3.1

  • 🟩 execution_time [-57.045µs; -28.413µs] or [-15.402%; -7.672%]
  • 🟩 throughput [+199.346op/s; +392.972op/s] or [+7.220%; +14.232%]

scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1

  • 🟥 throughput [-300.658op/s; -195.029op/s] or [-17.888%; -11.604%]

scenario:Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice net472

  • 🟩 execution_time [-105.455µs; -102.745µs] or [-5.260%; -5.124%]
  • 🟩 throughput [+26.969op/s; +27.658op/s] or [+5.407%; +5.545%]

scenario:Benchmarks.Trace.Log4netBenchmark.EnrichedLog netcoreapp3.1

  • 🟩 execution_time [-28.276ms; -26.672ms] or [-14.117%; -13.316%]

scenario:Benchmarks.Trace.SingleSpanAspNetCoreBenchmark.SingleSpanAspNetCore net6.0

  • 🟥 execution_time [+49.273ms; +50.814ms] or [+55.697%; +57.438%]

scenario:Benchmarks.Trace.SpanBenchmark.StartFinishTwoScopes netcoreapp3.1

  • 🟥 execution_time [+10.125ms; +14.059ms] or [+5.091%; +7.069%]

scenario:Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin net6.0

  • 🟩 execution_time [-19.102ms; -14.986ms] or [-8.861%; -6.952%]

@dd-trace-dotnet-ci-bot
Copy link

dd-trace-dotnet-ci-bot bot commented Feb 13, 2026

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (8186) and master.

⚠️ Potential regressions detected

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Bailout
duration196.96 ± (196.87 - 197.54) ms213.20 ± (214.48 - 217.52) ms+8.2%❌⬆️
Full Metrics Comparison

FakeDbCommand

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration74.07 ± (74.15 - 74.54) ms75.90 ± (75.88 - 76.17) ms+2.5%✅⬆️
.NET Framework 4.8 - Bailout
duration78.16 ± (78.08 - 78.44) ms80.39 ± (80.23 - 80.59) ms+2.9%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1071.28 ± (1072.51 - 1079.75) ms1087.84 ± (1087.70 - 1094.22) ms+1.5%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms22.53 ± (22.49 - 22.56) ms22.98 ± (22.93 - 23.03) ms+2.0%✅⬆️
process.time_to_main_ms85.16 ± (84.98 - 85.35) ms87.93 ± (87.77 - 88.08) ms+3.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.92 ± (10.91 - 10.92) MB10.90 ± (10.90 - 10.91) MB-0.1%
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms22.40 ± (22.36 - 22.44) ms22.91 ± (22.86 - 22.97) ms+2.3%✅⬆️
process.time_to_main_ms86.26 ± (86.09 - 86.44) ms89.03 ± (88.84 - 89.23) ms+3.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.96 ± (10.95 - 10.96) MB10.95 ± (10.94 - 10.95) MB-0.1%
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms237.75 ± (233.87 - 241.62) ms247.30 ± (243.02 - 251.57) ms+4.0%✅⬆️
process.time_to_main_ms485.56 ± (484.86 - 486.27) ms500.73 ± (500.05 - 501.40) ms+3.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed47.50 ± (47.48 - 47.52) MB47.57 ± (47.54 - 47.59) MB+0.1%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%
.NET 6 - Baseline
process.internal_duration_ms21.37 ± (21.33 - 21.41) ms21.80 ± (21.74 - 21.85) ms+2.0%✅⬆️
process.time_to_main_ms73.87 ± (73.71 - 74.03) ms76.31 ± (76.15 - 76.48) ms+3.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.64 ± (10.64 - 10.64) MB10.65 ± (10.64 - 10.65) MB+0.1%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms21.41 ± (21.37 - 21.45) ms21.75 ± (21.69 - 21.81) ms+1.6%✅⬆️
process.time_to_main_ms74.97 ± (74.84 - 75.11) ms78.06 ± (77.88 - 78.24) ms+4.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.74 ± (10.74 - 10.75) MB10.73 ± (10.72 - 10.74) MB-0.1%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms252.83 ± (249.21 - 256.44) ms233.97 ± (230.02 - 237.93) ms-7.5%
process.time_to_main_ms466.40 ± (465.81 - 467.00) ms479.75 ± (479.04 - 480.45) ms+2.9%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed48.35 ± (48.33 - 48.38) MB48.32 ± (48.30 - 48.34) MB-0.1%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms19.43 ± (19.39 - 19.47) ms19.95 ± (19.91 - 19.99) ms+2.7%✅⬆️
process.time_to_main_ms72.51 ± (72.38 - 72.64) ms75.36 ± (75.19 - 75.52) ms+3.9%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.69 ± (7.69 - 7.70) MB7.67 ± (7.67 - 7.68) MB-0.3%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms19.51 ± (19.47 - 19.55) ms19.97 ± (19.92 - 20.01) ms+2.3%✅⬆️
process.time_to_main_ms73.73 ± (73.61 - 73.84) ms76.64 ± (76.48 - 76.80) ms+3.9%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.75 ± (7.74 - 7.76) MB7.73 ± (7.72 - 7.74) MB-0.3%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms184.61 ± (183.75 - 185.48) ms191.38 ± (190.64 - 192.12) ms+3.7%✅⬆️
process.time_to_main_ms445.59 ± (444.82 - 446.36) ms461.14 ± (460.46 - 461.82) ms+3.5%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed35.93 ± (35.89 - 35.96) MB36.19 ± (36.15 - 36.23) MB+0.7%✅⬆️
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)+0.1%✅⬆️

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration193.38 ± (193.35 - 194.15) ms201.38 ± (201.32 - 203.31) ms+4.1%✅⬆️
.NET Framework 4.8 - Bailout
duration196.96 ± (196.87 - 197.54) ms213.20 ± (214.48 - 217.52) ms+8.2%❌⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1136.86 ± (1141.19 - 1150.34) ms1206.47 ± (1203.84 - 1213.71) ms+6.1%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms187.32 ± (186.93 - 187.71) ms203.14 ± (202.11 - 204.18) ms+8.4%✅⬆️
process.time_to_main_ms81.29 ± (81.06 - 81.52) ms86.62 ± (86.25 - 86.99) ms+6.6%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.15 ± (16.12 - 16.18) MB15.98 ± (15.96 - 16.00) MB-1.0%
runtime.dotnet.threads.count20 ± (19 - 20)20 ± (20 - 20)+1.6%✅⬆️
.NET Core 3.1 - Bailout
process.internal_duration_ms186.70 ± (186.37 - 187.04) ms208.27 ± (207.03 - 209.51) ms+11.6%✅⬆️
process.time_to_main_ms82.58 ± (82.41 - 82.76) ms89.29 ± (88.83 - 89.75) ms+8.1%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.24 ± (16.21 - 16.27) MB15.97 ± (15.96 - 15.99) MB-1.6%
runtime.dotnet.threads.count21 ± (20 - 21)21 ± (21 - 21)+1.7%✅⬆️
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms418.53 ± (414.90 - 422.16) ms440.75 ± (436.54 - 444.96) ms+5.3%✅⬆️
process.time_to_main_ms471.75 ± (471.01 - 472.50) ms514.72 ± (513.19 - 516.25) ms+9.1%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed58.29 ± (58.18 - 58.40) MB57.96 ± (57.83 - 58.10) MB-0.6%
runtime.dotnet.threads.count29 ± (29 - 29)30 ± (29 - 30)+0.2%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms191.99 ± (191.65 - 192.33) ms212.51 ± (211.35 - 213.67) ms+10.7%✅⬆️
process.time_to_main_ms70.56 ± (70.36 - 70.76) ms76.21 ± (75.82 - 76.59) ms+8.0%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.26 ± (16.15 - 16.37) MB16.17 ± (16.15 - 16.20) MB-0.5%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+3.3%✅⬆️
.NET 6 - Bailout
process.internal_duration_ms191.15 ± (190.86 - 191.44) ms215.95 ± (214.70 - 217.19) ms+13.0%✅⬆️
process.time_to_main_ms71.64 ± (71.51 - 71.78) ms79.51 ± (79.04 - 79.99) ms+11.0%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.14 ± (15.99 - 16.28) MB16.21 ± (16.19 - 16.23) MB+0.4%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)21 ± (20 - 21)+6.9%✅⬆️
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms442.24 ± (439.43 - 445.05) ms490.42 ± (483.21 - 497.62) ms+10.9%✅⬆️
process.time_to_main_ms447.70 ± (447.17 - 448.22) ms485.24 ± (483.55 - 486.93) ms+8.4%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed58.21 ± (58.09 - 58.32) MB57.82 ± (57.66 - 57.98) MB-0.7%
runtime.dotnet.threads.count29 ± (29 - 29)30 ± (30 - 30)+1.1%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms190.41 ± (189.95 - 190.87) ms210.01 ± (208.48 - 211.54) ms+10.3%✅⬆️
process.time_to_main_ms70.01 ± (69.82 - 70.21) ms74.79 ± (74.34 - 75.25) ms+6.8%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.71 ± (11.69 - 11.73) MB11.61 ± (11.59 - 11.63) MB-0.9%
runtime.dotnet.threads.count18 ± (18 - 18)19 ± (19 - 19)+2.6%✅⬆️
.NET 8 - Bailout
process.internal_duration_ms189.05 ± (188.76 - 189.34) ms213.92 ± (212.39 - 215.45) ms+13.2%✅⬆️
process.time_to_main_ms70.64 ± (70.51 - 70.78) ms76.82 ± (76.35 - 77.29) ms+8.7%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.78 ± (11.75 - 11.81) MB11.59 ± (11.57 - 11.61) MB-1.6%
runtime.dotnet.threads.count19 ± (19 - 19)20 ± (20 - 20)+2.3%✅⬆️
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms362.76 ± (361.52 - 364.00) ms458.39 ± (450.79 - 466.00) ms+26.4%✅⬆️
process.time_to_main_ms432.54 ± (431.78 - 433.29) ms463.67 ± (462.06 - 465.27) ms+7.2%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed47.71 ± (47.69 - 47.74) MB49.51 ± (49.37 - 49.64) MB+3.8%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)-0.7%
Comparison explanation

Execution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:

  • Welch test with statistical test for significance of 5%
  • Only results indicating a difference greater than 5% and 5 ms are considered.

Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard.

Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph).

Duration charts
FakeDbCommand (.NET Framework 4.8)
gantt
    title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8186) - mean (76ms)  : 74, 78
    master - mean (74ms)  : 72, 77

    section Bailout
    This PR (8186) - mean (80ms)  : 79, 82
    master - mean (78ms)  : 76, 80

    section CallTarget+Inlining+NGEN
    This PR (8186) - mean (1,091ms)  : 1044, 1138
    master - mean (1,076ms)  : 1022, 1130

Loading
FakeDbCommand (.NET Core 3.1)
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8186) - mean (118ms)  : 116, 121
    master - mean (115ms)  : 110, 119

    section Bailout
    This PR (8186) - mean (119ms)  : 117, 121
    master - mean (116ms)  : 113, 118

    section CallTarget+Inlining+NGEN
    This PR (8186) - mean (785ms)  : 725, 845
    master - mean (753ms)  : 699, 806

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8186) - mean (105ms)  : 102, 108
    master - mean (102ms)  : 99, 105

    section Bailout
    This PR (8186) - mean (107ms)  : 104, 109
    master - mean (103ms)  : 101, 105

    section CallTarget+Inlining+NGEN
    This PR (8186) - mean (746ms)  : 676, 817
    master - mean (749ms)  : 683, 815

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8186) - mean (103ms)  : 101, 106
    master - mean (100ms)  : 97, 102

    section Bailout
    This PR (8186) - mean (105ms)  : 103, 106
    master - mean (101ms)  : 99, 103

    section CallTarget+Inlining+NGEN
    This PR (8186) - mean (684ms)  : 656, 711
    master - mean (659ms)  : 642, 677

Loading
HttpMessageHandler (.NET Framework 4.8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8186) - mean (202ms)  : 187, 217
    master - mean (194ms)  : 190, 198

    section Bailout
    This PR (8186) - mean (216ms)  : crit, 193, 239
    master - mean (197ms)  : 194, 201

    section CallTarget+Inlining+NGEN
    This PR (8186) - mean (1,209ms)  : 1139, 1279
    master - mean (1,146ms)  : 1075, 1216

Loading
HttpMessageHandler (.NET Core 3.1)
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8186) - mean (301ms)  : 276, 326
    master - mean (277ms)  : 271, 283

    section Bailout
    This PR (8186) - mean (311ms)  : crit, 281, 340
    master - mean (277ms)  : 273, 281

    section CallTarget+Inlining+NGEN
    This PR (8186) - mean (993ms)  : crit, 924, 1061
    master - mean (924ms)  : 875, 972

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8186) - mean (300ms)  : 277, 322
    master - mean (271ms)  : 266, 275

    section Bailout
    This PR (8186) - mean (306ms)  : crit, 282, 331
    master - mean (271ms)  : 267, 274

    section CallTarget+Inlining+NGEN
    This PR (8186) - mean (1,010ms)  : crit, 899, 1122
    master - mean (918ms)  : 871, 965

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8186) - mean (296ms)  : 268, 325
    master - mean (270ms)  : 263, 278

    section Bailout
    This PR (8186) - mean (304ms)  : crit, 278, 330
    master - mean (270ms)  : 265, 274

    section CallTarget+Inlining+NGEN
    This PR (8186) - mean (948ms)  : crit, 807, 1089
    master - mean (826ms)  : 802, 850

Loading

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

Labels

area:builds project files, build scripts, pipelines, versioning, releases, packages libdatadog Updates to the libdatadog library and Rust integration

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Comments