Skip to content

Benchmark improvements#7868

Merged
andrewlock merged 7 commits intomasterfrom
andrew/perf/2-limit-benchmarks
Nov 28, 2025
Merged

Benchmark improvements#7868
andrewlock merged 7 commits intomasterfrom
andrew/perf/2-limit-benchmarks

Conversation

@andrewlock
Copy link
Member

Summary of changes

  • Remove the obsolete [AgentFilter]
  • Allow running some benchmarks on master only (not PRs)

Reason for change

The [AgentFilter] is left over from before we moved to benchmarking platform, so delete it.

Additionally some benchmarks don't seem like they need to be run every PR, so added separate categories to allow controlling this.

Important

This PR doesn't change which benchmarks we run on PR vs master, it just allows us to do that easily by adding/removing a category

Implementation details

Test coverage

This has the same coverage as today

@andrewlock andrewlock added the area:benchmarks Benchmarks, throughput tests, Crank, Bombardier, etc label Nov 26, 2025
@andrewlock andrewlock requested review from a team as code owners November 26, 2025 13:39
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ 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 address that feedback".

@andrewlock andrewlock force-pushed the andrew/perf/2-limit-benchmarks branch 2 times, most recently from da05244 to 143d7d7 Compare November 26, 2025 14:01
@pr-commenter
Copy link

pr-commenter bot commented Nov 26, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7868 compared to master:

  • All benchmarks have the same speed
  • All benchmarks have the same 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 ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 10.2μs 57.4ns 381ns 0 0 0 5.52 KB
master StartStopWithChild netcoreapp3.1 13.7μs 45.6ns 171ns 0 0 0 5.7 KB
master StartStopWithChild net472 22.6μs 121ns 686ns 0.966 0.322 0.107 6.06 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 N/A N/A N/A NaN NaN NaN 0 b
master WriteAndFlushEnrichedTraces netcoreapp3.1 N/A N/A N/A NaN NaN NaN 0 b
master WriteAndFlushEnrichedTraces net472 N/A N/A N/A NaN NaN NaN 0 b
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 1.09μs 5.7ns 28.5ns 0 0 0 1.22 KB
master AllCycleSimpleBody netcoreapp3.1 1.45μs 7.29ns 34.2ns 0 0 0 1.2 KB
master AllCycleSimpleBody net472 1.05μs 0.311ns 1.12ns 0.193 0 0 1.23 KB
master AllCycleMoreComplexBody net6.0 7.11μs 32.7ns 131ns 0 0 0 4.72 KB
master AllCycleMoreComplexBody netcoreapp3.1 9.14μs 32.4ns 126ns 0 0 0 4.62 KB
master AllCycleMoreComplexBody net472 7.62μs 6.87ns 26.6ns 0.724 0 0 4.74 KB
master ObjectExtractorSimpleBody net6.0 324ns 1.21ns 4.7ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 399ns 2.11ns 8.44ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 304ns 0.251ns 0.972ns 0.0436 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.37μs 4.96ns 19.2ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 8.02μs 38.7ns 155ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.71μs 3.53ns 13.2ns 0.573 0 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 77.5μs 34.9ns 130ns 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 98.2μs 59.3ns 230ns 0 0 0 32.4 KB
master EncodeArgs net472 109μs 7.62ns 27.5ns 4.89 0 0 32.51 KB
master EncodeLegacyArgs net6.0 146μs 43.2ns 167ns 0 0 0 2.15 KB
master EncodeLegacyArgs netcoreapp3.1 197μs 181ns 626ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 266μs 22ns 85.4ns 0 0 0 2.16 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 428μs 2.03μs 10.3μs 0 0 0 5.82 KB
master RunWafRealisticBenchmark netcoreapp3.1 473μs 3.69μs 35μs 0 0 0 4.58 KB
master RunWafRealisticBenchmark net472 493μs 518ns 1.94μs 0 0 0 0 b
master RunWafRealisticBenchmarkWithAttack net6.0 315μs 996ns 3.59μs 0 0 0 2.54 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 356μs 3.4μs 33μs 0 0 0 2.32 KB
master RunWafRealisticBenchmarkWithAttack net472 370μs 183ns 658ns 0 0 0 0 b
Benchmarks.Trace.AspNetCoreBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 60.8μs 37.8ns 136ns 0 0 0 14.52 KB
master SendRequest netcoreapp3.1 72.1μs 262ns 1.23μs 0 0 0 17.42 KB
master SendRequest net472 0.0113ns 0.0027ns 0.0105ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 1.96ms 1.05μs 4.07μs 0 0 0 640.98 KB
master OriginalCharSlice netcoreapp3.1 4ms 1.3μs 4.87μs 0 0 0 640.1 KB
master OriginalCharSlice net472 2.61ms 712ns 2.47μs 0 0 0 647.17 KB
master OptimizedCharSlice net6.0 1.57ms 2.12μs 8.2μs 0 0 0 304 B
master OptimizedCharSlice netcoreapp3.1 1.72ms 757ns 4.96μs 0 0 0 104 B
master OptimizedCharSlice net472 2.1ms 742ns 2.87μs 0 0 0 0 b
master OptimizedCharSliceWithPool net6.0 1.06ms 1.04μs 4.03μs 0 0 0 304 B
master OptimizedCharSliceWithPool netcoreapp3.1 1.86ms 1.86μs 7.2μs 0 0 0 104 B
master OptimizedCharSliceWithPool net472 1.17ms 330ns 1.19μs 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 779μs 3.73μs 15.4μs 0 0 0 42 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 749μs 4.22μs 30.1μs 0 0 0 41.81 KB
master WriteAndFlushEnrichedTraces net472 851μs 2.35μs 8.46μs 8.33 0 0 56.25 KB
Benchmarks.Trace.DbCommandBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteNonQuery net6.0 2.01μs 10.3ns 47.2ns 0 0 0 1.02 KB
master ExecuteNonQuery netcoreapp3.1 2.57μs 8.92ns 34.6ns 0 0 0 1.02 KB
master ExecuteNonQuery net472 2.69μs 1.1ns 4.11ns 0.149 0 0 987 B
Benchmarks.Trace.ElasticsearchBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.78μs 9.16ns 43.9ns 0 0 0 1.03 KB
master CallElasticsearch netcoreapp3.1 2.21μs 10.6ns 43.9ns 0 0 0 1.03 KB
master CallElasticsearch net472 3.46μs 5.36ns 20.7ns 0.157 0 0 1.04 KB
master CallElasticsearchAsync net6.0 1.82μs 0.439ns 1.7ns 0 0 0 1.01 KB
master CallElasticsearchAsync netcoreapp3.1 2.4μs 11.2ns 46.1ns 0 0 0 1.08 KB
master CallElasticsearchAsync net472 3.62μs 0.952ns 3.69ns 0.164 0 0 1.1 KB
Benchmarks.Trace.GraphQLBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteAsync net6.0 1.86μs 8.56ns 33.1ns 0 0 0 952 B
master ExecuteAsync netcoreapp3.1 2.45μs 6.92ns 25.9ns 0 0 0 952 B
master ExecuteAsync net472 2.56μs 0.927ns 3.47ns 0.141 0 0 915 B
Benchmarks.Trace.HttpClientBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 7.05μs 3.85ns 14.9ns 0 0 0 2.36 KB
master SendAsync netcoreapp3.1 8.47μs 24.3ns 91ns 0 0 0 2.9 KB
master SendAsync net472 12.2μs 15.4ns 59.6ns 0.487 0 0 3.18 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 49.3μs 291ns 2.65μs 0 0 0 43.5 KB
master StringConcatBenchmark netcoreapp3.1 50.2μs 284ns 1.84μs 0 0 0 42.68 KB
master StringConcatBenchmark net472 57.3μs 306ns 1.56μs 0 0 0 57.34 KB
master StringConcatAspectBenchmark net6.0 470μs 2.16μs 7.77μs 0 0 0 260.15 KB
master StringConcatAspectBenchmark netcoreapp3.1 514μs 1.33μs 4.79μs 0 0 0 274.94 KB
master StringConcatAspectBenchmark net472 403μs 2.07μs 9.92μs 0 0 0 283.58 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.74μs 5.4ns 20.9ns 0 0 0 1.7 KB
master EnrichedLog netcoreapp3.1 3.59μs 17.3ns 69ns 0 0 0 1.7 KB
master EnrichedLog net472 3.98μs 5.98ns 23.2ns 0.255 0 0 1.64 KB
Benchmarks.Trace.Log4netBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 123μs 80.3ns 301ns 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 126μs 154ns 597ns 0 0 0 4.31 KB
master EnrichedLog net472 167μs 68.9ns 249ns 0 0 0 4.52 KB
Benchmarks.Trace.NLogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 5.01μs 15.8ns 61.2ns 0 0 0 2.26 KB
master EnrichedLog netcoreapp3.1 6.76μs 19.4ns 72.7ns 0 0 0 2.26 KB
master EnrichedLog net472 7.71μs 5.74ns 22.2ns 0.309 0 0 2.08 KB
Benchmarks.Trace.RedisBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 1.99μs 9.57ns 39.5ns 0 0 0 1.2 KB
master SendReceive netcoreapp3.1 2.57μs 12.9ns 54.8ns 0 0 0 1.2 KB
master SendReceive net472 3.09μs 2.31ns 8.93ns 0.184 0 0 1.2 KB
Benchmarks.Trace.SerilogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.52μs 3.24ns 12.6ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.75μs 5.7ns 22.1ns 0 0 0 1.63 KB
master EnrichedLog net472 6.39μs 7.17ns 27.8ns 0.316 0 0 2.03 KB
Benchmarks.Trace.SpanBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartFinishSpan net6.0 822ns 4.39ns 22.4ns 0 0 0 576 B
master StartFinishSpan netcoreapp3.1 984ns 4.9ns 22.4ns 0 0 0 576 B
master StartFinishSpan net472 899ns 0.272ns 1.05ns 0.0906 0 0 578 B
master StartFinishScope net6.0 1.01μs 0.182ns 0.704ns 0 0 0 696 B
master StartFinishScope netcoreapp3.1 1.14μs 5.93ns 29.6ns 0 0 0 696 B
master StartFinishScope net472 1.11μs 0.318ns 1.14ns 0.1 0 0 658 B
Benchmarks.Trace.TraceAnnotationsBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 1.09μs 5.77ns 31ns 0 0 0 696 B
master RunOnMethodBegin netcoreapp3.1 1.45μs 7.23ns 33.1ns 0 0 0 696 B
master RunOnMethodBegin net472 1.41μs 1.7ns 6.15ns 0.0987 0 0 658 B

# Branch containing 1. scripts to launch Windows benchmarks on ephemeral
# instances (to be used by GitLab CI runners) and 2. scripts to run Windows
# benchmarks (to be used by the ephemeral instances).
BP_INFRA_BENCHMARKING_PLATFORM_BRANCH: "dd-trace-dotnet/micro"
Copy link
Collaborator

Choose a reason for hiding this comment

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

Guess that this change should be reverted after merging https://github.com/DataDog/benchmarking-platform/pull/215

Copy link
Member Author

Choose a reason for hiding this comment

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

yep!

Copy link
Collaborator

@NachoEchevarria NachoEchevarria left a comment

Choose a reason for hiding this comment

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

Thanks!

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

dd-trace-dotnet-ci-bot bot commented Nov 26, 2025

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (7868) 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
duration75.54 ± (75.66 - 76.57) ms75.32 ± (75.31 - 75.85) ms-0.3%
.NET Framework 4.8 - Bailout
duration78.44 ± (78.48 - 79.27) ms81.13 ± (80.93 - 81.53) ms+3.4%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1056.60 ± (1061.10 - 1072.97) ms1069.00 ± (1076.12 - 1089.31) ms+1.2%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms22.97 ± (22.88 - 23.06) ms23.31 ± (23.23 - 23.39) ms+1.5%✅⬆️
process.time_to_main_ms87.39 ± (86.98 - 87.79) ms88.13 ± (87.83 - 88.44) ms+0.9%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.93 ± (10.93 - 10.94) MB10.91 ± (10.91 - 10.92) MB-0.2%
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms22.71 ± (22.65 - 22.77) ms23.12 ± (23.07 - 23.18) ms+1.8%✅⬆️
process.time_to_main_ms87.50 ± (87.17 - 87.84) ms90.28 ± (89.94 - 90.62) ms+3.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.97 ± (10.97 - 10.97) MB10.96 ± (10.96 - 10.96) MB-0.1%
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms219.96 ± (218.38 - 221.54) ms224.54 ± (222.72 - 226.36) ms+2.1%✅⬆️
process.time_to_main_ms496.03 ± (494.81 - 497.24) ms505.95 ± (504.78 - 507.12) ms+2.0%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed47.77 ± (47.75 - 47.79) MB47.83 ± (47.81 - 47.85) MB+0.1%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.4%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms21.76 ± (21.68 - 21.83) ms22.00 ± (21.93 - 22.07) ms+1.1%✅⬆️
process.time_to_main_ms75.80 ± (75.44 - 76.15) ms78.14 ± (77.84 - 78.45) ms+3.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.63 ± (10.62 - 10.63) MB10.64 ± (10.64 - 10.65) MB+0.2%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms21.81 ± (21.74 - 21.88) ms21.93 ± (21.87 - 22.00) ms+0.6%✅⬆️
process.time_to_main_ms77.97 ± (77.66 - 78.28) ms78.78 ± (78.46 - 79.10) ms+1.0%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.70 ± (10.70 - 10.71) MB10.69 ± (10.68 - 10.69) MB-0.1%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms211.50 ± (210.08 - 212.92) ms211.96 ± (210.53 - 213.38) ms+0.2%✅⬆️
process.time_to_main_ms467.65 ± (466.65 - 468.65) ms470.12 ± (469.27 - 470.97) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed47.99 ± (47.97 - 48.02) MB47.96 ± (47.93 - 47.98) MB-0.1%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.1%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms20.16 ± (20.08 - 20.23) ms19.94 ± (19.88 - 19.99) ms-1.1%
process.time_to_main_ms76.89 ± (76.50 - 77.28) ms75.46 ± (75.18 - 75.74) ms-1.9%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.67 ± (7.67 - 7.68) MB7.67 ± (7.67 - 7.68) MB+0.0%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms19.83 ± (19.77 - 19.88) ms20.04 ± (19.98 - 20.10) ms+1.1%✅⬆️
process.time_to_main_ms76.76 ± (76.39 - 77.13) ms77.31 ± (77.03 - 77.58) ms+0.7%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.73 ± (7.72 - 7.73) MB7.72 ± (7.72 - 7.73) MB-0.1%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms191.97 ± (191.08 - 192.85) ms194.68 ± (193.80 - 195.56) ms+1.4%✅⬆️
process.time_to_main_ms454.27 ± (453.29 - 455.25) ms458.77 ± (457.79 - 459.75) ms+1.0%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed36.49 ± (36.45 - 36.53) MB36.50 ± (36.46 - 36.53) MB+0.0%✅⬆️
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)+0.0%✅⬆️

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration194.92 ± (194.70 - 195.36) ms204.63 ± (204.14 - 205.60) ms+5.0%✅⬆️
.NET Framework 4.8 - Bailout
duration198.30 ± (198.03 - 198.51) ms204.60 ± (204.31 - 205.53) ms+3.2%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1123.56 ± (1125.23 - 1133.30) ms1186.11 ± (1181.10 - 1191.17) ms+5.6%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms190.14 ± (189.82 - 190.46) ms196.36 ± (195.51 - 197.20) ms+3.3%✅⬆️
process.time_to_main_ms81.84 ± (81.64 - 82.03) ms86.01 ± (85.57 - 86.45) ms+5.1%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.07 ± (16.04 - 16.09) MB16.14 ± (16.12 - 16.16) MB+0.5%✅⬆️
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)+1.1%✅⬆️
.NET Core 3.1 - Bailout
process.internal_duration_ms190.16 ± (189.76 - 190.57) ms197.22 ± (196.24 - 198.19) ms+3.7%✅⬆️
process.time_to_main_ms83.18 ± (82.97 - 83.39) ms86.82 ± (86.33 - 87.31) ms+4.4%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.14 ± (16.12 - 16.16) MB16.16 ± (16.14 - 16.17) MB+0.1%✅⬆️
runtime.dotnet.threads.count21 ± (20 - 21)21 ± (21 - 21)+1.2%✅⬆️
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms407.30 ± (404.37 - 410.23) ms436.01 ± (433.40 - 438.62) ms+7.0%✅⬆️
process.time_to_main_ms478.02 ± (477.48 - 478.57) ms522.96 ± (520.24 - 525.69) ms+9.4%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed58.85 ± (58.75 - 58.95) MB58.73 ± (58.62 - 58.83) MB-0.2%
runtime.dotnet.threads.count29 ± (29 - 30)29 ± (29 - 29)-0.3%
.NET 6 - Baseline
process.internal_duration_ms193.89 ± (193.56 - 194.22) ms213.29 ± (212.64 - 213.93) ms+10.0%✅⬆️
process.time_to_main_ms70.73 ± (70.57 - 70.89) ms79.32 ± (79.01 - 79.63) ms+12.1%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.40 ± (16.37 - 16.43) MB16.25 ± (16.23 - 16.27) MB-0.9%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+2.1%✅⬆️
.NET 6 - Bailout
process.internal_duration_ms194.00 ± (193.71 - 194.28) ms211.12 ± (210.64 - 211.60) ms+8.8%✅⬆️
process.time_to_main_ms72.27 ± (72.11 - 72.42) ms79.46 ± (79.20 - 79.71) ms+10.0%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.33 ± (16.23 - 16.44) MB16.35 ± (16.34 - 16.37) MB+0.1%✅⬆️
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)+3.2%✅⬆️
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms418.71 ± (416.09 - 421.34) ms458.71 ± (456.68 - 460.73) ms+9.6%✅⬆️
process.time_to_main_ms447.45 ± (446.80 - 448.09) ms497.98 ± (496.82 - 499.13) ms+11.3%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed59.26 ± (59.16 - 59.36) MB58.60 ± (58.48 - 58.71) MB-1.1%
runtime.dotnet.threads.count30 ± (29 - 30)29 ± (29 - 29)-0.5%
.NET 8 - Baseline
process.internal_duration_ms192.07 ± (191.81 - 192.34) ms209.05 ± (208.55 - 209.54) ms+8.8%✅⬆️
process.time_to_main_ms70.67 ± (70.47 - 70.87) ms78.38 ± (78.15 - 78.62) ms+10.9%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.76 ± (11.74 - 11.78) MB11.63 ± (11.61 - 11.64) MB-1.1%
runtime.dotnet.threads.count18 ± (18 - 18)19 ± (19 - 19)+2.8%✅⬆️
.NET 8 - Bailout
process.internal_duration_ms191.55 ± (191.29 - 191.80) ms209.57 ± (209.01 - 210.12) ms+9.4%✅⬆️
process.time_to_main_ms71.50 ± (71.40 - 71.60) ms79.92 ± (79.63 - 80.21) ms+11.8%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.83 ± (11.80 - 11.85) MB11.64 ± (11.63 - 11.66) MB-1.5%
runtime.dotnet.threads.count19 ± (19 - 19)20 ± (20 - 20)+2.5%✅⬆️
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms370.49 ± (369.13 - 371.86) ms454.35 ± (446.91 - 461.79) ms+22.6%✅⬆️
process.time_to_main_ms438.32 ± (437.58 - 439.07) ms489.90 ± (488.70 - 491.10) ms+11.8%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed47.88 ± (47.84 - 47.91) MB49.91 ± (49.89 - 49.94) MB+4.3%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 29)28 ± (28 - 28)-1.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 (7868) - mean (76ms)  : 72, 79
    master - mean (76ms)  : 70, 83

    section Bailout
    This PR (7868) - mean (81ms)  : 77, 86
    master - mean (79ms)  : 73, 85

    section CallTarget+Inlining+NGEN
    This PR (7868) - mean (1,083ms)  : 980, 1186
    master - mean (1,067ms)  : 976, 1158

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 (7868) - mean (119ms)  : 114, 125
    master - mean (118ms)  : 111, 125

    section Bailout
    This PR (7868) - mean (121ms)  : 115, 127
    master - mean (118ms)  : 111, 125

    section CallTarget+Inlining+NGEN
    This PR (7868) - mean (775ms)  : 736, 813
    master - mean (758ms)  : 720, 796

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7868) - mean (107ms)  : 101, 114
    master - mean (105ms)  : 98, 111

    section Bailout
    This PR (7868) - mean (108ms)  : 102, 113
    master - mean (107ms)  : 100, 114

    section CallTarget+Inlining+NGEN
    This PR (7868) - mean (715ms)  : 680, 749
    master - mean (719ms)  : 677, 762

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7868) - mean (104ms)  : 99, 109
    master - mean (106ms)  : 98, 114

    section Bailout
    This PR (7868) - mean (106ms)  : 101, 111
    master - mean (105ms)  : 98, 112

    section CallTarget+Inlining+NGEN
    This PR (7868) - mean (694ms)  : 662, 726
    master - mean (690ms)  : 661, 720

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 (7868) - mean (205ms)  : 194, 215
    master - mean (195ms)  : 192, 198

    section Bailout
    This PR (7868) - mean (205ms)  : 196, 214
    master - mean (198ms)  : 196, 201

    section CallTarget+Inlining+NGEN
    This PR (7868) - mean (1,186ms)  : 1113, 1259
    master - mean (1,129ms)  : 1071, 1188

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 (7868) - mean (293ms)  : 271, 315
    master - mean (280ms)  : 276, 285

    section Bailout
    This PR (7868) - mean (296ms)  : 268, 324
    master - mean (281ms)  : 276, 287

    section CallTarget+Inlining+NGEN
    This PR (7868) - mean (1,006ms)  : crit, 954, 1058
    master - mean (924ms)  : 880, 969

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7868) - mean (302ms)  : 286, 318
    master - mean (274ms)  : 267, 280

    section Bailout
    This PR (7868) - mean (300ms)  : crit, 289, 311
    master - mean (275ms)  : 270, 279

    section CallTarget+Inlining+NGEN
    This PR (7868) - mean (1,005ms)  : crit, 955, 1054
    master - mean (902ms)  : 860, 944

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7868) - mean (299ms)  : 289, 309
    master - mean (273ms)  : 267, 278

    section Bailout
    This PR (7868) - mean (301ms)  : crit, 287, 316
    master - mean (273ms)  : 269, 276

    section CallTarget+Inlining+NGEN
    This PR (7868) - mean (987ms)  : crit, 871, 1104
    master - mean (839ms)  : 813, 865

Loading

@datadog-datadog-prod-us1

This comment has been minimized.

@andrewlock andrewlock force-pushed the andrew/perf/2-limit-benchmarks branch from 8fb05f9 to d209ae2 Compare November 27, 2025 09:55
@andrewlock andrewlock merged commit fc1ef12 into master Nov 28, 2025
151 checks passed
@andrewlock andrewlock deleted the andrew/perf/2-limit-benchmarks branch November 28, 2025 09:06
@github-actions github-actions bot added this to the vNext-v3 milestone Nov 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:benchmarks Benchmarks, throughput tests, Crank, Bombardier, etc

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants