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

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

Open
performanceautofiler bot opened this issue Dec 6, 2022 · 1 comment
Open

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

performanceautofiler bot opened this issue Dec 6, 2022 · 1 comment

Comments

@performanceautofiler
Copy link

performanceautofiler bot commented Dec 6, 2022

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;*'

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*'

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;*'

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;*'

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*'

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*'

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

@dakersnar
Copy link

Most of this looks like noise, but CreateAddAndClear could be a regression caused by dotnet/runtime#79060. Thoughts @EgorBo?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants