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: 10 Regressions on 12/28/2022 6:20:56 PM #11273

Closed
performanceautofiler bot opened this issue Jan 3, 2023 · 2 comments
Closed

[Perf] Windows/x64: 10 Regressions on 12/28/2022 6:20:56 PM #11273

performanceautofiler bot opened this issue Jan 3, 2023 · 2 comments

Comments

@performanceautofiler
Copy link

performanceautofiler bot commented Jan 3, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 8c58fc2347820ce48e09605d8adddb993df9ebb5
Compare 1d15f2140f7eb30a976c66290491ec89cd628da0
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
IFooObjIsDescendantOfIFoo - Duration of single invocation 665.24 μs 741.00 μs 1.11 0.02 False Trace Trace
FooObjIsFoo - Duration of single invocation 761.79 μs 873.13 μs 1.15 0.06 False Trace Trace
ObjrefValueTypeObj - Duration of single invocation 879.82 μs 1.15 ms 1.31 0.53 False Trace Trace
ObjInt - Duration of single invocation 628.50 μs 666.08 μs 1.06 0.06 False Trace Trace

graph
graph
graph
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.IFooObjIsDescendantOfIFoo


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 741.0049242424243 > 699.6042819511217.
IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 12/14/2022 5:20:21 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -18.835112412174812 (T) = (0 -742375.389641199) / Math.Sqrt((403025505.1714025 / (29)) + (4058203.7152673295 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.10566149637884203 = (671430.9868549793 - 742375.389641199) / 671430.9868549793 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.IFooObjIsDescendantOfIFoo()
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       xor       esi,esi
       mov       edi,[7FFCE1FD4CF4]
       test      edi,edi
       jle       short M00_L01
       mov       rdx,1D46F0064E0
       mov       rbx,[rdx]
       mov       rdx,rbx
       mov       rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
       call      qword ptr [7FFCE180D888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       mov       rbp,1D46F006580
M00_L00:
       mov       rdx,rbx
       mov       rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
       call      qword ptr [7FFCE180D888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       mov       rdx,rax
       mov       rcx,rbp
       call      CORINFO_HELP_ASSIGN_REF
       inc       esi
       cmp       esi,edi
       jl        short M00_L00
M00_L01:
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 107
; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       test      rdx,rdx
       je        short M01_L01
       mov       rax,[rdx]
       movzx     r8d,word ptr [rax+0E]
       test      r8,r8
       je        short M01_L04
       mov       rax,[rax+38]
       cmp       r8,4
       jl        short M01_L03
M01_L00:
       cmp       [rax],rcx
       je        short M01_L01
       cmp       [rax+8],rcx
       je        short M01_L01
       cmp       [rax+10],rcx
       je        short M01_L01
       cmp       [rax+18],rcx
       jne       short M01_L02
M01_L01:
       mov       rax,rdx
       ret
M01_L02:
       add       rax,20
       add       r8,0FFFFFFFFFFFFFFFC
       cmp       r8,4
       jge       short M01_L00
       test      r8,r8
       je        short M01_L04
M01_L03:
       cmp       [rax],rcx
       je        short M01_L01
       add       rax,8
       dec       r8
       test      r8,r8
       jg        short M01_L03
M01_L04:
       jmp       qword ptr [7FFCE180D870]
; Total bytes of code 97

Compare Jit Disasm

; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo()
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       xor       esi,esi
       mov       edi,[7FFEEE384CF4]
       test      edi,edi
       jle       short M00_L01
       mov       rdx,206DCC064E0
       mov       rbx,[rdx]
       mov       rdx,rbx
       mov       rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
       call      qword ptr [7FFEEDBBD888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       mov       rbp,206DCC06580
M00_L00:
       mov       rdx,rbx
       mov       rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
       call      qword ptr [7FFEEDBBD888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       mov       rdx,rax
       mov       rcx,rbp
       call      CORINFO_HELP_ASSIGN_REF
       inc       esi
       cmp       esi,edi
       jl        short M00_L00
M00_L01:
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 107
; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       test      rdx,rdx
       je        short M01_L01
       mov       rax,[rdx]
       movzx     r8d,word ptr [rax+0E]
       test      r8,r8
       je        short M01_L04
       mov       rax,[rax+38]
       cmp       r8,4
       jl        short M01_L03
M01_L00:
       cmp       [rax],rcx
       je        short M01_L01
       cmp       [rax+8],rcx
       je        short M01_L01
       cmp       [rax+10],rcx
       je        short M01_L01
       cmp       [rax+18],rcx
       jne       short M01_L02
M01_L01:
       mov       rax,rdx
       ret
M01_L02:
       add       rax,20
       add       r8,0FFFFFFFFFFFFFFFC
       cmp       r8,4
       jge       short M01_L00
       test      r8,r8
       je        short M01_L04
M01_L03:
       cmp       [rax],rcx
       je        short M01_L01
       add       rax,8
       dec       r8
       test      r8,r8
       jg        short M01_L03
M01_L04:
       jmp       qword ptr [7FFEEDBBD870]
; Total bytes of code 97

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 873.1283234126984 > 796.3618046875.
IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/3/2022 7:24:45 AM, 12/14/2022 5:20:21 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -19.08931422726733 (T) = (0 -873815.4000323422) / Math.Sqrt((894532543.5694818 / (29)) + (3084025.479794204 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.13864466977537454 = (767417.1084511585 - 873815.4000323422) / 767417.1084511585 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
       push      rbp
       push      rbx
       sub       rsp,28
       xor       esi,esi
       mov       edi,[7FFA51174CF0]
       test      edi,edi
       jle       short M00_L02
       mov       rcx,1FEA00064E0
       mov       rbx,[rcx]
       mov       rbp,1FEA0006530
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 [7FFA509AD8B8]
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

Compare Jit Disasm

; PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo()
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       xor       esi,esi
       mov       edi,[7FFACBA18160]
       test      edi,edi
       jle       short M00_L02
       mov       rcx,1754B4064E0
       mov       rbx,[rcx]
       mov       rbp,1754B406530
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 [7FFACB26D8B8]
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

PerfLabTests.CastingPerf2.CastingPerf.ObjrefValueTypeObj


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.1519236011904763 > 983.2722473958332.
IsChangePoint: Marked as a change because one of 12/10/2022 11:25:25 PM, 12/27/2022 8:25:45 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -9.869181517128785 (T) = (0 -1195405.6082334316) / Math.Sqrt((4705812038.151249 / (26)) + (5521922099.631794 / (17))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (26) + (17) - 2, .025) and -0.22801535098494036 = (973445.1668496213 - 1195405.6082334316) / 973445.1668496213 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.ObjrefValueTypeObj()
       push      r15
       push      r14
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       xor       ebx,ebx
       mov       rbp,7FFE0A904CF0
       cmp       dword ptr [rbp],0
       jle       short M00_L02
       mov       r14,27786C064E0
       mov       r15,offset MT_PerfLabTests.CastingPerf2.FooORVT
       mov       rdx,27786C064B8
       mov       r12,[rdx]
       add       r12,8
M00_L00:
       mov       rsi,[r14]
       cmp       [rsi],r15
       je        short M00_L01
       mov       rdx,rsi
       mov       rcx,r15
       call      qword ptr [7FFE0A13D8D0]; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object)
M00_L01:
       add       rsi,8
       mov       rdi,r12
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       inc       ebx
       cmp       ebx,[rbp]
       jl        short M00_L00
M00_L02:
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r14
       pop       r15
       ret
; Total bytes of code 128
; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object)
       cmp       [rdx],rcx
       jne       short M01_L00
       lea       rax,[rdx+8]
       ret
M01_L00:
       jmp       near ptr System.Runtime.CompilerServices.CastHelpers.Unbox_Helper(Void*, System.Object)
; Total bytes of code 15

Compare Jit Disasm

; PerfLabTests.CastingPerf2.CastingPerf.ObjrefValueTypeObj()
       push      r15
       push      r14
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       xor       ebx,ebx
       mov       rbp,7FF7A7844CF0
       cmp       dword ptr [rbp],0
       jle       short M00_L02
       mov       r14,206834064E0
       mov       r15,offset MT_PerfLabTests.CastingPerf2.FooORVT
       mov       rdx,206834064B8
       mov       r12,[rdx]
       add       r12,8
M00_L00:
       mov       rsi,[r14]
       cmp       [rsi],r15
       je        short M00_L01
       mov       rdx,rsi
       mov       rcx,r15
       call      qword ptr [7FF7A707D8D0]; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object)
M00_L01:
       add       rsi,8
       mov       rdi,r12
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       inc       ebx
       cmp       ebx,[rbp]
       jl        short M00_L00
M00_L02:
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r14
       pop       r15
       ret
; Total bytes of code 128
; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object)
       cmp       [rdx],rcx
       jne       short M01_L00
       lea       rax,[rdx+8]
       ret
M01_L00:
       jmp       near ptr System.Runtime.CompilerServices.CastHelpers.Unbox_Helper(Void*, System.Object)
; Total bytes of code 15

PerfLabTests.CastingPerf2.CastingPerf.ObjInt


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 666.0825694444444 > 658.398496875.
IsChangePoint: Marked as a change because one of 10/11/2022 8:42:28 PM, 10/17/2022 3:19:47 PM, 11/19/2022 1:29:52 AM, 12/2/2022 5:21:30 AM, 12/23/2022 9:40:21 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -16.06702433364496 (T) = (0 -664842.5214414858) / Math.Sqrt((41203214.56325535 / (17)) + (109274040.16720593 / (26))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (17) + (26) - 2, .025) and -0.06633693249416585 = (623482.5984001294 - 664842.5214414858) / 623482.5984001294 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.ObjInt()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       xor       esi,esi
       mov       rdi,7FF96CD94CF4
       cmp       dword ptr [rdi],0
       jle       short M00_L01
       mov       rbx,offset MT_System.Int32
       mov       rbp,7FF96CD94CFC
       mov       r14,15F62C064E0
M00_L00:
       mov       rcx,rbx
       call      CORINFO_HELP_NEWSFAST
       mov       edx,[rbp]
       mov       [rax+8],edx
       mov       rcx,r14
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       inc       esi
       cmp       esi,[rdi]
       jl        short M00_L00
M00_L01:
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 99

Compare Jit Disasm

; PerfLabTests.CastingPerf2.CastingPerf.ObjInt()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       xor       esi,esi
       mov       rdi,7FFAA9BC4CF4
       cmp       dword ptr [rdi],0
       jle       short M00_L01
       mov       rbx,offset MT_System.Int32
       mov       rbp,7FFAA9BC4CFC
       mov       r14,22B7B0064E0
M00_L00:
       mov       rcx,rbx
       call      CORINFO_HELP_NEWSFAST
       mov       edx,[rbp]
       mov       [rax+8],edx
       mov       rcx,r14
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       inc       esi
       cmp       esi,[rdi]
       jl        short M00_L00
M00_L01:
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 99

Docs

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

### Run Information
Architecture x64
OS Windows 10.0.18362
Baseline 8c58fc2347820ce48e09605d8adddb993df9ebb5
Compare 1d15f2140f7eb30a976c66290491ec89cd628da0
Diff Diff

Regressions in System.Linq.Tests.Perf_Enumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Max - Duration of single invocation 464.56 ns 520.08 ns 1.12 0.03 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.Linq.Tests.Perf_Enumerable*'

Payloads

Baseline
Compare

Histogram

System.Linq.Tests.Perf_Enumerable.Max(input: IEnumerable)


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 520.0811702527701 > 487.36929424915627.
IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 12/6/2022 2:12:43 AM, 12/17/2022 10:44:50 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -17.767567409196065 (T) = (0 -520.5557851414749) / Math.Sqrt((249.18729266585365 / (29)) + (1.1123896247220408 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.11174513177046155 = (468.2330241576919 - 520.5557851414749) / 468.2330241576919 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.Linq.Tests.Perf_Enumerable.Max(System.Linq.Tests.LinqTestData)
       mov       rcx,[rdx+8]
       jmp       qword ptr [7FF95D39B660]; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1<Int32>)
; Total bytes of code 10
; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1<Int32>)
       push      rbp
       push      rdi
       push      rsi
       sub       rsp,40
       vzeroupper
       lea       rbp,[rsp+50]
       xor       eax,eax
       mov       [rbp-20],rax
       mov       [rbp-30],rsp
       test      rcx,rcx
       je        near ptr M01_L24
       mov       rdx,offset MT_System.Int32[]
       cmp       [rcx],rdx
       jne       short M01_L00
       lea       rax,[rcx+10]
       mov       r8d,[rcx+8]
       jmp       short M01_L01
M01_L00:
       mov       rdx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]]
       mov       [rbp+10],rcx
       cmp       [rcx],rdx
       jne       near ptr M01_L18
       lea       rcx,[rbp-20]
       mov       rdx,[rbp+10]
       call      qword ptr [7FF95D39F378]
       mov       rax,[rbp-20]
       mov       r8d,[rbp-18]
M01_L01:
       test      r8d,r8d
       je        near ptr M01_L25
       cmp       r8d,4
       jge       short M01_L04
       mov       esi,[rax]
       mov       ecx,1
       cmp       r8d,1
       jle       near ptr M01_L23
M01_L02:
       mov       r11d,ecx
       mov       r11d,[rax+r11*4]
       cmp       r11d,esi
       jle       short M01_L03
       mov       esi,r11d
M01_L03:
       inc       ecx
       cmp       ecx,r8d
       jl        short M01_L02
       jmp       near ptr M01_L23
M01_L04:
       cmp       r8d,8
       jge       short M01_L09
       add       r8d,0FFFFFFFC
       movsxd    rcx,r8d
       lea       rcx,[rax+rcx*4]
       vmovdqu   xmm0,xmmword ptr [rax]
       add       rax,10
       cmp       rax,rcx
       jae       short M01_L06
M01_L05:
       vpmaxsd   xmm0,xmm0,[rax]
       add       rax,10
       cmp       rax,rcx
       jb        short M01_L05
M01_L06:
       vpmaxsd   xmm0,xmm0,[rcx]
       vmovd     esi,xmm0
       vpextrd   ecx,xmm0,1
       cmp       ecx,esi
       jle       short M01_L07
       mov       esi,ecx
M01_L07:
       vpextrd   ecx,xmm0,2
       cmp       ecx,esi
       jle       short M01_L08
       mov       esi,ecx
M01_L08:
       vpextrd   ecx,xmm0,3
       cmp       ecx,esi
       jle       near ptr M01_L23
       mov       esi,ecx
       jmp       near ptr M01_L23
M01_L09:
       mov       rcx,rax
       lea       r11d,[r8-8]
       movsxd    r11,r11d
       lea       r11,[rcx+r11*4]
       vmovdqu   ymm0,ymmword ptr [rcx]
       add       rcx,20
       cmp       rcx,r11
       jae       short M01_L11
M01_L10:
       vpmaxsd   ymm0,ymm0,[rcx]
       add       rcx,20
       cmp       rcx,r11
       jb        short M01_L10
M01_L11:
       vpmaxsd   ymm0,ymm0,[r11]
       vmovaps   ymm1,ymm0
       vmovd     esi,xmm1
       vmovaps   ymm1,ymm0
       vpextrd   ecx,xmm1,1
       cmp       ecx,esi
       jle       short M01_L12
       mov       esi,ecx
M01_L12:
       vmovaps   ymm1,ymm0
       vpextrd   ecx,xmm1,2
       cmp       ecx,esi
       jle       short M01_L13
       mov       esi,ecx
M01_L13:
       vmovaps   ymm1,ymm0
       vpextrd   ecx,xmm1,3
       cmp       ecx,esi
       jle       short M01_L14
       mov       esi,ecx
M01_L14:
       vextractf128 xmm1,ymm0,1
       vmovd     ecx,xmm1
       cmp       ecx,esi
       jle       short M01_L15
       mov       esi,ecx
M01_L15:
       vextractf128 xmm1,ymm0,1
       vpextrd   ecx,xmm1,1
       cmp       ecx,esi
       jle       short M01_L16
       mov       esi,ecx
M01_L16:
       vextractf128 xmm1,ymm0,1
       vpextrd   ecx,xmm1,2
       cmp       ecx,esi
       jle       short M01_L17
       mov       esi,ecx
M01_L17:
       vextractf128 xmm0,ymm0,1
       vpextrd   ecx,xmm0,3
       cmp       ecx,esi
       jle       near ptr M01_L23
       mov       esi,ecx
       jmp       near ptr M01_L23
M01_L18:
       mov       rcx,[rbp+10]
       mov       r11,7FF95C8705D8
       call      qword ptr [r11]
       mov       rsi,rax
       mov       [rbp-28],rsi
       mov       rcx,rsi
       mov       r11,7FF95C8705E0
       call      qword ptr [r11]
       test      eax,eax
       je        short M01_L19
       mov       rcx,rsi
       mov       r11,7FF95C8705E8
       call      qword ptr [r11]
       mov       edi,eax
       mov       rcx,rsi
       mov       r11,7FF95C8705F0
       call      qword ptr [r11]
       test      eax,eax
       je        short M01_L22
       jmp       short M01_L20
M01_L19:
       call      qword ptr [7FF95D1777F8]
       int       3
M01_L20:
       mov       rcx,rsi
       mov       r11,7FF95C8705F8
       call      qword ptr [r11]
       cmp       eax,edi
       jle       short M01_L21
       mov       edi,eax
M01_L21:
       mov       rcx,rsi
       mov       r11,7FF95C8705F0
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L20
M01_L22:
       mov       rcx,rsi
       mov       r11,7FF95C870600
       call      qword ptr [r11]
       mov       esi,edi
M01_L23:
       mov       eax,esi
       vzeroupper
       add       rsp,40
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M01_L24:
       mov       ecx,10
       call      qword ptr [7FF95D177798]
       int       3
M01_L25:
       call      qword ptr [7FF95D1777F8]
       int       3
       push      rbp
       push      rdi
       push      rsi
       sub       rsp,30
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+50]
       cmp       qword ptr [rbp-28],0
       je        short M01_L26
       mov       rcx,[rbp-28]
       mov       r11,7FF95C870600
       call      qword ptr [r11]
M01_L26:
       nop
       vzeroupper
       add       rsp,30
       pop       rsi
       pop       rdi
       pop       rbp
       ret
; Total bytes of code 684

Compare Jit Disasm

; System.Linq.Tests.Perf_Enumerable.Max(System.Linq.Tests.LinqTestData)
       mov       rcx,[rdx+8]
       jmp       qword ptr [7FFD3060B660]; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1<Int32>)
; Total bytes of code 10
; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1<Int32>)
       push      rbp
       push      rdi
       push      rsi
       sub       rsp,40
       vzeroupper
       lea       rbp,[rsp+50]
       xor       eax,eax
       mov       [rbp-20],rax
       mov       [rbp-30],rsp
       test      rcx,rcx
       je        near ptr M01_L24
       mov       rdx,offset MT_System.Int32[]
       cmp       [rcx],rdx
       jne       short M01_L00
       lea       rax,[rcx+10]
       mov       r8d,[rcx+8]
       jmp       short M01_L01
M01_L00:
       mov       rdx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]]
       mov       [rbp+10],rcx
       cmp       [rcx],rdx
       jne       near ptr M01_L18
       lea       rcx,[rbp-20]
       mov       rdx,[rbp+10]
       call      qword ptr [7FFD3060F378]
       mov       rax,[rbp-20]
       mov       r8d,[rbp-18]
M01_L01:
       test      r8d,r8d
       je        near ptr M01_L25
       cmp       r8d,4
       jge       short M01_L04
       mov       esi,[rax]
       mov       ecx,1
       cmp       r8d,1
       jle       near ptr M01_L23
M01_L02:
       mov       r11d,ecx
       mov       r11d,[rax+r11*4]
       cmp       r11d,esi
       jle       short M01_L03
       mov       esi,r11d
M01_L03:
       inc       ecx
       cmp       ecx,r8d
       jl        short M01_L02
       jmp       near ptr M01_L23
M01_L04:
       cmp       r8d,8
       jge       short M01_L09
       add       r8d,0FFFFFFFC
       movsxd    rcx,r8d
       lea       rcx,[rax+rcx*4]
       vmovdqu   xmm0,xmmword ptr [rax]
       add       rax,10
       cmp       rax,rcx
       jae       short M01_L06
M01_L05:
       vpmaxsd   xmm0,xmm0,[rax]
       add       rax,10
       cmp       rax,rcx
       jb        short M01_L05
M01_L06:
       vpmaxsd   xmm0,xmm0,[rcx]
       vmovd     esi,xmm0
       vpextrd   ecx,xmm0,1
       cmp       ecx,esi
       jle       short M01_L07
       mov       esi,ecx
M01_L07:
       vpextrd   ecx,xmm0,2
       cmp       ecx,esi
       jle       short M01_L08
       mov       esi,ecx
M01_L08:
       vpextrd   ecx,xmm0,3
       cmp       ecx,esi
       jle       near ptr M01_L23
       mov       esi,ecx
       jmp       near ptr M01_L23
M01_L09:
       mov       rcx,rax
       lea       r11d,[r8-8]
       movsxd    r11,r11d
       lea       r11,[rcx+r11*4]
       vmovdqu   ymm0,ymmword ptr [rcx]
       add       rcx,20
       cmp       rcx,r11
       jae       short M01_L11
M01_L10:
       vpmaxsd   ymm0,ymm0,[rcx]
       add       rcx,20
       cmp       rcx,r11
       jb        short M01_L10
M01_L11:
       vpmaxsd   ymm0,ymm0,[r11]
       vmovaps   ymm1,ymm0
       vmovd     esi,xmm1
       vmovaps   ymm1,ymm0
       vpextrd   ecx,xmm1,1
       cmp       ecx,esi
       jle       short M01_L12
       mov       esi,ecx
M01_L12:
       vmovaps   ymm1,ymm0
       vpextrd   ecx,xmm1,2
       cmp       ecx,esi
       jle       short M01_L13
       mov       esi,ecx
M01_L13:
       vmovaps   ymm1,ymm0
       vpextrd   ecx,xmm1,3
       cmp       ecx,esi
       jle       short M01_L14
       mov       esi,ecx
M01_L14:
       vextractf128 xmm1,ymm0,1
       vmovd     ecx,xmm1
       cmp       ecx,esi
       jle       short M01_L15
       mov       esi,ecx
M01_L15:
       vextractf128 xmm1,ymm0,1
       vpextrd   ecx,xmm1,1
       cmp       ecx,esi
       jle       short M01_L16
       mov       esi,ecx
M01_L16:
       vextractf128 xmm1,ymm0,1
       vpextrd   ecx,xmm1,2
       cmp       ecx,esi
       jle       short M01_L17
       mov       esi,ecx
M01_L17:
       vextractf128 xmm0,ymm0,1
       vpextrd   ecx,xmm0,3
       cmp       ecx,esi
       jle       near ptr M01_L23
       mov       esi,ecx
       jmp       near ptr M01_L23
M01_L18:
       mov       rcx,[rbp+10]
       mov       r11,7FFD2FAE05D8
       call      qword ptr [r11]
       mov       rsi,rax
       mov       [rbp-28],rsi
       mov       rcx,rsi
       mov       r11,7FFD2FAE05E0
       call      qword ptr [r11]
       test      eax,eax
       je        short M01_L19
       mov       rcx,rsi
       mov       r11,7FFD2FAE05E8
       call      qword ptr [r11]
       mov       edi,eax
       mov       rcx,rsi
       mov       r11,7FFD2FAE05F0
       call      qword ptr [r11]
       test      eax,eax
       je        short M01_L22
       jmp       short M01_L20
M01_L19:
       call      qword ptr [7FFD303E77F8]
       int       3
M01_L20:
       mov       rcx,rsi
       mov       r11,7FFD2FAE05F8
       call      qword ptr [r11]
       cmp       eax,edi
       jle       short M01_L21
       mov       edi,eax
M01_L21:
       mov       rcx,rsi
       mov       r11,7FFD2FAE05F0
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L20
M01_L22:
       mov       rcx,rsi
       mov       r11,7FFD2FAE0600
       call      qword ptr [r11]
       mov       esi,edi
M01_L23:
       mov       eax,esi
       vzeroupper
       add       rsp,40
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M01_L24:
       mov       ecx,10
       call      qword ptr [7FFD303E7798]
       int       3
M01_L25:
       call      qword ptr [7FFD303E77F8]
       int       3
       push      rbp
       push      rdi
       push      rsi
       sub       rsp,30
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+50]
       cmp       qword ptr [rbp-28],0
       je        short M01_L26
       mov       rcx,[rbp-28]
       mov       r11,7FFD2FAE0600
       call      qword ptr [r11]
M01_L26:
       nop
       vzeroupper
       add       rsp,30
       pop       rsi
       pop       rdi
       pop       rbp
       ret
; Total bytes of code 684

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 8c58fc2347820ce48e09605d8adddb993df9ebb5
Compare 1d15f2140f7eb30a976c66290491ec89cd628da0
Diff Diff

Regressions in Burgers

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Test3 - Duration of single invocation 119.12 ms 172.18 ms 1.45 0.04 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 'Burgers*'

Payloads

Baseline
Compare

Histogram

Burgers.Test3


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 172.18077333333335 > 125.2032478846154.
IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -128.7669311945409 (T) = (0 -171372910.23809525) / Math.Sqrt((3312379617640.8545 / (29)) + (615383043005.9226 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.4261990802366147 = (120160581.09479603 - 171372910.23809525) / 120160581.09479603 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
; Burgers.Test3()
       sub       rsp,38
       vzeroupper
       vmovsd    xmm2,qword ptr [7FFC36B7F490]
       vmovsd    qword ptr [rsp+20],xmm2
       mov       rdx,[rcx+10]
       mov       [rsp+28],rdx
       vmovsd    xmm2,qword ptr [rcx+18]
       vmovsd    xmm3,qword ptr [rcx+20]
       mov       ecx,4E20
       mov       edx,2711
       call      qword ptr [7FFC372B36F0]; Burgers.GetCalculated3(Int32, Int32, Double, Double, Double, Double[])
       nop
       add       rsp,38
       ret
; Total bytes of code 62
; Burgers.GetCalculated3(Int32, Int32, Double, Double, Double, Double[])
       push      r15
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,88
       vzeroupper
       vmovaps   [rsp+70],xmm6
       vmovaps   [rsp+60],xmm7
       vmovaps   [rsp+50],xmm8
       vmovaps   [rsp+40],xmm9
       vmovaps   [rsp+30],xmm10
       vmovaps   [rsp+20],xmm11
       mov       edi,ecx
       mov       esi,edx
       vmovaps   xmm6,xmm2
       vmovaps   xmm7,xmm3
       mov       rbx,[rsp+0E8]
       mov       edx,esi
       sar       edx,1F
       and       edx,3
       add       edx,esi
       and       edx,0FFFFFFFC
       mov       ecx,esi
       sub       ecx,edx
       mov       edx,ecx
       neg       edx
       lea       ebp,[rdx+rsi+4]
       movsxd    rdx,ebp
       mov       rcx,offset MT_System.Double[]
       call      CORINFO_HELP_NEWARR_1_VC
       mov       r14,rax
       movsxd    rdx,ebp
       mov       rcx,offset MT_System.Double[]
       call      CORINFO_HELP_NEWARR_1_VC
       mov       r15,rax
       mov       r8d,[rbx+8]
       mov       rcx,rbx
       mov       rdx,r15
       call      qword ptr [7FFC36AA96A8]; System.Array.Copy(System.Array, System.Array, Int32)
       vmulsd    xmm0,xmm7,qword ptr [rsp+0E0]
       vdivsd    xmm0,xmm0,xmm6
       vmovsd    xmm8,qword ptr [7FFC36B7F7A0]
       vmovaps   xmm1,xmm8
       call      System.Math.Pow(Double, Double)
       xor       edx,edx
       test      edi,edi
       jle       near ptr M01_L03
       add       ebp,0FFFFFFFD
       vdivsd    xmm1,xmm7,xmm6
       vbroadcastsd ymm1,xmm1
       vmovupd   ymm2,[7FFC36B7F7C0]
       vbroadcastsd ymm3,xmm0
       lea       eax,[rsi-1]
       mov       ecx,eax
M01_L00:
       mov       r8d,1
       cmp       ebp,1
       jle       near ptr M01_L02
       mov       r9d,[r15+8]
M01_L01:
       cmp       r8d,r9d
       jae       near ptr M01_L05
       lea       r11d,[r8+3]
       cmp       r11d,r9d
       jae       near ptr M01_L05
       vmovupd   ymm4,[r15+r8*8+10]
       lea       r10d,[r8-1]
       cmp       r10d,r9d
       jae       near ptr M01_L05
       lea       ebx,[r8+2]
       cmp       ebx,r9d
       jae       near ptr M01_L05
       vmovupd   ymm5,[r15+r10*8+10]
       lea       r10d,[r8+1]
       cmp       r10d,r9d
       jae       near ptr M01_L05
       lea       ebx,[r8+4]
       cmp       ebx,r9d
       jae       near ptr M01_L05
       vmovupd   ymm9,[r15+r10*8+10]
       vmulpd    ymm10,ymm4,ymm1
       vsubpd    ymm11,ymm4,ymm5
       vmulpd    ymm10,ymm10,ymm11
       vsubpd    ymm10,ymm4,ymm10
       vmulpd    ymm4,ymm4,ymm2
       vsubpd    ymm4,ymm9,ymm4
       vaddpd    ymm4,ymm4,ymm5
       vmulpd    ymm4,ymm3,ymm4
       vaddpd    ymm4,ymm10,ymm4
       mov       r10d,[r14+8]
       cmp       r8d,r10d
       jae       near ptr M01_L05
       cmp       r11d,r10d
       jae       near ptr M01_L06
       mov       r8d,r8d
       vmovupd   [r14+r8*8+10],ymm4
       mov       r8d,ebx
       cmp       r8d,ebp
       jl        near ptr M01_L01
M01_L02:
       mov       r9d,[r15+8]
       test      r9d,r9d
       je        near ptr M01_L07
       vmovsd    xmm4,qword ptr [r15+10]
       vmulsd    xmm5,xmm4,xmm7
       vdivsd    xmm5,xmm5,xmm6
       cmp       eax,r9d
       jae       near ptr M01_L07
       vmovsd    xmm9,qword ptr [r15+rcx*8+10]
       vsubsd    xmm10,xmm4,xmm9
       vmulsd    xmm5,xmm5,xmm10
       vsubsd    xmm5,xmm4,xmm5
       cmp       r9d,1
       jbe       near ptr M01_L07
       vmovsd    xmm10,qword ptr [r15+18]
       vmulsd    xmm4,xmm4,xmm8
       vsubsd    xmm4,xmm10,xmm4
       vaddsd    xmm4,xmm4,xmm9
       vmulsd    xmm4,xmm4,xmm0
       vaddsd    xmm4,xmm5,xmm4
       mov       r10d,[r14+8]
       test      r10d,r10d
       je        near ptr M01_L07
       vmovsd    qword ptr [r14+10],xmm4
       vmovsd    xmm4,qword ptr [r15+rcx*8+10]
       vmulsd    xmm5,xmm4,xmm7
       vdivsd    xmm5,xmm5,xmm6
       lea       r8d,[rsi-2]
       cmp       r8d,r9d
       jae       near ptr M01_L07
       mov       r9d,r8d
       vmovsd    xmm9,qword ptr [r15+r9*8+10]
       vsubsd    xmm10,xmm4,xmm9
       vmulsd    xmm5,xmm5,xmm10
       vsubsd    xmm5,xmm4,xmm5
       vmovsd    xmm10,qword ptr [r15+10]
       vmulsd    xmm4,xmm4,xmm8
       vsubsd    xmm4,xmm10,xmm4
       vaddsd    xmm4,xmm4,xmm9
       vmulsd    xmm4,xmm4,xmm0
       vaddsd    xmm4,xmm5,xmm4
       cmp       eax,r10d
       jae       short M01_L07
       vmovsd    qword ptr [r14+rcx*8+10],xmm4
       inc       edx
       cmp       edx,edi
       jl        short M01_L04
       mov       r15,r14
M01_L03:
       mov       rax,r15
       vmovaps   xmm6,[rsp+70]
       vmovaps   xmm7,[rsp+60]
       vmovaps   xmm8,[rsp+50]
       vmovaps   xmm9,[rsp+40]
       vmovaps   xmm10,[rsp+30]
       vmovaps   xmm11,[rsp+20]
       vzeroupper
       add       rsp,88
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M01_L04:
       xchg      r14,r15
       jmp       near ptr M01_L00
M01_L05:
       call      CORINFO_HELP_THROW_ARGUMENTOUTOFRANGEEXCEPTION
       int       3
M01_L06:
       call      CORINFO_HELP_THROW_ARGUMENTEXCEPTION
       int       3
M01_L07:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 723

Compare Jit Disasm

; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__()
       push      rbp
       sub       rsp,20
       lea       rbp,[rsp+20]
       mov       [rbp+10],rcx
       mov       rcx,[rbp+10]
       cmp       dword ptr [rcx+60],0B
       jne       short M00_L00
       mov       rcx,[rbp+10]
       call      qword ptr [7FFB62E33768]
       nop
       add       rsp,20
       pop       rbp
       ret
M00_L00:
       xor       eax,eax
       add       rsp,20
       pop       rbp
       ret
; Total bytes of code 49

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 8c58fc2347820ce48e09605d8adddb993df9ebb5
Compare 1d15f2140f7eb30a976c66290491ec89cd628da0
Diff Diff

Regressions in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
TrimEnd_CharArr - Duration of single invocation 4.51 ns 5.73 ns 1.27 0.04 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.Tests.Perf_String*'

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_String.TrimEnd_CharArr(s: "Test", c: [' ', ' '])


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.732226949094784 > 4.735492709714653.
IsChangePoint: Marked as a change because one of 11/2/2022 9:35:40 AM, 11/7/2022 4:10:19 PM, 11/18/2022 8:48:12 PM, 12/10/2022 11:25:25 PM, 12/17/2022 10:44:50 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -55.25365950219365 (T) = (0 -5.660159358774324) / Math.Sqrt((0.0001401500415806516 / (29)) + (0.006026706263614678 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.2557648955079805 = (4.507340011670483 - 5.660159358774324) / 4.507340011670483 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.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])
       mov       rcx,rdx
       mov       rdx,r8
       cmp       [rcx],ecx
       jmp       qword ptr [7FFF3F2054F8]; System.String.TrimEnd(Char[])
; Total bytes of code 14
; System.String.TrimEnd(Char[])
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       test      rdx,rdx
       je        short M01_L00
       mov       r8d,[rdx+8]
       test      r8d,r8d
       je        short M01_L00
       add       rdx,10
       mov       [rsp+20],rdx
       mov       rdx,[rsp+20]
       mov       r9d,2
       call      qword ptr [7FFF3F205528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
       nop
       add       rsp,28
       ret
M01_L00:
       mov       edx,2
       call      qword ptr [7FFF3F205510]
       nop
       add       rsp,28
       ret
; Total bytes of code 74

Compare Jit Disasm

; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])
       mov       rcx,rdx
       mov       rdx,r8
       cmp       [rcx],ecx
       jmp       qword ptr [7FFCEC8E54F8]; System.String.TrimEnd(Char[])
; Total bytes of code 14
; System.String.TrimEnd(Char[])
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       test      rdx,rdx
       je        short M01_L00
       mov       r8d,[rdx+8]
       test      r8d,r8d
       je        short M01_L00
       add       rdx,10
       mov       [rsp+20],rdx
       mov       rdx,[rsp+20]
       mov       r9d,2
       call      qword ptr [7FFCEC8E5528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
       nop
       add       rsp,28
       ret
M01_L00:
       mov       edx,2
       call      qword ptr [7FFCEC8E5510]
       nop
       add       rsp,28
       ret
; Total bytes of code 74

Docs

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

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Jan 3, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 8c58fc2347820ce48e09605d8adddb993df9ebb5
Compare 1d15f2140f7eb30a976c66290491ec89cd628da0
Diff Diff

Regressions in System.Memory.Span<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
IndexOfAnyFiveValues - Duration of single invocation 59.12 ns 63.82 ns 1.08 0.04 False

graph
Test Report

Repro

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

Payloads

Baseline
Compare

Histogram

System.Memory.Span<Int32>.IndexOfAnyFiveValues(Size: 33)


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 63.816013269298125 > 62.04432085546207.
IsChangePoint: Marked as a change because one of 12/17/2022 10:44:50 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -16.048289727390813 (T) = (0 -63.38084391950283) / Math.Sqrt((0.537348934114277 / (29)) + (0.5878990225836369 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.06642929764580552 = (59.432766953626576 - 63.38084391950283) / 59.432766953626576 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 8c58fc2347820ce48e09605d8adddb993df9ebb5
Compare 1d15f2140f7eb30a976c66290491ec89cd628da0
Diff Diff

Regressions in System.Collections.ContainsFalse<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ImmutableArray - Duration of single invocation 27.39 μs 32.81 μs 1.20 0.37 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.ContainsFalse&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.ContainsFalse<Int32>.ImmutableArray(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 32.80804044630404 > 28.762147079412113.
IsChangePoint: Marked as a change because one of 12/6/2022 8:34:17 AM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -18.775239785818517 (T) = (0 -32808.810961838746) / Math.Sqrt((3060874.483314134 / (29)) + (46312.91844574102 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.23275359035918697 = (26614.248961367255 - 32808.810961838746) / 26614.248961367255 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 8c58fc2347820ce48e09605d8adddb993df9ebb5
Compare 1d15f2140f7eb30a976c66290491ec89cd628da0
Diff Diff

Regressions in LinqBenchmarks

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Count00ForX - Duration of single invocation 138.03 ms 179.52 ms 1.30 0.03 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 'LinqBenchmarks*'

Payloads

Baseline
Compare

Histogram

LinqBenchmarks.Count00ForX


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 179.52443333333335 > 147.5180739375.
IsChangePoint: Marked as a change because one of 11/4/2022 9:11:54 AM, 12/12/2022 5:25:39 PM, 12/13/2022 4:26:35 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -39.59131223986966 (T) = (0 -179427367.0695971) / Math.Sqrt((24781678703538.383 / (29)) + (165364888115.87863 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.25846343425172585 = (142576543.8916256 - 179427367.0695971) / 142576543.8916256 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
; LinqBenchmarks.Count00ForX()
       sub       rsp,28
       call      qword ptr [7FF93A3270F0]; Product.GetProductList()
       xor       edx,edx
       xor       ecx,ecx
       mov       r8d,[rax+14]
M00_L00:
       xor       r8d,r8d
       jmp       short M00_L02
M00_L01:
       cmp       dword ptr [r9+1C],0
       jne       short M00_L02
       inc       edx
M00_L02:
       cmp       r8d,[rax+10]
       jae       short M00_L03
       mov       r9,[rax+8]
       cmp       r8d,[r9+8]
       jae       short M00_L05
       mov       r10d,r8d
       mov       r9,[r9+r10*8+10]
       inc       r8d
       mov       r10d,1
       jmp       short M00_L04
M00_L03:
       mov       r8d,[rax+10]
       inc       r8d
       xor       r9d,r9d
       xor       r10d,r10d
M00_L04:
       test      r10d,r10d
       jne       short M00_L01
       inc       ecx
       cmp       ecx,0F4240
       jl        short M00_L00
       xor       eax,eax
       cmp       edx,4C4B40
       sete      al
       add       rsp,28
       ret
M00_L05:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 117
; Product.GetProductList()
       push      rsi
       sub       rsp,20
       mov       rsi,225264061C8
       cmp       qword ptr [rsi],0
       jne       short M01_L00
       call      qword ptr [7FF93A327108]
M01_L00:
       mov       rax,[rsi]
       add       rsp,20
       pop       rsi
       ret
; Total bytes of code 36

Docs

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

@EgorBo
Copy link
Member

EgorBo commented Jan 3, 2023

Burgers.Test3 and Span.IndexOfAnyFiveValues are likely dotnet/runtime#79720

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

1 participant