-
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 in multiple benchmarks after char.Is*
update
#69727
Comments
Tagging subscribers to this area: @JulieLeeMSFT Issue DetailsRun Information
Regressions in System.Numerics.Tests.Perf_VectorOf<SByte>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Numerics.Tests.Perf_VectorOf<SByte>*' PayloadsHistogramSystem.Numerics.Tests.Perf_VectorOf<SByte>.SquareRootBenchmark
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
Regressions in System.Numerics.Tests.Perf_VectorOf<Byte>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Numerics.Tests.Perf_VectorOf<Byte>*' PayloadsHistogramSystem.Numerics.Tests.Perf_VectorOf<Byte>.SquareRootBenchmark
Description of detection logic
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Tests.Perf_String
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Tests.Perf_String*' PayloadsHistogramSystem.Tests.Perf_String.Format_MultipleArgs
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Globalization.Tests.StringEquality
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Globalization.Tests.StringEquality*' PayloadsHistogramSystem.Globalization.Tests.StringEquality.Compare_Same(Count: 1024, Options: (en-US, OrdinalIgnoreCase))
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
|
Several regressions in windows/x64 dotnet/perf-autofiling-issues#5457, dotnet/perf-autofiling-issues#5458, dotnet/perf-autofiling-issues#5471, dotnet/perf-autofiling-issues#5489 |
Ubuntu/x64 regressions: dotnet/perf-autofiling-issues#5473 |
@kunalspathak this diff range doesn't look to include the Roslyn update. I'm taking a look, but I think these might be unrelated. |
Ah, I see. You're looking at a different range than what the bot flagged (6e4eba8...15dda0e). Basically looking at a possible secondary increase. |
|
The regression is due to #69318. CC. @stephentoub The disassembly for The first encountered diff looks like the below and is in movzx eax,word ptr [rdi+rax*2+0C]
cmp eax,30
jl near ptr M03_L59
cmp eax,39
jg near ptr M03_L59
xor edx,edx
M03_L06:
lea edx,[rdx+rdx*4] becomes movzx eax,word ptr [rdi+rax*2+0C]
movzx ecx,ax
add ecx,0FFFFFFD0
cmp ecx,9
jbe short M03_L07
M03_L06:
call qword ptr [7FFCC6C59438]
int 3
M03_L07:
xor edx,edx
M03_L08:
lea edx,[rdx+rdx*4] The above likely corresponds to: https://github.com/dotnet/runtime/pull/69318/files#diff-072e8df6b3d249d58da2b688cbd9369ae5d1e9fb4c1c1da77a19384f3f7711a0R1528 Rather than the "simple" The JIT doesn't seem to handle this as well and places the "error case" as the fallthrough case (meaning most CPUs will predict it take by default). If you follow the rest of the diffs, it looks to likewise be doing less loop unrolling among and placing other error cases "inline" rather than being grouped near the end of the method body as "cold paths". We could of course fix up the managed side methods, but this likely deserves a closer look by the runtime team to determine why it's getting pessimized like this. |
Thanks @tannergooding for taking a look. The diffs doesn't seem to be working well. Could you please retype them pointing to the source code instead of diffs? Thing to note, for the change itself to
It is tier 0 code. If you see tier 1 code, they are moved towards the end of the method. Are all the regressions related to #69318 ?
Even the ones listed here? |
I didn't check every regression in depth, but many of the string related ones were.
👍, this must be another case where |
Yes, but most of ASCII, and in particular all letters both upper and lower case, are > '0', so the expectation is that the majority of characters evaluated aren't < '0'. |
More regressions, arm64: dotnet/perf-autofiling-issues#5538 |
Some improvements seen too (note autofiler may be filing duplicates...) |
Could be this gets ironed out with a MPGO update, which should show that test is strongly biased. Our last MPGO update was on 5/9 but the data it gathered was from 4/17. @EgorBo you mentioned the stale MPGO data the other day -- any idea why we're not getting new data? |
I assume the PRs to update dotnet sdk in dotnet-optimization have to be approved (and conflicts need to be resolved) - doing it now |
Regression in ubuntu/arm64 - dotnet/perf-autofiling-issues#5569 |
While generating the preview 5 perf report, I'm seeing 0-30% regressions across a variety of configs on the following benchmarks:
Are we in agreement that this Roslyn update is responsible, or is #69318 actually to blame? Also, let me know if it's worth creating a new issue for these specific regressions. System.Text.Perf_Utf8Encoding.GetString(Input: Chinese)
<\details> |
As far as I was able to tell the change has nothing to do with the Roslyn update. That doesn't necessarily mean everything is the fault of #69318 however. |
char.Is*
update
These look to have been resolved for the most part. They are within the normal/expected noise ranges in most cases. |
Run Information
Regressions in System.Numerics.Tests.Perf_VectorOf<SByte>
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Numerics.Tests.Perf_VectorOf<SByte>.SquareRootBenchmark
Description of detection logic
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.Numerics.Tests.Perf_VectorOf<Byte>
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Numerics.Tests.Perf_VectorOf<Byte>.SquareRootBenchmark
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
Run Information
Regressions in System.Tests.Perf_String
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Tests.Perf_String.Format_MultipleArgs
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 System.Globalization.Tests.StringEquality
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Globalization.Tests.StringEquality.Compare_Same(Count: 1024, Options: (en-US, OrdinalIgnoreCase))
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
The text was updated successfully, but these errors were encountered: