Repository navigation
Description
Run Information
| Name | Value |
|---|---|
| Architecture | x64 |
| OS | Windows 10.0.18362 |
| Queue | TigerWindows |
| Baseline | e3af00bf62f3280b4db46e2a01caf68a4dd5c991 |
| Compare | 49fe3b06cdfce737ea1c8964e01f2dd2a4e77d44 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Tests.Perf_Char
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 17.21 ns | 18.88 ns | 1.10 | 0.03 | False |
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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Char*'Details
Payloads
System.Tests.Perf_Char.Char_ToUpper(c: 'İ', cultureName: en-US)
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 | Windows 10.0.18362 |
| Queue | TigerWindows |
| Baseline | e3af00bf62f3280b4db46e2a01caf68a4dd5c991 |
| Compare | 49fe3b06cdfce737ea1c8964e01f2dd2a4e77d44 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Text.Perf_Ascii
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 5.97 ns | 7.36 ns | 1.23 | 0.03 | False | ||||
| 5.87 ns | 7.15 ns | 1.22 | 0.03 | False |
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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Perf_Ascii*'Details
Payloads
System.Text.Perf_Ascii.EqualsIgnoreCase_ExactlyTheSame_Chars(Size: 6)
ETL Files
Histogram
JIT Disasms
System.Text.Perf_Ascii.EqualsIgnoreCase_ExactlyTheSame_Bytes(Size: 6)
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 | Windows 10.0.18362 |
| Queue | TigerWindows |
| Baseline | e3af00bf62f3280b4db46e2a01caf68a4dd5c991 |
| Compare | 49fe3b06cdfce737ea1c8964e01f2dd2a4e77d44 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Collections.TryGetValueFalse<Int32, Int32>
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 20.47 μs | 23.18 μs | 1.13 | 0.09 | False | ||||
| 2.80 μs | 3.77 μs | 1.34 | 0.10 | True |
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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.TryGetValueFalse<Int32, Int32>*'Details
Payloads
System.Collections.TryGetValueFalse<Int32, Int32>.ImmutableDictionary(Size: 512)
ETL Files
Histogram
JIT Disasms
System.Collections.TryGetValueFalse<Int32, Int32>.Dictionary(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 | Windows 10.0.18362 |
| Queue | TigerWindows |
| Baseline | e3af00bf62f3280b4db46e2a01caf68a4dd5c991 |
| Compare | 49fe3b06cdfce737ea1c8964e01f2dd2a4e77d44 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Collections.Sort<BigStruct>
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 7.21 μs | 11.43 μs | 1.58 | 0.61 | False | ||||
| 7.51 μs | 11.76 μs | 1.56 | 0.65 | False |
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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.Sort<BigStruct>*'Details
Payloads
System.Collections.Sort<BigStruct>.List(Size: 512)
ETL Files
Histogram
JIT Disasms
System.Collections.Sort<BigStruct>.Array(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 | Windows 10.0.18362 |
| Queue | TigerWindows |
| Baseline | e3af00bf62f3280b4db46e2a01caf68a4dd5c991 |
| Compare | 49fe3b06cdfce737ea1c8964e01f2dd2a4e77d44 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Buffers.Tests.SearchValuesByteTests
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 9.34 ns | 11.14 ns | 1.19 | 0.06 | False |
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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Tests.SearchValuesByteTests*'Details
Payloads
System.Buffers.Tests.SearchValuesByteTests.IndexOfAnyExcept(Values: "abcdefABCDEF0123456789")
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 | Windows 10.0.18362 |
| Queue | TigerWindows |
| Baseline | e3af00bf62f3280b4db46e2a01caf68a4dd5c991 |
| Compare | 49fe3b06cdfce737ea1c8964e01f2dd2a4e77d44 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in PerfLabTests.CastingPerf
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 311.83 μs | 362.26 μs | 1.16 | 0.00 | True | ||||
| 311.83 μs | 363.82 μs | 1.17 | 0.00 | True | ||||
| 364.28 μs | 420.81 μs | 1.16 | 0.03 | False |
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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf*'Details
Payloads
PerfLabTests.CastingPerf.ObjFooIsObj2
ETL Files
Histogram
JIT Disasms
PerfLabTests.CastingPerf.IFooFooIsIFoo
ETL Files
Histogram
JIT Disasms
PerfLabTests.CastingPerf.FooObjCastIfIsa
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 | Windows 10.0.18362 |
| Queue | TigerWindows |
| Baseline | e3af00bf62f3280b4db46e2a01caf68a4dd5c991 |
| Compare | 49fe3b06cdfce737ea1c8964e01f2dd2a4e77d44 |
| Diff | Diff |
| Configs | CompilationMode:tiered, RunKind:micro |
Regressions in System.Numerics.Tests.Perf_VectorOf<Int16>
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio |
|---|---|---|---|---|---|---|---|---|
| 39.54 ns | 44.49 ns | 1.13 | 0.01 | True | ||||
| 39.66 ns | 44.49 ns | 1.12 | 0.02 | True |
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
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_VectorOf<Int16>*'Details
Payloads
System.Numerics.Tests.Perf_VectorOf<Int16>.DivisionOperatorBenchmark
ETL Files
Histogram
JIT Disasms
System.Numerics.Tests.Perf_VectorOf<Int16>.DivideBenchmark
ETL Files
Histogram
JIT Disasms
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository













Activity
DrewScoggins commentedon Feb 20, 2024
#98261
[-][Perf] Windows/x64: 13 Regressions on 2/13/2024 8:56:49 PM[/-][+]Performance changes related to vzeroupper emit changes[/+]DrewScoggins commentedon Feb 20, 2024
cc @tannergooding
DrewScoggins commentedon Feb 20, 2024
Regressions:
Windows AMD x64: dotnet/perf-autofiling-issues#29540, dotnet/perf-autofiling-issues#29544
Linux x64: dotnet/perf-autofiling-issues#29441, dotnet/perf-autofiling-issues#29444, dotnet/perf-autofiling-issues#29445
Improvements:
Windows x64: dotnet/perf-autofiling-issues#29530
Linux x64: dotnet/perf-autofiling-issues#29455
tannergooding commentedon Feb 21, 2024
This is effectively "by design" and we are now simply following the Architecture Optimization Manual guidance on where to emit
vzeroupper.Previously we were failing to emit it in some places where it was required, this could lead to a significant performance hit on some hardware (which multiple customers reported hitting). However, if we aren't in a scenario where the native code actually needs
vzeroupper, then some hardware will itself see a perf hit from the additional instructions needing to execute (newer hardware is typically not impacted).Correspondingly, we were emitting it in too many unnecessary places as well. Removing these unnecessary places can result in a perf increase on older hardware.
It's ultimately a set of tradeoffs, but since we're now matching the official guidance on where to emit
vzeroupper, we are in a better overall place.