dotnet / perf-autofiling-issues

A landing place for auto-filed performance issues before they receive triage
MIT License
9 stars 4 forks source link

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

Closed performanceautofiler[bot] closed 1 year ago

performanceautofiler[bot] commented 1 year ago

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.IndexerSetReverse(Int32).IList(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.IterateForEach(Int32).Stack(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_BigInteger.Ctor_ByteArray(numberString%3a%201234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123.html>) 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) ```log ``` ### Description of detection logic ```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. 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, 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 ``` ```assembly ; System.Numerics.BigInteger..ctor(System.ReadOnlySpan`1, 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 ```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 [7FFDEFC418B8]; System.Numerics.BigInteger..ctor(System.ReadOnlySpan`1, 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 ``` ```assembly ; System.Numerics.BigInteger..ctor(System.ReadOnlySpan`1, 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Tests.Perf_String.Concat_CharEnumerable.html>) 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 ```log ``` ### Description of detection logic ```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. 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) ; Total bytes of code 19 ``` ```assembly ; System.String.Concat[[System.Char, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) 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 ```assembly ; 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) ; Total bytes of code 19 ``` ```assembly ; System.String.Concat[[System.Char, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.IterateForNonGeneric(Int32).ArrayList(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.IterateFor(String).ImmutableList(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Buffers.Tests.ReadOnlySequenceTests(Byte).IterateTryGetTenSegments.html>) 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 ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Runtime.Intrinsics.Tests.Perf_Vector128Int.GetHashCodeBenchmark.html>) 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 ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.IterateFor(Int32).ImmutableList(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Memory.Span(Int32).IndexOfAnyFourValues(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.ContainsTrue(String).ImmutableArray(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.TryGetValueFalse(Int32%2c%20Int32).ImmutableDictionary(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.ContainsKeyTrue(Int32%2c%20Int32).IDictionary(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.ContainsTrue(Int32).ImmutableHashSet(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Collections.AddGivenSize(String).ICollection(Size%3a%20512).html>) 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) ```log ``` ### Description of detection logic ```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. 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](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
EgorBo commented 1 year ago

Benchmarks around Enum, NumberFormatting, BigIntegers are likely improved from https://github.com/dotnet/runtime/pull/80789