Skip to content

[Perf] Regression in Copy and EqualityComparers #56019

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
DrewScoggins opened this issue Jul 20, 2021 · 2 comments · Fixed by #56400
Closed

[Perf] Regression in Copy and EqualityComparers #56019

DrewScoggins opened this issue Jul 20, 2021 · 2 comments · Fixed by #56400
Assignees
Labels
arch-x64 area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI os-windows tenet-performance Performance related issue tenet-performance-benchmarks Issue from performance benchmark
Milestone

Comments

@DrewScoggins
Copy link
Member

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 75fb0c3a05656bb11ea7524eb39966a504970b1d
Compare 7ab7eaa24c318cf67ff2b5bc9713b61a86c567b4
Diff Diff

Regressions in System.Collections.CopyTo<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ReadOnlySpan - Duration of single invocation 147.80 ns 168.70 ns 1.14 0.00 True
ReadOnlyMemory - Duration of single invocation 147.72 ns 170.49 ns 1.15 0.00 True
Span - Duration of single invocation 144.90 ns 168.09 ns 1.16 0.00 True
Array - Duration of single invocation 147.85 ns 169.45 ns 1.15 0.00 True

graph
graph
graph
graph
Historical Data in Reporting System

Repro

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

Payloads

Baseline
Compare

Histogram

System.Collections.CopyTo<Int32>.ReadOnlySpan(Size: 2048)


System.Collections.CopyTo<Int32>.ReadOnlyMemory(Size: 2048)


System.Collections.CopyTo<Int32>.Span(Size: 2048)


System.Collections.CopyTo<Int32>.Array(Size: 2048)


Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 75fb0c3a05656bb11ea7524eb39966a504970b1d
Compare 7ab7eaa24c318cf67ff2b5bc9713b61a86c567b4
Diff Diff

Regressions in Devirtualization.EqualityComparer

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ValueTupleCompareWrapped - Duration of single invocation 4.35 ns 7.55 ns 1.74 0.08 True
ValueTupleCompareCached - Duration of single invocation 4.36 ns 5.74 ns 1.32 0.13 False
ValueTupleCompareNoOpt - Duration of single invocation 5.48 ns 7.88 ns 1.44 0.15 False

graph
graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f netcoreapp5.0 --filter 'Devirtualization.EqualityComparer*'

Payloads

Baseline
Compare

Histogram

Devirtualization.EqualityComparer.ValueTupleCompareWrapped


Devirtualization.EqualityComparer.ValueTupleCompareCached


Devirtualization.EqualityComparer.ValueTupleCompareNoOpt


Docs

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

@DrewScoggins DrewScoggins added os-windows tenet-performance Performance related issue tenet-performance-benchmarks Issue from performance benchmark arch-x64 labels Jul 20, 2021
@ghost ghost added area-System.Collections untriaged New issue has not been triaged by the area owner labels Jul 20, 2021
@ghost
Copy link

ghost commented Jul 20, 2021

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

Issue Details

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 75fb0c3a05656bb11ea7524eb39966a504970b1d
Compare 7ab7eaa24c318cf67ff2b5bc9713b61a86c567b4
Diff Diff

Regressions in System.Collections.CopyTo<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ReadOnlySpan - Duration of single invocation 147.80 ns 168.70 ns 1.14 0.00 True
ReadOnlyMemory - Duration of single invocation 147.72 ns 170.49 ns 1.15 0.00 True
Span - Duration of single invocation 144.90 ns 168.09 ns 1.16 0.00 True
Array - Duration of single invocation 147.85 ns 169.45 ns 1.15 0.00 True

graph
graph
graph
graph
Historical Data in Reporting System

Repro

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

Payloads

Baseline
Compare

Histogram

System.Collections.CopyTo<Int32>.ReadOnlySpan(Size: 2048)


System.Collections.CopyTo<Int32>.ReadOnlyMemory(Size: 2048)


System.Collections.CopyTo<Int32>.Span(Size: 2048)


System.Collections.CopyTo<Int32>.Array(Size: 2048)


Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 75fb0c3a05656bb11ea7524eb39966a504970b1d
Compare 7ab7eaa24c318cf67ff2b5bc9713b61a86c567b4
Diff Diff

Regressions in Devirtualization.EqualityComparer

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ValueTupleCompareWrapped - Duration of single invocation 4.35 ns 7.55 ns 1.74 0.08 True
ValueTupleCompareCached - Duration of single invocation 4.36 ns 5.74 ns 1.32 0.13 False
ValueTupleCompareNoOpt - Duration of single invocation 5.48 ns 7.88 ns 1.44 0.15 False

graph
graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f netcoreapp5.0 --filter 'Devirtualization.EqualityComparer*'

Payloads

Baseline
Compare

Histogram

Devirtualization.EqualityComparer.ValueTupleCompareWrapped


Devirtualization.EqualityComparer.ValueTupleCompareCached


Devirtualization.EqualityComparer.ValueTupleCompareNoOpt


Docs

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

Author: DrewScoggins
Assignees: -
Labels:

arch-x64, area-System.Collections, os-windows, tenet-performance, tenet-performance-benchmarks, untriaged

Milestone: -

@EgorBo
Copy link
Member

EgorBo commented Jul 20, 2021

The EqualityComparer benchmarks are regressed by #50446 (seems like it regressed struct support), I'll take a look

@eiriktsarpalis eiriktsarpalis added needs-further-triage Issue has been initially triaged, but needs deeper consideration or reconsideration and removed untriaged New issue has not been triaged by the area owner labels Jul 21, 2021
@eiriktsarpalis eiriktsarpalis added this to the 6.0.0 milestone Jul 21, 2021
@ericstj ericstj added area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI and removed area-System.Collections labels Jul 26, 2021
@ghost ghost added the in-pr There is an active PR which will close this issue when it is merged label Jul 27, 2021
@EgorBo EgorBo removed the needs-further-triage Issue has been initially triaged, but needs deeper consideration or reconsideration label Jul 28, 2021
@ghost ghost removed the in-pr There is an active PR which will close this issue when it is merged label Jul 29, 2021
@ghost ghost locked as resolved and limited conversation to collaborators Aug 28, 2021
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-windows tenet-performance Performance related issue tenet-performance-benchmarks Issue from performance benchmark
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants