-
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
[Perf] Linux/x64: 26 Regressions on 5/2/2023 9:04:55 PM #85989
Comments
Run Information
Regressions in Benchmark.GetChildKeysTests
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Benchmark.GetChildKeysTests*' PayloadsHistogramBenchmark.GetChildKeysTests.AddChainedConfigurationNoDelimiter
Description of detection logic
JIT DisasmsBenchmark.GetChildKeysTests.AddChainedConfigurationEmpty
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.CtorFromCollection<String>
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.CtorFromCollection<String>*' PayloadsHistogramSystem.Collections.CtorFromCollection<String>.HashSet(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.TryGetValueFalse<String, String>
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.TryGetValueFalse<String, String>*' PayloadsHistogramSystem.Collections.TryGetValueFalse<String, String>.ImmutableDictionary(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.ContainsTrue<String>
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsTrue<String>*' PayloadsHistogramSystem.Collections.ContainsTrue<String>.HashSet(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in PerfLabTests.CastingPerf2.CastingPerf
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf2.CastingPerf*' PayloadsHistogramPerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFooInterAlia
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository |
Commit range is c62f69b...2a216ab. Probably PGO... |
Likely a PGO update, but we usually don't see perf swings quite this large. So need to see if there's somethimg amiss with the PGO data, or the way the JIT interacts with it... |
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsRun Information
Regressions in System.Tests.Perf_UInt64
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_UInt64*' PayloadsHistogramSystem.Tests.Perf_UInt64.TryParse(value: "18446744073709551615")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_UInt64.ParseSpan(value: "18446744073709551615")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_UInt64.Parse(value: "12345")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_UInt64.TryParse(value: "12345")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_UInt64.Parse(value: "18446744073709551615")
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Globalization.Tests.StringEquality
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Globalization.Tests.StringEquality*' PayloadsHistogramSystem.Globalization.Tests.StringEquality.Compare_Same(Count: 1024, Options: (en-US, OrdinalIgnoreCase))
Description of detection logic
JIT DisasmsSystem.Globalization.Tests.StringEquality.Compare_Same_Upper(Count: 1024, Options: (en-US, OrdinalIgnoreCase))
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.AddGivenSize<String>
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.AddGivenSize<String>*' PayloadsHistogramSystem.Collections.AddGivenSize<String>.Stack(Size: 512)
Description of detection logic
JIT DisasmsSystem.Collections.AddGivenSize<String>.HashSet(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Tests.Perf_UInt16
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_UInt16*' PayloadsHistogramSystem.Tests.Perf_UInt16.Parse(value: "65535")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_UInt16.Parse(value: "12345")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_UInt16.Parse(value: "0")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_UInt16.TryParse(value: "65535")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_UInt16.TryParse(value: "0")
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Buffers.Text.Tests.Utf8FormatterTests
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Text.Tests.Utf8FormatterTests*' PayloadsHistogramSystem.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value: 2147483647)
Description of detection logic
JIT DisasmsSystem.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value: 4)
Description of detection logic
JIT DisasmsSystem.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value: 12345)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.ContainsKeyFalse<String, String>
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsKeyFalse<String, String>*' PayloadsHistogramSystem.Collections.ContainsKeyFalse<String, String>.ImmutableDictionary(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.ContainsFalse<String>
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsFalse<String>*' PayloadsHistogramSystem.Collections.ContainsFalse<String>.ImmutableHashSet(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Text.Perf_Utf8Encoding
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Perf_Utf8Encoding*' PayloadsHistogramSystem.Text.Perf_Utf8Encoding.GetString(Input: Chinese)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository
|
Benchmark.GetChildKeysTests.AddChainedConfigurationEmptyLooking at the most dramatic slowdown: The big improvement on April 17 seems to fall in the range 223d152...9aefa9d -- the only possible candidate is #84582 |
Can repro
Note this could be stale PGO data -- so might resolve itself with another PGO update. We took one with #85866 and just took another one with #85968. But let's drill in and see.... |
In case you're wondering how runtime/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationKeyComparer.cs Lines 70 to 98 in d80ba2f
So not too surprising that it gets lumped in with parsing benchmarks like we see here. |
This particular test case fills a dictionary with "empty keys" which are just whitespace: so the implication is that we never try parsing any integers with leading or trailing whitespace allowed and actual leading or trailing whitespace in our training scenarios, and when we rely on this static PGO data we make some decisions that adversely impact this test. |
For the cases above, on windows there is no static PGO for On Linux there is static PGO, but it is very "thin" -- only 4 calls to the method. This leads to cascading diffs but as far as I can tell the main impact is to block layout and some flow opts; notably inlining is the same. This lack of coverage for uint parsing likely explains the bulk of the regressions above. One mitigation we might contemplate is to toss out static PGO data if there's not a lot of coverage in a method. Another might be to try and use profile blend to avoid over-fitting to what is likely a very small and not representative sample. Blend is perhaps not quite ready for general use, but I will try enabling it here and see what it does. |
Updated and collated results
|
Updated classification
|
For the most part the issues here have been resolved (some by enabling Dynamic PGO). There is still too much sensitivity to static PGO in some places, typically these are tests where a cold inline can improve hot code. Not actionable for .NET 8, but something to keep in mind for the future. |
Run Information
Regressions in System.Tests.Perf_UInt64
Test Report
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
Baseline
Compare
Payloads
Baseline
Compare
Histogram
System.Tests.Perf_UInt64.TryParse(value: "18446744073709551615")
Description of detection logic
JIT Disasms
System.Tests.Perf_UInt64.ParseSpan(value: "18446744073709551615")
Description of detection logic
JIT Disasms
System.Tests.Perf_UInt64.Parse(value: "12345")
Description of detection logic
JIT Disasms
System.Tests.Perf_UInt64.TryParse(value: "12345")
Description of detection logic
JIT Disasms
System.Tests.Perf_UInt64.Parse(value: "18446744073709551615")
Description of detection logic
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Globalization.Tests.StringEquality
Test Report
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
Baseline
Compare
Payloads
Baseline
Compare
Histogram
System.Globalization.Tests.StringEquality.Compare_Same(Count: 1024, Options: (en-US, OrdinalIgnoreCase))
Description of detection logic
JIT Disasms
System.Globalization.Tests.StringEquality.Compare_Same_Upper(Count: 1024, Options: (en-US, OrdinalIgnoreCase))
Description of detection logic
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Collections.AddGivenSize<String>
Test Report
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
Baseline
Compare
Payloads
Baseline
Compare
Histogram
System.Collections.AddGivenSize<String>.Stack(Size: 512)
Description of detection logic
JIT Disasms
System.Collections.AddGivenSize<String>.HashSet(Size: 512)
Description of detection logic
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Tests.Perf_UInt16
Test Report
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
Baseline
Compare
Payloads
Baseline
Compare
Histogram
System.Tests.Perf_UInt16.Parse(value: "65535")
Description of detection logic
JIT Disasms
System.Tests.Perf_UInt16.Parse(value: "12345")
Description of detection logic
JIT Disasms
System.Tests.Perf_UInt16.Parse(value: "0")
Description of detection logic
JIT Disasms
System.Tests.Perf_UInt16.TryParse(value: "65535")
Description of detection logic
JIT Disasms
System.Tests.Perf_UInt16.TryParse(value: "0")
Description of detection logic
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Buffers.Text.Tests.Utf8FormatterTests
Test Report
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
Baseline
Compare
Payloads
Baseline
Compare
Histogram
System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value: 2147483647)
Description of detection logic
JIT Disasms
System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value: 4)
Description of detection logic
JIT Disasms
System.Buffers.Text.Tests.Utf8FormatterTests.FormatterInt32(value: 12345)
Description of detection logic
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Collections.ContainsKeyFalse<String, String>
Test Report
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
Baseline
Compare
Payloads
Baseline
Compare
Histogram
System.Collections.ContainsKeyFalse<String, String>.ImmutableDictionary(Size: 512)
Description of detection logic
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Collections.ContainsFalse<String>
Test Report
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
Baseline
Compare
Payloads
Baseline
Compare
Histogram
System.Collections.ContainsFalse<String>.ImmutableHashSet(Size: 512)
Description of detection logic
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Text.Perf_Utf8Encoding
Test Report
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
Baseline
Compare
Payloads
Baseline
Compare
Histogram
System.Text.Perf_Utf8Encoding.GetString(Input: Chinese)
Description of detection logic
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
The text was updated successfully, but these errors were encountered: