dd-trace-dotnet icon indicating copy to clipboard operation
dd-trace-dotnet copied to clipboard

[tracing] hangfire autoinstrumentation

Open chojomok opened this issue 7 months ago • 5 comments

Summary of changes

Reason for change

Implementation details

Test coverage

Other details

chojomok avatar Apr 28 '25 19:04 chojomok

Datadog Report

All test runs d150741 :link:

:x: 2 Total Test Services: 1 Failed, 1 Passed

Test Services
Service Name Failed Known Flaky New Flaky Passed Skipped Total Time Test Service View
dd-trace-dotnet 60 0 0 448193 4050 32h 20m 21.7s Link
exploration_tests 0 0 0 22085 3 2m 14.25s Link

:x: Failed Tests (60)

This report shows up to 5 failed tests.

  • SubmitsTraces - Datadog.Trace.ClrProfiler.IntegrationTests.HangfireTests - Details

    Expand for error
    pplication not found: /project/artifacts/bin/Samples.Hangfire/release_net9.0/Samples.Hangfire.dll
    
  • SubmitsTraces - Datadog.Trace.ClrProfiler.IntegrationTests.HangfireTests - Details

    Expand for error
    pplication not found: /project/artifacts/bin/Samples.Hangfire/release_net9.0/Samples.Hangfire.dll
    
  • SubmitsTraces - Datadog.Trace.ClrProfiler.IntegrationTests.HangfireTests - Details

    Expand for error
    pplication not found: /project/artifacts/bin/Samples.Hangfire/release_netcoreapp3.0/Samples.Hangfire.dll
    
  • SubmitsTraces - Datadog.Trace.ClrProfiler.IntegrationTests.HangfireTests - Details

    Expand for error
    pplication not found: /project/artifacts/bin/Samples.Hangfire/release_netcoreapp3.0/Samples.Hangfire.dll
    
  • SubmitsTraces - Datadog.Trace.ClrProfiler.IntegrationTests.HangfireTests - Details

    Expand for error
    pplication not found: /project/artifacts/bin/Samples.Hangfire/release_net7.0/Samples.Hangfire.dll
    

Benchmarks Report for tracer :snail:

Benchmarks for #6904 compared to master:

  • 2 benchmarks are faster, with geometric mean 1.175
  • 1 benchmarks are slower, with geometric mean 1.218
  • 3 benchmarks have fewer allocations

The following thresholds were used for comparing the benchmark speeds:

  • Mann–Whitney U test with statistical test for significance of 5%
  • Only results indicating a difference greater than 10% and 0.3 ns are considered.

Allocation changes below 0.5% are ignored.

Benchmark details

Benchmarks.Trace.ActivityBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada:

Fewer allocations :tada: in #6904

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net6.0 5.6 KB 5.55 KB -49 B -0.88%
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑netcoreapp3.1 5.8 KB 5.73 KB -69 B -1.19%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 8.25μs 144ns 1.44μs 0 0 0 5.6 KB
master StartStopWithChild netcoreapp3.1 9.83μs 99.8ns 988ns 0 0 0 5.8 KB
master StartStopWithChild net472 15.2μs 72.2ns 289ns 1.03 0.344 0.0688 6.15 KB
#6904 StartStopWithChild net6.0 8.05μs 102ns 1.02μs 0 0 0 5.55 KB
#6904 StartStopWithChild netcoreapp3.1 10.8μs 153ns 1.53μs 0 0 0 5.73 KB
#6904 StartStopWithChild net472 15μs 86ns 688ns 0.939 0.313 0 6.13 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed :heavy_check_mark: Fewer allocations :tada:

Fewer allocations :tada: in #6904

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 3.35 KB 3.31 KB -34 B -1.02%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 498μs 1.08μs 4.18μs 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 651μs 1.29μs 4.98μs 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 860μs 2.13μs 8.25μs 0 0 0 3.35 KB
#6904 WriteAndFlushEnrichedTraces net6.0 498μs 892ns 3.22μs 0 0 0 2.7 KB
#6904 WriteAndFlushEnrichedTraces netcoreapp3.1 688μs 2.73μs 10.6μs 0 0 0 2.7 KB
#6904 WriteAndFlushEnrichedTraces net472 861μs 1.28μs 4.97μs 0 0 0 3.31 KB
Benchmarks.Trace.AspNetCoreBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 128μs 716ns 4.47μs 0 0 0 14.48 KB
master SendRequest netcoreapp3.1 142μs 811ns 6.07μs 0 0 0 17.28 KB
master SendRequest net472 0.0024ns 0.00101ns 0.00376ns 0 0 0 0 b
#6904 SendRequest net6.0 127μs 719ns 5.14μs 0 0 0 14.48 KB
#6904 SendRequest netcoreapp3.1 152μs 849ns 5.44μs 0 0 0 17.28 KB
#6904 SendRequest net472 0.00283ns 0.000925ns 0.00333ns 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 612μs 6.19μs 60μs 0 0 0 41.73 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 724μs 6.28μs 60.9μs 0 0 0 41.78 KB
master WriteAndFlushEnrichedTraces net472 857μs 5.02μs 49.9μs 7.81 0 0 53.47 KB
#6904 WriteAndFlushEnrichedTraces net6.0 562μs 3.12μs 24.4μs 0 0 0 41.54 KB
#6904 WriteAndFlushEnrichedTraces netcoreapp3.1 760μs 8.58μs 84.1μs 0 0 0 41.87 KB
#6904 WriteAndFlushEnrichedTraces net472 887μs 5.4μs 53.4μs 7.81 0 0 53.38 KB
Benchmarks.Trace.DbCommandBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteNonQuery net6.0 1.3μs 1.02ns 3.82ns 0.013 0 0 1.03 KB
master ExecuteNonQuery netcoreapp3.1 1.9μs 4.54ns 17ns 0.00912 0 0 1.02 KB
master ExecuteNonQuery net472 2.08μs 3.4ns 12.7ns 0.154 0.0103 0 995 B
#6904 ExecuteNonQuery net6.0 1.3μs 2.85ns 10.6ns 0.0129 0 0 1.03 KB
#6904 ExecuteNonQuery netcoreapp3.1 1.76μs 2.73ns 9.86ns 0.00901 0 0 1.02 KB
#6904 ExecuteNonQuery net472 2.14μs 6.52ns 25.2ns 0.157 0.0105 0 995 B
Benchmarks.Trace.ElasticsearchBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.17μs 0.581ns 2.1ns 0.0118 0 0 984 B
master CallElasticsearch netcoreapp3.1 1.52μs 1.08ns 4.19ns 0.00748 0 0 984 B
master CallElasticsearch net472 2.57μs 1.78ns 6.65ns 0.157 0 0 1 KB
master CallElasticsearchAsync net6.0 1.31μs 1.5ns 5.79ns 0.0131 0 0 960 B
master CallElasticsearchAsync netcoreapp3.1 1.62μs 1.29ns 4.99ns 0.00811 0 0 1.03 KB
master CallElasticsearchAsync net472 2.7μs 0.977ns 3.52ns 0.162 0 0 1.06 KB
#6904 CallElasticsearch net6.0 1.1μs 1.16ns 4.18ns 0.0112 0 0 984 B
#6904 CallElasticsearch netcoreapp3.1 1.52μs 0.773ns 2.79ns 0.00776 0 0 984 B
#6904 CallElasticsearch net472 2.52μs 1.6ns 5.98ns 0.152 0 0 1 KB
#6904 CallElasticsearchAsync net6.0 1.31μs 1.17ns 4.38ns 0.013 0 0 960 B
#6904 CallElasticsearchAsync netcoreapp3.1 1.64μs 0.941ns 4.98ns 0.00828 0 0 1.03 KB
#6904 CallElasticsearchAsync net472 2.75μs 2.4ns 9.28ns 0.164 0 0 1.06 KB
Benchmarks.Trace.GraphQLBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteAsync net6.0 1.28μs 0.574ns 2.15ns 0.0129 0 0 960 B
master ExecuteAsync netcoreapp3.1 1.7μs 2.25ns 8.41ns 0.00848 0 0 960 B
master ExecuteAsync net472 1.93μs 0.866ns 3.36ns 0.144 0 0 923 B
#6904 ExecuteAsync net6.0 1.23μs 0.876ns 3.39ns 0.0122 0 0 960 B
#6904 ExecuteAsync netcoreapp3.1 1.68μs 2.12ns 7.92ns 0.00836 0 0 960 B
#6904 ExecuteAsync net472 1.82μs 1ns 3.48ns 0.145 0 0 923 B
Benchmarks.Trace.HttpClientBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 4.59μs 2.41ns 9.34ns 0.0228 0 0 2.32 KB
master SendAsync netcoreapp3.1 5.27μs 3.52ns 13.6ns 0.0262 0 0 2.86 KB
master SendAsync net472 7.49μs 5.18ns 18.7ns 0.485 0 0 3.13 KB
#6904 SendAsync net6.0 4.29μs 2.64ns 9.86ns 0 0 0 2.32 KB
#6904 SendAsync netcoreapp3.1 5.27μs 2.16ns 7.77ns 0.0262 0 0 2.86 KB
#6904 SendAsync net472 7.45μs 3.89ns 14.5ns 0.484 0 0 3.13 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 1.54μs 4.09ns 14.7ns 0.0235 0 0 1.71 KB
master EnrichedLog netcoreapp3.1 2.4μs 3.92ns 14.7ns 0.0119 0 0 1.71 KB
master EnrichedLog net472 2.75μs 5.93ns 23ns 0.259 0 0 1.64 KB
#6904 EnrichedLog net6.0 1.57μs 1.17ns 4.39ns 0.0236 0 0 1.71 KB
#6904 EnrichedLog netcoreapp3.1 2.17μs 2.81ns 10.5ns 0.0221 0 0 1.71 KB
#6904 EnrichedLog net472 2.59μs 2.77ns 10.7ns 0.255 0 0 1.64 KB
Benchmarks.Trace.Log4netBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 117μs 328ns 1.27μs 0 0 0 4.32 KB
master EnrichedLog netcoreapp3.1 126μs 469ns 1.76μs 0 0 0 4.32 KB
master EnrichedLog net472 159μs 683ns 2.64μs 0 0 0 4.51 KB
#6904 EnrichedLog net6.0 113μs 332ns 1.29μs 0 0 0 4.32 KB
#6904 EnrichedLog netcoreapp3.1 119μs 203ns 787ns 0 0 0 4.32 KB
#6904 EnrichedLog net472 151μs 402ns 1.56μs 0 0 0 4.51 KB
Benchmarks.Trace.NLogBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 3.14μs 2.67ns 10.4ns 0.0313 0 0 2.26 KB
master EnrichedLog netcoreapp3.1 4.15μs 3.64ns 14.1ns 0.0206 0 0 2.26 KB
master EnrichedLog net472 4.82μs 3.13ns 11.7ns 0.314 0 0 2.09 KB
#6904 EnrichedLog net6.0 2.97μs 2.51ns 9.05ns 0.0298 0 0 2.26 KB
#6904 EnrichedLog netcoreapp3.1 4.36μs 4.33ns 15.6ns 0.0218 0 0 2.26 KB
#6904 EnrichedLog net472 4.76μs 2.47ns 9.24ns 0.309 0 0 2.09 KB
Benchmarks.Trace.RedisBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 1.45μs 2.72ns 10.5ns 0.0143 0 0 1.15 KB
master SendReceive netcoreapp3.1 1.78μs 8.33ns 34.4ns 0.00898 0 0 1.15 KB
master SendReceive net472 2.19μs 9.79ns 37.9ns 0.184 0 0 1.16 KB
#6904 SendReceive net6.0 1.32μs 1.39ns 5.39ns 0.0133 0 0 1.15 KB
#6904 SendReceive netcoreapp3.1 1.81μs 1.26ns 4.72ns 0.00907 0 0 1.15 KB
#6904 SendReceive net472 2.06μs 1.16ns 4.35ns 0.175 0 0 1.16 KB
Benchmarks.Trace.SerilogBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.66μs 2.35ns 9.1ns 0.0133 0 0 1.64 KB
master EnrichedLog netcoreapp3.1 4.17μs 3.5ns 12.1ns 0.0209 0 0 1.69 KB
master EnrichedLog net472 4.55μs 3.8ns 14.2ns 0.32 0 0 2.08 KB
#6904 EnrichedLog net6.0 2.78μs 1.5ns 5.8ns 0.0138 0 0 1.64 KB
#6904 EnrichedLog netcoreapp3.1 4.03μs 3.64ns 13.6ns 0.0201 0 0 1.69 KB
#6904 EnrichedLog net472 4.46μs 3.13ns 11.7ns 0.312 0 0 2.08 KB
Benchmarks.Trace.SpanBenchmark - Slower :warning: Same allocations :heavy_check_mark:

Slower :warning: in #6904

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.SpanBenchmark.StartFinishScope‑net6.0 1.218 479.42 584.12

Faster :tada: in #6904

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.SpanBenchmark.StartFinishSpan‑netcoreapp3.1 1.136 632.58 556.61

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartFinishSpan net6.0 410ns 0.277ns 1.04ns 0.00812 0 0 584 B
master StartFinishSpan netcoreapp3.1 634ns 0.659ns 2.55ns 0.00635 0 0 584 B
master StartFinishSpan net472 683ns 0.185ns 0.692ns 0.0927 0 0 586 B
master StartFinishScope net6.0 480ns 0.522ns 2.02ns 0.00974 0 0 704 B
master StartFinishScope netcoreapp3.1 774ns 0.796ns 2.87ns 0.00751 0 0 704 B
master StartFinishScope net472 789ns 0.567ns 2.2ns 0.103 0 0 666 B
#6904 StartFinishSpan net6.0 426ns 0.753ns 2.92ns 0.00631 0 0 584 B
#6904 StartFinishSpan netcoreapp3.1 557ns 0.656ns 2.54ns 0.00579 0 0 584 B
#6904 StartFinishSpan net472 651ns 0.621ns 2.32ns 0.091 0 0 586 B
#6904 StartFinishScope net6.0 582ns 1.48ns 5.74ns 0.00858 0 0 704 B
#6904 StartFinishScope netcoreapp3.1 733ns 0.848ns 3.17ns 0.00727 0 0 704 B
#6904 StartFinishScope net472 829ns 0.437ns 1.63ns 0.104 0 0 666 B
Benchmarks.Trace.TraceAnnotationsBenchmark - Faster :tada: Same allocations :heavy_check_mark:

Faster :tada: in #6904

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin‑net6.0 1.214 716.58 590.16

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 717ns 0.25ns 0.937ns 0.00757 0 0 704 B
master RunOnMethodBegin netcoreapp3.1 996ns 5.57ns 37.8ns 0.00492 0 0 704 B
master RunOnMethodBegin net472 1.12μs 0.755ns 2.83ns 0.101 0 0 666 B
#6904 RunOnMethodBegin net6.0 590ns 0.474ns 1.77ns 0.00884 0 0 704 B
#6904 RunOnMethodBegin netcoreapp3.1 943ns 1.07ns 4.13ns 0.00934 0 0 704 B
#6904 RunOnMethodBegin net472 1.03μs 0.371ns 1.39ns 0.103 0 0 666 B

andrewlock avatar Apr 28 '25 20:04 andrewlock

Execution-Time Benchmarks Report :stopwatch:

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

✅ No regressions detected - check the details below

Full Metrics Comparison

FakeDbCommand

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration77.02 ± (77.07 - 77.98) ms74.91 ± (75.03 - 75.82) ms-2.7%
.NET Framework 4.8 - Bailout
duration81.89 ± (81.83 - 82.84) ms80.89 ± (80.92 - 81.79) ms-1.2%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1078.74 ± (1080.20 - 1090.29) ms1063.25 ± (1065.79 - 1075.34) ms-1.4%
.NET Core 3.1 - Baseline
process.internal_duration_ms23.19 ± (23.12 - 23.25) ms23.03 ± (22.93 - 23.13) ms-0.7%
process.time_to_main_ms90.09 ± (89.61 - 90.56) ms88.93 ± (88.39 - 89.47) ms-1.3%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.90 ± (10.90 - 10.90) MB10.91 ± (10.91 - 10.92) MB+0.1%✅⬆️
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms23.14 ± (23.06 - 23.21) ms23.00 ± (22.93 - 23.08) ms-0.6%
process.time_to_main_ms91.17 ± (90.74 - 91.59) ms90.92 ± (90.47 - 91.38) ms-0.3%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.95 ± (10.95 - 10.95) MB10.96 ± (10.95 - 10.96) MB+0.0%✅⬆️
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms224.37 ± (223.08 - 225.66) ms221.83 ± (220.52 - 223.14) ms-1.1%
process.time_to_main_ms508.62 ± (507.24 - 509.99) ms505.28 ± (503.69 - 506.88) ms-0.7%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed47.92 ± (47.90 - 47.94) MB47.95 ± (47.93 - 47.97) MB+0.1%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.1%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms21.98 ± (21.91 - 22.06) ms22.10 ± (21.99 - 22.20) ms+0.5%✅⬆️
process.time_to_main_ms78.11 ± (77.66 - 78.55) ms78.26 ± (77.76 - 78.77) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.60 ± (10.60 - 10.60) MB10.62 ± (10.62 - 10.62) MB+0.2%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms21.95 ± (21.86 - 22.03) ms22.27 ± (22.18 - 22.37) ms+1.5%✅⬆️
process.time_to_main_ms79.31 ± (78.90 - 79.73) ms80.67 ± (80.14 - 81.19) ms+1.7%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.66 ± (10.65 - 10.66) MB10.66 ± (10.65 - 10.66) MB-0.0%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms212.48 ± (211.40 - 213.56) ms212.98 ± (211.82 - 214.14) ms+0.2%✅⬆️
process.time_to_main_ms473.82 ± (472.66 - 474.98) ms472.05 ± (470.78 - 473.32) ms-0.4%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed48.14 ± (48.11 - 48.17) MB48.06 ± (48.04 - 48.09) MB-0.2%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms20.11 ± (20.03 - 20.19) ms19.87 ± (19.80 - 19.95) ms-1.2%
process.time_to_main_ms76.36 ± (75.95 - 76.78) ms75.59 ± (75.20 - 75.99) ms-1.0%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.66 ± (7.65 - 7.67) MB7.65 ± (7.65 - 7.65) MB-0.1%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms19.92 ± (19.84 - 20.00) ms20.09 ± (20.01 - 20.16) ms+0.8%✅⬆️
process.time_to_main_ms77.40 ± (77.03 - 77.77) ms77.86 ± (77.45 - 78.27) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.70 ± (7.69 - 7.70) MB7.72 ± (7.71 - 7.73) MB+0.3%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms194.46 ± (193.35 - 195.58) ms194.34 ± (193.17 - 195.50) ms-0.1%
process.time_to_main_ms463.68 ± (462.39 - 464.98) ms461.05 ± (459.77 - 462.33) ms-0.6%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed36.44 ± (36.40 - 36.47) MB36.53 ± (36.49 - 36.57) MB+0.3%✅⬆️
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
duration195.77 ± (195.56 - 196.38) ms197.18 ± (196.97 - 198.00) ms+0.7%✅⬆️
.NET Framework 4.8 - Bailout
duration198.64 ± (198.44 - 199.32) ms204.09 ± (203.62 - 204.84) ms+2.7%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1122.57 ± (1125.36 - 1133.96) ms1134.95 ± (1137.76 - 1147.88) ms+1.1%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms192.55 ± (192.11 - 192.99) ms193.79 ± (193.32 - 194.27) ms+0.6%✅⬆️
process.time_to_main_ms82.12 ± (81.88 - 82.36) ms82.90 ± (82.65 - 83.15) ms+0.9%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.05 ± (16.03 - 16.07) MB16.00 ± (15.98 - 16.02) MB-0.3%
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)-0.3%
.NET Core 3.1 - Bailout
process.internal_duration_ms190.58 ± (190.18 - 190.99) ms191.54 ± (191.12 - 191.96) ms+0.5%✅⬆️
process.time_to_main_ms83.00 ± (82.77 - 83.22) ms83.28 ± (83.03 - 83.52) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.10 ± (16.08 - 16.13) MB16.07 ± (16.05 - 16.10) MB-0.2%
runtime.dotnet.threads.count21 ± (21 - 21)21 ± (20 - 21)-0.5%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms398.70 ± (396.49 - 400.92) ms398.53 ± (396.62 - 400.43) ms-0.0%
process.time_to_main_ms478.01 ± (477.22 - 478.80) ms484.49 ± (483.42 - 485.57) ms+1.4%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed58.85 ± (58.74 - 58.97) MB59.01 ± (58.92 - 59.09) MB+0.3%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 30)30 ± (30 - 30)+0.2%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms195.35 ± (194.92 - 195.78) ms198.79 ± (198.28 - 199.30) ms+1.8%✅⬆️
process.time_to_main_ms70.54 ± (70.33 - 70.74) ms71.54 ± (71.34 - 71.75) ms+1.4%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.34 ± (16.32 - 16.37) MB16.33 ± (16.31 - 16.34) MB-0.1%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+0.0%✅⬆️
.NET 6 - Bailout
process.internal_duration_ms196.34 ± (195.90 - 196.79) ms196.74 ± (196.28 - 197.21) ms+0.2%✅⬆️
process.time_to_main_ms72.02 ± (71.84 - 72.20) ms72.30 ± (72.11 - 72.49) ms+0.4%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.40 ± (16.38 - 16.43) MB16.35 ± (16.33 - 16.36) MB-0.4%
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)-0.3%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms411.70 ± (409.78 - 413.62) ms414.57 ± (412.74 - 416.41) ms+0.7%✅⬆️
process.time_to_main_ms446.97 ± (446.26 - 447.69) ms451.86 ± (450.93 - 452.78) ms+1.1%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed59.20 ± (59.08 - 59.32) MB59.45 ± (59.37 - 59.53) MB+0.4%✅⬆️
runtime.dotnet.threads.count30 ± (30 - 30)30 ± (30 - 30)-0.0%
.NET 8 - Baseline
process.internal_duration_ms193.75 ± (193.28 - 194.22) ms198.98 ± (198.37 - 199.60) ms+2.7%✅⬆️
process.time_to_main_ms69.88 ± (69.68 - 70.08) ms72.07 ± (71.80 - 72.34) ms+3.1%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.67 ± (11.65 - 11.69) MB11.65 ± (11.64 - 11.67) MB-0.1%
runtime.dotnet.threads.count18 ± (18 - 18)19 ± (18 - 19)+1.8%✅⬆️
.NET 8 - Bailout
process.internal_duration_ms192.52 ± (192.08 - 192.97) ms195.28 ± (194.78 - 195.77) ms+1.4%✅⬆️
process.time_to_main_ms71.25 ± (71.06 - 71.43) ms71.62 ± (71.45 - 71.79) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.78 ± (11.76 - 11.81) MB11.74 ± (11.72 - 11.76) MB-0.4%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+0.3%✅⬆️
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms371.75 ± (370.31 - 373.19) ms373.80 ± (372.40 - 375.20) ms+0.6%✅⬆️
process.time_to_main_ms435.11 ± (434.50 - 435.72) ms437.73 ± (436.94 - 438.53) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed47.99 ± (47.96 - 48.02) MB47.99 ± (47.95 - 48.02) MB-0.0%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)-0.4%
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 (6904) - mean (75ms)  : 70, 81
    master - mean (78ms)  : 71, 84

    section Bailout
    This PR (6904) - mean (81ms)  : 75, 88
    master - mean (82ms)  : 75, 90

    section CallTarget+Inlining+NGEN
    This PR (6904) - mean (1,071ms)  : 1000, 1141
    master - mean (1,085ms)  : 1016, 1155

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 (6904) - mean (120ms)  : 108, 132
    master - mean (121ms)  : 113, 129

    section Bailout
    This PR (6904) - mean (121ms)  : 112, 131
    master - mean (122ms)  : 113, 131

    section CallTarget+Inlining+NGEN
    This PR (6904) - mean (765ms)  : 724, 807
    master - mean (774ms)  : 737, 810

FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (6904) - mean (107ms)  : 97, 117
    master - mean (108ms)  : 98, 117

    section Bailout
    This PR (6904) - mean (110ms)  : 102, 118
    master - mean (109ms)  : 101, 117

    section CallTarget+Inlining+NGEN
    This PR (6904) - mean (710ms)  : 674, 746
    master - mean (715ms)  : 686, 745

FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (6904) - mean (104ms)  : 97, 111
    master - mean (105ms)  : 96, 115

    section Bailout
    This PR (6904) - mean (107ms)  : 99, 114
    master - mean (106ms)  : 99, 112

    section CallTarget+Inlining+NGEN
    This PR (6904) - mean (691ms)  : 644, 739
    master - mean (697ms)  : 659, 735

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 (6904) - mean (197ms)  : 190, 205
    master - mean (196ms)  : 191, 201

    section Bailout
    This PR (6904) - mean (204ms)  : 195, 213
    master - mean (199ms)  : 195, 203

    section CallTarget+Inlining+NGEN
    This PR (6904) - mean (1,143ms)  : 1065, 1221
    master - mean (1,130ms)  : 1067, 1193

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 (6904) - mean (286ms)  : 277, 295
    master - mean (283ms)  : 274, 292

    section Bailout
    This PR (6904) - mean (284ms)  : 277, 290
    master - mean (282ms)  : 275, 288

    section CallTarget+Inlining+NGEN
    This PR (6904) - mean (928ms)  : 886, 970
    master - mean (914ms)  : 874, 955

HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (6904) - mean (279ms)  : 269, 288
    master - mean (274ms)  : 268, 280

    section Bailout
    This PR (6904) - mean (278ms)  : 266, 289
    master - mean (277ms)  : 270, 284

    section CallTarget+Inlining+NGEN
    This PR (6904) - mean (901ms)  : 864, 938
    master - mean (893ms)  : 856, 930

HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (6904) - mean (281ms)  : 268, 294
    master - mean (274ms)  : 266, 282

    section Bailout
    This PR (6904) - mean (277ms)  : 268, 285
    master - mean (274ms)  : 268, 279

    section CallTarget+Inlining+NGEN
    This PR (6904) - mean (844ms)  : 818, 870
    master - mean (837ms)  : 806, 869

andrewlock avatar Apr 28 '25 20:04 andrewlock

Benchmarks

Benchmarks Report for benchmark platform :snail:

Benchmarks for #6904 compared to master:

  • 1 benchmarks are faster, with geometric mean 1.224
  • 1 benchmarks have fewer allocations
  • 3 benchmarks have more allocations

The following thresholds were used for comparing the benchmark speeds:

  • Mann–Whitney U test with statistical test for significance of 5%
  • Only results indicating a difference greater than 10% and 0.3 ns are considered.

Allocation changes below 0.5% are ignored.

Benchmark details

Benchmarks.Trace.ActivityBenchmark - Same speed :heavy_check_mark: More allocations :warning:

More allocations :warning: in #6904

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net472 5.93 KB 5.98 KB 46 B 0.78%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 10.9μs 60ns 350ns 0 0 0 5.5 KB
master StartStopWithChild netcoreapp3.1 13.6μs 50ns 194ns 0 0 0 5.71 KB
master StartStopWithChild net472 22.7μs 123ns 675ns 1.03 0.413 0.103 5.93 KB
#6904 StartStopWithChild net6.0 10.5μs 58.3ns 354ns 0 0 0 5.5 KB
#6904 StartStopWithChild netcoreapp3.1 13.5μs 71.5ns 357ns 0 0 0 5.71 KB
#6904 StartStopWithChild net472 22.5μs 121ns 630ns 1.02 0.339 0.113 5.98 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 1.28ms 145ns 543ns 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.38ms 540ns 2.09μs 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 1.7ms 1.57μs 5.88μs 0 0 0 3.26 KB
#6904 WriteAndFlushEnrichedTraces net6.0 1.26ms 130ns 470ns 0 0 0 2.7 KB
#6904 WriteAndFlushEnrichedTraces netcoreapp3.1 1.37ms 71.6ns 277ns 0 0 0 2.7 KB
#6904 WriteAndFlushEnrichedTraces net472 1.7ms 1.26μs 4.88μs 0 0 0 3.26 KB
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 1.14μs 5.88ns 27.6ns 0 0 0 1.22 KB
master AllCycleSimpleBody netcoreapp3.1 1.38μs 7.63ns 47.6ns 0 0 0 1.2 KB
master AllCycleSimpleBody net472 999ns 0.161ns 0.623ns 0.195 0 0 1.23 KB
master AllCycleMoreComplexBody net6.0 7.28μs 34.2ns 137ns 0 0 0 4.72 KB
master AllCycleMoreComplexBody netcoreapp3.1 9.01μs 44.1ns 177ns 0 0 0 4.62 KB
master AllCycleMoreComplexBody net472 7.67μs 3.82ns 14.3ns 0.73 0 0 4.74 KB
master ObjectExtractorSimpleBody net6.0 326ns 1.6ns 8.34ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 396ns 2.18ns 12.5ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 297ns 0.0328ns 0.123ns 0.0434 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.23μs 31.7ns 142ns 0 0 0 3.79 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.95μs 37.9ns 152ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.69μs 4.07ns 15.8ns 0.6 0 0 3.8 KB
#6904 AllCycleSimpleBody net6.0 1.12μs 6.07ns 35.9ns 0 0 0 1.22 KB
#6904 AllCycleSimpleBody netcoreapp3.1 1.42μs 0.627ns 2.26ns 0 0 0 1.2 KB
#6904 AllCycleSimpleBody net472 1μs 0.136ns 0.509ns 0.191 0 0 1.23 KB
#6904 AllCycleMoreComplexBody net6.0 7.26μs 32.6ns 126ns 0 0 0 4.72 KB
#6904 AllCycleMoreComplexBody netcoreapp3.1 9.19μs 42.9ns 177ns 0 0 0 4.62 KB
#6904 AllCycleMoreComplexBody net472 7.69μs 2.14ns 7.99ns 0.732 0 0 4.74 KB
#6904 ObjectExtractorSimpleBody net6.0 333ns 0.145ns 0.562ns 0 0 0 280 B
#6904 ObjectExtractorSimpleBody netcoreapp3.1 409ns 2.14ns 9.78ns 0 0 0 272 B
#6904 ObjectExtractorSimpleBody net472 296ns 0.0219ns 0.0849ns 0.0433 0 0 281 B
#6904 ObjectExtractorMoreComplexBody net6.0 6.37μs 32.1ns 136ns 0 0 0 3.78 KB
#6904 ObjectExtractorMoreComplexBody netcoreapp3.1 7.89μs 38ns 161ns 0 0 0 3.69 KB
#6904 ObjectExtractorMoreComplexBody net472 6.68μs 1.46ns 5.64ns 0.602 0 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 77.8μs 244ns 947ns 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 96.6μs 293ns 1.1μs 0 0 0 32.4 KB
master EncodeArgs net472 109μs 17.9ns 69.2ns 4.89 0 0 32.5 KB
master EncodeLegacyArgs net6.0 146μs 29.6ns 111ns 0 0 0 2.14 KB
master EncodeLegacyArgs netcoreapp3.1 201μs 65.1ns 244ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 264μs 50.8ns 197ns 0 0 0 2.14 KB
#6904 EncodeArgs net6.0 76.3μs 219ns 850ns 0 0 0 32.4 KB
#6904 EncodeArgs netcoreapp3.1 96.6μs 314ns 1.22μs 0 0 0 32.4 KB
#6904 EncodeArgs net472 108μs 16.3ns 63.2ns 4.86 0 0 32.5 KB
#6904 EncodeLegacyArgs net6.0 146μs 4.96ns 17.2ns 0 0 0 2.14 KB
#6904 EncodeLegacyArgs netcoreapp3.1 198μs 42.4ns 159ns 0 0 0 2.14 KB
#6904 EncodeLegacyArgs net472 262μs 41.3ns 160ns 0 0 0 2.14 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 421μs 704ns 2.54μs 0 0 0 4.55 KB
master RunWafRealisticBenchmark netcoreapp3.1 459μs 2.67μs 24.3μs 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 487μs 964ns 3.73μs 0 0 0 0 b
master RunWafRealisticBenchmarkWithAttack net6.0 306μs 1.14μs 4.12μs 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 339μs 2.82μs 26.9μs 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 360μs 175ns 629ns 0 0 0 0 b
#6904 RunWafRealisticBenchmark net6.0 423μs 2.19μs 10μs 0 0 0 4.55 KB
#6904 RunWafRealisticBenchmark netcoreapp3.1 479μs 3.85μs 37μs 0 0 0 4.48 KB
#6904 RunWafRealisticBenchmark net472 489μs 885ns 3.31μs 0 0 0 0 b
#6904 RunWafRealisticBenchmarkWithAttack net6.0 303μs 748ns 2.7μs 0 0 0 2.24 KB
#6904 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 341μs 2.54μs 24μs 0 0 0 2.22 KB
#6904 RunWafRealisticBenchmarkWithAttack net472 373μs 868ns 3.36μs 0 0 0 0 b
Benchmarks.Trace.AspNetCoreBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 82.8μs 174ns 628ns 0 0 0 18.97 KB
master SendRequest netcoreapp3.1 97.2μs 406ns 2.57μs 0 0 0 21.18 KB
master SendRequest net472 0ns 0ns 0ns 0 0 0 0 b
#6904 SendRequest net6.0 85.4μs 390ns 1.4μs 0 0 0 18.97 KB
#6904 SendRequest netcoreapp3.1 98.1μs 522ns 3.98μs 0 0 0 21.18 KB
#6904 SendRequest net472 0ns 0ns 0ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 1.95ms 960ns 3.72μs 0 0 0 640 KB
master OriginalCharSlice netcoreapp3.1 3.93ms 1.47μs 5.29μs 0 0 0 640.05 KB
master OriginalCharSlice net472 2.61ms 312ns 1.08μs 0 0 0 638.98 KB
master OptimizedCharSlice net6.0 1.41ms 1.74μs 6.52μs 0 0 0 0 b
master OptimizedCharSlice netcoreapp3.1 2.79ms 2.35μs 9.11μs 0 0 0 0 b
master OptimizedCharSlice net472 1.93ms 2.23μs 8.63μs 0 0 0 0 b
master OptimizedCharSliceWithPool net6.0 999μs 916ns 3.43μs 0 0 0 0 b
master OptimizedCharSliceWithPool netcoreapp3.1 1.88ms 1.13μs 4.37μs 0 0 0 0 b
master OptimizedCharSliceWithPool net472 1.13ms 686ns 2.66μs 0 0 0 0 b
#6904 OriginalCharSlice net6.0 2.01ms 760ns 2.94μs 0 0 0 640 KB
#6904 OriginalCharSlice netcoreapp3.1 3.94ms 1.08μs 4.03μs 0 0 0 640.05 KB
#6904 OriginalCharSlice net472 2.63ms 731ns 2.74μs 0 0 0 638.98 KB
#6904 OptimizedCharSlice net6.0 1.5ms 331ns 1.24μs 0 0 0 0 b
#6904 OptimizedCharSlice netcoreapp3.1 2.83ms 444ns 1.6μs 0 0 0 0 b
#6904 OptimizedCharSlice net472 1.98ms 576ns 2.23μs 0 0 0 0 b
#6904 OptimizedCharSliceWithPool net6.0 1.03ms 1.21μs 4.7μs 0 0 0 0 b
#6904 OptimizedCharSliceWithPool netcoreapp3.1 1.96ms 767ns 2.97μs 0 0 0 0 b
#6904 OptimizedCharSliceWithPool net472 1.13ms 590ns 2.29μs 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed :heavy_check_mark: More allocations :warning:

More allocations :warning: in #6904

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net6.0 41.63 KB 42.33 KB 699 B 1.68%
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 56.03 KB 56.56 KB 535 B 0.95%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 680μs 1.36μs 5.25μs 0 0 0 41.63 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 648μs 1.26μs 4.88μs 0 0 0 41.93 KB
master WriteAndFlushEnrichedTraces net472 956μs 3.53μs 13.7μs 4.46 0 0 56.03 KB
#6904 WriteAndFlushEnrichedTraces net6.0 744μs 4.27μs 32.8μs 0 0 0 42.33 KB
#6904 WriteAndFlushEnrichedTraces netcoreapp3.1 663μs 3.64μs 22.2μs 0 0 0 41.9 KB
#6904 WriteAndFlushEnrichedTraces net472 974μs 3.86μs 14.9μs 8.33 4.17 0 56.56 KB
Benchmarks.Trace.DbCommandBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteNonQuery net6.0 1.97μs 6.87ns 26.6ns 0 0 0 968 B
master ExecuteNonQuery netcoreapp3.1 2.6μs 10.6ns 40.9ns 0 0 0 960 B
master ExecuteNonQuery net472 2.64μs 0.669ns 2.59ns 0.146 0 0 931 B
#6904 ExecuteNonQuery net6.0 1.93μs 9.54ns 40.5ns 0 0 0 968 B
#6904 ExecuteNonQuery netcoreapp3.1 2.62μs 5.98ns 23.2ns 0 0 0 960 B
#6904 ExecuteNonQuery net472 2.67μs 1.19ns 4.6ns 0.147 0 0 931 B
Benchmarks.Trace.ElasticsearchBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.7μs 6.62ns 25.7ns 0 0 0 952 B
master CallElasticsearch netcoreapp3.1 2.34μs 8.27ns 32ns 0 0 0 968 B
master CallElasticsearch net472 3.35μs 2.58ns 9.98ns 0.151 0 0 955 B
master CallElasticsearchAsync net6.0 1.72μs 8.26ns 32ns 0 0 0 928 B
master CallElasticsearchAsync netcoreapp3.1 2.44μs 5.62ns 21.8ns 0 0 0 1.02 KB
master CallElasticsearchAsync net472 3.44μs 4.03ns 15.1ns 0.156 0 0 1.01 KB
#6904 CallElasticsearch net6.0 1.68μs 6.95ns 24.1ns 0 0 0 952 B
#6904 CallElasticsearch netcoreapp3.1 2.19μs 10.3ns 39.8ns 0 0 0 968 B
#6904 CallElasticsearch net472 3.34μs 2.54ns 9.85ns 0.151 0 0 955 B
#6904 CallElasticsearchAsync net6.0 1.7μs 8.48ns 35ns 0 0 0 928 B
#6904 CallElasticsearchAsync netcoreapp3.1 2.44μs 9.96ns 35.9ns 0 0 0 1.02 KB
#6904 CallElasticsearchAsync net472 3.5μs 1.51ns 5.84ns 0.156 0 0 1.01 KB
Benchmarks.Trace.GraphQLBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteAsync net6.0 1.87μs 6.49ns 25.1ns 0 0 0 896 B
master ExecuteAsync netcoreapp3.1 2.33μs 4.72ns 18.3ns 0 0 0 896 B
master ExecuteAsync net472 2.59μs 2.34ns 9.07ns 0.13 0 0 858 B
#6904 ExecuteAsync net6.0 1.94μs 6.46ns 25ns 0 0 0 896 B
#6904 ExecuteAsync netcoreapp3.1 2.44μs 6.03ns 23.3ns 0 0 0 896 B
#6904 ExecuteAsync net472 2.53μs 2.7ns 10.4ns 0.127 0 0 859 B
Benchmarks.Trace.HttpClientBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 7.15μs 17.2ns 64.3ns 0 0 0 2.29 KB
master SendAsync netcoreapp3.1 8.65μs 28.1ns 109ns 0 0 0 2.83 KB
master SendAsync net472 12μs 11.3ns 43.8ns 0.479 0 0 3.08 KB
#6904 SendAsync net6.0 6.93μs 7.8ns 30.2ns 0 0 0 2.29 KB
#6904 SendAsync netcoreapp3.1 8.63μs 40ns 160ns 0 0 0 2.83 KB
#6904 SendAsync net472 11.8μs 6.93ns 25.9ns 0.475 0 0 3.08 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Faster :tada: Fewer allocations :tada:

Faster :tada: in #6904

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 1.224 537,500.00 439,200.00 bimodal

Fewer allocations :tada: in #6904

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 272.25 KB 254.98 KB -17.27 KB -6.34%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 45μs 218ns 927ns 0 0 0 42.51 KB
master StringConcatBenchmark netcoreapp3.1 49.5μs 279ns 1.72μs 0 0 0 42.54 KB
master StringConcatBenchmark net472 57.6μs 143ns 517ns 0 0 0 49.15 KB
master StringConcatAspectBenchmark net6.0 471μs 2.15μs 8.62μs 0 0 0 272.25 KB
master StringConcatAspectBenchmark netcoreapp3.1 540μs 2.46μs 13μs 0 0 0 275.15 KB
master StringConcatAspectBenchmark net472 406μs 2.36μs 19.9μs 0 0 0 269.28 KB
#6904 StringConcatBenchmark net6.0 44.7μs 251ns 1.74μs 0 0 0 42.51 KB
#6904 StringConcatBenchmark netcoreapp3.1 50.9μs 256ns 1.58μs 0 0 0 42.54 KB
#6904 StringConcatBenchmark net472 57.3μs 71.8ns 249ns 0 0 0 49.15 KB
#6904 StringConcatAspectBenchmark net6.0 452μs 1.89μs 8.24μs 0 0 0 254.98 KB
#6904 StringConcatAspectBenchmark netcoreapp3.1 461μs 5.16μs 49.7μs 0 0 0 275.21 KB
#6904 StringConcatAspectBenchmark net472 404μs 2.15μs 12.2μs 0 0 0 270.34 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.66μs 0.992ns 3.84ns 0 0 0 1.69 KB
master EnrichedLog netcoreapp3.1 3.51μs 14.4ns 53.8ns 0 0 0 1.7 KB
master EnrichedLog net472 4.04μs 4.4ns 17ns 0.242 0 0 1.6 KB
#6904 EnrichedLog net6.0 2.69μs 13ns 56.7ns 0 0 0 1.69 KB
#6904 EnrichedLog netcoreapp3.1 3.59μs 15.5ns 59.9ns 0 0 0 1.7 KB
#6904 EnrichedLog net472 4μs 5.64ns 21.8ns 0.237 0 0 1.6 KB
Benchmarks.Trace.Log4netBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 121μs 82.3ns 285ns 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 127μs 407ns 1.52μs 0 0 0 4.31 KB
master EnrichedLog net472 165μs 44.7ns 173ns 0 0 0 4.51 KB
#6904 EnrichedLog net6.0 123μs 60.5ns 210ns 0 0 0 4.31 KB
#6904 EnrichedLog netcoreapp3.1 127μs 152ns 589ns 0 0 0 4.31 KB
#6904 EnrichedLog net472 169μs 260ns 1.01μs 0 0 0 4.51 KB
Benchmarks.Trace.NLogBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 5.06μs 3.04ns 11.8ns 0 0 0 2.24 KB
master EnrichedLog netcoreapp3.1 6.88μs 14.1ns 48.8ns 0 0 0 2.26 KB
master EnrichedLog net472 7.55μs 6.05ns 23.4ns 0.303 0 0 2.05 KB
#6904 EnrichedLog net6.0 5.14μs 6.38ns 23.9ns 0 0 0 2.24 KB
#6904 EnrichedLog netcoreapp3.1 6.96μs 10.1ns 37.8ns 0 0 0 2.26 KB
#6904 EnrichedLog net472 7.42μs 4.55ns 17.6ns 0.296 0 0 2.05 KB
Benchmarks.Trace.RedisBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 1.88μs 9.8ns 46ns 0 0 0 1.12 KB
master SendReceive netcoreapp3.1 2.41μs 12.4ns 58.3ns 0 0 0 1.14 KB
master SendReceive net472 2.95μs 1.88ns 7.27ns 0.176 0 0 1.12 KB
#6904 SendReceive net6.0 1.86μs 9.73ns 46.7ns 0 0 0 1.12 KB
#6904 SendReceive netcoreapp3.1 2.46μs 12.4ns 56.8ns 0 0 0 1.14 KB
#6904 SendReceive net472 3.16μs 3.21ns 12.4ns 0.172 0 0 1.12 KB
Benchmarks.Trace.SerilogBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.47μs 2.85ns 10.3ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.74μs 25.9ns 100ns 0 0 0 1.63 KB
master EnrichedLog net472 6.6μs 7.36ns 27.5ns 0.295 0 0 2.03 KB
#6904 EnrichedLog net6.0 4.27μs 11ns 41ns 0 0 0 1.58 KB
#6904 EnrichedLog netcoreapp3.1 5.67μs 12.2ns 47.4ns 0 0 0 1.63 KB
#6904 EnrichedLog net472 6.51μs 8.53ns 33ns 0.293 0 0 2.03 KB
Benchmarks.Trace.SpanBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartFinishSpan net6.0 759ns 0.792ns 3.07ns 0 0 0 520 B
master StartFinishSpan netcoreapp3.1 971ns 4.82ns 21ns 0 0 0 520 B
master StartFinishSpan net472 894ns 3.57ns 13.8ns 0.08 0 0 522 B
master StartFinishScope net6.0 895ns 1.22ns 4.72ns 0 0 0 640 B
master StartFinishScope netcoreapp3.1 1.13μs 5.7ns 24.9ns 0 0 0 640 B
master StartFinishScope net472 1.08μs 1.04ns 4.03ns 0.092 0 0 602 B
master StartFinishTwoScopes net6.0 1.79μs 1.66ns 6.22ns 0 0 0 1.19 KB
master StartFinishTwoScopes netcoreapp3.1 2.22μs 10.4ns 40.3ns 0 0 0 1.19 KB
master StartFinishTwoScopes net472 2.1μs 0.216ns 0.837ns 0.168 0 0 1.08 KB
#6904 StartFinishSpan net6.0 748ns 4.08ns 23.8ns 0 0 0 520 B
#6904 StartFinishSpan netcoreapp3.1 952ns 4.33ns 16.8ns 0 0 0 520 B
#6904 StartFinishSpan net472 877ns 0.267ns 1.03ns 0.079 0 0 522 B
#6904 StartFinishScope net6.0 912ns 0.541ns 2.02ns 0 0 0 640 B
#6904 StartFinishScope netcoreapp3.1 1.14μs 5.18ns 20.1ns 0 0 0 640 B
#6904 StartFinishScope net472 1.08μs 0.502ns 1.95ns 0.0922 0 0 602 B
#6904 StartFinishTwoScopes net6.0 1.74μs 9.2ns 46ns 0 0 0 1.19 KB
#6904 StartFinishTwoScopes netcoreapp3.1 2.26μs 11.6ns 51.7ns 0 0 0 1.19 KB
#6904 StartFinishTwoScopes net472 2.14μs 3.2ns 12.4ns 0.171 0 0 1.08 KB
Benchmarks.Trace.TraceAnnotationsBenchmark - Same speed :heavy_check_mark: Same allocations :heavy_check_mark:

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 1.05μs 5.24ns 23.5ns 0 0 0 640 B
master RunOnMethodBegin netcoreapp3.1 1.41μs 6.52ns 26.1ns 0 0 0 640 B
master RunOnMethodBegin net472 1.43μs 0.431ns 1.67ns 0.0929 0 0 602 B
#6904 RunOnMethodBegin net6.0 1.07μs 3.51ns 13.6ns 0 0 0 640 B
#6904 RunOnMethodBegin netcoreapp3.1 1.46μs 1.52ns 5.9ns 0 0 0 640 B
#6904 RunOnMethodBegin net472 1.42μs 0.31ns 1.12ns 0.0931 0 0 602 B

pr-commenter[bot] avatar May 23 '25 20:05 pr-commenter[bot]

@bouwkast + @link04 - would ya'll mind taking a preliminary look Things I'm unsure of

  • Creating test for distributed trace - I added this already but not sure if I should keep it
  • Any additional testing scenarios
    • I took what made sense from OTEL's tests: https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/8f7b44160f801f23b224d0165cd21221cbd4e306/test/OpenTelemetry.Instrumentation.Hangfire.Tests
  • Should I be removing extra boilerplate code I'm using from the duck typing or keep them in?
    • For the Interface Proxy I think I need to keep them or else I get yelled at that it's not a match from my testing.

chojomok avatar Jun 04 '25 16:06 chojomok

⚠️ Tests

⚠️ Warnings

❄️ 4 New flaky tests detected

TestBlockingAction from Datadog.Trace.Security.IntegrationTests.Rcm.AspNetCore5AsmActionsConfiguration (Datadog)

-------- System.Net.Sockets.SocketException : No connection could be made because the target machine actively refused it. [::ffff:127.0.0.1]:64626localhost:64626)e because the target machine actively refused it. [::ffff:127.0.0.1]:64626 (localhost:64626)
TestBlockingAction from Datadog.Trace.Security.IntegrationTests.Rcm.AspNetCore5AsmActionsConfiguration (Datadog)

Verified path: D:\a\_work\1\s\tracer\test\Datadog.Trace.Security.IntegrationTests\..\snapshots\Security.AspNetCore5AsmActionsConfiguration.__type=redirect_request_statusCode=302_argument=dummy_rule_actionName=block.verified.txtue":"","parameters":[{"address":"server.request.query","highlight":["dummy_rule"],"key_path":["arg","0"],"value":"dummy_rule"}]}],"security_response_id":"Guid_3"}]},

    TestBlockingAction from Datadog.Trace.Security.IntegrationTests.Rcm.AspNetCore5AsmActionsConfiguration

TestBlockingAction from Datadog.Trace.Security.IntegrationTests.Rcm.AspNetCore5AsmActionsConfiguration (Datadog)

Verified path: D:\a\_work\1\s\tracer\test\Datadog.Trace.Security.IntegrationTests\..\snapshots\Security.AspNetCore5AsmActionsConfiguration.__type=block_request_statusCode=200_argument=dummy_rule_actionName=block.verified.txtvalue":"","parameters":[{"address":"server.request.query","highlight":["dummy_rule"],"key_path":["arg","0"],"value":"dummy_rule"}]}],"security_response_id":"Guid_3"}]},
View all

ℹ️ Info

🧪 All tests passed

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

@codex review

bouwkast avatar Oct 02 '25 17:10 bouwkast

Codex Review: Didn't find any major issues. Hooray!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting

  • @codex fix this CI failure
  • @codex address that feedback

@zacharycmontoya - I implemented the changes and the snapshot changed a lot. Please let me know if there's anything else.

chojomok avatar Oct 06 '25 19:10 chojomok

@bouwkast - when you get the chance 🥺

chojomok avatar Nov 13 '25 21:11 chojomok