-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Regressions due to QJFL and OSR #67594
Comments
I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label. |
There are generally two root causes for these:
Initial work for this issue is to categorize the regressions using or extending the above. Will probably wait a few days before digging in so we also see deferred impact and arm64 data. |
Tagging subscribers to this area: @JulieLeeMSFT Issue DetailsRun Information
Regressions in System.Security.Cryptography.Primitives.Tests.Performance.Perf_FixedTimeEquals
Reprogit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Security.Cryptography.Primitives.Tests.Performance.Perf_FixedTimeEquals*' PayloadsHistogramSystem.Security.Cryptography.Primitives.Tests.Performance.Perf_FixedTimeEquals.FixedTimeEquals_256Bit_Equal
Description of detection logic
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
Regressions in System.Linq.Tests.Perf_Enumerable
Reprogit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Linq.Tests.Perf_Enumerable*' PayloadsHistogramSystem.Linq.Tests.Perf_Enumerable.SingleWithPredicate_FirstElementMatches(input: List)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.CopyTo<Int32>
Reprogit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Collections.CopyTo<Int32>*' PayloadsHistogramSystem.Collections.CopyTo<Int32>.Memory(Size: 2048)
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in Benchstone.MDBenchI.MDMidpoint
Reprogit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'Benchstone.MDBenchI.MDMidpoint*' PayloadsHistogramBenchstone.MDBenchI.MDMidpoint.Test
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in PerfLabTests.DictionaryExpansion
Reprogit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'PerfLabTests.DictionaryExpansion*' PayloadsHistogramPerfLabTests.DictionaryExpansion.ExpandDictionaries
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.IndexerSetReverse<Int32>
Reprogit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Collections.IndexerSetReverse<Int32>*' PayloadsHistogramSystem.Collections.IndexerSetReverse<Int32>.IList(Size: 512)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.ContainsTrue<Int32>
Reprogit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Collections.ContainsTrue<Int32>*' PayloadsHistogramSystem.Collections.ContainsTrue<Int32>.HashSet(Size: 512)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in BenchmarksGame.BinaryTrees_2
Reprogit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'BenchmarksGame.BinaryTrees_2*' PayloadsHistogramBenchmarksGame.BinaryTrees_2.RunBench
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
|
As @AndyAyersMS and I discussed today, the following regressions from the perf report are likely caused by OSR. Benchstone.BenchI.Array2.Test
SciMark2.kernel.benchSparseMult
System.Collections.CopyTo.ReadOnlySpan(Size: 2048)
LinqBenchmarks.Count00ForX
System.Collections.CopyTo.Memory(Size: 2048)
|
For FractalPerf, BDN chooses 1 invocation per iteration, so the benchmark never reaches Tier1 when OSR is enabled. So, we're measuring the perf of OSR code. The main issue is that the For instance, in A more general SROA approach might work nicely here since we know exactly what gets written and that the loop won't cause exceptions (so any store back to ;; OSR
G_M63708_IG06: ;; offset=009EH
C5FB10BC24B8000000 vmovsd xmm7, qword ptr [rsp+B8H]
C54359C7 vmulsd xmm8, xmm7, xmm7
C57B108C24C0000000 vmovsd xmm9, qword ptr [rsp+C0H]
C4413359D1 vmulsd xmm10, xmm9, xmm9
C4413B5CC2 vsubsd xmm8, xmm8, xmm10
C4417828D0 vmovaps xmm10, xmm8
C5C358FF vaddsd xmm7, xmm7, xmm7
C4C14359F9 vmulsd xmm7, xmm7, xmm9
C57828CF vmovaps xmm9, xmm7
C57B119424B8000000 vmovsd qword ptr [rsp+B8H], xmm10
C57B118C24C0000000 vmovsd qword ptr [rsp+C0H], xmm9
C57828CD vmovaps xmm9, xmm5
C57828D6 vmovaps xmm10, xmm6
C4413B58C1 vaddsd xmm8, xmm8, xmm9
C4417828C8 vmovaps xmm9, xmm8
C4C14358FA vaddsd xmm7, xmm7, xmm10
C57828D7 vmovaps xmm10, xmm7
C57B118C24B8000000 vmovsd qword ptr [rsp+B8H], xmm9
C57B119424C0000000 vmovsd qword ptr [rsp+C0H], xmm10
C4413B59C0 vmulsd xmm8, xmm8, xmm8
C5C359FF vmulsd xmm7, xmm7, xmm7
C5BB58FF vaddsd xmm7, xmm8, xmm7
C5F92EFA vucomisd xmm7, xmm2
770D ja SHORT G_M63708_IG07
FFC0 inc eax
3DE8030000 cmp eax, 0x3E8
0F8C6FFFFFFF jl G_M63708_IG06
;; Tier1
G_M63708_IG05: ;; offset=0064H
C4413B59D0 vmulsd xmm10, xmm8, xmm8
C4413359D9 vmulsd xmm11, xmm9, xmm9
C4412B5CD3 vsubsd xmm10, xmm10, xmm11
C4413B58C0 vaddsd xmm8, xmm8, xmm8
C4413B59C9 vmulsd xmm9, xmm8, xmm9
C52B58C6 vaddsd xmm8, xmm10, xmm6
C53358CF vaddsd xmm9, xmm9, xmm7
C4413B59D0 vmulsd xmm10, xmm8, xmm8
C4413359D9 vmulsd xmm11, xmm9, xmm9
C4412B58D3 vaddsd xmm10, xmm10, xmm11
C5792ED1 vucomisd xmm10, xmm1
7709 ja SHORT G_M63708_IG06
FFC0 inc eax
3DE8030000 cmp eax, 0x3E8
7CC1 jl SHORT G_M63708_IG05 |
cc @jakobbotsch for the example just above. OSR might provide a wealth of cases where more flexible promotion helps, since it is (overly) pessimistic about struct address exposure. |
We have known for a while now that OSR and Tier1/FullOpt perf were not always going to match. Seems like the number of places where this doesn't happen is acceptably small. We will keep working on this in 8.0 to try and close the gap further. So am going to re-label this as an 8.0 issue. |
@AndyAyersMS this regression was detected in the preview 4 report, but was never officially resolved, and showed up again on our RC2 vs 6 report. Is this still under investigation, or do we consider it to be by design? FractalPerf.Launch.Test
|
FWIW we may end up fixing some of these in .NET 8 by bringing the OSR code a bit closer to Tier1. See #76928. |
Are these cases in particular still relevant for physical promotion, or did #83910 mostly address these parity gaps? |
Using the handy new autofiling issue aggregator, here's where things stand wrt the issues linked here. Top number is current vs regression baseline, bottom is the reported regression (so if top number is less, things have improved since). Only the top dozen or so are still showing regressions. Note we no longer run or triage alpine (there may be data for alpine 3.15).
|
System.Collections.CopyTo<Int32>.Memory(Size: 2048)Became bimodal once OSR was enabled, but doesn't really look like it regressed. |
I think most of these are since mitigated. So will close and we can re-open specific issues later if necessary. |
Run Information
Regressions in System.Security.Cryptography.Primitives.Tests.Performance.Perf_FixedTimeEquals
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Security.Cryptography.Primitives.Tests.Performance.Perf_FixedTimeEquals.FixedTimeEquals_256Bit_Equal
Description of detection logic
Description of detection logic
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Regressions in System.Linq.Tests.Perf_Enumerable
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Linq.Tests.Perf_Enumerable.SingleWithPredicate_FirstElementMatches(input: List)
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Collections.CopyTo<Int32>
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Collections.CopyTo<Int32>.Memory(Size: 2048)
Description of detection logic
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in Benchstone.MDBenchI.MDMidpoint
Test Report
Repro
Payloads
Baseline
Compare
Histogram
Benchstone.MDBenchI.MDMidpoint.Test
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in PerfLabTests.DictionaryExpansion
Test Report
Repro
Payloads
Baseline
Compare
Histogram
PerfLabTests.DictionaryExpansion.ExpandDictionaries
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Collections.IndexerSetReverse<Int32>
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Collections.IndexerSetReverse<Int32>.IList(Size: 512)
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Collections.ContainsTrue<Int32>
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Collections.ContainsTrue<Int32>.HashSet(Size: 512)
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in BenchmarksGame.BinaryTrees_2
Test Report
Repro
Payloads
Baseline
Compare
Histogram
BenchmarksGame.BinaryTrees_2.RunBench
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
category:performance
theme:osr
The text was updated successfully, but these errors were encountered: