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/x86: 30 Improvements on 1/11/2023 8:19:46 AM #11767

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Collections.ContainsKeyFalse<String, String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Dictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsKeyFalse(String%2c%20String).Dictionary(Size%3a%20512).html>) 14.41 μs 12.43 μs 0.86 0.02 False
[IDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsKeyFalse(String%2c%20String).IDictionary(Size%3a%20512).html>) 17.37 μs 14.13 μs 0.81 0.16 False

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsKeyFalse&lt;String, String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsKeyFalse<String, String>.Dictionary(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 12.434493670886079 < 13.714713767726002. IsChangePoint: Marked as a change because one of 12/14/2022 11:14:18 PM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 24.20843266715888 (T) = (0 -12425.395582709036) / Math.Sqrt((131041.65878398073 / (299)) + (188943.42036581738 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.13975908421376396 = (14444.08810914623 - 12425.395582709036) / 14444.08810914623 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.ContainsKeyFalse<String, String>.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 14.132811747894104 < 16.503306788063462. IsChangePoint: Marked as a change because one of 12/14/2022 12:01:27 PM, 12/16/2022 3:18:59 PM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 23.363974617843137 (T) = (0 -14321.365479887421) / Math.Sqrt((1522838.1955389248 / (299)) + (452090.0057372077 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.19003343275356638 = (17681.42792433323 - 14321.365479887421) / 17681.42792433323 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Numerics.Tests.Perf_VectorOf<Int16>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[DivisionOperatorBenchmark - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Numerics.Tests.Perf_VectorOf(Int16).DivisionOperatorBenchmark.html>) 50.83 ns 39.59 ns 0.78 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.Numerics.Tests.Perf_VectorOf&lt;Int16&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_VectorOf<Int16>.DivisionOperatorBenchmark ```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 39.587887350322994 < 48.15708858167538. IsChangePoint: Marked as a change because one of 12/1/2022 8:17:56 AM, 12/14/2022 5:20:21 PM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 30.7251731346456 (T) = (0 -39.63351312833911) / Math.Sqrt((32.46225771611853 / (299)) + (0.010304918675956393 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.20373016985109618 = (49.7739731278373 - 39.63351312833911) / 49.7739731278373 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in PerfLabTests.LowLevelPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ForeachOverList100Elements - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.LowLevelPerf.ForeachOverList100Elements.html>) 9.55 ms 7.11 ms 0.74 0.01 False 132468750 91322222.22222222 0.6893869099106184 Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.LowLevelPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.LowLevelPerf.ForeachOverList100Elements ```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.113468333333332 < 9.064342171875001. IsChangePoint: Marked as a change because one of 11/4/2022 9:11:54 AM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 657.7220062109628 (T) = (0 -7086666.596169635) / Math.Sqrt((2548131830.303239 / (299)) + (150279760.2149735 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.2557197871617363 = (9521503.42563199 - 7086666.596169635) / 9521503.42563199 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.ForeachOverList100Elements() push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-20],eax mov [ebp-1C],eax mov [ebp-18],eax mov [ebp-14],eax mov eax,ds:[6B7418C] xor edx,edx mov [ebp-24],edx xor ecx,ecx mov esi,ds:[0A764C78] mov [ebp-28],esi test esi,esi jle short M00_L01 M00_L00: mov edi,eax mov edi,[edi+0C] xor edi,edi jmp short M00_L03 M00_L01: mov edx,[ebp-24] jmp short M00_L06 nop nop M00_L02: mov edx,ebx mov [ebp-24],edx M00_L03: cmp edi,[eax+8] jae short M00_L04 mov ebx,[eax+4] cmp edi,[ebx+4] jae short M00_L08 mov ebx,[ebx+edi*4+8] inc edi mov edx,1 jmp short M00_L05 M00_L04: mov edi,[eax+8] inc edi xor ebx,ebx xor esi,esi xor edx,edx M00_L05: test edx,edx jne short M00_L02 mov edx,[ebp-24] inc ecx mov esi,[ebp-28] cmp ecx,esi jl short M00_L07 M00_L06: mov eax,edx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L07: mov [ebp-24],edx jmp short M00_L00 M00_L08: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 140 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.ForeachOverList100Elements() push ebp mov ebp,esp push edi push esi push ebx sub esp,14 xor eax,eax mov [ebp-20],eax mov [ebp-1C],eax mov [ebp-18],eax mov [ebp-14],eax mov eax,ds:[6C1418C] xor edx,edx xor ecx,ecx mov esi,ds:[0A6E6958] test esi,esi jle short M00_L03 M00_L00: mov edi,eax mov edi,[edi+0C] xor edi,edi jmp short M00_L01 nop nop nop nop nop nop nop nop nop nop nop nop nop M00_L01: mov ebx,[eax+8] cmp edi,ebx jae short M00_L02 mov edx,[eax+4] cmp edi,[edx+4] jae short M00_L04 mov edx,[edx+edi*4+8] inc edi jmp short M00_L01 M00_L02: inc ecx cmp ecx,esi jl short M00_L00 M00_L03: mov eax,edx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L04: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 107 ``` ### 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Threading.Channels.Tests.UnboundedChannelPerfTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[WriteAsyncThenReadAsync - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Threading.Channels.Tests.UnboundedChannelPerfTests.WriteAsyncThenReadAsync.html>) 78.49 ns 69.00 ns 0.88 0.07 False 448.76887810849723 434.27603618896495 0.9677053320171894 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.Threading.Channels.Tests.UnboundedChannelPerfTests*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Threading.Channels.Tests.UnboundedChannelPerfTests.WriteAsyncThenReadAsync ```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 68.99506021789252 < 75.43173639630004. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 41.85200424818049 (T) = (0 -70.10413599797332) / Math.Sqrt((1.8845915151909785 / (299)) + (1.2672252780178843 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.11777156163218715 = (79.46256655211783 - 70.10413599797332) / 79.46256655211783 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Threading.Channels.Tests.PerfTests.WriteAsyncThenReadAsync() push ebp mov ebp,esp sub esp,20 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 vmovdqu xmmword ptr [ebp-10],xmm4 mov [ebp-20],ecx mov dword ptr [ebp-1C],0FFFFFFFF lea ecx,[ebp-20] call dword ptr ds:[8A4B438]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Channels.Tests.PerfTests+d__8, MicroBenchmarks]](d__8 ByRef) mov eax,[ebp-18] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret M00_L01: lea ecx,[ebp-18] call dword ptr ds:[8A49660] jmp short M00_L00 ; Total bytes of code 61 ``` ```assembly ; System.Threading.Tasks.Task.GetAwaiter() mov eax,ecx ret ; Total bytes of code 3 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.GetResult() mov ecx,[ecx] mov eax,[ecx+1C] and eax,11000000 cmp eax,1000000 jne short M02_L01 M02_L00: ret M02_L01: call dword ptr ds:[8A49558] jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Channels.Tests.PerfTests+d__8, MicroBenchmarks]](d__8 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-18],eax mov esi,ecx mov ebx,esi cmp [ebx],bl mov ecx,2FB4DB8 mov edx,2FE call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+0C] test eax,eax je short M03_L04 M03_L00: mov edi,eax mov [ebp-24],edi mov ecx,[eax+4] mov [ebp-28],ecx mov eax,[eax+8] mov [ebp-2C],eax mov ecx,esi call dword ptr ds:[8A4B330]; System.Threading.Channels.Tests.PerfTests+d__8.MoveNext() mov eax,[ebp-2C] cmp eax,[edi+8] je short M03_L01 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L01: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L09 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L02 cmp dword ptr [ecx+8],0 jne short M03_L03 M03_L02: test eax,eax je short M03_L09 cmp dword ptr [eax+8],0 je short M03_L09 M03_L03: mov edx,eax call dword ptr ds:[8A4B630] jmp short M03_L09 M03_L04: call dword ptr ds:[3087210] jmp short M03_L00 mov eax,[ebp-2C] mov edi,[ebp-24] cmp eax,[edi+8] je short M03_L05 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L05: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L08 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L06 cmp dword ptr [ecx+8],0 jne short M03_L07 M03_L06: test eax,eax je short M03_L08 cmp dword ptr [eax+8],0 je short M03_L08 M03_L07: mov edx,eax call dword ptr ds:[8A4B630] M03_L08: pop eax jmp eax M03_L09: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 221 ``` ### Compare Jit Disasm ```assembly ; System.Threading.Channels.Tests.PerfTests.WriteAsyncThenReadAsync() push ebp mov ebp,esp sub esp,20 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 vmovdqu xmmword ptr [ebp-10],xmm4 mov [ebp-20],ecx mov dword ptr [ebp-1C],0FFFFFFFF lea ecx,[ebp-20] call dword ptr ds:[0AF9F990]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Channels.Tests.PerfTests+d__8, MicroBenchmarks]](d__8 ByRef) mov eax,[ebp-18] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret M00_L01: lea ecx,[ebp-18] call dword ptr ds:[0AF9DBA0] jmp short M00_L00 ; Total bytes of code 61 ``` ```assembly ; System.Threading.Tasks.Task.GetAwaiter() mov eax,ecx ret ; Total bytes of code 3 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.GetResult() mov ecx,[ecx] mov eax,[ecx+1C] and eax,11000000 cmp eax,1000000 jne short M02_L01 M02_L00: ret M02_L01: call dword ptr ds:[0AF9DA98] jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Channels.Tests.PerfTests+d__8, MicroBenchmarks]](d__8 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-18],eax mov esi,ecx mov ebx,esi cmp [ebx],bl mov ecx,2FC4E08 mov edx,2FE call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+0C] test eax,eax je short M03_L04 M03_L00: mov edi,eax mov [ebp-24],edi mov ecx,[eax+4] mov [ebp-28],ecx mov eax,[eax+8] mov [ebp-2C],eax mov ecx,esi call dword ptr ds:[0AF9F888]; System.Threading.Channels.Tests.PerfTests+d__8.MoveNext() mov eax,[ebp-2C] cmp eax,[edi+8] je short M03_L01 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L01: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L09 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L02 cmp dword ptr [ecx+8],0 jne short M03_L03 M03_L02: test eax,eax je short M03_L09 cmp dword ptr [eax+8],0 je short M03_L09 M03_L03: mov edx,eax call dword ptr ds:[0AF9FB88] jmp short M03_L09 M03_L04: call dword ptr ds:[7E271F8] jmp short M03_L00 mov eax,[ebp-2C] mov edi,[ebp-24] cmp eax,[edi+8] je short M03_L05 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L05: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L08 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L06 cmp dword ptr [ecx+8],0 jne short M03_L07 M03_L06: test eax,eax je short M03_L08 cmp dword ptr [eax+8],0 je short M03_L08 M03_L07: mov edx,eax call dword ptr ds:[0AF9FB88] M03_L08: pop eax jmp eax M03_L09: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 221 ``` ### 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

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

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.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.TryGetValueFalse(String%2c%20String).IDictionary(Size%3a%20512).html>) 18.64 μs 14.94 μs 0.80 0.00 False
[Dictionary - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.TryGetValueFalse(String%2c%20String).Dictionary(Size%3a%20512).html>) 14.71 μs 12.23 μs 0.83 0.06 False

graph 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;String, String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.TryGetValueFalse<String, String>.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 14.935940894894078 < 17.479950715874782. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 140.903528343876 (T) = (0 -14751.224529895297) / Math.Sqrt((66263.51085393834 / (299)) + (17239.804737963288 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.21437686547291956 = (18776.464034215405 - 14751.224529895297) / 18776.464034215405 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.TryGetValueFalse<String, String>.Dictionary(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 12.232803296846495 < 13.648242878754317. IsChangePoint: Marked as a change because one of 11/4/2022 9:11:54 AM, 12/14/2022 5:20:21 PM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 49.75871733492242 (T) = (0 -12427.6626217891) / Math.Sqrt((272289.57914656703 / (299)) + (37586.26554871782 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.15830990065345707 = (14765.128675551106 - 12427.6626217891) / 14765.128675551106 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Collections.IndexerSet<String>

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.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IndexerSet(String).IList(Size%3a%20512).html>) 4.08 μs 3.39 μs 0.83 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.IndexerSet&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IndexerSet<String>.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 3.391847423776019 < 3.830924251584255. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 11/22/2022 2:20:42 AM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 12.327784994269063 (T) = (0 -3500.533184332884) / Math.Sqrt((12672.63072747942 / (299)) + (33010.94504123568 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.10794682534627054 = (3924.1306278537654 - 3500.533184332884) / 3924.1306278537654 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Threading.Channels.Tests.SpscUnboundedChannelPerfTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[WriteAsyncThenReadAsync - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Threading.Channels.Tests.SpscUnboundedChannelPerfTests.WriteAsyncThenReadAsync.html>) 68.72 ns 58.47 ns 0.85 0.27 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.Threading.Channels.Tests.SpscUnboundedChannelPerfTests*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Threading.Channels.Tests.SpscUnboundedChannelPerfTests.WriteAsyncThenReadAsync ```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 58.47103189810568 < 64.18867246599277. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 18.026053537644955 (T) = (0 -59.40707641899552) / Math.Sqrt((9.564220130282616 / (299)) + (6.779108776172904 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.1352640554205448 = (68.69967276298063 - 59.40707641899552) / 68.69967276298063 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Threading.Channels.Tests.PerfTests.WriteAsyncThenReadAsync() push ebp mov ebp,esp sub esp,20 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 vmovdqu xmmword ptr [ebp-10],xmm4 mov [ebp-20],ecx mov dword ptr [ebp-1C],0FFFFFFFF lea ecx,[ebp-20] call dword ptr ds:[0AD99F60]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Channels.Tests.PerfTests+d__8, MicroBenchmarks]](d__8 ByRef) mov eax,[ebp-18] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret M00_L01: lea ecx,[ebp-18] call dword ptr ds:[0AD991C8] jmp short M00_L00 ; Total bytes of code 61 ``` ```assembly ; System.Threading.Tasks.Task.GetAwaiter() mov eax,ecx ret ; Total bytes of code 3 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.GetResult() mov ecx,[ecx] mov eax,[ecx+1C] and eax,11000000 cmp eax,1000000 jne short M02_L01 M02_L00: ret M02_L01: call dword ptr ds:[0AD990C0] jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Channels.Tests.PerfTests+d__8, MicroBenchmarks]](d__8 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-18],eax mov esi,ecx mov ebx,esi cmp [ebx],bl mov ecx,2824DB8 mov edx,2FE call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+0C] test eax,eax je short M03_L04 M03_L00: mov edi,eax mov [ebp-24],edi mov ecx,[eax+4] mov [ebp-28],ecx mov eax,[eax+8] mov [ebp-2C],eax mov ecx,esi call dword ptr ds:[0AD99E58]; System.Threading.Channels.Tests.PerfTests+d__8.MoveNext() mov eax,[ebp-2C] cmp eax,[edi+8] je short M03_L01 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L01: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L09 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L02 cmp dword ptr [ecx+8],0 jne short M03_L03 M03_L02: test eax,eax je short M03_L09 cmp dword ptr [eax+8],0 je short M03_L09 M03_L03: mov edx,eax call dword ptr ds:[0AD9B1C8] jmp short M03_L09 M03_L04: call dword ptr ds:[4A07210] jmp short M03_L00 mov eax,[ebp-2C] mov edi,[ebp-24] cmp eax,[edi+8] je short M03_L05 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L05: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L08 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L06 cmp dword ptr [ecx+8],0 jne short M03_L07 M03_L06: test eax,eax je short M03_L08 cmp dword ptr [eax+8],0 je short M03_L08 M03_L07: mov edx,eax call dword ptr ds:[0AD9B1C8] M03_L08: pop eax jmp eax M03_L09: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 221 ``` ### Compare Jit Disasm ```assembly ; System.Threading.Channels.Tests.PerfTests.WriteAsyncThenReadAsync() push ebp mov ebp,esp sub esp,20 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 vmovdqu xmmword ptr [ebp-10],xmm4 mov [ebp-20],ecx mov dword ptr [ebp-1C],0FFFFFFFF lea ecx,[ebp-20] call dword ptr ds:[0B481750]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Channels.Tests.PerfTests+d__8, MicroBenchmarks]](d__8 ByRef) mov eax,[ebp-18] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret M00_L01: lea ecx,[ebp-18] call dword ptr ds:[0B44F840] jmp short M00_L00 ; Total bytes of code 61 ``` ```assembly ; System.Threading.Tasks.Task.GetAwaiter() mov eax,ecx ret ; Total bytes of code 3 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.GetResult() mov ecx,[ecx] mov eax,[ecx+1C] and eax,11000000 cmp eax,1000000 jne short M02_L01 M02_L00: ret M02_L01: call dword ptr ds:[0B44F738] jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Channels.Tests.PerfTests+d__8, MicroBenchmarks]](d__8 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-18],eax mov esi,ecx mov ebx,esi cmp [ebx],bl mov ecx,4F44E08 mov edx,2FE call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+0C] test eax,eax je short M03_L04 M03_L00: mov edi,eax mov [ebp-24],edi mov ecx,[eax+4] mov [ebp-28],ecx mov eax,[eax+8] mov [ebp-2C],eax mov ecx,esi call dword ptr ds:[0B481648]; System.Threading.Channels.Tests.PerfTests+d__8.MoveNext() mov eax,[ebp-2C] cmp eax,[edi+8] je short M03_L01 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L01: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L09 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L02 cmp dword ptr [ecx+8],0 jne short M03_L03 M03_L02: test eax,eax je short M03_L09 cmp dword ptr [eax+8],0 je short M03_L09 M03_L03: mov edx,eax call dword ptr ds:[0B481948] jmp short M03_L09 M03_L04: call dword ptr ds:[4FC71F8] jmp short M03_L00 mov eax,[ebp-2C] mov edi,[ebp-24] cmp eax,[edi+8] je short M03_L05 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L05: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L08 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L06 cmp dword ptr [ecx+8],0 jne short M03_L07 M03_L06: test eax,eax je short M03_L08 cmp dword ptr [eax+8],0 je short M03_L08 M03_L07: mov edx,eax call dword ptr ds:[0B481948] M03_L08: pop eax jmp eax M03_L09: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 221 ``` ### 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
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
[HashSet - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsTrue(Int32).HashSet(Size%3a%20512).html>) 6.41 μs 4.85 μs 0.76 0.24 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>.HashSet(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 4.847492002063984 < 6.168948481325149. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/12/2022 5:25:39 PM, 12/14/2022 5:20:21 PM, 12/21/2022 9:23:17 AM, 1/3/2023 6:29:42 AM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 16.46860879924014 (T) = (0 -4898.850792637759) / Math.Sqrt((1167405.874654567 / (299)) + (4174.877958564275 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.17620550577272676 = (5946.690378445568 - 4898.850792637759) / 5946.690378445568 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Numerics.Tests.Perf_VectorConvert

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Convert_float_uint - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Numerics.Tests.Perf_VectorConvert.Convert_float_uint.html>) 24.48 μs 20.50 μs 0.84 0.01 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.Numerics.Tests.Perf_VectorConvert*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_VectorConvert.Convert_float_uint ```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 20.50007773243386 < 23.202761227490342. IsChangePoint: Marked as a change because one of 11/2/2022 4:14:20 AM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 105.24477064391749 (T) = (0 -20596.833538403436) / Math.Sqrt((21992.90570356107 / (299)) + (32582.618285785586 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.15023259212443937 = (24238.20135664655 - 20596.833538403436) / 24238.20135664655 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Numerics.Tests.Perf_VectorConvert.Convert_float_uint() mov ecx,edx mov edx,ds:[6E8451C] call dword ptr ds:[0B1550A8] ret ; Total bytes of code 15 ``` ### Compare Jit Disasm ```assembly ; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__() push ebp mov ebp,esp sub esp,28 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 vmovdqu xmmword ptr [ebp-18],xmm4 mov [ebp-4],ecx mov [ebp-8],edx mov ecx,[ebp-4] cmp dword ptr [ecx+1C],0B jne short M00_L00 mov ecx,[ebp-4] mov edx,[ebp-8] call dword ptr ds:[0A40F438] vzeroupper mov esp,ebp pop ebp ret M00_L00: vxorps ymm0,ymm0,ymm0 vmovups [ebp-28],ymm0 mov eax,[ebp-8] vmovups ymm0,[ebp-28] vmovups [eax],ymm0 vzeroupper mov esp,ebp pop ebp ret ; Total bytes of code 85 ``` ### 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Collections.CreateAddAndRemove<String>

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.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CreateAddAndRemove(String).Stack(Size%3a%20512).html>) 4.64 μs 4.20 μs 0.90 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.CreateAddAndRemove&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.CreateAddAndRemove<String>.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 4.196900461097681 < 4.420162554807141. IsChangePoint: Marked as a change because one of 11/23/2022 1:02:40 AM, 12/6/2022 11:39:16 PM, 12/23/2022 9:40:21 PM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 21.3253952177897 (T) = (0 -4235.333274072996) / Math.Sqrt((38286.80414735247 / (299)) + (7971.163245116676 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.0917915965240986 = (4663.393619640051 - 4235.333274072996) / 4663.393619640051 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Collections.IterateForEach<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_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).ImmutableArray(Size%3a%20512).html>) 1.29 μs 1.16 μs 0.90 0.00 False
[Dictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).Dictionary(Size%3a%20512).html>) 3.39 μs 2.86 μs 0.84 0.03 False

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<String>.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 1.1624873601950865 < 1.221692302056099. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 250.4084416070048 (T) = (0 -1163.5841183147963) / Math.Sqrt((16.657174875807776 / (299)) + (4.632469692778927 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.09081862244280818 = (1279.8151689392707 - 1163.5841183147963) / 1279.8151689392707 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.Dictionary(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.8565932807142014 < 3.2215728771771133. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/10/2022 12:29:27 AM, 11/18/2022 7:31:41 AM, 1/11/2023 11:00:48 PM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 42.1899801822887 (T) = (0 -2793.677527869774) / Math.Sqrt((20871.641365204796 / (299)) + (953.9659381037258 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.13483382531578209 = (3229.0646694427865 - 2793.677527869774) / 3229.0646694427865 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in Microsoft.Extensions.Primitives.Performance.StringValuesBenchmark

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ForEach_Array - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.Primitives.Performance.StringValuesBenchmark.ForEach_Array.html>) 8.57 ns 4.78 ns 0.56 0.03 False 90.17059630964232 72.20019103552491 0.8007065938389967 Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.Primitives.Performance.StringValuesBenchmark*'
### Payloads [Baseline]() [Compare]() ### Histogram #### Microsoft.Extensions.Primitives.Performance.StringValuesBenchmark.ForEach_Array ```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 4.778785084288591 < 8.13139695263298. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 74.18758988820355 (T) = (0 -4.8108689878248665) / Math.Sqrt((0.02664826975187694 / (299)) + (0.06364819267893534 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.42428229033829484 = (8.356298420369523 - 4.8108689878248665) / 8.356298420369523 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; Microsoft.Extensions.Primitives.Performance.StringValuesBenchmark.ForEach_Array() push ebp mov ebp,esp push edi push esi push ebx sub esp,14 xor eax,eax mov [ebp-20],eax mov [ebp-1C],eax mov [ebp-18],eax mov [ebp-14],eax xor eax,eax add ecx,10 mov edx,[ecx] mov ecx,edx test ecx,ecx je short M00_L00 cmp dword ptr [ecx],871934C jne short M00_L00 xor esi,esi jmp short M00_L01 M00_L00: xor ecx,ecx mov esi,edx M00_L01: xor edx,edx jmp short M00_L03 M00_L02: add eax,[ecx+4] M00_L03: mov edi,edx test edi,edi jge short M00_L05 M00_L04: xor ebx,ebx jmp short M00_L08 M00_L05: mov edx,esi test edx,edx je short M00_L07 mov edx,[esi+4] cmp edx,edi jbe short M00_L06 lea edx,[edi+1] mov ecx,[esi+edi*4+8] mov ebx,1 jmp short M00_L08 M00_L06: mov edx,0FFFFFFFF jmp short M00_L04 M00_L07: mov edx,0FFFFFFFF xor ebx,ebx test ecx,ecx setne bl M00_L08: test ebx,ebx jne short M00_L02 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 127 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.Primitives.Performance.StringValuesBenchmark.ForEach_Array() push ebp mov ebp,esp push edi push esi sub esp,14 xor eax,eax mov [ebp-1C],eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax xor eax,eax add ecx,10 mov edx,[ecx] mov ecx,edx test ecx,ecx je short M00_L00 cmp dword ptr [ecx],53293C4 jne short M00_L00 xor esi,esi jmp short M00_L01 M00_L00: xor ecx,ecx mov esi,edx M00_L01: xor edx,edx jmp short M00_L03 M00_L02: add eax,[edx+4] xchg ecx,edx M00_L03: test edx,edx jl short M00_L05 mov edi,esi test edi,edi je short M00_L04 mov ecx,[esi+4] cmp ecx,edx jbe short M00_L05 lea ecx,[edx+1] mov edx,[esi+edx*4+8] jmp short M00_L02 M00_L04: mov edx,0FFFFFFFF test ecx,ecx jne short M00_L06 M00_L05: lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L06: xchg ecx,edx jmp short M00_L02 ; Total bytes of code 106 ``` ### 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Threading.Tasks.ValueTaskPerfTest

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Copy_PassAsArgumentAndReturn_FromValueTaskSource - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Threading.Tasks.ValueTaskPerfTest.Copy_PassAsArgumentAndReturn_FromValueTaskSource.html>) 18.83 ns 16.00 ns 0.85 0.01 False Trace Trace
[Copy_PassAsArgumentAndReturn_FromResult - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Threading.Tasks.ValueTaskPerfTest.Copy_PassAsArgumentAndReturn_FromResult.html>) 13.84 ns 9.87 ns 0.71 0.01 False 49.49785603171332 48.028253700098425 0.9703097780503196 Trace Trace

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Threading.Tasks.ValueTaskPerfTest*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Threading.Tasks.ValueTaskPerfTest.Copy_PassAsArgumentAndReturn_FromValueTaskSource ```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 16.003918786958067 < 17.883988511104587. IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 88.11912304896114 (T) = (0 -15.925473156953739) / Math.Sqrt((0.0673393519951653 / (299)) + (0.020697872328032413 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.1449696548706404 = (18.625623345033837 - 15.925473156953739) / 18.625623345033837 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Threading.Tasks.ValueTaskPerfTest.Copy_PassAsArgumentAndReturn_FromValueTaskSource() add ecx,0C push dword ptr [ecx+8] push dword ptr [ecx+4] push dword ptr [ecx] mov ecx,edx call dword ptr ds:[0B03BA38]; System.Threading.Tasks.ValueTaskPerfTest.ReturnValueTask(System.Threading.Tasks.ValueTask`1) ret ; Total bytes of code 20 ``` ```assembly ; System.Threading.Tasks.ValueTask`1[[System.Int32, System.Private.CoreLib]].GetAwaiter() push edi push esi sub esp,0C lea edi,[esp] mov esi,ecx movsd movsd movsd mov edi,edx lea esi,[esp] call CORINFO_HELP_ASSIGN_BYREF movsd movsd add esp,0C pop esi pop edi ret ; Total bytes of code 31 ``` ```assembly ; System.Runtime.CompilerServices.ValueTaskAwaiter`1[[System.Int32, System.Private.CoreLib]].GetResult() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edx,esi mov edi,[edx] test edi,edi jne short M02_L00 mov eax,[esi+4] jmp short M02_L01 M02_L00: mov edx,edi mov ecx,offset MT_System.Threading.Tasks.Task`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[893B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx jne short M02_L02 movsx edx,word ptr [esi+8] mov ecx,edi call dword ptr ds:[53A02C4] M02_L01: pop ebx pop esi pop edi pop ebp ret M02_L02: mov ecx,[ebx+1C] and ecx,11000000 cmp ecx,1000000 jne short M02_L04 M02_L03: mov eax,[ebx+20] jmp short M02_L01 M02_L04: mov ecx,ebx call dword ptr ds:[0BAAF900] jmp short M02_L03 ; Total bytes of code 89 ``` ```assembly ; System.Threading.Tasks.ValueTaskPerfTest.ReturnValueTask(System.Threading.Tasks.ValueTask`1) push ebp mov ebp,esp push edi push esi mov edi,ecx lea esi,[ebp+8] call CORINFO_HELP_ASSIGN_BYREF movsd movsd pop esi pop edi pop ebp ret 0C ; Total bytes of code 23 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) push ebp mov ebp,esp mov eax,edx test eax,eax je short M04_L00 cmp [eax],ecx jne short M04_L01 M04_L00: pop ebp ret M04_L01: mov edx,[eax] mov edx,[edx+10] M04_L02: cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx jne short M04_L05 M04_L03: xor eax,eax M04_L04: pop ebp ret M04_L05: mov edx,[edx+10] jmp short M04_L02 ; Total bytes of code 70 ``` ### Compare Jit Disasm ```assembly ; System.Threading.Tasks.ValueTaskPerfTest.Copy_PassAsArgumentAndReturn_FromValueTaskSource() add ecx,0C push dword ptr [ecx+8] push dword ptr [ecx+4] push dword ptr [ecx] mov ecx,edx call dword ptr ds:[0ADCFA38]; System.Threading.Tasks.ValueTaskPerfTest.ReturnValueTask(System.Threading.Tasks.ValueTask`1) ret ; Total bytes of code 20 ``` ```assembly ; System.Threading.Tasks.ValueTask`1[[System.Int32, System.Private.CoreLib]].GetAwaiter() push edi push esi sub esp,0C lea edi,[esp] mov esi,ecx movsd movsd movsd mov edi,edx lea esi,[esp] call CORINFO_HELP_ASSIGN_BYREF movsd movsd add esp,0C pop esi pop edi ret ; Total bytes of code 31 ``` ```assembly ; System.Runtime.CompilerServices.ValueTaskAwaiter`1[[System.Int32, System.Private.CoreLib]].GetResult() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edx,esi mov edi,[edx] test edi,edi jne short M02_L00 mov eax,[esi+4] jmp short M02_L01 M02_L00: mov edx,edi mov ecx,offset MT_System.Threading.Tasks.Task`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[860B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx jne short M02_L02 movsx edx,word ptr [esi+8] mov ecx,edi call dword ptr ds:[31902C4] M02_L01: pop ebx pop esi pop edi pop ebp ret M02_L02: mov ecx,[ebx+1C] and ecx,11000000 cmp ecx,1000000 jne short M02_L04 M02_L03: mov eax,[ebx+20] jmp short M02_L01 M02_L04: mov ecx,ebx call dword ptr ds:[0B7F17C8] jmp short M02_L03 ; Total bytes of code 89 ``` ```assembly ; System.Threading.Tasks.ValueTaskPerfTest.ReturnValueTask(System.Threading.Tasks.ValueTask`1) push ebp mov ebp,esp push edi push esi mov edi,ecx lea esi,[ebp+8] call CORINFO_HELP_ASSIGN_BYREF movsd movsd pop esi pop edi pop ebp ret 0C ; Total bytes of code 23 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) push ebp mov ebp,esp mov eax,edx test eax,eax je short M04_L00 cmp [eax],ecx jne short M04_L01 M04_L00: pop ebp ret M04_L01: mov edx,[eax] mov edx,[edx+10] M04_L02: cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx jne short M04_L05 M04_L03: xor eax,eax M04_L04: pop ebp ret M04_L05: mov edx,[edx+10] jmp short M04_L02 ; Total bytes of code 70 ``` #### System.Threading.Tasks.ValueTaskPerfTest.Copy_PassAsArgumentAndReturn_FromResult ```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 9.869650860048488 < 13.110781129148213. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 121.38082657889053 (T) = (0 -9.841559071916356) / Math.Sqrt((0.16965689599773748 / (299)) + (0.010552050660238737 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.27345616717167165 = (13.545719648606214 - 9.841559071916356) / 13.545719648606214 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Threading.Tasks.ValueTaskPerfTest.Copy_PassAsArgumentAndReturn_FromResult() add ecx,0C push dword ptr [ecx+8] push dword ptr [ecx+4] push dword ptr [ecx] mov ecx,edx call dword ptr ds:[0A2CBA38]; System.Threading.Tasks.ValueTaskPerfTest.ReturnValueTask(System.Threading.Tasks.ValueTask`1) ret ; Total bytes of code 20 ``` ```assembly ; System.Threading.Tasks.ValueTask`1[[System.Int32, System.Private.CoreLib]].GetAwaiter() push edi push esi sub esp,0C lea edi,[esp] mov esi,ecx movsd movsd movsd mov edi,edx lea esi,[esp] call CORINFO_HELP_ASSIGN_BYREF movsd movsd add esp,0C pop esi pop edi ret ; Total bytes of code 31 ``` ```assembly ; System.Runtime.CompilerServices.ValueTaskAwaiter`1[[System.Int32, System.Private.CoreLib]].GetResult() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edx,esi mov edi,[edx] test edi,edi jne short M02_L00 mov eax,[esi+4] jmp short M02_L01 M02_L00: mov edx,edi mov ecx,offset MT_System.Threading.Tasks.Task`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7BCB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx jne short M02_L02 movsx edx,word ptr [esi+8] mov ecx,edi call dword ptr ds:[23E02C4] M02_L01: pop ebx pop esi pop edi pop ebp ret M02_L02: mov ecx,[ebx+1C] and ecx,11000000 cmp ecx,1000000 jne short M02_L04 M02_L03: mov eax,[ebx+20] jmp short M02_L01 M02_L04: mov ecx,ebx call dword ptr ds:[0AD3F900] jmp short M02_L03 ; Total bytes of code 89 ``` ```assembly ; System.Threading.Tasks.ValueTaskPerfTest.ReturnValueTask(System.Threading.Tasks.ValueTask`1) push ebp mov ebp,esp push edi push esi mov edi,ecx lea esi,[ebp+8] call CORINFO_HELP_ASSIGN_BYREF movsd movsd pop esi pop edi pop ebp ret 0C ; Total bytes of code 23 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) push ebp mov ebp,esp mov eax,edx test eax,eax je short M04_L00 cmp [eax],ecx jne short M04_L01 M04_L00: pop ebp ret M04_L01: mov edx,[eax] mov edx,[edx+10] M04_L02: cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx jne short M04_L05 M04_L03: xor eax,eax M04_L04: pop ebp ret M04_L05: mov edx,[edx+10] jmp short M04_L02 ; Total bytes of code 70 ``` ### Compare Jit Disasm ```assembly ; System.Threading.Tasks.ValueTaskPerfTest.Copy_PassAsArgumentAndReturn_FromResult() add ecx,0C push dword ptr [ecx+8] push dword ptr [ecx+4] push dword ptr [ecx] mov ecx,edx call dword ptr ds:[0AD4FA38]; System.Threading.Tasks.ValueTaskPerfTest.ReturnValueTask(System.Threading.Tasks.ValueTask`1) ret ; Total bytes of code 20 ``` ```assembly ; System.Threading.Tasks.ValueTask`1[[System.Int32, System.Private.CoreLib]].GetAwaiter() push edi push esi sub esp,0C lea edi,[esp] mov esi,ecx movsd movsd movsd mov edi,edx lea esi,[esp] call CORINFO_HELP_ASSIGN_BYREF movsd movsd add esp,0C pop esi pop edi ret ; Total bytes of code 31 ``` ```assembly ; System.Runtime.CompilerServices.ValueTaskAwaiter`1[[System.Int32, System.Private.CoreLib]].GetResult() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edx,esi mov edi,[edx] test edi,edi jne short M02_L00 mov eax,[esi+4] jmp short M02_L01 M02_L00: mov edx,edi mov ecx,offset MT_System.Threading.Tasks.Task`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[85FB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx jne short M02_L02 movsx edx,word ptr [esi+8] mov ecx,edi call dword ptr ds:[30102C4] M02_L01: pop ebx pop esi pop edi pop ebp ret M02_L02: mov ecx,[ebx+1C] and ecx,11000000 cmp ecx,1000000 jne short M02_L04 M02_L03: mov eax,[ebx+20] jmp short M02_L01 M02_L04: mov ecx,ebx call dword ptr ds:[0B771678] jmp short M02_L03 ; Total bytes of code 89 ``` ```assembly ; System.Threading.Tasks.ValueTaskPerfTest.ReturnValueTask(System.Threading.Tasks.ValueTask`1) push ebp mov ebp,esp push edi push esi mov edi,ecx lea esi,[ebp+8] call CORINFO_HELP_ASSIGN_BYREF movsd movsd pop esi pop edi pop ebp ret 0C ; Total bytes of code 23 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) push ebp mov ebp,esp mov eax,edx test eax,eax je short M04_L00 cmp [eax],ecx jne short M04_L01 M04_L00: pop ebp ret M04_L01: mov edx,[eax] mov edx,[edx+10] M04_L02: cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx je short M04_L03 mov edx,[edx+10] cmp edx,ecx je short M04_L04 test edx,edx jne short M04_L05 M04_L03: xor eax,eax M04_L04: pop ebp ret M04_L05: mov edx,[edx+10] jmp short M04_L02 ; Total bytes of code 70 ``` ### 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern%3a%20%22%5c%5cp%7bSm%7d%22%2c%20Options%3a%20NonBacktracking).html>) 45.73 ms 37.98 ms 0.83 0.01 False
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern%3a%20%22%5c%5cp%7bSm%7d%22%2c%20Options%3a%20None).html>) 45.24 ms 40.44 ms 0.89 0.01 False
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern%3a%20%22Twain%22%2c%20Options%3a%20None).html>) 2.84 ms 2.57 ms 0.90 0.53 False

graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "\\p{Sm}", Options: NonBacktracking) ```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 37.97651619047619 < 43.46566006944444. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 36.02764172284768 (T) = (0 -38314998.41269842) / Math.Sqrt((43777942954.75533 / (299)) + (1208652529521.0295 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.16128521636425616 = (45682989.21190678 - 38314998.41269842) / 45682989.21190678 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "\\p{Sm}", Options: None) ```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 40.443246153846154 < 43.41910241666666. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 38.73351258468944 (T) = (0 -39827882.17959244) / Math.Sqrt((54639706196.736855 / (299)) + (639464031402.671 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.12664593388118378 = (45603362.62769975 - 39827882.17959244) / 45603362.62769975 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "Twain", Options: None) ```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.567983850931677 < 2.675568096385542. IsChangePoint: Marked as a change because one of 12/13/2022 5:38:37 AM, 1/13/2023 4:18:46 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 9.618506162656711 (T) = (0 -2501009.227710316) / Math.Sqrt((34645631789.24324 / (299)) + (17444205401.85681 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.10580276251383079 = (2796932.4024544414 - 2501009.227710316) / 2796932.4024544414 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 x86
OS Windows 10.0.18362
Baseline 71bb0d481086b8b8a89a99a17ec80a861f32dc5d
Compare 5385f045f9aee91c22922d21552c4317198710f1
Diff Diff

Improvements in System.Collections.CreateAddAndClear<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[HashSet - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CreateAddAndClear(Int32).HashSet(Size%3a%20512).html>) 10.97 μs 10.21 μs 0.93 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.Collections.CreateAddAndClear&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.CreateAddAndClear<Int32>.HashSet(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 10.209751773049645 < 10.481234742553587. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 1/11/2023 2:37:52 AM, 1/17/2023 6:49:05 AM falls between 1/8/2023 8:00:22 AM and 1/17/2023 6:49:05 AM. IsImprovementStdDev: Marked as improvement because 38.55133490818451 (T) = (0 -10214.623169399036) / Math.Sqrt((15760.967443945117 / (299)) + (5696.724635685738 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.05622346462778411 = (10823.137455277474 - 10214.623169399036) / 10823.137455277474 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)