Skip to content

[Perf] Windows/x64: 6 Regressions on 12/3/2022 11:06:27 AM #10342

Open

Description

@performanceautofiler

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 02c144afac6efe0f716e64ea0a701e2eec995866
Compare 4ce23f46ed20683a1b6649e9a43e09459007c9d8
Diff Diff

Regressions in System.Collections.IterateForEach<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ImmutableQueue - Duration of single invocation 4.19 μs 4.83 μs 1.15 0.14 False

graph
Test Report

Repro

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

Payloads

Baseline
Compare

Histogram

System.Collections.IterateForEach<String>.ImmutableQueue(Size: 512)


Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 4.831678030430256 > 4.569087437434715.
IsChangePoint: Marked as a change because one of 11/2/2022 9:35:40 AM, 11/16/2022 11:42:33 AM, 12/3/2022 7:24:45 AM, 12/6/2022 5:44:36 AM falls between 11/27/2022 4:37:47 PM and 12/6/2022 5:44:36 AM.
IsRegressionStdDev: Marked as regression because -7.534405755987455 (T) = (0 -5286.684666789541) / Math.Sqrt((74520.94676872541 / (43)) + (64010.42986593407 / (9))) is less than -2.0085591120996775 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (9) - 2, .025) and -0.15478274403092207 = (4578.077299921947 - 5286.684666789541) / 4578.077299921947 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

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

### Run Information
Architecture x64
OS Windows 10.0.18362
Baseline 02c144afac6efe0f716e64ea0a701e2eec995866
Compare 4ce23f46ed20683a1b6649e9a43e09459007c9d8
Diff Diff

Regressions in Benchmark.GetChildKeysTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
AddChainedConfigurationEmpty - Duration of single invocation 35.01 ms 39.31 ms 1.12 0.08 False Trace Trace

graph
Test Report

Repro

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

Payloads

Baseline
Compare

Histogram

Benchmark.GetChildKeysTests.AddChainedConfigurationEmpty


Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 39.31305777777778 > 36.73220634615385.
IsChangePoint: Marked as a change because one of 11/2/2022 9:35:40 AM, 12/3/2022 7:24:45 AM, 12/6/2022 5:44:36 AM falls between 11/27/2022 4:37:47 PM and 12/6/2022 5:44:36 AM.
IsRegressionStdDev: Marked as regression because -16.61203418786294 (T) = (0 -39127230.82010582) / Math.Sqrt((2099943413049.9539 / (43)) + (11820056502.446426 / (9))) is less than -2.0085591120996775 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (9) - 2, .025) and -0.1050664998702658 = (35407127.82868663 - 39127230.82010582) / 35407127.82868663 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; Benchmark.GetChildKeysTests.AddChainedConfigurationEmpty()
       sub       rsp,28
       mov       rdx,rcx
       mov       rcx,[rdx+10]
       mov       rdx,[rdx+28]
       xor       r8d,r8d
       cmp       [rcx],ecx
       call      qword ptr [7FFE57C8C928]; Microsoft.Extensions.Configuration.ChainedConfigurationProvider.GetChildKeys(System.Collections.Generic.IEnumerable`1<System.String>, System.String)
       nop
       add       rsp,28
       ret
; Total bytes of code 32
; Microsoft.Extensions.Configuration.ChainedConfigurationProvider.GetChildKeys(System.Collections.Generic.IEnumerable`1<System.String>, System.String)
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,40
       lea       rbp,[rsp+60]
       xor       eax,eax
       mov       [rbp-30],rax
       mov       [rbp-28],rax
       mov       [rbp-40],rsp
       mov       rsi,rdx
       test      r8,r8
       je        short M01_L00
       mov       rcx,[rcx+8]
       mov       rdx,r8
       mov       r11,7FFE57600850
       call      qword ptr [r11]
       mov       rdi,rax
       jmp       short M01_L01
M01_L00:
       mov       rdi,[rcx+8]
M01_L01:
       mov       rcx,offset MT_System.Collections.Generic.List`1[[System.String, System.Private.CoreLib]]
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       mov       rdx,10441801F08
       mov       rdx,[rdx]
       lea       rcx,[rbx+8]
       call      CORINFO_HELP_ASSIGN_REF
       mov       rcx,rdi
       mov       r11,7FFE57600820
       call      qword ptr [r11]
       mov       rcx,rax
       mov       r11,7FFE57600828
       call      qword ptr [r11]
       mov       rdi,rax
       mov       [rbp-38],rdi
       mov       rcx,rdi
       mov       r11,7FFE57600830
       call      qword ptr [r11]
       test      eax,eax
       je        short M01_L05
M01_L02:
       mov       rcx,rdi
       mov       r11,7FFE57600838
       call      qword ptr [r11]
       mov       rcx,rax
       mov       r11,7FFE57600840
       call      qword ptr [r11]
       mov       r8,rax
       inc       dword ptr [rbx+14]
       mov       rcx,[rbx+8]
       mov       edx,[rbx+10]
       cmp       [rcx+8],edx
       jbe       short M01_L03
       lea       eax,[rdx+1]
       mov       [rbx+10],eax
       movsxd    rdx,edx
       call      CORINFO_HELP_ARRADDR_ST
       jmp       short M01_L04
M01_L03:
       mov       rcx,rbx
       mov       rdx,r8
       call      qword ptr [7FFE578AD198]; System.Collections.Generic.List`1[[System.__Canon, System.Private.CoreLib]].AddWithResize(System.__Canon)
M01_L04:
       mov       rcx,rdi
       mov       r11,7FFE57600830
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L02
M01_L05:
       mov       rcx,rdi
       mov       r11,7FFE57600848
       call      qword ptr [r11]
       mov       rcx,rbx
       mov       rdx,rsi
       call      qword ptr [7FFE578AD1C8]; System.Collections.Generic.List`1[[System.__Canon, System.Private.CoreLib]].AddRange(System.Collections.Generic.IEnumerable`1<System.__Canon>)
       mov       rdx,10441808568
       mov       r8,[rdx]
       cmp       dword ptr [rbx+10],1
       jle       short M01_L07
       mov       rax,[rbx+8]
       mov       r14d,[rbx+10]
       test      rax,rax
       je        short M01_L08
       mov       rdx,offset MT_System.String[]
       cmp       [rax],rdx
       jne       short M01_L09
       cmp       [rax+8],r14d
       jb        short M01_L10
       add       rax,10
M01_L06:
       mov       [rbp-30],rax
       mov       [rbp-28],r14d
       lea       rdx,[rbp-30]
       mov       rcx,offset MT_System.Collections.Generic.ArraySortHelper`1[[System.String, System.Private.CoreLib]]
       call      qword ptr [7FFE579AF4E0]; System.Collections.Generic.ArraySortHelper`1[[System.__Canon, System.Private.CoreLib]].Sort(System.Span`1<System.__Canon>, System.Comparison`1<System.__Canon>)
M01_L07:
       inc       dword ptr [rbx+14]
       mov       rax,rbx
       add       rsp,40
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M01_L08:
       test      r14d,r14d
       jne       short M01_L10
       xor       eax,eax
       xor       r14d,r14d
       jmp       short M01_L06
M01_L09:
       call      qword ptr [7FFE57AED018]
       int       3
M01_L10:
       call      qword ptr [7FFE57AED060]
       int       3
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+60]
       cmp       qword ptr [rbp-38],0
       je        short M01_L11
       mov       rcx,[rbp-38]
       mov       r11,7FFE57600848
       call      qword ptr [r11]
M01_L11:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
; Total bytes of code 478

Compare Jit Disasm

; Benchmark.GetChildKeysTests.AddChainedConfigurationEmpty()
       sub       rsp,28
       mov       rdx,rcx
       mov       rcx,[rdx+10]
       mov       rdx,[rdx+28]
       xor       r8d,r8d
       cmp       [rcx],ecx
       call      qword ptr [7FFF7DD84CF8]; Microsoft.Extensions.Configuration.ChainedConfigurationProvider.GetChildKeys(System.Collections.Generic.IEnumerable`1<System.String>, System.String)
       nop
       add       rsp,28
       ret
; Total bytes of code 32
; Microsoft.Extensions.Configuration.ChainedConfigurationProvider.GetChildKeys(System.Collections.Generic.IEnumerable`1<System.String>, System.String)
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,40
       lea       rbp,[rsp+60]
       xor       eax,eax
       mov       [rbp-30],rax
       mov       [rbp-28],rax
       mov       [rbp-40],rsp
       mov       rsi,rdx
       test      r8,r8
       je        short M01_L00
       mov       rcx,[rcx+8]
       mov       rdx,r8
       mov       r11,7FFF7D6B08E0
       call      qword ptr [r11]
       mov       rdi,rax
       jmp       short M01_L01
M01_L00:
       mov       rdi,[rcx+8]
M01_L01:
       mov       rcx,offset MT_System.Collections.Generic.List`1[[System.String, System.Private.CoreLib]]
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       mov       rdx,1F256C01F10
       mov       rdx,[rdx]
       lea       rcx,[rbx+8]
       call      CORINFO_HELP_ASSIGN_REF
       mov       rcx,rdi
       mov       r11,7FFF7D6B08B0
       call      qword ptr [r11]
       mov       rcx,rax
       mov       r11,7FFF7D6B08B8
       call      qword ptr [r11]
       mov       rdi,rax
       mov       [rbp-38],rdi
       mov       rcx,rdi
       mov       r11,7FFF7D6B08C0
       call      qword ptr [r11]
       test      eax,eax
       je        short M01_L05
M01_L02:
       mov       rcx,rdi
       mov       r11,7FFF7D6B08C8
       call      qword ptr [r11]
       mov       rcx,rax
       mov       r11,7FFF7D6B08D0
       call      qword ptr [r11]
       mov       r8,rax
       inc       dword ptr [rbx+14]
       mov       rcx,[rbx+8]
       mov       edx,[rbx+10]
       cmp       [rcx+8],edx
       jbe       short M01_L03
       lea       eax,[rdx+1]
       mov       [rbx+10],eax
       movsxd    rdx,edx
       call      CORINFO_HELP_ARRADDR_ST
       jmp       short M01_L04
M01_L03:
       mov       rcx,rbx
       mov       rdx,r8
       call      qword ptr [7FFF7D95F198]; System.Collections.Generic.List`1[[System.__Canon, System.Private.CoreLib]].AddWithResize(System.__Canon)
M01_L04:
       mov       rcx,rdi
       mov       r11,7FFF7D6B08C0
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L02
M01_L05:
       mov       rcx,rdi
       mov       r11,7FFF7D6B08D8
       call      qword ptr [r11]
       mov       rcx,rbx
       mov       rdx,rsi
       call      qword ptr [7FFF7D95F1C8]; System.Collections.Generic.List`1[[System.__Canon, System.Private.CoreLib]].AddRange(System.Collections.Generic.IEnumerable`1<System.__Canon>)
       mov       rdx,1F256C08568
       mov       r8,[rdx]
       cmp       dword ptr [rbx+10],1
       jle       short M01_L07
       mov       rax,[rbx+8]
       mov       r14d,[rbx+10]
       test      rax,rax
       je        short M01_L08
       mov       rdx,offset MT_System.String[]
       cmp       [rax],rdx
       jne       short M01_L09
       cmp       [rax+8],r14d
       jb        short M01_L10
       add       rax,10
M01_L06:
       mov       [rbp-30],rax
       mov       [rbp-28],r14d
       lea       rdx,[rbp-30]
       mov       rcx,offset MT_System.Collections.Generic.ArraySortHelper`1[[System.String, System.Private.CoreLib]]
       call      qword ptr [7FFF7DA834E0]; System.Collections.Generic.ArraySortHelper`1[[System.__Canon, System.Private.CoreLib]].Sort(System.Span`1<System.__Canon>, System.Comparison`1<System.__Canon>)
M01_L07:
       inc       dword ptr [rbx+14]
       mov       rax,rbx
       add       rsp,40
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M01_L08:
       test      r14d,r14d
       jne       short M01_L10
       xor       eax,eax
       xor       r14d,r14d
       jmp       short M01_L06
M01_L09:
       call      qword ptr [7FFF7DBC3018]
       int       3
M01_L10:
       call      qword ptr [7FFF7DBC3060]
       int       3
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+60]
       cmp       qword ptr [rbp-38],0
       je        short M01_L11
       mov       rcx,[rbp-38]
       mov       r11,7FFF7D6B08D8
       call      qword ptr [r11]
M01_L11:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
; Total bytes of code 478

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 02c144afac6efe0f716e64ea0a701e2eec995866
Compare 4ce23f46ed20683a1b6649e9a43e09459007c9d8
Diff Diff

Regressions in System.Collections.CreateAddAndClear<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ICollection - Duration of single invocation 1.67 μs 1.83 μs 1.09 0.01 False

graph
Test Report

Repro

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

Payloads

Baseline
Compare

Histogram

System.Collections.CreateAddAndClear<Int32>.ICollection(Size: 512)


Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 1.8281249999999998 > 1.7509602453918214.
IsChangePoint: Marked as a change because one of 9/23/2022 1:16:35 AM, 11/22/2022 2:20:42 AM, 12/3/2022 7:24:45 AM, 12/6/2022 5:44:36 AM falls between 11/27/2022 4:37:47 PM and 12/6/2022 5:44:36 AM.
IsRegressionStdDev: Marked as regression because -74.93713233029301 (T) = (0 -1832.3601314471698) / Math.Sqrt((111.81777452145562 / (43)) + (22.930842473058515 / (9))) is less than -2.0085591120996775 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (9) - 2, .025) and -0.10228486072369541 = (1662.3290373816346 - 1832.3601314471698) / 1662.3290373816346 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 02c144afac6efe0f716e64ea0a701e2eec995866
Compare 4ce23f46ed20683a1b6649e9a43e09459007c9d8
Diff Diff

Regressions in System.Collections.ContainsTrueComparer<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
HashSet - Duration of single invocation 5.36 μs 5.88 μs 1.10 0.11 False

graph
Test Report

Repro

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

Payloads

Baseline
Compare

Histogram

System.Collections.ContainsTrueComparer<Int32>.HashSet(Size: 512)


Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 5.881900212314226 > 5.612522240333737.
IsChangePoint: Marked as a change because one of 9/26/2022 8:26:31 AM, 9/27/2022 11:22:50 AM, 11/2/2022 9:35:40 AM, 12/3/2022 7:24:45 AM, 12/6/2022 5:44:36 AM falls between 11/27/2022 4:37:47 PM and 12/6/2022 5:44:36 AM.
IsRegressionStdDev: Marked as regression because -91.76625314476843 (T) = (0 -5857.954939086867) / Math.Sqrt((262.8382988317587 / (43)) + (218.82935183017463 / (9))) is less than -2.0085591120996775 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (9) - 2, .025) and -0.09458332807652296 = (5351.767004692889 - 5857.954939086867) / 5351.767004692889 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 02c144afac6efe0f716e64ea0a701e2eec995866
Compare 4ce23f46ed20683a1b6649e9a43e09459007c9d8
Diff Diff

Regressions in PerfLabTests.CastingPerf2.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
FooObjIsFoo - Duration of single invocation 773.69 μs 876.69 μs 1.13 0.06 False Trace Trace

graph
Test Report

Repro

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

Payloads

Baseline
Compare

Histogram

PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo


Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 876.693587962963 > 815.8488030133929.
IsChangePoint: Marked as a change because one of 9/29/2022 7:42:19 AM, 10/2/2022 11:57:04 PM, 10/11/2022 8:42:28 PM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/3/2022 7:24:45 AM, 12/6/2022 5:44:36 AM falls between 11/27/2022 4:37:47 PM and 12/6/2022 5:44:36 AM.
IsRegressionStdDev: Marked as regression because -72.3702513368473 (T) = (0 -873497.8879263537) / Math.Sqrt((57746196.250195265 / (43)) + (3470923.2555119065 / (9))) is less than -2.0085591120996775 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (9) - 2, .025) and -0.12224536734810439 = (778348.4016427285 - 873497.8879263537) / 778348.4016427285 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo()
       push      rdi
       push      rsi
       sub       rsp,28
       xor       esi,esi
       mov       edi,[7FFD45AFA560]
       test      edi,edi
       jle       short M00_L02
M00_L00:
       mov       rcx,1D4B10064F0
       mov       rdx,[rcx]
       mov       rax,rdx
       test      rax,rax
       je        short M00_L01
       mov       rcx,offset MT_PerfLabTests.CastingPerf2.Foo
       cmp       [rax],rcx
       je        short M00_L01
       call      qword ptr [7FFD4577B8B8]
M00_L01:
       mov       rcx,1D4B1006540
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       inc       esi
       cmp       esi,edi
       jl        short M00_L00
M00_L02:
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 91

Compare Jit Disasm

; PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo()
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       xor       esi,esi
       mov       edi,[7FFB3A8CF5B8]
       test      edi,edi
       jle       short M00_L02
       mov       rcx,210A60064F0
       mov       rbx,[rcx]
       mov       rbp,210A6006540
M00_L00:
       mov       rdx,rbx
       mov       rax,rdx
       test      rax,rax
       je        short M00_L01
       mov       rcx,offset MT_PerfLabTests.CastingPerf2.Foo
       cmp       [rax],rcx
       je        short M00_L01
       call      qword ptr [7FFB3A55D8B8]
M00_L01:
       mov       rcx,rbp
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       inc       esi
       cmp       esi,edi
       jl        short M00_L00
M00_L02:
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 101

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 02c144afac6efe0f716e64ea0a701e2eec995866
Compare 4ce23f46ed20683a1b6649e9a43e09459007c9d8
Diff Diff

Regressions in System.Buffers.Text.Tests.Utf8ParserTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
TryParseInt32 - Duration of single invocation 3.92 ns 5.24 ns 1.34 0.02 False Trace Trace

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Text.Tests.Utf8ParserTests*'
Details

Payloads

Baseline
Compare

Histogram

System.Buffers.Text.Tests.Utf8ParserTests.TryParseInt32(value: 4)


Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 5.239059323600074 > 4.112909541370754.
IsChangePoint: Marked as a change because one of 9/29/2022 7:42:19 AM, 10/2/2022 11:57:04 PM, 10/17/2022 3:19:47 PM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/3/2022 7:24:45 AM, 12/6/2022 5:44:36 AM falls between 11/27/2022 4:37:47 PM and 12/6/2022 5:44:36 AM.
IsRegressionStdDev: Marked as regression because -95.35506503456399 (T) = (0 -5.2470407126722005) / Math.Sqrt((0.00018925711089593696 / (43)) + (0.001703176400138018 / (9))) is less than -2.0085591120996775 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (43) + (9) - 2, .025) and -0.3384896771495009 = (3.9201204179971714 - 5.2470407126722005) / 3.9201204179971714 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Buffers.Text.Tests.Utf8ParserTests.TryParseInt32(Utf8TestCase)
       sub       rsp,48
       xor       eax,eax
       mov       [rsp+28],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       [rsp+40],rax
       mov       rcx,[rdx+8]
       test      rcx,rcx
       je        short M00_L01
       lea       rdx,[rcx+10]
       mov       r8d,[rcx+8]
M00_L00:
       mov       [rsp+28],rdx
       mov       [rsp+30],r8d
       lea       rcx,[rsp+28]
       lea       rdx,[rsp+40]
       lea       r8,[rsp+38]
       xor       r9d,r9d
       call      qword ptr [7FFD209991F8]; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Int32 ByRef, Int32 ByRef, Char)
       nop
       add       rsp,48
       ret
M00_L01:
       xor       edx,edx
       xor       r8d,r8d
       jmp       short M00_L00
; Total bytes of code 90
; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Int32 ByRef, Int32 ByRef, Char)
       sub       rsp,28
       movzx     eax,r9w
       test      eax,eax
       jne       short M01_L01
M01_L00:
       add       rsp,28
       jmp       qword ptr [7FFD20999258]; System.Buffers.Text.Utf8Parser.TryParseInt32D(System.ReadOnlySpan`1<Byte>, Int32 ByRef, Int32 ByRef)
M01_L01:
       movzx     eax,r9w
       or        eax,20
       cmp       eax,67
       jg        short M01_L02
       cmp       eax,64
       je        short M01_L00
       cmp       eax,67
       jne       short M01_L04
       jmp       short M01_L00
M01_L02:
       cmp       eax,6E
       je        short M01_L03
       cmp       eax,72
       je        short M01_L00
       cmp       eax,78
       jne       short M01_L04
       add       rsp,28
       jmp       qword ptr [7FFD20999438]
M01_L03:
       add       rsp,28
       jmp       qword ptr [7FFD209992B8]
M01_L04:
       call      qword ptr [7FFD207AD6F0]
       int       3
; Total bytes of code 88

Compare Jit Disasm

; System.Buffers.Text.Tests.Utf8ParserTests.TryParseInt32(Utf8TestCase)
       sub       rsp,48
       xor       eax,eax
       mov       [rsp+28],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       [rsp+40],rax
       mov       rcx,[rdx+8]
       test      rcx,rcx
       je        short M00_L01
       lea       rdx,[rcx+10]
       mov       r8d,[rcx+8]
M00_L00:
       mov       [rsp+28],rdx
       mov       [rsp+30],r8d
       lea       rcx,[rsp+28]
       lea       rdx,[rsp+40]
       lea       r8,[rsp+38]
       xor       r9d,r9d
       call      qword ptr [7FFE00EEB1F8]; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Int32 ByRef, Int32 ByRef, Char)
       nop
       add       rsp,48
       ret
M00_L01:
       xor       edx,edx
       xor       r8d,r8d
       jmp       short M00_L00
; Total bytes of code 90
; System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan`1<Byte>, Int32 ByRef, Int32 ByRef, Char)
       sub       rsp,28
       movzx     eax,r9w
       test      eax,eax
       jne       short M01_L01
M01_L00:
       add       rsp,28
       jmp       qword ptr [7FFE00EEB258]; System.Buffers.Text.Utf8Parser.TryParseInt32D(System.ReadOnlySpan`1<Byte>, Int32 ByRef, Int32 ByRef)
M01_L01:
       movzx     eax,r9w
       or        eax,20
       cmp       eax,67
       jg        short M01_L02
       cmp       eax,64
       je        short M01_L00
       cmp       eax,67
       jne       short M01_L04
       jmp       short M01_L00
M01_L02:
       cmp       eax,6E
       je        short M01_L03
       cmp       eax,72
       je        short M01_L00
       cmp       eax,78
       jne       short M01_L04
       add       rsp,28
       jmp       qword ptr [7FFE00EEB438]
M01_L03:
       add       rsp,28
       jmp       qword ptr [7FFE00EEB2B8]
M01_L04:
       call      qword ptr [7FFE00D016F0]
       int       3
; Total bytes of code 88

Docs

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions