Skip to content
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

.NET 6.0 Microbenchmarks Performance Study Report #59272

Closed
8 of 19 tasks
adamsitnik opened this issue Sep 17, 2021 · 1 comment
Closed
8 of 19 tasks

.NET 6.0 Microbenchmarks Performance Study Report #59272

adamsitnik opened this issue Sep 17, 2021 · 1 comment
Labels
area-Meta tenet-performance Performance related issue tracking This issue is tracking the completion of other related issues.
Milestone

Comments

@adamsitnik
Copy link
Member

adamsitnik commented Sep 17, 2021

The goal of this study was simple: ensure that we ship .NET 6 without any performance regressions, especially in the configs not covered by .NET Performance Lab.

We have not changed the methodology since last year, so if you are interested in details about methodology please read #41871.

Data

This year, we have covered more configs than ever! Namely:

  • architectures: x64, x86, arm64, arm
  • Unix: Alpine 3.13, CentOS 8, Debian 10, RHEL 7, SLES 15, OpenSUSE 15.3, Ubuntu 16.04, Ubuntu 18.04, macOS 11.4 and 11.5.2
  • Windows: 7, 8.1, 10, 11, Server 2022, Server 2022 Core
Operating System Bit Processor Name Comment
Windows 10.0.19043.1165 X64 AMD Ryzen Threadripper PRO 3945WX 12-Cores
Windows 10.0.20348 X64 AMD EPYC 7452 Windows Server 2022, VM
Windows 10.0.20348 X64 AMD EPYC 7452 Windows Server 2022 Core, VM
Windows 10.0.18363.1621 X64 Intel Xeon CPU E5-1650 v4 3.60GHz
Windows 8.1 X64 Intel Core i7-3610QM CPU 2.30GHz (Ivy Bridge)
Windows 10.0.19042.685 X64 Intel Core i7-5557U CPU 3.10GHz (Broadwell)
Windows 10.0.19043.1165 X64 Intel Core i7-6700 CPU 3.40GHz (Skylake)
Windows 10.0.22454 X64 Intel Core i7-8650U CPU 1.90GHz (Kaby Lake R)
Windows 10.0.22451 X64 Intel Core i7-8700 CPU 3.20GHz (Coffee Lake)
Windows 10.0.19042.1165 X64 Intel Core i9-9900T CPU 2.10GHz
Windows 7 SP1 X64 Intel Core2 Duo CPU T9600 2.80GHz ancient hardware
centos 8 X64 AMD EPYC 7452 VM
debian 10 X64 AMD EPYC 7452 VM
rhel 7 X64 AMD EPYC 7452 VM
sles 15 X64 AMD EPYC 7452 VM
opensuse-leap 15.3 X64 AMD EPYC 7452 VM
ubuntu 18.04 X64 Intel Xeon CPU E5-1650 v4 3.60GHz
ubuntu 18.04 X64 Intel Core i7-2720QM CPU 2.20GHz (Sandy Bridge)
alpine 3.13 X64 Intel Core i7-7700 CPU 3.60GHz (Kaby Lake)
ubuntu 16.04 Arm64 Qualcomm Centriq
Windows 10.0.19043.1165 Arm64 Microsoft SQ1 3.0 GHz
Windows 10.0.22000 Arm64 Microsoft SQ1 3.0 GHz
Windows 10.0.19043.1165 X86 AMD Ryzen Threadripper PRO 3945WX 12-Cores
Windows 10.0.18363.1621 X86 Intel Xeon CPU E5-1650 v4 3.60GHz
Windows 10.0.19043.1165 Arm Microsoft SQ1 3.0 GHz
macOS Big Sur 11.5.2 X64 Intel Core i5-4278U CPU 2.60GHz (Haswell)
macOS Big Sur 11.5.2 X64 Intel Core i7-4870HQ CPU 2.50GHz (Haswell)
macOS Big Sur 11.4 X64 Intel Core i7-5557U CPU 3.10GHz (Broadwell)

Most of the benchmarks were run on bare-metal machines, but some were executed on Azure VMs.

This would not be possible without the help from: @AndyAyersMS @BruceForstall @bwadswor @carlossanlop @danmoseley @jeffhandley @michaelgsharp @sharwell @smitpatel @vatsan-madhavan @wfurt who contributed their results and time.

Everyone interested can download the data from here and here (GitHub does not support files larger than 100 MB so I had to split .NET 5 and 6 results into two separate archives). The full report generated by the tool is available here. The full report contains also improvements, so if you read it from the end you can see the biggest perf improvements.

Moreover, the full historical data which again turned out to be extremely useful is available here.

Regressions

By design

Investigation in progress

None of the regressions reported above is critical, but in my opinion, we should have a good understanding of #59145 before we ship .NET 6.

Noise, flaky or multimodal

The following benchmarks showed up in the report generated by the tool, but were not actual regressions:

  • System.Collections.CopyTo<Int32>*
  • System.Net.Primitives.Tests.IPAddressPerformanceTests.Ctor_Span(address: [16, 32, 48, 64, 80, ...])
  • System.Buffers.Tests.ReadOnlySequenceTests<Byte>.SliceTenSegments
  • noisy for few configs, very stable and even improving for others: System.Numerics.Tests.Perf_Matrix4x4.CreateReflectionBenchmark
  • System.Memory.Span<Int32>.EndsWith(Size: 512)
  • Most likely heavily dependent on memory alignment System.Memory.Span<Int32>.BinarySearch(Size: 512) ([Perf] Regressions in System.Memory.Span<Byte>.BinarySearch #56402)
  • PerfLabTests.CastingPerf.CheckArrayIsVariantGenericInterfaceNo
  • System.Memory.ReadOnlySpan.IndexOfString(input: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", value: "x", comparisonType: InvariantCultureIgnoreCase)
  • System.Net.Security.Tests.SslStreamTests.ConcurrentReadWrite
  • PerfLabTests.DelegatePerf.MulticastDelegateInvoke(length: 1000)
  • System.Numerics.Tests.Perf_BitOperations.PopCount_uint, System.Numerics.Tests.Perf_BitOperations.LeadingZeroCount_uint: memory alignment

Big thanks to everyone involved!

@adamsitnik adamsitnik added area-Meta tenet-performance Performance related issue donotuse_Triaged tracking This issue is tracking the completion of other related issues. labels Sep 17, 2021
@dotnet-issue-labeler dotnet-issue-labeler bot added the untriaged New issue has not been triaged by the area owner label Sep 17, 2021
@adamsitnik adamsitnik removed the untriaged New issue has not been triaged by the area owner label Sep 17, 2021
@jeffhandley jeffhandley added this to the 6.0.0 milestone Oct 4, 2021
@jeffhandley
Copy link
Member

All issues that remain open have been triaged out of 6.0. Thanks for the thorough and actionable report, @adamsitnik!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-Meta tenet-performance Performance related issue tracking This issue is tracking the completion of other related issues.
Projects
No open projects
Development

No branches or pull requests

2 participants