-
Notifications
You must be signed in to change notification settings - Fork 4.9k
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] Windows/x64: 59 Regressions due to PGO update #87179
Comments
Run Information
Regressions in System.Tests.Perf_Int32
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Int32*' PayloadsHistogramSystem.Tests.Perf_Int32.ToString(value: 12345)
Description of detection logic
JIT DisasmsSystem.Tests.Perf_Int32.ToString(value: 2147483647)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in Microsoft.Extensions.Primitives.Performance.StringValuesBenchmark
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.Primitives.Performance.StringValuesBenchmark*' PayloadsHistogramMicrosoft.Extensions.Primitives.Performance.StringValuesBenchmark.ForEach_Array
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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Globalization.Tests.StringEquality*' PayloadsHistogramSystem.Globalization.Tests.StringEquality.Compare_DifferentFirstChar(Count: 1024, Options: (, None))
Description of detection logic
JIT DisasmsSystem.Globalization.Tests.StringEquality.Compare_DifferentFirstChar(Count: 1024, Options: (en-US, None))
Description of detection logic
JIT DisasmsSystem.Globalization.Tests.StringEquality.Compare_DifferentFirstChar(Count: 1024, Options: (, IgnoreCase))
Description of detection logic
JIT DisasmsSystem.Globalization.Tests.StringEquality.Compare_DifferentFirstChar(Count: 1024, Options: (en-US, IgnoreCase))
Description of detection logic
JIT DisasmsSystem.Globalization.Tests.StringEquality.Compare_DifferentFirstChar(Count: 1024, Options: (pl-PL, None))
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.Text.Json.Tests.Perf_Reader
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Tests.Perf_Reader*' PayloadsHistogramSystem.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: False, TestCase: DeepTree)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Tests.Perf_UInt32
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_UInt32*' PayloadsHistogramSystem.Tests.Perf_UInt32.ToString(value: 12345)
Description of detection logic
JIT DisasmsSystem.Tests.Perf_UInt32.ToString(value: 4294967295)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Linq.Tests.Perf_OrderBy
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Linq.Tests.Perf_OrderBy*' PayloadsHistogramSystem.Linq.Tests.Perf_OrderBy.OrderByString(NumberOfPeople: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.CtorFromCollectionNonGeneric<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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.CtorFromCollectionNonGeneric<String>*' PayloadsHistogramSystem.Collections.CtorFromCollectionNonGeneric<String>.SortedList(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Perf_Convert
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Perf_Convert*' PayloadsHistogramSystem.Perf_Convert.ToHexString
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Text.Json.Document.Tests.Perf_EnumerateArray
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Document.Tests.Perf_EnumerateArray*' PayloadsHistogramSystem.Text.Json.Document.Tests.Perf_EnumerateArray.EnumerateUsingIndexer(TestCase: ArrayOfNumbers)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository |
Run Information
Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Common
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Common*' PayloadsHistogramSystem.Text.RegularExpressions.Tests.Perf_Regex_Common.Email_IsMatch(Options: Compiled)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Text.Json.Serialization.Tests.ReadJson<MyEventsListerViewModel>
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson<MyEventsListerViewModel>*' PayloadsHistogramSystem.Text.Json.Serialization.Tests.ReadJson<MyEventsListerViewModel>.DeserializeFromUtf8Bytes(Mode: Reflection)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.ContainsKeyTrue<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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsKeyTrue<String, String>*' PayloadsHistogramSystem.Collections.ContainsKeyTrue<String, String>.SortedList(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.ContainsTrueComparer<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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsTrueComparer<String>*' PayloadsHistogramSystem.Collections.ContainsTrueComparer<String>.SortedSet(Size: 512)
Description of detection logic
JIT DisasmsSystem.Collections.ContainsTrueComparer<String>.ImmutableSortedSet(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.TryGetValueTrue<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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.TryGetValueTrue<String, String>*' PayloadsHistogramSystem.Collections.TryGetValueTrue<String, String>.SortedDictionary(Size: 512)
Description of detection logic
JIT DisasmsSystem.Collections.TryGetValueTrue<String, String>.SortedList(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.CreateAddAndRemove<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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.CreateAddAndRemove<String>*' PayloadsHistogramSystem.Collections.CreateAddAndRemove<String>.SortedList(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.IndexerSet<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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IndexerSet<String>*' PayloadsHistogramSystem.Collections.IndexerSet<String>.SortedList(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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsTrue<String>*' PayloadsHistogramSystem.Collections.ContainsTrue<String>.SortedSet(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in MicroBenchmarks.Serializers.Json_FromString<MyEventsListerViewModel>
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'MicroBenchmarks.Serializers.Json_FromString<MyEventsListerViewModel>*' PayloadsHistogramMicroBenchmarks.Serializers.Json_FromString<MyEventsListerViewModel>.SystemTextJson_Reflection_
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Tests.Perf_Enum
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Enum*' PayloadsHistogramSystem.Tests.Perf_Enum.ToString_Format_Flags_Large(value: All, format: "d")
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Text.Json.Tests.Perf_Get
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Tests.Perf_Get*' PayloadsHistogramSystem.Text.Json.Tests.Perf_Get.GetDecimal
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Text.Tests.Perf_StringBuilder
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Tests.Perf_StringBuilder*' PayloadsHistogramSystem.Text.Tests.Perf_StringBuilder.ToString_MultipleSegments(length: 100)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository |
Run Information
Regressions in System.MathBenchmarks.Single
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.MathBenchmarks.Single*' PayloadsHistogramSystem.MathBenchmarks.Single.Asinh
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.Tests.Add_Remove_SteadyState<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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.Tests.Add_Remove_SteadyState<String>*' PayloadsHistogramSystem.Collections.Tests.Add_Remove_SteadyState<String>.ConcurrentStack(Count: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Buffers.Text.Tests.Utf8ParserTests
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Text.Tests.Utf8ParserTests*' PayloadsHistogramSystem.Buffers.Text.Tests.Utf8ParserTests.TryParseDecimal(value: 123456.789)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas*' PayloadsHistogramSystem.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas.Count(Pattern: "[\w]+://[^/\\s?#]+[^\\s?#]+(?:\?[^\\s#])?(?:#[^\\s])?", Options: NonBacktracking)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Text.Encodings.Web.Tests.Perf_Encoders
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Encodings.Web.Tests.Perf_Encoders*' PayloadsHistogramSystem.Text.Encodings.Web.Tests.Perf_Encoders.EncodeUtf8(arguments: UnsafeRelaxed,no <escaping /> required,16)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository |
Similar regression: dotnet/perf-autofiling-issues#18510 |
Similar issue dotnet/perf-autofiling-issues#18511 |
With Dynamic PGO enabled we would not expect a static PGO update to have much impact on benchmarks. Will have to investigate. |
Using the autofiling collator, there is very little overlap between the reports. Given this is all x64 and so using identical PGO data it seems hard to understand why we'd see this kind of pattern.
Also most of these are already mitigated, eg It looks like we took another Static PGO update on June 5, so perhaps it was static PGO both times? Looking at the worst-case for intel, this one has persisted. Note the benchmark became noisier once dynamic PGO was introduced -- I had hopes that we'd see an overall reduction in noise with dynamic PGO, but am now starting to wonder if that was just wishful thinking. The jit is still fairly sensitive to small details in the PGO data, and there is an inherent degree of randomness in live PGO data, both from nondeterminisim in the test, and deliberate nondeterminism in the collection. So, two tasks for follow-up: |
Looking at the example just above, it spends ~15% of benchmark intervals in corelib (byref write barrier, memcpy ,etc)
My guess is that #87076 invalidated native PGO for important parts of corelib, and this destablized perf for a time, and then #87090 produced matching PGO data and things went back to "normal." |
Naive q, could we imagine collecting data with and without new PGO on otherwise identical bits every time PGO data updates? That would immediately show how much of any change was the PGO update. |
Locally I consistently see
Since this benchmark is pretty noisy I think we can write this off (for now) as noise. |
As for the (implied) hypothesis that the benchmarks above all spend significant time in native code: System.Text.Json.Tests.Perf_Get.GetDecimal does not, and is still regressed, at least for x86 and amd64 (but not intel): ![]()
Finally had time to drill in. Looking now with base f4ef5c8 and diff 0071d92. I can repro a small regression locally:
There are a few surprises:
For the stale PGO, looks like the optimization repo is running ~2 week old builds? EG the update in #86698 on June 2nd brought in data from the May 23 build 20230523.4, and that build used the runtime bits from dotnet-sdk-8.0.100-preview.5.23273.15 (also May 23). So the recent PGO updates are:
The diff sync point is 02-Jun so PGO data should have been compatible once more by 06-Jun. ![]() Thus if the regression was related to static PGO we'd expect it to be fixed by now. But that does not seem to be the case. Looking at profiles it appears there is significant time spent in
Poked at this for quite a while and still have no idea why the base/diff profiles diverge. Did a second profile run with similar results; both show the diff run is invoking Here's what PerfView shows for the first BDN interval of each run BASE -- 236.986ms ![]() DIFF -- 260.216ms ![]() and PerfView's regression report ![]() (not sure what it does when there is a novel entry on one side, perhaps it attributes it to the common parent). At any rate the only difference in codegen for |
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsRun Information
Regressions in System.Collections.ContainsTrue<Int32>
ReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsTrue<Int32>*' PayloadsHistogramSystem.Collections.ContainsTrue<Int32>.ICollection(Size: 512)
Description of detection logic
JIT DisasmsSystem.Collections.ContainsTrue<Int32>.List(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Tests.Perf_StringReproGeneral Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md Payloadsgit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_String*' PayloadsHistogramSystem.Tests.Perf_String.Remove_IntInt(s: "dzsdzsDDZSDZSDZSddsz", i1: 10, i2: 1)
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.TrimStart(s: " Test")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.ToLowerInvariant(s: "TeSt")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.TrimEnd(s: "Test ")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.Trim_CharArr(s: " Te st ", c: [' ', ' '])
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.TrimStart_CharArr(s: " Test", c: [' ', ' '])
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.ToUpperInvariant(s: "test")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.Trim_CharArr(s: " Test", c: [' ', ' '])
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.Replace_String(text: "This is a very nice sentence", oldValue: "nice", newValue: "bad")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.Remove_IntInt(s: "dzsdzsDDZSDZSDZSddsz", i1: 0, i2: 8)
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.ToLowerInvariant(s: "TEST")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.Trim_CharArr(s: "Test ", c: [' ', ' '])
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.ToLowerInvariant(s: "This is a much longer piece of text that might benefit more from vectorization.")
Description of detection logic
JIT DisasmsSystem.Tests.Perf_String.Remove_IntInt(s: "dzsdzsDDZSDZSDZSddsz", i1: 7, i2: 4)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.Sort<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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.Sort<String>*' PayloadsHistogramSystem.Collections.Sort<String>.Array_ComparerStruct(Size: 512)
Description of detection logic
JIT DisasmsSystem.Collections.Sort<String>.LinqOrderByExtension(Size: 512)
Description of detection logic
JIT DisasmsSystem.Collections.Sort<String>.LinqQuery(Size: 512)
Description of detection logic
JIT DisasmsSystem.Collections.Sort<String>.Array_Comparison(Size: 512)
Description of detection logic
JIT DisasmsSystem.Collections.Sort<String>.List(Size: 512)
Description of detection logic
JIT DisasmsSystem.Collections.Sort<String>.Array(Size: 512)
Description of detection logic
JIT DisasmsSystem.Collections.Sort<String>.Array_ComparerClass(Size: 512)
Description of detection logic
JIT DisasmsDocsProfiling workflow for dotnet/runtime repository
|
In general it would be nice if the benchmark system could anticipate impactful changes and run them in isolation. I don't know how challenging that would be to arrange as the whole system is capacity limited. As is the benchmark system seems to end up batching 10 or so commits per run, though sometimes it is less and sometimes much more. We expect to see less impact from managed static PGO updates going forward as most benchmarks should now be using dynamic PGO data instead. PGO updates as a whole may still be impactful because they also update native PGO, and there are a number of benchmarks (like some of the ones here) that spend significant time in native code. |
Not seeing anything actionable here, and most tests are either noisy or are still improved over the long run. |
Run Information
Regressions in System.Collections.ContainsTrue<Int32>
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.ContainsTrue<Int32>.ICollection(Size: 512)
Description of detection logic
JIT Disasms
System.Collections.ContainsTrue<Int32>.List(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_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.Tests.Perf_String.Remove_IntInt(s: "dzsdzsDDZSDZSDZSddsz", i1: 10, i2: 1)
Description of detection logic
JIT Disasms
System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")
Description of detection logic
JIT Disasms
System.Tests.Perf_String.TrimStart(s: " Test")
Description of detection logic
JIT Disasms
System.Tests.Perf_String.ToLowerInvariant(s: "TeSt")
Description of detection logic
JIT Disasms
System.Tests.Perf_String.TrimEnd(s: "Test ")
Description of detection logic
JIT Disasms
System.Tests.Perf_String.Trim_CharArr(s: " Te st ", c: [' ', ' '])
Description of detection logic
JIT Disasms
System.Tests.Perf_String.TrimStart_CharArr(s: " Test", c: [' ', ' '])
Description of detection logic
JIT Disasms
System.Tests.Perf_String.ToUpperInvariant(s: "test")
Description of detection logic
JIT Disasms
System.Tests.Perf_String.Trim_CharArr(s: " Test", c: [' ', ' '])
Description of detection logic
JIT Disasms
System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence", oldValue: "nice", newValue: "bad")
Description of detection logic
JIT Disasms
System.Tests.Perf_String.Remove_IntInt(s: "dzsdzsDDZSDZSDZSddsz", i1: 0, i2: 8)
Description of detection logic
JIT Disasms
System.Tests.Perf_String.ToLowerInvariant(s: "TEST")
Description of detection logic
JIT Disasms
System.Tests.Perf_String.Trim_CharArr(s: "Test ", c: [' ', ' '])
Description of detection logic
JIT Disasms
System.Tests.Perf_String.ToLowerInvariant(s: "This is a much longer piece of text that might benefit more from vectorization.")
Description of detection logic
JIT Disasms
System.Tests.Perf_String.Remove_IntInt(s: "dzsdzsDDZSDZSDZSddsz", i1: 7, i2: 4)
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.Sort<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.Sort<String>.Array_ComparerStruct(Size: 512)
Description of detection logic
JIT Disasms
System.Collections.Sort<String>.LinqOrderByExtension(Size: 512)
Description of detection logic
JIT Disasms
System.Collections.Sort<String>.LinqQuery(Size: 512)
Description of detection logic
JIT Disasms
System.Collections.Sort<String>.Array_Comparison(Size: 512)
Description of detection logic
JIT Disasms
System.Collections.Sort<String>.List(Size: 512)
Description of detection logic
JIT Disasms
System.Collections.Sort<String>.Array(Size: 512)
Description of detection logic
JIT Disasms
System.Collections.Sort<String>.Array_ComparerClass(Size: 512)
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: