Attempt to reduce flake in BuggyBits sample app#8620
Conversation
BenchmarksBenchmark execution time: 2026-05-13 21:07:02 Comparing candidate commit e818e1d in PR branch Some scenarios are present only in baseline or only in candidate runs. If you didn't create or remove some scenarios in your branch, this maybe a sign of crashed benchmarks 💥💥💥 Scenarios present only in baseline:
Found 2 performance improvements and 3 performance regressions! Performance is the same for 49 metrics, 18 unstable metrics, 89 known flaky benchmarks, 37 flaky benchmarks without significant changes.
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8620) 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 (8620) - mean (75ms) : 70, 79
master - mean (75ms) : 69, 81
section Bailout
This PR (8620) - mean (78ms) : 76, 79
master - mean (77ms) : 75, 79
section CallTarget+Inlining+NGEN
This PR (8620) - mean (1,107ms) : 1059, 1156
master - mean (1,114ms) : 1053, 1175
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 (8620) - mean (115ms) : 110, 120
master - mean (113ms) : 109, 117
section Bailout
This PR (8620) - mean (115ms) : 112, 118
master - mean (117ms) : 111, 123
section CallTarget+Inlining+NGEN
This PR (8620) - mean (799ms) : 765, 832
master - mean (795ms) : 773, 817
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8620) - mean (101ms) : 98, 105
master - mean (105ms) : 99, 111
section Bailout
This PR (8620) - mean (105ms) : 99, 112
master - mean (103ms) : 99, 107
section CallTarget+Inlining+NGEN
This PR (8620) - mean (956ms) : 918, 993
master - mean (953ms) : 919, 987
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8620) - mean (100ms) : 97, 104
master - mean (100ms) : 96, 104
section Bailout
This PR (8620) - mean (101ms) : 98, 104
master - mean (104ms) : 99, 108
section CallTarget+Inlining+NGEN
This PR (8620) - mean (821ms) : 783, 860
master - mean (821ms) : 784, 857
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 (8620) - mean (197ms) : 192, 203
master - mean (198ms) : 192, 203
section Bailout
This PR (8620) - mean (201ms) : 196, 205
master - mean (202ms) : 197, 208
section CallTarget+Inlining+NGEN
This PR (8620) - mean (1,191ms) : 1157, 1226
master - mean (1,195ms) : 1142, 1247
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 (8620) - mean (286ms) : 279, 292
master - mean (282ms) : 273, 291
section Bailout
This PR (8620) - mean (285ms) : 279, 291
master - mean (283ms) : 278, 289
section CallTarget+Inlining+NGEN
This PR (8620) - mean (964ms) : 942, 985
master - mean (956ms) : 939, 973
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8620) - mean (279ms) : 273, 286
master - mean (276ms) : 270, 281
section Bailout
This PR (8620) - mean (280ms) : 274, 285
master - mean (277ms) : 270, 283
section CallTarget+Inlining+NGEN
This PR (8620) - mean (1,161ms) : 1123, 1200
master - mean (1,156ms) : 1117, 1195
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8620) - mean (277ms) : 266, 288
master - mean (274ms) : 265, 283
section Bailout
This PR (8620) - mean (278ms) : 270, 286
master - mean (275ms) : 267, 283
section CallTarget+Inlining+NGEN
This PR (8620) - mean (1,038ms) : 996, 1080
master - mean (1,035ms) : 990, 1080
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
391f809 to
e818e1d
Compare
e818e1d to
e33c5ec
Compare
Summary of changes
Attempts to fix some flake within the Buggy Bits sample app/integration tests by letting kestrel go and decide what port to use.
Reason for change
This was the cause of 3 flakes last release so trying to improve that.
Assumption:
TestApplicationRunnerwas callingTcpPortProvider.GetOpenPort()to find a free port, then passing that port to the sample app via--urls. Between those two steps another process could grab the port, causing the sample app to fail to bind.Implementation details
The fix is to let Kestrel pick the port itself. The sample apps now start up, ask Kestrel which port it actually bound, and log that URL. The test runner reads the URL back out of the sample app's stdout instead of deciding the port up front. The old hand-rolled port-probing and retry logic in BuggyBits is gone.
Test coverage
This is it 😃
Other details