feat(aot): add DuckType and CallTarget NativeAOT workflows#8383
feat(aot): add DuckType and CallTarget NativeAOT workflows#8383tonyredondo wants to merge 6 commits intocodex/ducktyping-nativeaotfrom
Conversation
cceeae7 to
bd26023
Compare
BenchmarksBenchmark execution time: 2026-03-27 17:51:48 Comparing candidate commit 218d0a8 in PR branch Found 7 performance improvements and 8 performance regressions! Performance is the same for 254 metrics, 19 unstable metrics.
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8383) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-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:
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 chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8383) - mean (72ms) : 70, 74
master - mean (72ms) : 68, 76
section Bailout
This PR (8383) - mean (76ms) : 74, 78
master - mean (76ms) : 74, 78
section CallTarget+Inlining+NGEN
This PR (8383) - mean (1,086ms) : 1033, 1139
master - mean (1,077ms) : 1036, 1118
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 (8383) - mean (113ms) : 108, 117
master - mean (113ms) : 109, 116
section Bailout
This PR (8383) - mean (114ms) : 110, 118
master - mean (113ms) : 110, 117
section CallTarget+Inlining+NGEN
This PR (8383) - mean (800ms) : 781, 819
master - mean (794ms) : 773, 815
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8383) - mean (100ms) : 96, 103
master - mean (100ms) : 97, 103
section Bailout
This PR (8383) - mean (100ms) : 98, 102
master - mean (100ms) : 97, 103
section CallTarget+Inlining+NGEN
This PR (8383) - mean (950ms) : 916, 984
master - mean (948ms) : 912, 984
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8383) - mean (99ms) : 96, 102
master - mean (98ms) : 95, 101
section Bailout
This PR (8383) - mean (100ms) : 98, 103
master - mean (100ms) : 97, 102
section CallTarget+Inlining+NGEN
This PR (8383) - mean (832ms) : 790, 874
master - mean (834ms) : 796, 871
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 (8383) - mean (217ms) : 208, 225
master - mean (226ms) : 210, 241
section Bailout
This PR (8383) - mean (221ms) : 213, 229
master - mean (230ms) : 215, 245
section CallTarget+Inlining+NGEN
This PR (8383) - mean (1,259ms) : 1208, 1310
master - mean (1,257ms) : 1210, 1305
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 (8383) - mean (314ms) : 299, 328
master - mean (321ms) : 300, 342
section Bailout
This PR (8383) - mean (315ms) : 298, 333
master - mean (324ms) : 303, 345
section CallTarget+Inlining+NGEN
This PR (8383) - mean (1,033ms) : 1003, 1063
master - mean (1,030ms) : 1000, 1060
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8383) - mean (305ms) : 294, 317
master - mean (306ms) : 292, 321
section Bailout
This PR (8383) - mean (310ms) : 293, 328
master - mean (306ms) : 296, 316
section CallTarget+Inlining+NGEN
This PR (8383) - mean (1,220ms) : 1150, 1289
master - mean (1,206ms) : 1155, 1257
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8383) - mean (304ms) : 289, 320
master - mean (311ms) : 292, 329
section Bailout
This PR (8383) - mean (309ms) : 287, 331
master - mean (308ms) : 295, 321
section CallTarget+Inlining+NGEN
This PR (8383) - mean (1,171ms) : 1074, 1267
master - mean (1,169ms) : 1076, 1261
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3a04749 to
218d0a8
Compare
Summary of changes
CallTargetauto-instrumentationcalltarget-aotCallTargetAOT registration path, contract validation, and single-registry enforcementTask/Task<T>, andValueTask/ValueTask<T>pathsReason for change
CallTargetcurrently depends on runtime IL emission, which is not compatible with NativeAOT. This branch moves the required adapter generation to build time and wires the generated registry intodotnet publish /p:PublishAot=trueso the runtime can execute pre-registered handlers without emitting IL.Implementation details
IntegrationMapperpath for normal JIT runtimesdd-trace calltarget-aot generatepublic workflow and the internalrewritestep consumed by generated MSBuild targetsInstrumentMethodAttributedefinitions directly fromDatadog.TraceCallTargetregistry bootstrap during publish/runtimeDatadog.TraceTest coverage
Verified locally with focused gates:
dotnet build tracer/src/Datadog.Trace.Tools.Runner/Datadog.Trace.Tools.Runner.csproj -c Release --no-restore /m:1 /nodeReuse:falsedotnet build tracer/test/Datadog.Trace.Tools.Runner.Tests/Datadog.Trace.Tools.Runner.Tests.csproj -c Release --framework net8.0 --no-restore /m:1 /nodeReuse:falseDOTNET_ROLL_FORWARD=Major DOTNET_CLI_TELEMETRY_OPTOUT=1 dotnet test tracer/test/Datadog.Trace.Tools.Runner.Tests/Datadog.Trace.Tools.Runner.Tests.csproj -c Release --framework net8.0 --no-build --filter FullyQualifiedName~CallTargetAotGenerateProcessorTests /m:1DD_TRACE_TOOLS_VERBOSE_ERRORS=1 DOTNET_ROLL_FORWARD=Major DOTNET_CLI_TELEMETRY_OPTOUT=1 dotnet test tracer/test/Datadog.Trace.Tools.Runner.Tests/Datadog.Trace.Tools.Runner.Tests.csproj -c Release --framework net8.0 --no-build --filter FullyQualifiedName~CallTargetAotNativeAotPublishIntegrationTests /m:1DOTNET_ROLL_FORWARD=Major DOTNET_CLI_TELEMETRY_OPTOUT=1 dotnet test tracer/test/Datadog.Trace.Tests/Datadog.Trace.Tests.csproj -c Release --framework net8.0 --filter FullyQualifiedName~CallTargetAotEngineTests /m:1Other details
This branch is based on
masterand includes the earlier DuckType NativeAOT work thatCallTargetAOT depends on.