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: 16 Improvements on 12/14/2022 7:00:38 AM #10877

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline c03de20e23ce8419cf3918500edf555504a8aee9
Compare 6364f1569b719a2adddfb8aedb2e8ae2ce916722
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
[InstanceDelegate - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.LowLevelPerf.InstanceDelegate.html>) 249.46 μs 218.30 μs 0.88 0.04 False Trace Trace
[InterfaceInterfaceMethodLongHierarchy - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.LowLevelPerf.InterfaceInterfaceMethodLongHierarchy.html>) 422.19 μs 313.12 μs 0.74 0.07 False Trace Trace
[SealedClassInterfaceMethod - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.LowLevelPerf.SealedClassInterfaceMethod.html>) 187.10 μs 157.11 μs 0.84 0.05 False Trace Trace
[ClassVirtualMethod - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.LowLevelPerf.ClassVirtualMethod.html>) 187.11 μs 156.61 μs 0.84 0.03 False Trace Trace

graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.LowLevelPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.LowLevelPerf.InstanceDelegate ```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 218.30411324786328 < 236.99530172902493. IsChangePoint: Marked as a change because one of 10/10/2022 3:36:43 PM, 10/25/2022 12:27:43 PM, 11/2/2022 4:14:20 AM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 16.90382769005678 (T) = (0 -218480.78493900897) / Math.Sqrt((245199650.89661777 / (299)) + (111198.95943626553 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.0656245890374234 = (233825.4863898163 - 218480.78493900897) / 233825.4863898163 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.InstanceDelegate() push ebp mov ebp,esp push edi push esi mov esi,ds:[78441A4] xor edi,edi cmp dword ptr ds:[0B272928],0 jle short M00_L01 M00_L00: mov ecx,[esi+4] call dword ptr [esi+0C] inc edi cmp edi,ds:[0B272928] jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 41 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.InstanceDelegate() push ebp mov ebp,esp push edi push esi mov esi,ds:[735419C] xor edi,edi cmp dword ptr ds:[0AD82928],0 jle short M00_L01 M00_L00: mov ecx,[esi+4] call dword ptr [esi+0C] inc edi cmp edi,ds:[0AD82928] jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 41 ``` #### PerfLabTests.LowLevelPerf.InterfaceInterfaceMethodLongHierarchy ```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 313.1200083333334 < 400.6950011261261. IsChangePoint: Marked as a change because one of 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/14/2022 5:20:21 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 42.51200934905613 (T) = (0 -312218.4967583989) / Math.Sqrt((599596050.6246388 / (299)) + (375211.5225357769 / (24))) is greater than 1.967381707010986 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (24) - 2, .975) and 0.16217579370560484 = (372653.9462726998 - 312218.4967583989) / 372653.9462726998 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.InterfaceInterfaceMethodLongHierarchy() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,ds:[76E418C] xor ebx,ebx cmp dword ptr ds:[0B062928],0 jle short M00_L01 M00_L00: mov ecx,esi mov edx,edi call dword ptr ds:[0B09F5E8]; PerfLabTests.LowLevelPerf.CallInterfaceMethod(PerfLabTests.AnInterface) inc ebx cmp ebx,ds:[0B062928] jl short M00_L00 M00_L01: pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 49 ``` ```assembly ; PerfLabTests.LowLevelPerf.CallInterfaceMethod(PerfLabTests.AnInterface) push ebp mov ebp,esp mov ecx,edx call dword ptr ds:[34B02C8] pop ebp ret ; Total bytes of code 13 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.InterfaceInterfaceMethodLongHierarchy() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,ds:[6C94184] xor ebx,ebx cmp dword ptr ds:[0A6B2928],0 jle short M00_L01 M00_L00: mov ecx,esi mov edx,edi call dword ptr ds:[0A69F5E8]; PerfLabTests.LowLevelPerf.CallInterfaceMethod(PerfLabTests.AnInterface) inc ebx cmp ebx,ds:[0A6B2928] jl short M00_L00 M00_L01: pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 49 ``` ```assembly ; PerfLabTests.LowLevelPerf.CallInterfaceMethod(PerfLabTests.AnInterface) push ebp mov ebp,esp mov ecx,edx call dword ptr ds:[0B902C4] pop ebp ret ; Total bytes of code 13 ``` #### PerfLabTests.LowLevelPerf.SealedClassInterfaceMethod ```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 157.10873333333333 < 177.74963488520405. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/12/2022 5:25:39 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 16.21442527600356 (T) = (0 -156992.39832005845) / Math.Sqrt((233610183.41595295 / (299)) + (18475.805536010223 / (37))) is greater than 1.9670919629190173 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (37) - 2, .975) and 0.08367955140638678 = (171329.14425408 - 156992.39832005845) / 171329.14425408 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.SealedClassInterfaceMethod() push ebp mov ebp,esp push edi push esi mov esi,ds:[7274190] xor eax,eax xor edi,edi cmp dword ptr ds:[0AC82928],0 jle short M00_L01 M00_L00: mov ecx,esi cmp [ecx],ecx call dword ptr ds:[0B686948]; PerfLabTests.SealedClass.InterfaceMethod() inc edi cmp edi,ds:[0AC82928] jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 47 ``` ```assembly ; PerfLabTests.SealedClass.InterfaceMethod() push ebp mov ebp,esp mov eax,[ecx+4] lea edx,[eax+1] mov [ecx+4],edx pop ebp ret ; Total bytes of code 14 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.SealedClassInterfaceMethod() push ebp mov ebp,esp push edi push esi mov esi,ds:[7504188] xor eax,eax xor edi,edi cmp dword ptr ds:[0B002928],0 jle short M00_L01 M00_L00: mov ecx,esi cmp [ecx],ecx call dword ptr ds:[0B9B4F70]; PerfLabTests.SealedClass.InterfaceMethod() inc edi cmp edi,ds:[0B002928] jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 47 ``` ```assembly ; PerfLabTests.SealedClass.InterfaceMethod() push ebp mov ebp,esp mov eax,[ecx+4] lea edx,[eax+1] mov [ecx+4],edx pop ebp ret ; Total bytes of code 14 ``` #### PerfLabTests.LowLevelPerf.ClassVirtualMethod ```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 156.6078125 < 177.7509483745421. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/12/2022 5:25:39 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 16.102378787038653 (T) = (0 -156049.96728955256) / Math.Sqrt((242095346.82685074 / (299)) + (73919.41414235832 / (37))) is greater than 1.9670919629190173 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (37) - 2, .975) and 0.08505755427101958 = (170557.1405261669 - 156049.96728955256) / 170557.1405261669 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.ClassVirtualMethod() push ebp mov ebp,esp push edi push esi push ebx mov esi,ds:[7604188] xor eax,eax xor edi,edi cmp dword ptr ds:[0B0C2928],0 jle short M00_L01 mov ecx,[esi] mov ebx,[ecx+28] M00_L00: mov ecx,esi call dword ptr [ebx+14] inc edi cmp edi,ds:[0B0C2928] jl short M00_L00 M00_L01: pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 49 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.ClassVirtualMethod() push ebp mov ebp,esp push edi push esi push ebx mov esi,ds:[6AD4180] xor eax,eax xor edi,edi cmp dword ptr ds:[0A422928],0 jle short M00_L01 mov ecx,[esi] mov ebx,[ecx+28] M00_L00: mov ecx,esi call dword ptr [ebx+14] inc edi cmp edi,ds:[0A422928] jl short M00_L00 M00_L01: pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 49 ``` ### 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 c03de20e23ce8419cf3918500edf555504a8aee9
Compare 6364f1569b719a2adddfb8aedb2e8ae2ce916722
Diff Diff

Improvements in System.IO.Tests.Perf_RandomAccess

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ReadScatterAsync - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.IO.Tests.Perf_RandomAccess.ReadScatterAsync(fileSize%3a%201048576%2c%20buffersSize%3a%2016384%2c%20options%3a%20Asynchronous).html>) 4.13 ms 2.48 ms 0.60 0.31 False 10964835.164835164 10401980.198019803 0.948667266005013 Trace Trace
[ReadAsync - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.IO.Tests.Perf_RandomAccess.ReadAsync(fileSize%3a%201048576%2c%20bufferSize%3a%204096%2c%20options%3a%20Asynchronous).html>) 4.08 ms 2.46 ms 0.60 0.30 False 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.IO.Tests.Perf_RandomAccess*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.IO.Tests.Perf_RandomAccess.ReadScatterAsync(fileSize: 1048576, buffersSize: 16384, options: Asynchronous) ```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.4752319940476193 < 3.7979066601562494. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 5.278848129833602 (T) = (0 -2453577.1543018133) / Math.Sqrt((295382655267.33246 / (299)) + (5526783882.107583 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.06896329613684199 = (2635317.3232818493 - 2453577.1543018133) / 2635317.3232818493 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.IO.Tests.Perf_RandomAccess.ReadScatterAsync(Int64, Int32, System.IO.FileOptions) push ebp mov ebp,esp sub esp,40 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 vmovdqu xmmword ptr [ebp-30],xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 vmovdqu xmmword ptr [ebp-10],xmm4 mov [ebp-30],ecx mov ecx,[ebp+0C] mov eax,[ebp+10] mov [ebp-40],ecx mov [ebp-3C],eax mov [ebp-20],edx mov ecx,[ebp+8] mov [ebp-1C],ecx mov dword ptr [ebp-24],0FFFFFFFF lea ecx,[ebp-40] call dword ptr ds:[1276D438]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__21, MicroBenchmarks]](d__21 ByRef) mov eax,[ebp-18] test eax,eax jne short M00_L00 lea ecx,[ebp-18] call dword ptr ds:[1276B828] M00_L00: mov esp,ebp pop ebp ret 0C ; Total bytes of code 92 ``` ```assembly ; System.Threading.Tasks.Task`1[[System.Int64, System.Private.CoreLib]].GetAwaiter() mov eax,ecx ret ; Total bytes of code 3 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter`1[[System.Int64, System.Private.CoreLib]].GetResult() push esi push eax mov esi,ecx mov ecx,[esi] mov eax,[ecx+1C] and eax,11000000 cmp eax,1000000 jne short M02_L01 M02_L00: mov eax,[esi] add eax,24 mov [esp],eax mov eax,[eax] mov edx,[esp] mov edx,[edx+4] pop ecx pop esi ret M02_L01: call dword ptr ds:[4DD50C0]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 48 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__21, MicroBenchmarks]](d__21 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,4D44D60 mov edx,2F5 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:[1276D330]; System.IO.Tests.Perf_RandomAccess+d__21.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:[0B36D9D8] jmp short M03_L09 M03_L04: call dword ptr ds:[8237210] 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:[0B36D9D8] 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 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) push ebp mov ebp,esp push esi mov esi,ecx test dword ptr [esi+1C],1600000 jne short M04_L00 push 0 mov ecx,esi mov edx,0FFFFFFFF call dword ptr ds:[0A927B70]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0A927300]; System.Threading.Tasks.Task.NotifyDebuggerOfWaitCompletionIfNecessary() mov ecx,[esi+1C] and ecx,1600000 cmp ecx,1000000 je short M04_L01 mov ecx,esi call dword ptr ds:[4DD50D8] M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` ### Compare Jit Disasm ```assembly ; System.IO.Tests.Perf_RandomAccess.ReadScatterAsync(Int64, Int32, System.IO.FileOptions) push ebp mov ebp,esp sub esp,40 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 vmovdqu xmmword ptr [ebp-30],xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 vmovdqu xmmword ptr [ebp-10],xmm4 mov [ebp-30],ecx mov ecx,[ebp+0C] mov eax,[ebp+10] mov [ebp-40],ecx mov [ebp-3C],eax mov [ebp-20],edx mov ecx,[ebp+8] mov [ebp-1C],ecx mov dword ptr [ebp-24],0FFFFFFFF lea ecx,[ebp-40] call dword ptr ds:[85DB510]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__21, MicroBenchmarks]](d__21 ByRef) mov eax,[ebp-18] test eax,eax jne short M00_L00 lea ecx,[ebp-18] call dword ptr ds:[85D9A80] M00_L00: mov esp,ebp pop ebp ret 0C ; Total bytes of code 92 ``` ```assembly ; System.Threading.Tasks.Task`1[[System.Int64, System.Private.CoreLib]].GetAwaiter() mov eax,ecx ret ; Total bytes of code 3 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter`1[[System.Int64, System.Private.CoreLib]].GetResult() push esi push eax mov esi,ecx mov ecx,[esi] mov eax,[ecx+1C] and eax,11000000 cmp eax,1000000 jne short M02_L01 M02_L00: mov eax,[esi] add eax,24 mov [esp],eax mov eax,[eax] mov edx,[esp] mov edx,[edx+4] pop ecx pop esi ret M02_L01: call dword ptr ds:[86430C0]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 48 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__21, MicroBenchmarks]](d__21 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,53C4D58 mov edx,2F5 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:[85DB408]; System.IO.Tests.Perf_RandomAccess+d__21.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:[0B97B9D8] jmp short M03_L09 M03_L04: call dword ptr ds:[88B7210] 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:[0B97B9D8] 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 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) push ebp mov ebp,esp push esi mov esi,ecx test dword ptr [esi+1C],1600000 jne short M04_L00 push 0 mov ecx,esi mov edx,0FFFFFFFF call dword ptr ds:[0AFA7B70]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0AFA7300]; System.Threading.Tasks.Task.NotifyDebuggerOfWaitCompletionIfNecessary() mov ecx,[esi+1C] and ecx,1600000 cmp ecx,1000000 je short M04_L01 mov ecx,esi call dword ptr ds:[86430D8] M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` #### System.IO.Tests.Perf_RandomAccess.ReadAsync(fileSize: 1048576, bufferSize: 4096, options: Asynchronous) ```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.4567958035714295 < 3.5139185462239584. IsChangePoint: Marked as a change because one of 11/14/2022 9:30:20 AM, 11/16/2022 6:51:59 PM, 12/8/2022 3:49:24 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 5.898122188179947 (T) = (0 -2455639.3796890327) / Math.Sqrt((311398815347.42035 / (299)) + (3943908462.908908 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.07628756560221116 = (2658445.7329406617 - 2455639.3796890327) / 2658445.7329406617 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.IO.Tests.Perf_RandomAccess.ReadAsync(Int64, Int32, System.IO.FileOptions) push ebp mov ebp,esp sub esp,44 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-44],xmm4 vmovdqu xmmword ptr [ebp-34],xmm4 vmovdqu xmmword ptr [ebp-24],xmm4 vmovdqu xmmword ptr [ebp-14],xmm4 xor eax,eax mov [ebp-4],eax mov [ebp-34],ecx mov ecx,[ebp+0C] mov eax,[ebp+10] mov [ebp-44],ecx mov [ebp-40],eax mov [ebp-28],edx mov ecx,[ebp+8] mov [ebp-24],ecx mov dword ptr [ebp-2C],0FFFFFFFF lea ecx,[ebp-44] call dword ptr ds:[127AD990]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__16, MicroBenchmarks]](d__16 ByRef) mov eax,[ebp-20] test eax,eax jne short M00_L00 lea ecx,[ebp-20] call dword ptr ds:[127AB978] M00_L00: mov esp,ebp pop ebp ret 0C ; Total bytes of code 97 ``` ```assembly ; System.Threading.Tasks.Task`1[[System.Int64, System.Private.CoreLib]].GetAwaiter() mov eax,ecx ret ; Total bytes of code 3 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter`1[[System.Int64, System.Private.CoreLib]].GetResult() push esi push eax mov esi,ecx mov ecx,[esi] mov eax,[ecx+1C] and eax,11000000 cmp eax,1000000 jne short M02_L01 M02_L00: mov eax,[esi] add eax,24 mov [esp],eax mov eax,[eax] mov edx,[esp] mov edx,[edx+4] pop ecx pop esi ret M02_L01: call dword ptr ds:[8047B28]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 48 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__16, MicroBenchmarks]](d__16 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,4E14D60 mov edx,2F5 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:[127AD888]; System.IO.Tests.Perf_RandomAccess+d__16.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:[0B3AD9D8] jmp short M03_L09 M03_L04: call dword ptr ds:[8277210] 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:[0B3AD9D8] 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 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) push ebp mov ebp,esp push esi mov esi,ecx test dword ptr [esi+1C],1600000 jne short M04_L00 push 0 mov ecx,esi mov edx,0FFFFFFFF call dword ptr ds:[0A967B70]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0A967300]; System.Threading.Tasks.Task.NotifyDebuggerOfWaitCompletionIfNecessary() mov ecx,[esi+1C] and ecx,1600000 cmp ecx,1000000 je short M04_L01 mov ecx,esi call dword ptr ds:[8047B40] M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` ### Compare Jit Disasm ```assembly ; System.IO.Tests.Perf_RandomAccess.ReadAsync(Int64, Int32, System.IO.FileOptions) push ebp mov ebp,esp sub esp,44 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-44],xmm4 vmovdqu xmmword ptr [ebp-34],xmm4 vmovdqu xmmword ptr [ebp-24],xmm4 vmovdqu xmmword ptr [ebp-14],xmm4 xor eax,eax mov [ebp-4],eax mov [ebp-34],ecx mov ecx,[ebp+0C] mov eax,[ebp+10] mov [ebp-44],ecx mov [ebp-40],eax mov [ebp-28],edx mov ecx,[ebp+8] mov [ebp-24],ecx mov dword ptr [ebp-2C],0FFFFFFFF lea ecx,[ebp-44] call dword ptr ds:[538BC18]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__16, MicroBenchmarks]](d__16 ByRef) mov eax,[ebp-20] test eax,eax jne short M00_L00 lea ecx,[ebp-20] call dword ptr ds:[5389A80] M00_L00: mov esp,ebp pop ebp ret 0C ; Total bytes of code 97 ``` ```assembly ; System.Threading.Tasks.Task`1[[System.Int64, System.Private.CoreLib]].GetAwaiter() mov eax,ecx ret ; Total bytes of code 3 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter`1[[System.Int64, System.Private.CoreLib]].GetResult() push esi push eax mov esi,ecx mov ecx,[esi] mov eax,[ecx+1C] and eax,11000000 cmp eax,1000000 jne short M02_L01 M02_L00: mov eax,[esi] add eax,24 mov [esp],eax mov eax,[eax] mov edx,[esp] mov edx,[edx+4] pop ecx pop esi ret M02_L01: call dword ptr ds:[53F5E70]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 48 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__16, MicroBenchmarks]](d__16 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,5334D58 mov edx,2F5 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:[538BB10]; System.IO.Tests.Perf_RandomAccess+d__16.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:[0B94B9D8] jmp short M03_L09 M03_L04: call dword ptr ds:[8817210] 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:[0B94B9D8] 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 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) push ebp mov ebp,esp push esi mov esi,ecx test dword ptr [esi+1C],1600000 jne short M04_L00 push 0 mov ecx,esi mov edx,0FFFFFFFF call dword ptr ds:[0AF77B70]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0AF77300]; System.Threading.Tasks.Task.NotifyDebuggerOfWaitCompletionIfNecessary() mov ecx,[esi+1C] and ecx,1600000 cmp ecx,1000000 je short M04_L01 mov ecx,esi call dword ptr ds:[53F5E88] M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` ### 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 c03de20e23ce8419cf3918500edf555504a8aee9
Compare 6364f1569b719a2adddfb8aedb2e8ae2ce916722
Diff Diff

Improvements in System.Linq.Tests.Perf_Enumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.Count(input%3a%20IEnumerable).html>) 376.04 ns 313.94 ns 0.83 0.03 False Trace Trace
[Repeat - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.Repeat.html>) 489.93 ns 398.31 ns 0.81 0.04 False Trace Trace
[Concat_Once - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.Concat_Once(input%3a%20IEnumerable).html>) 2.22 μs 1.96 μs 0.88 0.04 False Trace Trace
[All_AllElementsMatch - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.All_AllElementsMatch(input%3a%20IEnumerable).html>) 747.09 ns 646.41 ns 0.87 0.04 False Trace Trace

graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Linq.Tests.Perf_Enumerable*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Linq.Tests.Perf_Enumerable.Count(input: IEnumerable) ```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 313.94340346819246 < 357.0488183797417. IsChangePoint: Marked as a change because one of 10/2/2022 11:57:04 PM, 10/17/2022 3:19:47 PM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 53.842658268008144 (T) = (0 -314.213562731341) / Math.Sqrt((336.8638962280784 / (299)) + (0.3023268302356942 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.15451489233191495 = (371.63701628993437 - 314.213562731341) / 371.63701628993437 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Count(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] call dword ptr ds:[0B1152A0]; System.Linq.Enumerable.Count[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 10 ``` ```assembly ; System.Linq.Enumerable.Count[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi sub esp,18 xor eax,eax mov [ebp-14],eax mov esi,ecx test esi,esi je near ptr M01_L09 mov edx,esi mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7FDB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax call dword ptr ds:[2D102C4] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: mov edx,esi mov ecx,offset MT_System.Linq.IIListProvider`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7FDB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L01 mov ecx,eax xor edx,edx call dword ptr ds:[2D102C0] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L01: mov edx,esi mov ecx,offset MT_System.Collections.ICollection call dword ptr ds:[7FDB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L02 mov ecx,eax call dword ptr ds:[2D102BC] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L02: xor edi,edi mov ecx,esi call dword ptr ds:[2D102B0] mov ecx,eax mov [ebp-20],ecx M01_L03: call dword ptr ds:[2D102B4] test eax,eax jne short M01_L05 jmp short M01_L06 M01_L04: call CORINFO_HELP_OVERFLOW M01_L05: add edi,1 jo short M01_L04 mov ecx,[ebp-20] jmp short M01_L03 M01_L06: mov ecx,[ebp-20] call dword ptr ds:[2D102B8] jmp short M01_L08 cmp dword ptr [ebp-20],0 je short M01_L07 mov ecx,[ebp-20] call dword ptr ds:[2D102B8] M01_L07: pop eax jmp eax M01_L08: mov eax,edi lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L09: mov ecx,10 call dword ptr ds:[0A703E10] int 3 ; Total bytes of code 213 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Count(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] call dword ptr ds:[0B2F33C0]; System.Linq.Enumerable.Count[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 10 ``` ```assembly ; System.Linq.Enumerable.Count[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi sub esp,18 xor eax,eax mov [ebp-14],eax mov esi,ecx test esi,esi je near ptr M01_L09 mov edx,esi mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[814B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax call dword ptr ds:[4BB02C0] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: mov edx,esi mov ecx,offset MT_System.Linq.IIListProvider`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[814B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L01 mov ecx,eax xor edx,edx call dword ptr ds:[4BB02BC] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L01: mov edx,esi mov ecx,offset MT_System.Collections.ICollection call dword ptr ds:[814B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L02 mov ecx,eax call dword ptr ds:[4BB02B8] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L02: xor edi,edi mov ecx,esi call dword ptr ds:[4BB02AC] mov ecx,eax mov [ebp-20],ecx M01_L03: call dword ptr ds:[4BB02B0] test eax,eax jne short M01_L05 jmp short M01_L06 M01_L04: call CORINFO_HELP_OVERFLOW M01_L05: add edi,1 jo short M01_L04 mov ecx,[ebp-20] jmp short M01_L03 M01_L06: mov ecx,[ebp-20] call dword ptr ds:[4BB02B4] jmp short M01_L08 cmp dword ptr [ebp-20],0 je short M01_L07 mov ecx,[ebp-20] call dword ptr ds:[4BB02B4] M01_L07: pop eax jmp eax M01_L08: mov eax,edi lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L09: mov ecx,10 call dword ptr ds:[0A8E3E10] int 3 ; Total bytes of code 213 ``` #### System.Linq.Tests.Perf_Enumerable.Repeat ```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 398.3131098841923 < 465.54224711294455. IsChangePoint: Marked as a change because one of 10/19/2022 7:27:15 PM, 11/7/2022 4:10:19 PM, 12/6/2022 2:12:43 AM, 12/12/2022 5:25:39 PM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 16.404775518428107 (T) = (0 -398.3547874444286) / Math.Sqrt((725.9534566832536 / (299)) + (2.4112921913304546 / (37))) is greater than 1.9670919629190173 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (37) - 2, .975) and 0.06105364288638605 = (424.2572373026706 - 398.3547874444286) / 424.2572373026706 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Repeat() push ebp mov ebp,esp push edi push esi mov esi,ecx mov ecx,offset MT_System.Linq.Enumerable+RepeatIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov edi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [edi+4],eax xor edx,edx mov [edi+0C],edx mov dword ptr [edi+10],64 mov edx,[esi+4] mov ecx,edi call dword ptr ds:[0BA73318]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop esi pop edi pop ebp ret ; Total bytes of code 54 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[34F0298] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[34F029C] test eax,eax je short M01_L01 M01_L00: mov ecx,[ebp-1C] call dword ptr ds:[34F02A0] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[34F029C] test eax,eax jne short M01_L00 M01_L01: mov ecx,[ebp-1C] call dword ptr ds:[34F02A4] jmp short M01_L03 cmp dword ptr [ebp-1C],0 je short M01_L02 mov ecx,[ebp-1C] call dword ptr ds:[34F02A4] M01_L02: pop eax jmp eax M01_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Repeat() push ebp mov ebp,esp push edi push esi mov esi,ecx mov ecx,offset MT_System.Linq.Enumerable+RepeatIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov edi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [edi+4],eax xor edx,edx mov [edi+0C],edx mov dword ptr [edi+10],64 mov edx,[esi+4] mov ecx,edi call dword ptr ds:[0BBD1438]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop esi pop edi pop ebp ret ; Total bytes of code 54 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[3B20294] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[3B20298] test eax,eax je short M01_L01 M01_L00: mov ecx,[ebp-1C] call dword ptr ds:[3B2029C] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[3B20298] test eax,eax jne short M01_L00 M01_L01: mov ecx,[ebp-1C] call dword ptr ds:[3B202A0] jmp short M01_L03 cmp dword ptr [ebp-1C],0 je short M01_L02 mov ecx,[ebp-1C] call dword ptr ds:[3B202A0] M01_L02: pop eax jmp eax M01_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` #### System.Linq.Tests.Perf_Enumerable.Concat_Once(input: IEnumerable) ```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.9638613560033584 < 2.1113221198023466. IsChangePoint: Marked as a change because one of 10/19/2022 7:27:15 PM, 11/7/2022 4:10:19 PM, 11/10/2022 9:13:35 AM, 11/22/2022 2:20:42 AM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 22.552201160679303 (T) = (0 -1967.5270425280246) / Math.Sqrt((10433.104350903188 / (299)) + (78.42160596178161 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.06574607499819683 = (2105.9874514567623 - 1967.5270425280246) / 2105.9874514567623 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Concat_Once(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi mov esi,ecx mov edx,[edx+4] mov ecx,edx call dword ptr ds:[0AE852A0]; System.Linq.Enumerable.Concat[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1) mov ecx,eax mov edx,[esi+4] call dword ptr ds:[0AE85318]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop esi pop ebp ret ; Total bytes of code 31 ``` ```assembly ; System.Linq.Enumerable.Concat[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je short M01_L01 test edi,edi je short M01_L02 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+ConcatIterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[4B4B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax jne short M01_L00 mov ecx,offset MT_System.Linq.Enumerable+Concat2Iterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+18] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx pop ebx pop esi pop edi pop ebp ret M01_L00: mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+30] call dword ptr [eax+8] pop ebx pop esi pop edi pop ebp ret M01_L01: mov ecx,4 call dword ptr ds:[0A473E10] int 3 M01_L02: mov ecx,0E call dword ptr ds:[0A473E10] int 3 ; Total bytes of code 119 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[0DE02B0] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[0DE02B4] test eax,eax je short M02_L01 M02_L00: mov ecx,[ebp-1C] call dword ptr ds:[0DE02B8] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[0DE02B4] test eax,eax jne short M02_L00 M02_L01: mov ecx,[ebp-1C] call dword ptr ds:[0DE02BC] jmp short M02_L03 cmp dword ptr [ebp-1C],0 je short M02_L02 mov ecx,[ebp-1C] call dword ptr ds:[0DE02BC] M02_L02: pop eax jmp eax M02_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Concat_Once(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi mov esi,ecx mov edx,[edx+4] mov ecx,edx call dword ptr ds:[0B8F33C0]; System.Linq.Enumerable.Concat[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1) mov ecx,eax mov edx,[esi+4] call dword ptr ds:[0B8F3438]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop esi pop ebp ret ; Total bytes of code 31 ``` ```assembly ; System.Linq.Enumerable.Concat[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je short M01_L01 test edi,edi je short M01_L02 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+ConcatIterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[3AFB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax jne short M01_L00 mov ecx,offset MT_System.Linq.Enumerable+Concat2Iterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+18] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx pop ebx pop esi pop edi pop ebp ret M01_L00: mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+30] call dword ptr [eax+8] pop ebx pop esi pop edi pop ebp ret M01_L01: mov ecx,4 call dword ptr ds:[0AEE3E10] int 3 M01_L02: mov ecx,0E call dword ptr ds:[0AEE3E10] int 3 ; Total bytes of code 119 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[32F02AC] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[32F02B0] test eax,eax je short M02_L01 M02_L00: mov ecx,[ebp-1C] call dword ptr ds:[32F02B4] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[32F02B0] test eax,eax jne short M02_L00 M02_L01: mov ecx,[ebp-1C] call dword ptr ds:[32F02B8] jmp short M02_L03 cmp dword ptr [ebp-1C],0 je short M02_L02 mov ecx,[ebp-1C] call dword ptr ds:[32F02B8] M02_L02: pop eax jmp eax M02_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` #### System.Linq.Tests.Perf_Enumerable.All_AllElementsMatch(input: IEnumerable) ```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 646.4057001136142 < 710.0499560039719. IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 21.04480291351482 (T) = (0 -647.3046168912799) / Math.Sqrt((1735.5542554063354 / (299)) + (2.1846651976886267 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.0730897956128663 = (698.3466292932583 - 647.3046168912799) / 698.3466292932583 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.All_AllElementsMatch(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi mov esi,[edx+4] mov edx,ds:[72B4900] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[72B48D4] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B6D43C0 mov edx,72B4900 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B6D5558]; System.Linq.Enumerable.All[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) pop esi pop ebp ret M00_L01: call dword ptr ds:[859B630] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Linq.Enumerable.All[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi sub esp,1C xor eax,eax mov [ebp-24],eax mov [ebp-14],eax mov esi,edx test ecx,ecx je near ptr M01_L08 test esi,esi je near ptr M01_L09 call dword ptr ds:[30802B0] mov edi,eax mov [ebp-24],edi mov ecx,edi call dword ptr ds:[30802B4] test eax,eax je short M01_L02 M01_L00: mov ecx,edi call dword ptr ds:[30802B8] mov edx,eax mov ecx,[esi+4] call dword ptr [esi+0C] test eax,eax je short M01_L01 mov ecx,edi call dword ptr ds:[30802B4] test eax,eax jne short M01_L00 jmp short M01_L02 M01_L01: xor ecx,ecx mov [ebp-20],ecx mov dword ptr [ebp-18],0 mov dword ptr [ebp-14],0FC push offset M01_L03 jmp short M01_L04 M01_L02: mov ecx,edi call dword ptr ds:[30802BC] jmp short M01_L06 M01_L03: mov dword ptr [ebp-14],0 jmp short M01_L07 M01_L04: mov edi,[ebp-24] test edi,edi je short M01_L05 mov ecx,edi call dword ptr ds:[30802BC] M01_L05: pop eax jmp eax M01_L06: mov eax,1 lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L07: mov eax,[ebp-20] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L08: mov ecx,10 call dword ptr ds:[0ACC3E10] int 3 M01_L09: mov ecx,0C call dword ptr ds:[0ACC3E10] int 3 ; Total bytes of code 200 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.All_AllElementsMatch(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi mov esi,[edx+4] mov edx,ds:[6D748F8] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[6D748CC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0AFC64E0 mov edx,6D748F8 call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0AFC7678]; System.Linq.Enumerable.All[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) pop esi pop ebp ret M00_L01: call dword ptr ds:[4B7B630] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Linq.Enumerable.All[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi sub esp,1C xor eax,eax mov [ebp-24],eax mov [ebp-14],eax mov esi,edx test ecx,ecx je near ptr M01_L08 test esi,esi je near ptr M01_L09 call dword ptr ds:[2FC02C0] mov edi,eax mov [ebp-24],edi mov ecx,edi call dword ptr ds:[2FC02C4] test eax,eax je short M01_L02 M01_L00: mov ecx,edi call dword ptr ds:[2FC02C8] mov edx,eax mov ecx,[esi+4] call dword ptr [esi+0C] test eax,eax je short M01_L01 mov ecx,edi call dword ptr ds:[2FC02C4] test eax,eax jne short M01_L00 jmp short M01_L02 M01_L01: xor ecx,ecx mov [ebp-20],ecx mov dword ptr [ebp-18],0 mov dword ptr [ebp-14],0FC push offset M01_L03 jmp short M01_L04 M01_L02: mov ecx,edi call dword ptr ds:[2FC02CC] jmp short M01_L06 M01_L03: mov dword ptr [ebp-14],0 jmp short M01_L07 M01_L04: mov edi,[ebp-24] test edi,edi je short M01_L05 mov ecx,edi call dword ptr ds:[2FC02CC] M01_L05: pop eax jmp eax M01_L06: mov eax,1 lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L07: mov eax,[ebp-20] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L08: mov ecx,10 call dword ptr ds:[0A5C5798] int 3 M01_L09: mov ecx,0C call dword ptr ds:[0A5C5798] int 3 ; Total bytes of code 200 ``` ### 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 c03de20e23ce8419cf3918500edf555504a8aee9
Compare 6364f1569b719a2adddfb8aedb2e8ae2ce916722
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
[ConcurrentStack - 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).ConcurrentStack(Size%3a%20512).html>) 5.66 μs 4.05 μs 0.71 0.03 False
[HashSet - 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).HashSet(Size%3a%20512).html>) 2.56 μs 2.23 μs 0.87 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.IterateForEach&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<String>.ConcurrentStack(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.047916990668741 < 5.377101853327172. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 43.65911851532522 (T) = (0 -4052.058763745975) / Math.Sqrt((147721.1332636716 / (299)) + (42.175759578212485 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.19345307134519543 = (5023.959077625132 - 4052.058763745975) / 5023.959077625132 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.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 2.23327785731329 < 2.4357234736036335. IsChangePoint: Marked as a change because one of 9/29/2022 7:42:19 AM, 10/2/2022 4:08:26 PM, 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 13.112952763787524 (T) = (0 -2227.23792078896) / Math.Sqrt((24599.607249105316 / (299)) + (25.895256628555327 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.050964990412948816 = (2346.8448458588337 - 2227.23792078896) / 2346.8448458588337 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 c03de20e23ce8419cf3918500edf555504a8aee9
Compare 6364f1569b719a2adddfb8aedb2e8ae2ce916722
Diff Diff

Improvements in System.Collections.CtorFromCollection<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ImmutableStack - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CtorFromCollection(String).ImmutableStack(Size%3a%20512).html>) 6.05 μs 5.37 μ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.CtorFromCollection&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.CtorFromCollection<String>.ImmutableStack(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.372645043230498 < 5.7280397559564395. IsChangePoint: Marked as a change because one of 10/11/2022 5:13:36 PM, 10/25/2022 12:27:43 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 13.192737980704887 (T) = (0 -5458.968138627418) / Math.Sqrt((26651.113407510802 / (299)) + (18262.012274902925 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.06173896932772437 = (5818.176349833052 - 5458.968138627418) / 5818.176349833052 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 c03de20e23ce8419cf3918500edf555504a8aee9
Compare 6364f1569b719a2adddfb8aedb2e8ae2ce916722
Diff Diff

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

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ProducerConsumer - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Buffers.Tests.RentReturnArrayPoolTests(Byte).ProducerConsumer(RentalSize%3a%204096%2c%20ManipulateArray%3a%20True%2c%20Async%3a%20False%2c%20UseSharedPool%3a%20False).html>) 12.93 μs 1.74 μs 0.13 0.51 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.RentReturnArrayPoolTests&lt;Byte&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Buffers.Tests.RentReturnArrayPoolTests<Byte>.ProducerConsumer(RentalSize: 4096, ManipulateArray: True, Async: False, UseSharedPool: False) ```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.7449860000000004 < 11.9672262635989. IsChangePoint: Marked as a change because one of 12/7/2022 10:10:38 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 2.7216882218821117 (T) = (0 -2258.7071163351748) / Math.Sqrt((16840593.665912714 / (299)) + (6039844.091521478 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.3859286965051325 = (3678.2489321357016 - 2258.7071163351748) / 3678.2489321357016 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 c03de20e23ce8419cf3918500edf555504a8aee9
Compare 6364f1569b719a2adddfb8aedb2e8ae2ce916722
Diff Diff

Improvements in System.Collections.IndexerSetReverse<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.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IndexerSetReverse(String).IList(Size%3a%20512).html>) 3.02 μs 2.73 μ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.IndexerSetReverse&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IndexerSetReverse<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 2.727958946565075 < 2.899604277591845. IsChangePoint: Marked as a change because one of 10/2/2022 4:08:26 PM, 11/22/2022 2:20:42 AM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 21.004302405953272 (T) = (0 -2731.22787938674) / Math.Sqrt((6221.70678128642 / (299)) + (2337.8352334984893 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.07282171999958816 = (2945.7418689591464 - 2731.22787938674) / 2945.7418689591464 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 c03de20e23ce8419cf3918500edf555504a8aee9
Compare 6364f1569b719a2adddfb8aedb2e8ae2ce916722
Diff Diff

Improvements in System.Collections.IterateForEachNonGeneric<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_x86_Windows 10.0.18362/System.Collections.IterateForEachNonGeneric(Int32).ArrayList(Size%3a%20512).html>) 3.25 μs 2.82 μs 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.Collections.IterateForEachNonGeneric&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEachNonGeneric<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 2.8163212818654095 < 3.0788914564763186. IsChangePoint: Marked as a change because one of 10/10/2022 3:36:43 PM, 10/25/2022 12:27:43 PM, 11/2/2022 4:14:20 AM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/20/2022 4:30:45 AM falls between 12/11/2022 2:11:02 PM and 12/20/2022 4:30:45 AM. IsImprovementStdDev: Marked as improvement because 16.619468100244248 (T) = (0 -2806.0716586539943) / Math.Sqrt((36763.50309172789 / (299)) + (61.00645336340384 / (28))) is greater than 1.967290077109849 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (28) - 2, .975) and 0.06213627012631067 = (2991.9822776725928 - 2806.0716586539943) / 2991.9822776725928 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)