Enable performance quality gates on microbenchmarks and macrobenchmarks#8424
Conversation
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8424) 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 (8424) - mean (71ms) : 69, 74
master - mean (71ms) : 69, 74
section Bailout
This PR (8424) - mean (76ms) : 73, 79
master - mean (76ms) : 73, 78
section CallTarget+Inlining+NGEN
This PR (8424) - mean (1,066ms) : 1028, 1104
master - mean (1,063ms) : 1023, 1104
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 (8424) - mean (112ms) : 108, 117
master - mean (112ms) : 108, 116
section Bailout
This PR (8424) - mean (113ms) : 110, 115
master - mean (113ms) : 109, 117
section CallTarget+Inlining+NGEN
This PR (8424) - mean (786ms) : 766, 805
master - mean (776ms) : 754, 798
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8424) - mean (98ms) : 94, 102
master - mean (101ms) : 93, 109
section Bailout
This PR (8424) - mean (99ms) : 97, 101
master - mean (100ms) : 97, 102
section CallTarget+Inlining+NGEN
This PR (8424) - mean (935ms) : 898, 973
master - mean (933ms) : 897, 969
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8424) - mean (98ms) : 95, 101
master - mean (98ms) : 95, 100
section Bailout
This PR (8424) - mean (99ms) : 96, 103
master - mean (99ms) : 96, 102
section CallTarget+Inlining+NGEN
This PR (8424) - mean (816ms) : 768, 864
master - mean (813ms) : 777, 850
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 (8424) - mean (193ms) : 189, 197
master - mean (199ms) : 174, 225
section Bailout
This PR (8424) - mean (195ms) : 193, 197
master - mean (195ms) : 193, 196
section CallTarget+Inlining+NGEN
This PR (8424) - mean (1,151ms) : 1098, 1203
master - mean (1,140ms) : 1092, 1189
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 (8424) - mean (277ms) : 272, 281
master - mean (273ms) : 269, 277
section Bailout
This PR (8424) - mean (277ms) : 273, 281
master - mean (274ms) : 271, 277
section CallTarget+Inlining+NGEN
This PR (8424) - mean (930ms) : 909, 951
master - mean (928ms) : 907, 949
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8424) - mean (270ms) : 266, 275
master - mean (267ms) : 263, 271
section Bailout
This PR (8424) - mean (270ms) : 265, 275
master - mean (267ms) : 264, 269
section CallTarget+Inlining+NGEN
This PR (8424) - mean (1,137ms) : 1105, 1170
master - mean (1,131ms) : 1088, 1174
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8424) - mean (268ms) : 263, 272
master - mean (266ms) : 262, 269
section Bailout
This PR (8424) - mean (268ms) : 265, 271
master - mean (265ms) : 263, 267
section CallTarget+Inlining+NGEN
This PR (8424) - mean (1,023ms) : 975, 1072
master - mean (1,015ms) : 980, 1049
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BenchmarksBenchmark execution time: 2026-04-09 12:07:47 Comparing candidate commit 6effaa3 in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 27 metrics, 0 unstable metrics, 87 known flaky benchmarks.
|
| Write-Output "Artifacts directory: $artifactsDir" | ||
| Write-Output "S3 destination: s3://$s3Bucket/$latestPrefix" | ||
| Write-Output "Will upload the same files listed above." | ||
| try { | ||
| Write-S3Object ` | ||
| -BucketName $s3Bucket ` | ||
| -KeyPrefix $latestPrefix ` | ||
| -Folder $artifactsDir ` | ||
| -CannedACLName "bucket-owner-full-control" ` | ||
| -Recurse | ||
| Write-Output "Latest results upload complete!" | ||
| } | ||
| catch { | ||
| Write-Output "ERROR uploading latest results: $_" | ||
| Write-Output "Exception type: $($_.Exception.GetType().FullName)" | ||
| Write-Output "Stack trace: $($_.ScriptStackTrace)" | ||
| throw | ||
| } | ||
| } |
There was a problem hiding this comment.
Somewhat unrelated to this PR, but here I'm adding some logging to make sure we know what's happening on flakes like these.
andrewlock
left a comment
There was a problem hiding this comment.
Thanks, I think there's a typo though we should fix before merge!
Summary of changes
check-big-regressions).check-slo-breaches).IGNORED_BENCHMARKS_REGEXwithFLAKY_BENCHMARKS_REGEXon microbenchmarks.FLAKY_BENCHMARKS_REGEXis used by internal tooling to avoid gating on flaky microbenchmarks.IGNORED_BENCHMARKS_REGEXwas a workaround.FLAKY_BENCHMARKS_REGEXare excluded from gating decisions bybenchmark_analyzer.FLAKY_BENCHMARKS_REGEXis set on therun-benchmarksjob, wherebenchmark_analyzerconvert marks flaky benchmarks. Downstream jobs (check-big-regressions) read the flaky flag from the converted results.check-big-regressions-no-ignored-benchmarks(no longer needed).Reason for change
APMSP-2291 Identify and fix flaky dd-trace-dotnet microbenchmark scenarios
APMSP-2292 Setup performance quality gates on dd-trace-dotnet
With #8300 reducing microbenchmark flakiness and with the ability to set
FLAKY_BENCHMARKS_REGEXto makebenchmark_analyzerignore flaky benchmarks, we can now enforce the gates without false-positive noise for microbenchmarks.Implementation details
FLAKY_BENCHMARKS_REGEXwere determined by stability tests. They are summarized on Update microbenchmark design to reduce flakiness #8300. I also added other benchmarks @NachoEchevarria and I had classified as flaky before.ignored.prefix,benchmark_analyzernow handles this viaFLAKY_BENCHMARKS_REGEX.Test coverage
The most important bit to verify is whether we'd have flaky gates on micro/macrobenchmarks.
We won't. Because:
FLAKY_BENCHMARKS_REGEX.Other details
As a reminder, if bypassing is necessary, see https://datadoghq.atlassian.net/wiki/x/8YFzMwE