Skip to content

[Perf] Linux/x64: 19 Regressions on 3/20/2025 1:07:06 AM +00:00 #113912

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

Open
performanceautofiler bot opened this issue Mar 25, 2025 · 13 comments
Open

[Perf] Linux/x64: 19 Regressions on 3/20/2025 1:07:06 AM +00:00 #113912

performanceautofiler bot opened this issue Mar 25, 2025 · 13 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 TigerUbuntu
Baseline 522637540793a45275ac6a3136a0cd245264564c
Compare f28528958c15a3b6a6d75970e09ec8d15322586a
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Buffers.Text.Tests.Utf8ParserTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
7.42 ns 9.64 ns 1.30 0.03 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.Buffers.Text.Tests.Utf8ParserTests*'

System.Buffers.Text.Tests.Utf8ParserTests.TryParseUInt32Hex(value: FFFFFFFFFFFFFFFF)

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 TigerUbuntu
Baseline 522637540793a45275ac6a3136a0cd245264564c
Compare f28528958c15a3b6a6d75970e09ec8d15322586a
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
112.84 μs 133.82 μs 1.19 0.01 False
111.48 μs 133.83 μs 1.20 0.03 False
200.77 μs 222.73 μs 1.11 0.02 False
111.70 μs 133.90 μs 1.20 0.02 False

graph
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 'PerfLabTests.LowLevelPerf*'

PerfLabTests.LowLevelPerf.GenericGenericMethod

ETL Files

Histogram

JIT Disasms

PerfLabTests.LowLevelPerf.GenericClassGenericStaticMethod

ETL Files

Histogram

JIT Disasms

PerfLabTests.LowLevelPerf.StaticDelegate

ETL Files

Histogram

JIT Disasms

PerfLabTests.LowLevelPerf.ClassVirtualMethod

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 TigerUbuntu
Baseline 522637540793a45275ac6a3136a0cd245264564c
Compare f28528958c15a3b6a6d75970e09ec8d15322586a
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
9.60 ns 11.54 ns 1.20 0.04 False
149.36 ns 171.73 ns 1.15 0.03 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.Memory.Span&lt;Int32&gt;*'

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

ETL Files

Histogram

JIT Disasms

System.Memory.Span<Int32>.IndexOfAnyTwoValues(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 TigerUbuntu
Baseline 522637540793a45275ac6a3136a0cd245264564c
Compare f28528958c15a3b6a6d75970e09ec8d15322586a
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Collections.IndexerSetReverse<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
524.73 ns 574.25 ns 1.09 0.03 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.IndexerSetReverse&lt;Int32&gt;*'

System.Collections.IndexerSetReverse<Int32>.List(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 TigerUbuntu
Baseline 522637540793a45275ac6a3136a0cd245264564c
Compare f28528958c15a3b6a6d75970e09ec8d15322586a
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Collections.ContainsKeyFalse<Int32, Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
1.58 μs 1.85 μs 1.17 0.11 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.ContainsKeyFalse&lt;Int32, Int32&gt;*'

System.Collections.ContainsKeyFalse<Int32, Int32>.ConcurrentDictionary(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 TigerUbuntu
Baseline 522637540793a45275ac6a3136a0cd245264564c
Compare f28528958c15a3b6a6d75970e09ec8d15322586a
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Collections.Tests.Perf_BitArray

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
155.19 ns 181.80 ns 1.17 0.01 False
215.32 ns 242.45 ns 1.13 0.04 False
155.01 ns 182.69 ns 1.18 0.02 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 'System.Collections.Tests.Perf_BitArray*'

System.Collections.Tests.Perf_BitArray.BitArrayByteArrayCtor(Size: 512)

ETL Files

Histogram

JIT Disasms

System.Collections.Tests.Perf_BitArray.BitArraySetLengthGrow(Size: 512)

ETL Files

Histogram

JIT Disasms

System.Collections.Tests.Perf_BitArray.BitArraySetLengthShrink(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 TigerUbuntu
Baseline 522637540793a45275ac6a3136a0cd245264564c
Compare f28528958c15a3b6a6d75970e09ec8d15322586a
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
638.74 ns 696.39 ns 1.09 0.01 False
662.00 ns 1.10 μs 1.67 0.00 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 'Span.IndexerBench*'

Span.IndexerBench.CoveredIndex2(length: 1024)

ETL Files

Histogram

JIT Disasms

Span.IndexerBench.CoveredIndex1(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 TigerUbuntu
Baseline 522637540793a45275ac6a3136a0cd245264564c
Compare f28528958c15a3b6a6d75970e09ec8d15322586a
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Collections.AddGivenSize<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
679.93 ns 810.37 ns 1.19 0.08 False
1.02 μs 1.13 μs 1.11 0.04 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.Collections.AddGivenSize&lt;Int32&gt;*'

System.Collections.AddGivenSize<Int32>.Stack(Size: 512)

ETL Files

Histogram

JIT Disasms

System.Collections.AddGivenSize<Int32>.Queue(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 TigerUbuntu
Baseline 522637540793a45275ac6a3136a0cd245264564c
Compare f28528958c15a3b6a6d75970e09ec8d15322586a
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
327.33 ms 354.25 ms 1.08 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 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig*'

System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: ".{2,4}(Tom|Sawyer|Huckleberry|Finn)", Options: Compiled)

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 TigerUbuntu
Baseline 522637540793a45275ac6a3136a0cd245264564c
Compare f28528958c15a3b6a6d75970e09ec8d15322586a
Diff Diff
Configs CompilationMode:tiered, RunKind:micro

Regressions in System.Tests.Perf_UInt32

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio
7.94 ns 9.77 ns 1.23 0.11 False
9.62 ns 10.98 ns 1.14 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.Tests.Perf_UInt32*'

System.Tests.Perf_UInt32.ParseSpan(value: "0")

ETL Files

Histogram

JIT Disasms

System.Tests.Perf_UInt32.Parse(value: "12345")

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 Mar 25, 2025
@LoopedBard3 LoopedBard3 transferred this issue from dotnet/perf-autofiling-issues Mar 26, 2025
@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 Mar 26, 2025
@LoopedBard3 LoopedBard3 added tenet-performance Performance related issue tenet-performance-benchmarks Issue from performance benchmark labels Mar 26, 2025
@EgorBo
Copy link
Member

EgorBo commented Mar 26, 2025

@EgorBot -intel -amd -commit 254b55a vs previous --filter System.Collections.Tests.Perf_BitArray.BitArrayByteArrayCtor

@EgorBo
Copy link
Member

EgorBo commented Mar 26, 2025

Does not look like my change

@EgorBo
Copy link
Member

EgorBo commented Mar 26, 2025

@EgorBot -intel -amd -commit 0666ad4 vs previous --filter System.Collections.Tests.Perf_BitArray.BitArrayByteArrayCtor

@EgorBo
Copy link
Member

EgorBo commented Mar 26, 2025

@EgorBot -intel -amd -commit 48ace18 vs previous --filter System.Collections.Tests.Perf_BitArray.BitArrayByteArrayCtor

@EgorBo
Copy link
Member

EgorBo commented Mar 26, 2025

@EgorBot -intel -amd -nonativepgo -commit 0666ad4 vs previous --filter System.Collections.Tests.Perf_BitArray.BitArrayByteArrayCtor

@EgorBo
Copy link
Member

EgorBo commented Mar 26, 2025

Confirmed that it is same issue as #113108 (regressed by #113491, see EgorBot/runtime-utils#332 (comment)) cc @amanasifkhalid

@EgorBo
Copy link
Member

EgorBo commented Mar 26, 2025

@amanasifkhalid do we need to keep this one open or #113108 is enough?

@EgorBo
Copy link
Member

EgorBo commented Mar 26, 2025

NOTE: seems like it's Intel specific, so likely the JCC erratum

@amanasifkhalid
Copy link
Member

@EgorBo I'd like to keep this open for now, just so I can include it in my tables of regressions/improvements. I'll close this if I don't find anything actionable.

@EgorBo EgorBo added area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI and removed needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Mar 26, 2025
Copy link
Contributor

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

@JulieLeeMSFT JulieLeeMSFT removed the untriaged New issue has not been triaged by the area owner label Mar 26, 2025
@JulieLeeMSFT JulieLeeMSFT added this to the 10.0.0 milestone Mar 26, 2025
@amanasifkhalid
Copy link
Member

I'm not sure if it'll make it into .NET 10, but I think these regressions are a good motivator for improving loop inversion so we don't have to rely on ad-hoc fgOptimizeBranch passes, which (as seen above) sometimes make loop structures amenable to block layout, and sometimes don't. So I'm going to keep this issue around for now.

@amanasifkhalid
Copy link
Member

I'm not sure if it'll make it into .NET 10, but I think these regressions are a good motivator for improving loop inversion

I don't know if we'll get to graph-based loop inversion in .NET 10. Moving to future.

@amanasifkhalid amanasifkhalid modified the milestones: 10.0.0, Future Apr 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
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

4 participants