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: 15 Improvements on 1/27/2023 11:43:56 PM #12296

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

[Perf] Windows/x64: 15 Improvements on 1/27/2023 11:43:56 PM #12296

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

Comments

@performanceautofiler
Copy link

performanceautofiler bot commented Jan 31, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Collections.IndexerSetReverse<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
IList - Duration of single invocation 1.46 μs 1.30 μs 0.89 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.Collections.IndexerSetReverse&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.IndexerSetReverse<Int32>.IList(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 1.2992942799312373 < 1.3866707991368283.
IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 24.1290179571106 (T) = (0 -1301.392126470584) / Math.Sqrt((5524.768754540427 / (299)) + (17.401232584084386 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.07667360507043618 = (1409.4605478811866 - 1301.392126470584) / 1409.4605478811866 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Collections.IterateForEach<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Stack - Duration of single invocation 1.81 μs 1.62 μs 0.90 0.26 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;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.IterateForEach<Int32>.Stack(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 1.6240749895920064 < 1.7225271950593626.
IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 10.275800175746506 (T) = (0 -1637.3652399752698) / Math.Sqrt((9286.287210117292 / (299)) + (823.4348843252872 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.06066922723326726 = (1743.1189176870312 - 1637.3652399752698) / 1743.1189176870312 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Numerics.Tests.Perf_BigInteger

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Ctor_ByteArray - Duration of single invocation 125.12 ns 88.88 ns 0.71 0.00 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_BigInteger*'

Payloads

Baseline
Compare

Histogram

System.Numerics.Tests.Perf_BigInteger.Ctor_ByteArray(numberString: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 88.87569406544094 < 120.28677533704959.
IsChangePoint: Marked as a change because one of 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 231.39496839745448 (T) = (0 -88.8158492514656) / Math.Sqrt((0.49117743135536424 / (299)) + (0.2747509248935792 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.2982838189738148 = (126.56947588351443 - 88.8158492514656) / 126.56947588351443 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Numerics.Tests.Perf_BigInteger.Ctor_ByteArray(BigIntegerData)
       push      rsi
       sub       rsp,40
       vzeroupper
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rdx
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+30],xmm0
       mov       rcx,[r8+10]
       lea       rdx,[rsp+30]
       test      rcx,rcx
       je        short M00_L00
       lea       r8,[rcx+10]
       mov       ecx,[rcx+8]
       mov       [rsp+20],r8
       mov       [rsp+28],ecx
       mov       rcx,rdx
       lea       rdx,[rsp+20]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFA85EBF0C0]; System.Numerics.BigInteger..ctor(System.ReadOnlySpan`1<Byte>, Boolean, Boolean)
       mov       rdx,[rsp+30]
       mov       rcx,rsi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       eax,[rsp+38]
       mov       [rsi+8],eax
       mov       rax,rsi
       add       rsp,40
       pop       rsi
       ret
M00_L00:
       mov       rcx,offset MT_System.ArgumentNullException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,1
       mov       rdx,7FFA85F08300
       call      CORINFO_HELP_STRCNS
       mov       rdx,rax
       mov       rcx,rsi
       call      qword ptr [7FFA85C75AF8]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 166
; System.Numerics.BigInteger..ctor(System.ReadOnlySpan`1<Byte>, Boolean, Boolean)
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,48
       xor       eax,eax
       mov       [rsp+30],rax
       mov       rdi,rcx
       mov       ebx,r9d
       mov       rbp,[rdx]
       mov       r14d,[rdx+8]
       mov       esi,r14d
       test      esi,esi
       jle       near ptr M01_L11
       test      bl,bl
       jne       short M01_L00
       lea       ecx,[r14-1]
       cmp       ecx,esi
       jae       near ptr M01_L55
       lea       ecx,[r14-1]
       movzx     ecx,byte ptr [rcx+rbp]
       jmp       short M01_L01
       nop       dword ptr [rax]
       nop       dword ptr [rax+rax]
M01_L00:
       movzx     ecx,byte ptr [rbp]
M01_L01:
       movzx     ecx,cl
       test      cl,80
       je        short M01_L02
       xor       edx,edx
       test      r8b,r8b
       sete      dl
       jmp       short M01_L03
M01_L02:
       xor       edx,edx
M01_L03:
       movzx     r15d,dl
       test      ecx,ecx
       jne       short M01_L12
       test      bl,bl
       je        short M01_L07
       mov       ecx,1
       jmp       short M01_L05
M01_L04:
       inc       ecx
M01_L05:
       cmp       ecx,r14d
       jge       short M01_L06
       mov       edx,ecx
       cmp       byte ptr [rdx+rbp],0
       je        short M01_L04
M01_L06:
       cmp       ecx,r14d
       ja        near ptr M01_L54
       mov       edx,ecx
       add       rbp,rdx
       sub       r14d,ecx
       mov       esi,r14d
       jmp       short M01_L12
M01_L07:
       lea       esi,[r14-2]
       jmp       short M01_L09
M01_L08:
       dec       esi
M01_L09:
       test      esi,esi
       jl        short M01_L10
       cmp       esi,r14d
       jae       near ptr M01_L55
       mov       ecx,esi
       cmp       byte ptr [rcx+rbp],0
       je        short M01_L08
M01_L10:
       inc       esi
       jmp       short M01_L12
M01_L11:
       xor       r15d,r15d
M01_L12:
       test      esi,esi
       jne       short M01_L14
       xor       ecx,ecx
       mov       [rdi+8],ecx
M01_L13:
       xor       ecx,ecx
       mov       [rdi],rcx
       jmp       near ptr M01_L53
M01_L14:
       cmp       esi,4
       jg        near ptr M01_L23
       test      r15d,r15d
       jne       short M01_L15
       xor       ecx,ecx
       jmp       short M01_L16
M01_L15:
       mov       ecx,0FFFFFFFF
M01_L16:
       mov       [rdi+8],ecx
       test      bl,bl
       je        short M01_L18
       xor       ecx,ecx
       test      esi,esi
       jle       short M01_L20
M01_L17:
       mov       edx,[rdi+8]
       shl       edx,8
       cmp       ecx,r14d
       jae       near ptr M01_L55
       mov       eax,ecx
       movzx     eax,byte ptr [rax+rbp]
       or        edx,eax
       mov       [rdi+8],edx
       inc       ecx
       cmp       ecx,esi
       jl        short M01_L17
       jmp       short M01_L20
       nop       dword ptr [rax]
M01_L18:
       lea       ecx,[rsi-1]
       test      ecx,ecx
       jl        short M01_L20
M01_L19:
       mov       edx,[rdi+8]
       shl       edx,8
       cmp       ecx,r14d
       jae       near ptr M01_L55
       mov       eax,ecx
       movzx     eax,byte ptr [rax+rbp]
       or        edx,eax
       mov       [rdi+8],edx
       dec       ecx
       jns       short M01_L19
M01_L20:
       xor       ecx,ecx
       mov       [rdi],rcx
       cmp       dword ptr [rdi+8],0
       jge       short M01_L21
       test      r15d,r15d
       jne       short M01_L21
       mov       rcx,offset MT_System.UInt32[]
       mov       edx,1
       call      CORINFO_HELP_NEWARR_1_VC
       mov       edx,[rdi+8]
       mov       [rax+10],edx
       mov       rcx,rdi
       mov       rdx,rax
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       dword ptr [rdi+8],1
M01_L21:
       cmp       dword ptr [rdi+8],80000000
       jne       near ptr M01_L53
M01_L22:
       mov       rcx,7FFA85F087A8
       mov       edx,12
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       mov       rax,1D7A2407CD0
       mov       rsi,[rax]
       add       rsi,8
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       jmp       near ptr M01_L53
       nop       dword ptr [rax]
M01_L23:
       mov       edx,esi
       sar       edx,1F
       and       edx,3
       add       edx,esi
       and       edx,0FFFFFFFC
       mov       r12d,esi
       sub       r12d,edx
       mov       r13d,esi
       sar       r13d,1F
       and       r13d,3
       add       r13d,esi
       sar       r13d,2
       test      r12d,r12d
       je        short M01_L24
       mov       eax,1
       jmp       short M01_L25
M01_L24:
       xor       eax,eax
M01_L25:
       add       r13d,eax
       movsxd    rdx,r13d
       mov       rcx,offset MT_System.UInt32[]
       call      CORINFO_HELP_NEWARR_1_VC
       lea       ecx,[rsi-1]
       mov       [rsp+44],ecx
       test      bl,bl
       je        short M01_L31
       nop       dword ptr [rax]
       lea       edx,[rsi-4]
       xor       r8d,r8d
       jmp       short M01_L28
M01_L26:
       xor       r9d,r9d
       mov       r10d,r8d
M01_L27:
       cmp       edx,r14d
       jae       near ptr M01_L55
       mov       r11d,edx
       movzx     r11d,byte ptr [r11+rbp]
       mov       ecx,[rax+8]
       cmp       r8d,ecx
       jae       near ptr M01_L55
       mov       ecx,[rax+r10*4+10]
       shl       ecx,8
       or        ecx,r11d
       mov       [rax+r10*4+10],ecx
       inc       edx
       inc       r9d
       cmp       r9d,4
       jl        short M01_L27
       add       edx,0FFFFFFF8
       inc       r8d
M01_L28:
       mov       r9d,r8d
       test      r12d,r12d
       je        short M01_L29
       mov       r10d,1
       jmp       short M01_L30
M01_L29:
       xor       r10d,r10d
M01_L30:
       mov       r11d,r13d
       sub       r11d,r10d
       cmp       r11d,r9d
       jg        short M01_L26
       jmp       short M01_L37
       nop       dword ptr [rax]
M01_L31:
       mov       edx,3
       xor       r8d,r8d
       jmp       short M01_L34
M01_L32:
       xor       r9d,r9d
       mov       r10d,r8d
M01_L33:
       cmp       edx,r14d
       jae       near ptr M01_L55
       mov       r11d,edx
       movzx     r11d,byte ptr [r11+rbp]
       mov       ecx,[rax+8]
       cmp       r8d,ecx
       jae       near ptr M01_L55
       mov       ecx,[rax+r10*4+10]
       shl       ecx,8
       or        ecx,r11d
       mov       [rax+r10*4+10],ecx
       dec       edx
       inc       r9d
       cmp       r9d,4
       jl        short M01_L33
       add       edx,8
       inc       r8d
M01_L34:
       mov       r9d,r8d
       test      r12d,r12d
       je        short M01_L35
       mov       r10d,1
       jmp       short M01_L36
       nop       dword ptr [rax]
M01_L35:
       xor       r10d,r10d
M01_L36:
       mov       r11d,r13d
       sub       r11d,r10d
       cmp       r11d,r9d
       jg        short M01_L32
M01_L37:
       test      r12d,r12d
       je        near ptr M01_L42
       test      r15d,r15d
       je        short M01_L38
       lea       edx,[r13-1]
       mov       r9d,[rax+8]
       cmp       edx,r9d
       jae       near ptr M01_L55
       dec       r13d
       mov       r9d,r13d
       mov       dword ptr [rax+r9*4+10],0FFFFFFFF
M01_L38:
       test      bl,bl
       je        short M01_L40
       xor       edx,edx
       test      r12d,r12d
       jle       near ptr M01_L42
       mov       ecx,r8d
M01_L39:
       cmp       edx,r14d
       jae       near ptr M01_L55
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       mov       r10d,[rax+8]
       mov       esi,r10d
       cmp       r8d,esi
       jae       near ptr M01_L55
       mov       r10d,[rax+rcx*4+10]
       shl       r10d,8
       or        r9d,r10d
       mov       [rax+rcx*4+10],r9d
       inc       edx
       cmp       edx,r12d
       jl        short M01_L39
       jmp       short M01_L42
       nop       dword ptr [rax]
M01_L40:
       mov       ecx,[rsp+44]
       mov       edx,ecx
       mov       ebx,esi
       sub       ebx,r12d
       cmp       ebx,edx
       jg        short M01_L42
       mov       ecx,r8d
M01_L41:
       cmp       edx,r14d
       jae       near ptr M01_L55
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       mov       esi,[rax+8]
       cmp       r8d,esi
       jae       near ptr M01_L55
       mov       r10d,[rax+rcx*4+10]
       shl       r10d,8
       or        r9d,r10d
       mov       [rax+rcx*4+10],r9d
       dec       edx
       cmp       ebx,edx
       jle       short M01_L41
M01_L42:
       test      r15d,r15d
       je        near ptr M01_L51
       lea       rcx,[rax+10]
       mov       [rsp+28],rax
       mov       r9d,[rax+8]
       mov       r15d,r9d
       mov       edx,r15d
       mov       [rsp+30],rcx
       mov       [rsp+38],edx
       lea       rcx,[rsp+30]
       call      qword ptr [7FFA860E9540]
       lea       r14d,[r15-1]
       jmp       short M01_L44
M01_L43:
       dec       r14d
       mov       [rsp+28],r13
M01_L44:
       test      r14d,r14d
       jl        short M01_L45
       cmp       r14d,r15d
       jae       near ptr M01_L55
       mov       ecx,r14d
       mov       r13,[rsp+28]
       cmp       dword ptr [r13+rcx*4+10],0
       je        short M01_L43
       mov       [rsp+28],r13
M01_L45:
       inc       r14d
       cmp       r14d,1
       jne       short M01_L46
       test      r15d,r15d
       je        near ptr M01_L55
       mov       r13,[rsp+28]
       mov       ebp,[r13+10]
       mov       ecx,ebp
       cmp       ecx,1
       je        short M01_L47
       cmp       ecx,80000000
       je        near ptr M01_L22
       jmp       short M01_L48
M01_L46:
       mov       r13,[rsp+28]
       jmp       short M01_L49
M01_L47:
       mov       rcx,7FFA85F087A8
       mov       edx,12
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       mov       rax,1D7A2407CE8
       mov       rsi,[rax]
       add       rsi,8
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       jmp       short M01_L53
M01_L48:
       test      ebp,ebp
       jle       short M01_L49
       mov       edx,ebp
       neg       edx
       mov       [rdi+8],edx
       jmp       near ptr M01_L13
M01_L49:
       cmp       r15d,r14d
       je        short M01_L50
       mov       dword ptr [rdi+8],0FFFFFFFF
       movsxd    rdx,r14d
       mov       rcx,offset MT_System.UInt32[]
       call      CORINFO_HELP_NEWARR_1_VC
       mov       rdx,rax
       mov       rcx,rdi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       rdx,[rdi]
       mov       rcx,r13
       mov       r8d,r14d
       call      qword ptr [7FFA85AB96A8]
       jmp       short M01_L53
M01_L50:
       mov       dword ptr [rdi+8],0FFFFFFFF
       jmp       short M01_L52
M01_L51:
       mov       dword ptr [rdi+8],1
       mov       r13,rax
M01_L52:
       mov       rcx,rdi
       mov       rdx,r13
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
M01_L53:
       nop
       add       rsp,48
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L54:
       call      qword ptr [7FFA85E8B4E0]
       int       3
M01_L55:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 1297

Compare Jit Disasm

; System.Numerics.Tests.Perf_BigInteger.Ctor_ByteArray(BigIntegerData)
       push      rsi
       sub       rsp,40
       vzeroupper
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rdx
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+30],xmm0
       mov       rcx,[r8+10]
       lea       rdx,[rsp+30]
       test      rcx,rcx
       je        short M00_L00
       lea       r8,[rcx+10]
       mov       ecx,[rcx+8]
       mov       [rsp+20],r8
       mov       [rsp+28],ecx
       mov       rcx,rdx
       lea       rdx,[rsp+20]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFDEFC418B8]; System.Numerics.BigInteger..ctor(System.ReadOnlySpan`1<Byte>, Boolean, Boolean)
       mov       rdx,[rsp+30]
       mov       rcx,rsi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       eax,[rsp+38]
       mov       [rsi+8],eax
       mov       rax,rsi
       add       rsp,40
       pop       rsi
       ret
M00_L00:
       mov       rcx,offset MT_System.ArgumentNullException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       ecx,1
       mov       rdx,7FFDEFC089C8
       call      CORINFO_HELP_STRCNS
       mov       rdx,rax
       mov       rcx,rsi
       call      qword ptr [7FFDEF975AF8]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 166
; System.Numerics.BigInteger..ctor(System.ReadOnlySpan`1<Byte>, Boolean, Boolean)
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,38
       xor       eax,eax
       mov       [rsp+28],rax
       mov       rdi,rcx
       mov       ebx,r9d
       mov       rbp,[rdx]
       mov       r14d,[rdx+8]
       mov       esi,r14d
       test      esi,esi
       jle       near ptr M01_L11
       test      bl,bl
       jne       short M01_L00
       lea       ecx,[r14-1]
       cmp       ecx,esi
       jae       near ptr M01_L53
       lea       ecx,[r14-1]
       movzx     ecx,byte ptr [rcx+rbp]
       jmp       short M01_L01
       nop       dword ptr [rax]
       nop       dword ptr [rax+rax]
M01_L00:
       movzx     ecx,byte ptr [rbp]
M01_L01:
       movzx     ecx,cl
       test      cl,80
       je        short M01_L02
       xor       edx,edx
       test      r8b,r8b
       sete      dl
       jmp       short M01_L03
M01_L02:
       xor       edx,edx
M01_L03:
       movzx     r15d,dl
       test      ecx,ecx
       jne       short M01_L12
       test      bl,bl
       je        short M01_L07
       mov       ecx,1
       jmp       short M01_L05
M01_L04:
       inc       ecx
M01_L05:
       cmp       ecx,r14d
       jge       short M01_L06
       mov       edx,ecx
       cmp       byte ptr [rdx+rbp],0
       je        short M01_L04
M01_L06:
       cmp       ecx,r14d
       ja        near ptr M01_L52
       mov       edx,ecx
       add       rbp,rdx
       sub       r14d,ecx
       mov       esi,r14d
       jmp       short M01_L12
M01_L07:
       lea       esi,[r14-2]
       jmp       short M01_L09
M01_L08:
       dec       esi
M01_L09:
       test      esi,esi
       jl        short M01_L10
       cmp       esi,r14d
       jae       near ptr M01_L53
       mov       ecx,esi
       cmp       byte ptr [rcx+rbp],0
       je        short M01_L08
M01_L10:
       inc       esi
       jmp       short M01_L12
M01_L11:
       xor       r15d,r15d
M01_L12:
       test      esi,esi
       jne       short M01_L14
       xor       ecx,ecx
       mov       [rdi+8],ecx
M01_L13:
       xor       ecx,ecx
       mov       [rdi],rcx
       jmp       near ptr M01_L51
M01_L14:
       cmp       esi,4
       jg        near ptr M01_L23
       test      r15d,r15d
       jne       short M01_L15
       xor       ecx,ecx
       jmp       short M01_L16
M01_L15:
       mov       ecx,0FFFFFFFF
M01_L16:
       mov       [rdi+8],ecx
       test      bl,bl
       je        short M01_L18
       xor       ecx,ecx
       test      esi,esi
       jle       short M01_L20
M01_L17:
       mov       edx,[rdi+8]
       shl       edx,8
       cmp       ecx,r14d
       jae       near ptr M01_L53
       mov       eax,ecx
       movzx     eax,byte ptr [rax+rbp]
       or        edx,eax
       mov       [rdi+8],edx
       inc       ecx
       cmp       ecx,esi
       jl        short M01_L17
       jmp       short M01_L20
       nop       dword ptr [rax]
M01_L18:
       lea       ecx,[rsi-1]
       test      ecx,ecx
       jl        short M01_L20
M01_L19:
       mov       edx,[rdi+8]
       shl       edx,8
       cmp       ecx,r14d
       jae       near ptr M01_L53
       mov       eax,ecx
       movzx     eax,byte ptr [rax+rbp]
       or        edx,eax
       mov       [rdi+8],edx
       dec       ecx
       jns       short M01_L19
M01_L20:
       xor       ecx,ecx
       mov       [rdi],rcx
       cmp       dword ptr [rdi+8],0
       jge       short M01_L21
       test      r15d,r15d
       jne       short M01_L21
       mov       rcx,offset MT_System.UInt32[]
       mov       edx,1
       call      CORINFO_HELP_NEWARR_1_VC
       mov       edx,[rdi+8]
       mov       [rax+10],edx
       mov       rcx,rdi
       mov       rdx,rax
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       dword ptr [rdi+8],1
M01_L21:
       cmp       dword ptr [rdi+8],80000000
       jne       near ptr M01_L51
M01_L22:
       mov       rcx,7FFDEFC08E70
       mov       edx,12
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       mov       rax,1BD42C07CD0
       mov       rsi,[rax]
       add       rsi,8
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       jmp       near ptr M01_L51
       nop
M01_L23:
       mov       edx,esi
       sar       edx,1F
       and       edx,3
       add       edx,esi
       and       edx,0FFFFFFFC
       mov       r12d,esi
       sub       r12d,edx
       mov       r13d,esi
       sar       r13d,1F
       and       r13d,3
       add       r13d,esi
       sar       r13d,2
       test      r12d,r12d
       je        short M01_L24
       mov       eax,1
       jmp       short M01_L25
M01_L24:
       xor       eax,eax
M01_L25:
       add       r13d,eax
       movsxd    rdx,r13d
       mov       rcx,offset MT_System.UInt32[]
       call      CORINFO_HELP_NEWARR_1_VC
       lea       ecx,[rsi-1]
       test      bl,bl
       je        near ptr M01_L30
       lea       edx,[rsi-4]
       xor       r8d,r8d
       jmp       near ptr M01_L27
M01_L26:
       cmp       edx,r14d
       jae       near ptr M01_L53
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       mov       r10d,[rax+8]
       cmp       r8d,r10d
       jae       near ptr M01_L53
       mov       r10d,r8d
       mov       r11d,[rax+r10*4+10]
       shl       r11d,8
       or        r11d,r9d
       mov       r9d,r11d
       mov       [rax+r10*4+10],r9d
       inc       edx
       cmp       edx,r14d
       jae       near ptr M01_L53
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       shl       r11d,8
       or        r11d,r9d
       mov       r9d,r11d
       mov       [rax+r10*4+10],r9d
       inc       edx
       cmp       edx,r14d
       jae       near ptr M01_L53
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       shl       r11d,8
       or        r11d,r9d
       mov       r9d,r11d
       mov       [rax+r10*4+10],r9d
       inc       edx
       cmp       edx,r14d
       jae       near ptr M01_L53
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       shl       r11d,8
       or        r9d,r11d
       mov       [rax+r10*4+10],r9d
       inc       edx
       add       edx,0FFFFFFF8
       inc       r8d
M01_L27:
       mov       r9d,r8d
       test      r12d,r12d
       je        short M01_L28
       mov       r10d,1
       jmp       short M01_L29
M01_L28:
       xor       r10d,r10d
M01_L29:
       mov       r11d,r13d
       sub       r11d,r10d
       cmp       r11d,r9d
       jg        near ptr M01_L26
       jmp       near ptr M01_L35
M01_L30:
       mov       edx,3
       xor       r8d,r8d
       jmp       near ptr M01_L32
M01_L31:
       cmp       edx,r14d
       jae       near ptr M01_L53
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       mov       r10d,[rax+8]
       cmp       r8d,r10d
       jae       near ptr M01_L53
       mov       r10d,r8d
       mov       r11d,[rax+r10*4+10]
       shl       r11d,8
       or        r11d,r9d
       mov       r9d,r11d
       mov       [rax+r10*4+10],r9d
       dec       edx
       cmp       edx,r14d
       jae       near ptr M01_L53
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       shl       r11d,8
       or        r11d,r9d
       mov       r9d,r11d
       mov       [rax+r10*4+10],r9d
       dec       edx
       cmp       edx,r14d
       jae       near ptr M01_L53
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       shl       r11d,8
       or        r11d,r9d
       mov       r9d,r11d
       mov       [rax+r10*4+10],r9d
       dec       edx
       cmp       edx,r14d
       jae       near ptr M01_L53
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       shl       r11d,8
       or        r9d,r11d
       mov       [rax+r10*4+10],r9d
       dec       edx
       add       edx,8
       inc       r8d
M01_L32:
       mov       r9d,r8d
       test      r12d,r12d
       je        short M01_L33
       mov       r10d,1
       jmp       short M01_L34
M01_L33:
       xor       r10d,r10d
M01_L34:
       mov       r11d,r13d
       sub       r11d,r10d
       cmp       r11d,r9d
       jg        near ptr M01_L31
M01_L35:
       test      r12d,r12d
       je        near ptr M01_L40
       test      r15d,r15d
       je        short M01_L36
       lea       edx,[r13-1]
       mov       r10d,[rax+8]
       mov       r9d,r10d
       cmp       edx,r9d
       jae       near ptr M01_L53
       dec       r13d
       mov       r9d,r13d
       mov       dword ptr [rax+r9*4+10],0FFFFFFFF
M01_L36:
       test      bl,bl
       je        short M01_L38
       xor       edx,edx
       test      r12d,r12d
       jle       near ptr M01_L40
       mov       ecx,r8d
M01_L37:
       cmp       edx,r14d
       jae       near ptr M01_L53
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       mov       r10d,[rax+8]
       mov       esi,r10d
       cmp       r8d,esi
       jae       near ptr M01_L53
       mov       r10d,[rax+rcx*4+10]
       shl       r10d,8
       or        r9d,r10d
       mov       [rax+rcx*4+10],r9d
       inc       edx
       cmp       edx,r12d
       jl        short M01_L37
       jmp       short M01_L40
M01_L38:
       mov       edx,ecx
       mov       ebx,esi
       sub       ebx,r12d
       cmp       ebx,edx
       jg        short M01_L40
       mov       ecx,r8d
M01_L39:
       cmp       edx,r14d
       jae       near ptr M01_L53
       mov       r9d,edx
       movzx     r9d,byte ptr [r9+rbp]
       mov       esi,[rax+8]
       cmp       r8d,esi
       jae       near ptr M01_L53
       mov       r10d,[rax+rcx*4+10]
       shl       r10d,8
       or        r9d,r10d
       mov       [rax+rcx*4+10],r9d
       dec       edx
       cmp       ebx,edx
       jle       short M01_L39
M01_L40:
       test      r15d,r15d
       je        near ptr M01_L49
       lea       rcx,[rax+10]
       mov       [rsp+20],rax
       mov       r9d,[rax+8]
       mov       r15d,r9d
       mov       edx,r15d
       mov       [rsp+28],rcx
       mov       [rsp+30],edx
       lea       rcx,[rsp+28]
       call      qword ptr [7FFDEFDEB540]
       lea       r14d,[r15-1]
       jmp       short M01_L42
M01_L41:
       dec       r14d
       mov       [rsp+20],r13
M01_L42:
       test      r14d,r14d
       jl        short M01_L43
       cmp       r14d,r15d
       jae       near ptr M01_L53
       mov       ecx,r14d
       mov       r13,[rsp+20]
       cmp       dword ptr [r13+rcx*4+10],0
       je        short M01_L41
       mov       [rsp+20],r13
M01_L43:
       inc       r14d
       cmp       r14d,1
       jne       short M01_L44
       test      r15d,r15d
       je        near ptr M01_L53
       mov       r13,[rsp+20]
       mov       ebp,[r13+10]
       mov       ecx,ebp
       cmp       ecx,1
       je        short M01_L45
       cmp       ecx,80000000
       je        near ptr M01_L22
       jmp       short M01_L46
M01_L44:
       mov       r13,[rsp+20]
       jmp       short M01_L47
M01_L45:
       mov       rcx,7FFDEFC08E70
       mov       edx,12
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       mov       rax,1BD42C07CE8
       mov       rsi,[rax]
       add       rsi,8
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       jmp       short M01_L51
M01_L46:
       test      ebp,ebp
       jle       short M01_L47
       mov       edx,ebp
       neg       edx
       mov       [rdi+8],edx
       jmp       near ptr M01_L13
M01_L47:
       cmp       r15d,r14d
       je        short M01_L48
       mov       dword ptr [rdi+8],0FFFFFFFF
       movsxd    rdx,r14d
       mov       rcx,offset MT_System.UInt32[]
       call      CORINFO_HELP_NEWARR_1_VC
       mov       rdx,rax
       mov       rcx,rdi
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       rdx,[rdi]
       mov       rcx,r13
       mov       r8d,r14d
       call      qword ptr [7FFDEF7B96A8]
       jmp       short M01_L51
M01_L48:
       mov       dword ptr [rdi+8],0FFFFFFFF
       jmp       short M01_L50
M01_L49:
       mov       dword ptr [rdi+8],1
       mov       r13,rax
M01_L50:
       mov       rcx,rdi
       mov       rdx,r13
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
M01_L51:
       nop
       add       rsp,38
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       ret
M01_L52:
       call      qword ptr [7FFDEFB7D4E0]
       int       3
M01_L53:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 1482

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Concat_CharEnumerable - Duration of single invocation 8.53 μs 7.03 μs 0.82 0.05 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.Concat_CharEnumerable


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 7.031853875619648 < 8.1028824713508.
IsChangePoint: Marked as a change because one of 12/1/2022 7:29:59 PM, 12/20/2022 1:34:12 PM, 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 19.275576954817417 (T) = (0 -7044.047050692874) / Math.Sqrt((479758.0076521306 / (299)) + (192.346838627895 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.09926812746885921 = (7820.3594937730395 - 7044.047050692874) / 7820.3594937730395 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Tests.Perf_String.Concat_CharEnumerable()
       mov       rcx,1AC08C069C8
       mov       rcx,[rcx]
       jmp       qword ptr [7FFDDC935378]; System.String.Concat[[System.Char, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1<Char>)
; Total bytes of code 19
; System.String.Concat[[System.Char, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1<Char>)
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,58
       lea       rbp,[rsp+20]
       xor       eax,eax
       mov       [rbp+18],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp+20],xmm4
       mov       [rbp+30],rax
       mov       [rbp],rsp
       mov       rax,0FC79B83B35FC
       mov       [rbp+8],rax
       test      rcx,rcx
       je        near ptr M01_L09
       mov       r11,7FFDDC210528
       call      qword ptr [r11]
       mov       rsi,rax
       mov       [rbp+10],rsi
       mov       rcx,rsi
       mov       r11,7FFDDC210530
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L00
       mov       rdi,1EC9D810008
       jmp       near ptr M01_L07
M01_L00:
       mov       rcx,rsi
       mov       r11,7FFDDC210538
       call      qword ptr [r11]
       mov       ebx,eax
       mov       rcx,rsi
       mov       r11,7FFDDC210540
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L01
       mov       ecx,1
       call      System.String.FastAllocateString(Int32)
       mov       rdi,rax
       mov       [rdi+0C],bx
       jmp       near ptr M01_L07
M01_L01:
       test      [rsp],esp
       sub       rsp,200
       lea       rcx,[rsp+20]
       xor       r11d,r11d
       mov       [rbp+18],r11
       mov       [rbp+28],rcx
       mov       dword ptr [rbp+30],100
       mov       [rbp+20],r11d
       mov       ecx,[rbp+20]
       cmp       ecx,[rbp+30]
       jae       short M01_L03
       lea       r11,[rbp+28]
       cmp       ecx,[r11+8]
       jae       short M01_L02
       mov       r11,[r11]
       mov       eax,ecx
       mov       [r11+rax*2],bx
       inc       ecx
       mov       [rbp+20],ecx
       jmp       short M01_L04
M01_L02:
       call      CORINFO_HELP_RNGCHKFAIL
M01_L03:
       lea       rcx,[rbp+18]
       mov       edx,ebx
       call      qword ptr [7FFDDC831B70]; System.Text.ValueStringBuilder.GrowAndAppend(Char)
M01_L04:
       mov       rcx,rsi
       mov       r11,7FFDDC210548
       call      qword ptr [r11]
       mov       ebx,eax
       mov       ecx,[rbp+20]
       cmp       ecx,[rbp+30]
       jae       short M01_L05
       lea       r11,[rbp+28]
       cmp       ecx,[r11+8]
       jae       short M01_L02
       mov       r11,[r11]
       mov       eax,ecx
       mov       [r11+rax*2],bx
       inc       ecx
       mov       [rbp+20],ecx
       jmp       short M01_L06
M01_L05:
       lea       rcx,[rbp+18]
       mov       edx,ebx
       call      qword ptr [7FFDDC831B70]; System.Text.ValueStringBuilder.GrowAndAppend(Char)
M01_L06:
       mov       rcx,rsi
       mov       r11,7FFDDC210550
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L04
       lea       rcx,[rbp+18]
       call      qword ptr [7FFDDC831A08]; System.Text.ValueStringBuilder.ToString()
       mov       rdi,rax
M01_L07:
       mov       rcx,rsi
       mov       r11,7FFDDC210558
       call      qword ptr [r11]
       mov       rax,rdi
       mov       rcx,0FC79B83B35FC
       cmp       [rbp+8],rcx
       je        short M01_L08
       call      CORINFO_HELP_FAIL_FAST
M01_L08:
       nop
       lea       rsp,[rbp+38]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M01_L09:
       mov       ecx,166D
       mov       rdx,7FFDDC204000
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFDDC4F5BA0]
       int       3
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+20]
       cmp       qword ptr [rbp+10],0
       je        short M01_L10
       mov       rcx,[rbp+10]
       mov       r11,7FFDDC210558
       call      qword ptr [r11]
M01_L10:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
; Total bytes of code 496

Compare Jit Disasm

; System.Tests.Perf_String.Concat_CharEnumerable()
       mov       rcx,1F2E8C069C8
       mov       rcx,[rcx]
       jmp       qword ptr [7FFB0A4A9D20]; System.String.Concat[[System.Char, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1<Char>)
; Total bytes of code 19
; System.String.Concat[[System.Char, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1<Char>)
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,58
       lea       rbp,[rsp+20]
       xor       eax,eax
       mov       [rbp+18],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp+20],xmm4
       mov       [rbp+30],rax
       mov       [rbp],rsp
       mov       rax,14EF4201A33B
       mov       [rbp+8],rax
       test      rcx,rcx
       je        near ptr M01_L09
       mov       r11,7FFB09D80528
       call      qword ptr [r11]
       mov       rsi,rax
       mov       [rbp+10],rsi
       mov       rcx,rsi
       mov       r11,7FFB09D80530
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L00
       mov       rdi,2337D3C0008
       jmp       near ptr M01_L07
M01_L00:
       mov       rcx,rsi
       mov       r11,7FFB09D80538
       call      qword ptr [r11]
       mov       ebx,eax
       mov       rcx,rsi
       mov       r11,7FFB09D80540
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L01
       mov       ecx,1
       call      System.String.FastAllocateString(Int32)
       mov       rdi,rax
       mov       [rdi+0C],bx
       jmp       near ptr M01_L07
M01_L01:
       test      [rsp],esp
       sub       rsp,200
       lea       rcx,[rsp+20]
       xor       r11d,r11d
       mov       [rbp+18],r11
       mov       [rbp+28],rcx
       mov       dword ptr [rbp+30],100
       mov       [rbp+20],r11d
       mov       ecx,[rbp+20]
       cmp       ecx,[rbp+30]
       jae       short M01_L03
       lea       r11,[rbp+28]
       cmp       ecx,[r11+8]
       jae       short M01_L02
       mov       r11,[r11]
       mov       eax,ecx
       mov       [r11+rax*2],bx
       inc       ecx
       mov       [rbp+20],ecx
       jmp       short M01_L04
M01_L02:
       call      CORINFO_HELP_RNGCHKFAIL
M01_L03:
       lea       rcx,[rbp+18]
       mov       edx,ebx
       call      qword ptr [7FFB0A3A5B70]; System.Text.ValueStringBuilder.GrowAndAppend(Char)
M01_L04:
       mov       rcx,rsi
       mov       r11,7FFB09D80548
       call      qword ptr [r11]
       mov       ebx,eax
       mov       ecx,[rbp+20]
       cmp       ecx,[rbp+30]
       jae       short M01_L05
       lea       r11,[rbp+28]
       cmp       ecx,[r11+8]
       jae       short M01_L02
       mov       r11,[r11]
       mov       eax,ecx
       mov       [r11+rax*2],bx
       inc       ecx
       mov       [rbp+20],ecx
       jmp       short M01_L06
M01_L05:
       lea       rcx,[rbp+18]
       mov       edx,ebx
       call      qword ptr [7FFB0A3A5B70]; System.Text.ValueStringBuilder.GrowAndAppend(Char)
M01_L06:
       mov       rcx,rsi
       mov       r11,7FFB09D80550
       call      qword ptr [r11]
       test      eax,eax
       jne       short M01_L04
       lea       rcx,[rbp+18]
       call      qword ptr [7FFB0A3A5A08]; System.Text.ValueStringBuilder.ToString()
       mov       rdi,rax
M01_L07:
       mov       rcx,rsi
       mov       r11,7FFB09D80558
       call      qword ptr [r11]
       mov       rax,rdi
       mov       rcx,14EF4201A33B
       cmp       [rbp+8],rcx
       je        short M01_L08
       call      CORINFO_HELP_FAIL_FAST
M01_L08:
       nop
       lea       rsp,[rbp+38]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M01_L09:
       mov       ecx,166D
       mov       rdx,7FFB09D74000
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFB0A065BA0]
       int       3
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+20]
       cmp       qword ptr [rbp+10],0
       je        short M01_L10
       mov       rcx,[rbp+10]
       mov       r11,7FFB09D80558
       call      qword ptr [r11]
M01_L10:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
; Total bytes of code 496

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Collections.IterateForNonGeneric<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ArrayList - Duration of single invocation 1.61 μs 1.46 μs 0.91 0.07 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.IterateForNonGeneric&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.IterateForNonGeneric<Int32>.ArrayList(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 1.459001723922743 < 1.528690917820298.
IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/14/2022 5:20:21 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 24.42079112987401 (T) = (0 -1454.2625006297585) / Math.Sqrt((6157.952524685386 / (299)) + (9.106822824394678 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.07211902765312364 = (1567.2942370523158 - 1454.2625006297585) / 1567.2942370523158 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Collections.IterateFor<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ImmutableList - Duration of single invocation 15.95 μs 15.02 μs 0.94 0.02 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.IterateFor&lt;String&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.IterateFor<String>.ImmutableList(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 15.019666106845811 < 15.070175340104095.
IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 12/14/2022 12:26:48 AM, 12/14/2022 5:20:21 PM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 28.503411625457655 (T) = (0 -14984.823296533617) / Math.Sqrt((268324.6219150645 / (299)) + (2961.501383952327 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.06100637327410124 = (15958.38658541591 - 14984.823296533617) / 15958.38658541591 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

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

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Jan 31, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Buffers.Tests.ReadOnlySequenceTests<Byte>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
IterateTryGetTenSegments - Duration of single invocation 50.35 ns 43.61 ns 0.87 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.Buffers.Tests.ReadOnlySequenceTests&lt;Byte&gt;*'

Payloads

Baseline
Compare

Histogram

System.Buffers.Tests.ReadOnlySequenceTests<Byte>.IterateTryGetTenSegments


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 43.60809004724643 < 47.52850029496189.
IsChangePoint: Marked as a change because one of 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/10/2022 11:25:25 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 20.75996922296635 (T) = (0 -44.09582005180055) / Math.Sqrt((6.84759021453642 / (299)) + (0.17592619982533733 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.08496024283509773 = (48.190059182154094 - 44.09582005180055) / 48.190059182154094 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Runtime.Intrinsics.Tests.Perf_Vector128Int

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
GetHashCodeBenchmark - Duration of single invocation 14.16 ns 12.05 ns 0.85 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.Runtime.Intrinsics.Tests.Perf_Vector128Int*'

Payloads

Baseline
Compare

Histogram

System.Runtime.Intrinsics.Tests.Perf_Vector128Int.GetHashCodeBenchmark


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 12.0517348625614 < 13.48947670328383.
IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 11.572317490357332 (T) = (0 -12.074949511391681) / Math.Sqrt((1.0707370265687615 / (299)) + (0.0008309447870660461 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.054778171287559733 = (12.774725619529866 - 12.074949511391681) / 12.774725619529866 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Collections.IterateFor<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ImmutableList - Duration of single invocation 15.85 μs 14.24 μs 0.90 0.02 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.IterateFor&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.IterateFor<Int32>.ImmutableList(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 14.240051229508193 < 15.079108079526224.
IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 42.08190537437403 (T) = (0 -14243.252635416842) / Math.Sqrt((415585.7868307839 / (299)) + (621.6513905322779 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.10101540215186994 = (15843.711526883162 - 14243.252635416842) / 15843.711526883162 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Memory.Span<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
IndexOfAnyFourValues - Duration of single invocation 894.42 ns 813.17 ns 0.91 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>.IndexOfAnyFourValues(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 813.1700622139053 < 849.7073567442625.
IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 21.009735048168224 (T) = (0 -813.4331346244137) / Math.Sqrt((1577.6160922439726 / (299)) + (3.057009042022896 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.057378291335737394 = (862.9475930244436 - 813.4331346244137) / 862.9475930244436 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Collections.ContainsTrue<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ImmutableArray - Duration of single invocation 503.93 μs 428.83 μs 0.85 0.09 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.ContainsTrue&lt;String&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.ContainsTrue<String>.ImmutableArray(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 428.8314752252252 < 479.2272893145161.
IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 30.08676512740713 (T) = (0 -429113.1253656253) / Math.Sqrt((830952728.9708995 / (299)) + (3668398.271146217 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.11008173271380693 = (482193.861099409 - 429113.1253656253) / 482193.861099409 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Collections.TryGetValueFalse<Int32, Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ImmutableDictionary - Duration of single invocation 26.01 μs 23.74 μs 0.91 0.06 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.TryGetValueFalse&lt;Int32, Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.TryGetValueFalse<Int32, Int32>.ImmutableDictionary(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 23.737290721129607 < 24.82267303027395.
IsChangePoint: Marked as a change because one of 11/18/2022 8:48:12 PM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 16.268301928489176 (T) = (0 -23910.685654783567) / Math.Sqrt((1235089.6578350805 / (299)) + (25830.275245816934 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.0519214195355651 = (25220.151733699593 - 23910.685654783567) / 25220.151733699593 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Collections.ContainsKeyTrue<Int32, Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
IDictionary - Duration of single invocation 5.76 μs 5.02 μs 0.87 0.43 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.ContainsKeyTrue&lt;Int32, Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.ContainsKeyTrue<Int32, Int32>.IDictionary(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 5.023511412985913 < 5.61769253402881.
IsChangePoint: Marked as a change because one of 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 5.870931721716729 (T) = (0 -5114.679566684705) / Math.Sqrt((200040.7674288519 / (299)) + (33090.997663649185 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.0650772459914067 = (5470.697493193853 - 5114.679566684705) / 5470.697493193853 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Collections.ContainsTrue<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ImmutableHashSet - Duration of single invocation 25.31 μs 22.52 μs 0.89 0.03 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.ContainsTrue&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.ContainsTrue<Int32>.ImmutableHashSet(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 22.523064174894223 < 22.58475200047808.
IsChangePoint: Marked as a change because one of 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 1/13/2023 4:37:08 PM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 20.492768237895074 (T) = (0 -22176.120528653624) / Math.Sqrt((324881.30486143404 / (299)) + (28830.18724934322 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.05326979534529656 = (23423.907275401463 - 22176.120528653624) / 23423.907275401463 is greater than 0.05.
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 1b22d373f2cdb08ad05ac79019fab52dc795f6fe
Compare e07f4527bdedff6278accf9db8a8c7f9f2a48beb
Diff Diff

Improvements in System.Collections.AddGivenSize<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ICollection - Duration of single invocation 3.38 μs 2.99 μs 0.89 0.23 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.AddGivenSize&lt;String&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.AddGivenSize<String>.ICollection(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 2.9943784557797057 < 3.203174183109861.
IsChangePoint: Marked as a change because one of 12/14/2022 7:00:38 AM, 1/18/2023 3:20:52 PM, 1/27/2023 7:12:54 PM, 1/30/2023 9:42:46 PM falls between 1/22/2023 2:59:30 AM and 1/30/2023 9:42:46 PM.
IsImprovementStdDev: Marked as improvement because 8.412532903817233 (T) = (0 -2932.4293803372434) / Math.Sqrt((22843.207116235055 / (299)) + (7061.861225968122 / (11))) is greater than 1.9676960046166507 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (11) - 2, .975) and 0.07140131792119576 = (3157.9081867449677 - 2932.4293803372434) / 3157.9081867449677 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

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

@EgorBo
Copy link
Member

EgorBo commented Jan 31, 2023

Benchmarks around Enum, NumberFormatting, BigIntegers are likely improved from dotnet/runtime#80789

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