Skip to content

[Perf] Linux/x64: 21 Regressions on 12/3/2024 10:12:58 PM #110581

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

Closed
performanceautofiler bot opened this issue Dec 10, 2024 · 5 comments
Closed

[Perf] Linux/x64: 21 Regressions on 12/3/2024 10:12:58 PM #110581

performanceautofiler bot opened this issue Dec 10, 2024 · 5 comments
Assignees
Labels
arch-x64 area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI os-linux Linux OS (any supported distro) runtime-coreclr specific to the CoreCLR runtime tenet-performance Performance related issue tenet-performance-benchmarks Issue from performance benchmark
Milestone

Comments

@performanceautofiler
Copy link

Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in Span.Sorting

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
5.45 μs 6.85 μs 1.26 0.45 False
97.59 μs 106.44 μs 1.09 0.54 False
5.42 μs 6.27 μs 1.16 0.04 False

graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Span.Sorting*'

Span.Sorting.QuickSortSpan(Size: 512)

ETL Files

Histogram

JIT Disasms

Span.Sorting.BubbleSortArray(Size: 512)

ETL Files

Histogram

JIT Disasms

Span.Sorting.QuickSortArray(Size: 512)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Linq.Tests.Perf_Enumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
98.20 ns 104.58 ns 1.06 0.02 True
75.37 ns 90.19 ns 1.20 0.07 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Linq.Tests.Perf_Enumerable*'

System.Linq.Tests.Perf_Enumerable.Average(input: IEnumerable)

ETL Files

Histogram

JIT Disasms

System.Linq.Tests.Perf_Enumerable.SelectToList(input: Array)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in PerfLabTests.DelegatePerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
19.07 ms 20.76 ms 1.09 0.01 True

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.DelegatePerf*'

PerfLabTests.DelegatePerf.MulticastDelegateInvoke(length: 1000)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Collections.Perf_LengthBucketsFrozenDictionary

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
20.99 μs 23.25 μs 1.11 0.23 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.Perf_LengthBucketsFrozenDictionary*'

System.Collections.Perf_LengthBucketsFrozenDictionary.TryGetValue_False_FrozenDictionary(Count: 10000, ItemsPerBucket: 5)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in SeekUnroll

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
815.47 ms 950.37 ms 1.17 0.02 True
1.63 secs 1.76 secs 1.08 0.00 True
815.67 ms 949.63 ms 1.16 0.04 True

graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'SeekUnroll*'

SeekUnroll.Test(boxedIndex: 1)

ETL Files

Histogram

JIT Disasms

SeekUnroll.Test(boxedIndex: 27)

ETL Files

Histogram

JIT Disasms

SeekUnroll.Test(boxedIndex: 3)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Collections.IterateForNonGeneric<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
287.00 ns 352.71 ns 1.23 0.01 True

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForNonGeneric&lt;Int32&gt;*'

System.Collections.IterateForNonGeneric<Int32>.ArrayList(Size: 512)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Memory.Span<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
25.66 ns 36.69 ns 1.43 0.05 True
30.14 ns 45.37 ns 1.51 0.04 True

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span&lt;Int32&gt;*'

System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 33)

ETL Files

Histogram

JIT Disasms

System.Memory.Span<Int32>.IndexOfAnyFiveValues(Size: 33)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in SciMark2.kernel

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
500.70 ms 540.50 ms 1.08 0.00 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'SciMark2.kernel*'

SciMark2.kernel.benchMonteCarlo

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Diagnostics.Perf_Activity

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
3.38 μs 3.65 μs 1.08 0.02 False
3.11 μs 3.38 μs 1.09 0.06 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Diagnostics.Perf_Activity*'

System.Diagnostics.Perf_Activity.EnumerateActivityLinkTagsLarge

ETL Files

Histogram

JIT Disasms

System.Diagnostics.Perf_Activity.EnumerateActivityEventsLarge

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in PerfLabTests.LowLevelPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
869.81 μs 969.53 μs 1.11 0.24 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.LowLevelPerf*'

PerfLabTests.LowLevelPerf.IntegerFormatting

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in Span.IndexerBench

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
721.37 ns 843.08 ns 1.17 0.01 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Span.IndexerBench*'

Span.IndexerBench.CoveredIndex3(length: 1024)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in PerfLabTests.CastingPerf2.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
81.40 μs 162.75 μs 2.00 0.01 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf2.CastingPerf*'

PerfLabTests.CastingPerf2.CastingPerf.ScalarValueTypeObj

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Collections.IterateForEachNonGeneric<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
1.11 μs 1.35 μs 1.21 0.08 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEachNonGeneric&lt;String&gt;*'

System.Collections.IterateForEachNonGeneric<String>.ArrayList(Size: 512)

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository


Run Information

Name Value
Architecture x64
OS ubuntu 22.04
Queue ViperUbuntu
Baseline efd5a63ac0681203c1a05e667669e145a188182d
Compare 7dbe407ee8f709e7d37e81e185605d328208bc72
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in Benchstone.BenchF.Trap

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
89.98 ms 102.33 ms 1.14 0.04 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

git clone https://github.com/dotnet/performance.git
python3 .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Benchstone.BenchF.Trap*'

Benchstone.BenchF.Trap.Test

ETL Files

Histogram

JIT Disasms

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler performanceautofiler bot added arch-x64 os-linux Linux OS (any supported distro) runtime-coreclr specific to the CoreCLR runtime untriaged New issue has not been triaged by the area owner labels Dec 10, 2024
@LoopedBard3 LoopedBard3 transferred this issue from dotnet/perf-autofiling-issues Dec 10, 2024
@dotnet-issue-labeler dotnet-issue-labeler bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Dec 10, 2024
@LoopedBard3
Copy link
Member

LoopedBard3 commented Dec 10, 2024

Caused by #110277 from range: 226ee03...60a2924. FYI @amanasifkhalid

Related Regressions:

Improvements:

@LoopedBard3 LoopedBard3 added tenet-performance Performance related issue tenet-performance-benchmarks Issue from performance benchmark labels Dec 10, 2024
@jeffschwMSFT jeffschwMSFT added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Dec 11, 2024
Copy link
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

@vcsjones vcsjones removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Dec 16, 2024
@JulieLeeMSFT JulieLeeMSFT removed the untriaged New issue has not been triaged by the area owner label Dec 17, 2024
@JulieLeeMSFT JulieLeeMSFT added this to the 10.0.0 milestone Dec 17, 2024
@amanasifkhalid
Copy link
Member

Here's a table of the regression reports from every platform except Tiger Windows/Ubuntu, to filter out JCC errata:

Notes Recent Score Orig Score Ubuntu arm64 Surface Windows Viper Ubuntu Viper Windows Benchmark
1.27 1.21 1.27
1.21
System.Collections.IterateForEachNonGeneric(String).ArrayList(Size: 512)
1.20 1.20 1.17
1.16
1.24
1.25
Span.Sorting.QuickSortArray(Size: 512)
1.19 1.20 1.19
1.20
System.Tests.Perf_Char.Char_ToUpperInvariant(input: "Hello World!")
1.17 1.15 1.17
1.15
System.Collections.IterateForEach(Int32).ImmutableSortedSet(Size: 512)
1.17 1.19 1.17
1.19
System.Collections.IterateForEach(String).ImmutableSortedSet(Size: 512)
1.15 1.18 1.04
1.08
1.21
1.26
1.21
1.21
Span.Sorting.QuickSortSpan(Size: 512)
1.15 1.12 1.24
1.17
1.06
1.07
SeekUnroll.Test(boxedIndex: 1)
1.14 1.15 1.16
1.16
1.13
1.14
SeekUnroll.Test(boxedIndex: 3)
1.14 1.07 1.14
1.07
System.Collections.IndexerSet(Int32).SortedDictionary(Size: 512)
1.13 1.14 1.13
1.14
Benchstone.BenchF.Trap.Test
1.12 1.09 1.12
1.09
System.Text.RegularExpressions.Tests.Perf_Regex_Industry_BoostDocs_Simple.IsMatch(Id: 3, Options: NonBacktracking)
1.12 1.07 1.12
1.07
System.Text.RegularExpressions.Tests.Perf_Regex_Industry_BoostDocs_Simple.IsMatch(Id: 4, Options: NonBacktracking)
1.12 1.25 1.00
1.25
1.25
1.25
System.Collections.IterateForNonGeneric(String).ArrayList(Size: 512)
1.11 1.23 1.00
1.24
1.23
1.23
System.Collections.IterateForNonGeneric(Int32).ArrayList(Size: 512)
1.10 1.10 1.10
1.10
Benchmark.GetChildKeysTests.AddChainedConfigurationEmpty
1.10 1.09 1.10
1.09
PerfLabTests.DelegatePerf.MulticastDelegateInvoke(length: 1000)
1.10 1.11 1.10
1.11
System.Collections.Perf_LengthBucketsFrozenDictionary.TryGetValue_False_FrozenDictionary(Count: 10000, ItemsPerBucket: 5)
1.07 1.13 1.09
1.09
1.05
1.17
MicroBenchmarks.Serializers.Xml_ToStream(IndexViewModel).XmlSerializer_
1.06 1.06 1.06
1.06
1.07
1.07
System.Linq.Tests.Perf_Enumerable.Average(input: IEnumerable)
1.05 1.21 1.08
1.08
1.11
1.09
0.97
1.51
System.Memory.Span(Int32).IndexOfAnyFiveValues(Size: 33)
1.05 1.11 1.05
1.11
PerfLabTests.LowLevelPerf.IntegerFormatting
1.04 1.09 1.04
1.09
Span.Sorting.BubbleSortArray(Size: 512)
1.01 1.08 1.01
1.08
SciMark2.kernel.benchMonteCarlo
1.01 1.13 1.01
1.13
System.Collections.ContainsTrue(Int32).HashSet(Size: 512)
1.01 1.08 1.01
1.08
1.00
1.08
SeekUnroll.Test(boxedIndex: 27)
1.00 1.25 1.09
1.10
0.92
1.43
System.Memory.Span(Int32).IndexOfAnyFourValues(Size: 33)
1.00 1.14 1.00
1.14
System.Text.Json.Document.Tests.Perf_EnumerateObject.EnumerateProperties(TestCase: StringProperties)
1.00 1.08 1.00
1.08
System.Linq.Tests.Perf_Enumerable.AppendPrepend(input: IEnumerable)
1.00 1.20 1.00
1.20
Benchstone.BenchF.NewtR.Test
1.00 1.14 1.00
1.14
System.Collections.IterateFor(Int32).IList(Size: 512)
1.00 1.17 1.00
1.17
Span.IndexerBench.CoveredIndex3(length: 1024)
0.99 1.20 0.99
1.20
System.Collections.TryGetValueTrue(SmallClass, SmallClass).ImmutableSortedDictionary(Size: 512)
0.98 1.15 1.00
1.08
1.00
1.08
0.94
1.32
System.Globalization.Tests.StringSearch.LastIndexOf_Word_NotFound(Options: (en-US, OrdinalIgnoreCase, False))
0.97 1.07 0.97
1.07
SeekUnroll.Test(boxedIndex: 11)
0.97 1.11 0.97
1.11
System.Collections.IndexerSet(String).SortedList(Size: 512)
0.96 1.14 0.96
1.14
System.Collections.ContainsKeyTrue(String, String).ImmutableDictionary(Size: 512)
0.95 1.20 0.95
1.20
System.Collections.TryGetValueTrue(SmallClass, SmallClass).ImmutableDictionary(Size: 512)
0.95 1.37 0.95
1.37
System.Memory.Span(Byte).BinarySearch(Size: 4)
0.85 1.20 0.85
1.20
System.Linq.Tests.Perf_Enumerable.SelectToList(input: Array)
0.63 1.09 0.63
1.09
System.Diagnostics.Perf_Activity.EnumerateActivityEventsLarge
0.34 1.08 0.34
1.08
System.Diagnostics.Perf_Activity.EnumerateActivityLinkTagsLarge

I've investigated some of the lingering regressions as part of #113108 (comment), and fixing many of these would require changing how 3-opt models the cost of loop backedges. I don't have plans to tweak the cost model at this point, since any improvements that would bring would be somwhat offset by new regressions. In a future release, we may consider modeling more information about each branch other than its weight, such as whether it is (un)conditionally taken or how aligning it would change the lengths of other branches. To fix these layout regressions where we fail to model some microarchitectural trait in .NET 10, we can pursue some of the other planned flow optimization improvements documented in #107749.

@amanasifkhalid
Copy link
Member

Here's a similar table for the improvement reports:

Notes Recent Score Orig Score Ubuntu arm64 Viper Ubuntu Viper Windows Benchmark
1.05 0.88 1.05
0.88
System.Collections.IndexerSet(Int32).SortedDictionary(Size: 512)
1.02 0.64 1.02
0.64
Benchstone.BenchI.IniArray.Test
1.01 0.92 1.01
0.92
System.Collections.Sort(IntStruct).List(Size: 512)
1.00 0.66 1.00
0.66
Loops.StrengthReduction.SumS3ArrayStrengthReduced
1.00 0.92 1.00
0.92
System.Collections.ContainsTrueComparer(String).HashSet(Size: 512)
1.00 0.92 1.00
0.92
System.Linq.Tests.Perf_Enumerable.SelectToList(input: IList)
0.99 0.93 0.99
0.93
System.Text.Json.Tests.Perf_Reader.ReadReturnBytes(IsDataCompact: True, TestCase: LotsOfStrings)
0.95 0.94 0.95
0.94
System.Collections.CtorFromCollection(Int32).SortedList(Size: 512)
0.94 0.95 0.94
0.95
System.Collections.Tests.Perf_PriorityQueue(Int32, Int32).Enumerate(Size: 1000)
0.94 0.70 0.94
0.70
System.Collections.TryGetValueFalse(SmallClass, SmallClass).ImmutableDictionary(Size: 512)
0.92 0.91 0.92
0.91
System.Linq.Tests.Perf_Enumerable.Skip_One(input: IEnumerable)
0.91 0.91 0.91
0.91
System.Collections.TryGetValueTrue(Int32, Int32).SortedList(Size: 512)
0.91 0.78 0.76
0.71
1.09
0.85
Benchstone.BenchI.HeapSort.Test
0.91 0.86 0.91
0.86
System.Collections.TryGetValueFalse(String, String).ImmutableDictionary(Size: 512)
0.91 0.89 0.99
0.90
0.84
0.89
System.Collections.ContainsKeyTrue(Int32, Int32).SortedDictionary(Size: 512)
0.90 0.83 0.90
0.83
System.Collections.TryGetValueTrue(BigStruct, BigStruct).SortedList(Size: 512)
0.89 0.88 0.89
0.88
System.Collections.IterateForEachNonGeneric(Int32).ArrayList(Size: 512)
0.89 0.89 0.89
0.89
System.IO.Tests.Perf_Path.GetFullPathForLegacyLength
0.89 0.89 0.89
0.89
SeekUnroll.Test(boxedIndex: 1)
0.89 0.89 0.89
0.89
SeekUnroll.Test(boxedIndex: 27)
0.89 0.89 0.89
0.89
SeekUnroll.Test(boxedIndex: 19)
0.89 0.89 0.89
0.89
SeekUnroll.Test(boxedIndex: 3)
0.89 0.90 0.89
0.90
System.Collections.Sort(BigStruct).Array_Comparison(Size: 512)
0.87 0.85 0.87
0.85
System.Collections.Sort(BigStruct).Array_ComparerClass(Size: 512)
0.87 0.85 0.87
0.85
System.Collections.ContainsKeyTrue(Int32, Int32).SortedList(Size: 512)
0.87 0.87 0.93
0.92
0.81
0.82
System.Collections.TryGetValueTrue(Int32, Int32).SortedDictionary(Size: 512)
0.86 0.84 0.86
0.84
System.Collections.IterateFor(Int32).ImmutableList(Size: 512)
0.85 0.79 0.85
0.79
System.Collections.IterateFor(String).ImmutableSortedSet(Size: 512)
0.85 0.84 0.85
0.84
System.Collections.IterateFor(Int32).ImmutableSortedSet(Size: 512)
0.84 0.86 0.90
0.90
0.78
0.82
System.Linq.Tests.Perf_Enumerable.LastWithPredicate_FirstElementMatches(input: IOrderedEnumerable)
0.83 0.85 0.83
0.85
System.Tests.Perf_Version.TryFormat2
0.83 0.82 0.83
0.82
System.Net.Tests.Perf_WebUtility.Decode_NoDecodingRequired
0.82 0.86 0.82
0.86
System.MathBenchmarks.Double.ScaleB
0.82 0.87 0.82
0.87
System.Collections.ContainsTrue(Int32).ImmutableHashSet(Size: 512)
0.82 0.79 0.82
0.79
System.Collections.ContainsFalse(Int32).ImmutableHashSet(Size: 512)
0.80 0.80 0.80
0.80
System.Collections.ContainsTrueComparer(Int32).SortedSet(Size: 512)
0.79 0.81 0.79
0.81
System.Collections.ContainsTrueComparer(Int32).ImmutableHashSet(Size: 512)
0.78 0.78 0.78
0.78
System.Collections.CreateAddAndClear(String).ConcurrentQueue(Size: 512)
0.77 0.78 0.77
0.78
SciMark2.kernel.benchmarkLU
0.73 0.86 0.73
0.86
Span.Sorting.BubbleSortSpan(Size: 512)
0.72 0.75 0.76
0.74
0.67
0.76
System.Memory.Span(Int32).BinarySearch(Size: 4)
0.71 0.50 1.00
0.50
0.50
0.50
PerfLabTests.CastingPerf2.CastingPerf.IntObj
0.70 0.73 0.84
0.79
0.73
0.72
0.57
0.68
System.Memory.Span(Int32).BinarySearch(Size: 33)
0.69 0.81 0.69
0.81
System.Collections.IterateForEach(Int32).ImmutableHashSet(Size: 512)
0.69 0.70 0.86
0.82
0.73
0.76
0.51
0.56
System.Memory.Span(Int32).BinarySearch(Size: 512)
0.50 0.50 0.50
0.50
PerfLabTests.CastingPerf2.CastingPerf.ScalarValueTypeObj
0.36 0.36 0.36
0.36
Struct.GSeq.FilterSkipMapSum
0.34 0.92 0.34
0.92
System.Diagnostics.Perf_Activity.EnumerateActivityTagObjectsLarge

@amanasifkhalid
Copy link
Member

Closing this since I don't have any remaining block layout work planned for .NET 10.

@github-actions github-actions bot locked and limited conversation to collaborators May 2, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
arch-x64 area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI os-linux Linux OS (any supported distro) runtime-coreclr specific to the CoreCLR runtime tenet-performance Performance related issue tenet-performance-benchmarks Issue from performance benchmark
Projects
None yet
Development

No branches or pull requests

5 participants