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: 4 Regressions on 2/1/2023 11:20:33 PM #12479

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 120b7215c9d029fccee94f46864494d79074a0eb
Compare 2ba2396495c22429035d165e478672c442f81e22
Diff Diff

Regressions in System.Net.Http.Tests.SocketsHttpHandlerPerfTest

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Get_EnumerateHeaders_Validated - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Validated(ssl%3a%20True%2c%20chunkedResponse%3a%20False%2c%20responseLength%3a%20100000).html>) 156.95 μs 173.62 μs 1.11 0.17 False Trace Trace
[Get_EnumerateHeaders_Unvalidated - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Unvalidated(ssl%3a%20True%2c%20chunkedResponse%3a%20True%2c%20responseLength%3a%20100000).html>) 145.63 μs 164.68 μs 1.13 0.27 False Trace Trace
[Get_EnumerateHeaders_Unvalidated - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Unvalidated(ssl%3a%20True%2c%20chunkedResponse%3a%20False%2c%20responseLength%3a%20100000).html>) 157.68 μs 178.55 μs 1.13 0.16 False Trace Trace

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.Net.Http.Tests.SocketsHttpHandlerPerfTest*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Validated(ssl: True, chunkedResponse: False, responseLength: 100000) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 173.62427668539323 > 165.96698749484327. IsChangePoint: Marked as a change because one of 2/1/2023 6:25:50 PM, 2/7/2023 8:22:47 AM falls between 1/29/2023 5:12:48 PM and 2/7/2023 8:22:47 AM. IsRegressionStdDev: Marked as regression because -10.480703508611274 (T) = (0 -172188.80872285686) / Math.Sqrt((9470577.226984018 / (30)) + (42206026.52446709 / (29))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (30) + (29) - 2, .025) and -0.08814323138462539 = (158240.9408582659 - 172188.80872285686) / 158240.9408582659 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Validated() 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-14],0FFFFFFFF lea ecx,[ebp-20] call dword ptr ds:[0BFD9468]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__11, MicroBenchmarks]](d__11 ByRef) mov eax,[ebp-10] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret M00_L01: lea ecx,[ebp-10] call dword ptr ds:[0B7A3EB8] 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:[0B7A5168]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__11, MicroBenchmarks]](d__11 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,2C74E68 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:[0BFD91B0]; System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__11.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:[0B79DA20] jmp short M03_L09 M03_L04: call dword ptr ds:[80371F8] 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:[0B79DA20] 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:[0A709AE0]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0A709270]; 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:[0B7A5180]; System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` ### Compare Jit Disasm ```assembly ; System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Validated() 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-14],0FFFFFFFF lea ecx,[ebp-20] call dword ptr ds:[0BB19468]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__11, MicroBenchmarks]](d__11 ByRef) mov eax,[ebp-10] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret M00_L01: lea ecx,[ebp-10] call dword ptr ds:[0B303EB8] 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:[0B305168]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__11, MicroBenchmarks]](d__11 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,0AA4E68 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:[0BB191B0]; System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__11.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:[0B2EDA20] jmp short M03_L09 M03_L04: call dword ptr ds:[7B871F8] 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:[0B2EDA20] 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:[0A269AE0]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0A269270]; 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:[0B305180]; System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` #### System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Unvalidated(ssl: True, chunkedResponse: True, responseLength: 100000) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 164.6789156626506 > 160.2808290255496. IsChangePoint: Marked as a change because one of 2/1/2023 6:25:50 PM, 2/7/2023 8:22:47 AM falls between 1/29/2023 5:12:48 PM and 2/7/2023 8:22:47 AM. IsRegressionStdDev: Marked as regression because -9.41602517576772 (T) = (0 -170256.33774840704) / Math.Sqrt((24899051.0542606 / (30)) + (62316322.10010972 / (29))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (30) + (29) - 2, .025) and -0.10552465567922677 = (154005.01189528216 - 170256.33774840704) / 154005.01189528216 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Unvalidated() 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-14],0FFFFFFFF lea ecx,[ebp-20] call dword ptr ds:[0BBC9468]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12, MicroBenchmarks]](d__12 ByRef) mov eax,[ebp-10] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret M00_L01: lea ecx,[ebp-10] call dword ptr ds:[0B393EB8] 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:[0B395168]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12, MicroBenchmarks]](d__12 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,4714E68 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:[0BBC91B0]; System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12.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:[0B38DA20] jmp short M03_L09 M03_L04: call dword ptr ds:[7C271F8] 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:[0B38DA20] 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:[0A2F9AE0]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0A2F9270]; 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:[0B395180]; System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` ### Compare Jit Disasm ```assembly ; System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Unvalidated() 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-14],0FFFFFFFF lea ecx,[ebp-20] call dword ptr ds:[0C339468]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12, MicroBenchmarks]](d__12 ByRef) mov eax,[ebp-10] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret M00_L01: lea ecx,[ebp-10] call dword ptr ds:[0BB13EB8] 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:[0BB15168]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12, MicroBenchmarks]](d__12 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,35E4E68 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:[0C3391B0]; System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12.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:[0BAFDA20] jmp short M03_L09 M03_L04: call dword ptr ds:[83971F8] 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:[0BAFDA20] 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:[0AA79AE0]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0AA79270]; 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:[0BB15180]; System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` #### System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Unvalidated(ssl: True, chunkedResponse: False, responseLength: 100000) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 178.55067471590908 > 167.01937910353539. IsChangePoint: Marked as a change because one of 2/1/2023 6:25:50 PM, 2/7/2023 8:22:47 AM falls between 1/29/2023 5:12:48 PM and 2/7/2023 8:22:47 AM. IsRegressionStdDev: Marked as regression because -13.653368475575292 (T) = (0 -173203.12681706093) / Math.Sqrt((7007088.839140326 / (30)) + (24127073.648246042 / (29))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (30) + (29) - 2, .025) and -0.08857848245019026 = (159109.45293279405 - 173203.12681706093) / 159109.45293279405 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Unvalidated() 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-14],0FFFFFFFF lea ecx,[ebp-20] call dword ptr ds:[0C919468]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12, MicroBenchmarks]](d__12 ByRef) mov eax,[ebp-10] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret M00_L01: lea ecx,[ebp-10] call dword ptr ds:[0C0E3EB8] 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:[0C0E5168]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12, MicroBenchmarks]](d__12 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,3B44E68 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:[0C9191B0]; System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12.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:[0C0DDA20] jmp short M03_L09 M03_L04: call dword ptr ds:[89771F8] 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:[0C0DDA20] 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:[0B049AE0]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0B049270]; 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:[0C0E5180]; System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` ### Compare Jit Disasm ```assembly ; System.Net.Http.Tests.SocketsHttpHandlerPerfTest.Get_EnumerateHeaders_Unvalidated() 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-14],0FFFFFFFF lea ecx,[ebp-20] call dword ptr ds:[0BB79468]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12, MicroBenchmarks]](d__12 ByRef) mov eax,[ebp-10] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret M00_L01: lea ecx,[ebp-10] call dword ptr ds:[0B353EB8] 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:[0B355168]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12, MicroBenchmarks]](d__12 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,4744E68 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:[0BB791B0]; System.Net.Http.Tests.SocketsHttpHandlerPerfTest+d__12.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:[0B33DA20] jmp short M03_L09 M03_L04: call dword ptr ds:[7BD71F8] 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:[0B33DA20] 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:[0A2B9AE0]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0A2B9270]; 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:[0B355180]; System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) 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 120b7215c9d029fccee94f46864494d79074a0eb
Compare 2ba2396495c22429035d165e478672c442f81e22
Diff Diff

Regressions in System.Tests.Perf_Int64

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ParseSpan - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Int64.ParseSpan(value%3a%20%2212345%22).html>) 0.58 ns 27.03 ns 46.20 0.43 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Int64*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Int64.ParseSpan(value: "12345") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 27.02848676034796 > 0.5750311997775931. IsChangePoint: Marked as a change because one of 1/21/2023 8:50:04 PM, 2/1/2023 6:25:50 PM, 2/7/2023 8:22:47 AM falls between 1/29/2023 5:12:48 PM and 2/7/2023 8:22:47 AM. IsRegressionStdDev: Marked as regression because -19.029931375843436 (T) = (0 -25.765604216015277) / Math.Sqrt((42.365874064341135 / (30)) + (2.5607122364859563 / (29))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (30) + (29) - 2, .025) and -9.49541719163644 = (2.454938545610869 - 25.765604216015277) / 2.454938545610869 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Int64.ParseSpan(System.String) push ebp mov ebp,esp push edi push esi sub esp,8 test edx,edx je short M00_L01 lea esi,[edx+8] mov edi,[edx+4] M00_L00: call dword ptr ds:[0A9538B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax push edi push esi lea ecx,[ebp-10] push ecx mov ecx,7 call dword ptr ds:[885D018]; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef) mov ecx,eax test ecx,ecx jne short M00_L02 mov eax,[ebp-10] mov edx,[ebp-0C] lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L01: xor esi,esi xor edi,edi jmp short M00_L00 M00_L02: push edi push esi mov edx,0B call dword ptr ds:[885D360] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,2EA4E68 mov edx,250 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[7021240] test ecx,ecx jne short M01_L00 mov ecx,ds:[7021230] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,82848C0 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[8857030] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[4FAB8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,50 mov esi,ecx mov edi,[ebp+10] test edi,edi je near ptr M02_L07 xor ebx,ebx mov eax,[ebp+0C] movzx eax,word ptr [eax] test esi,1 je short M02_L00 cmp eax,20 je near ptr M02_L17 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L17 M02_L00: mov dword ptr [ebp-1C],1 mov [ebp-10],esi test esi,4 je short M02_L01 cmp byte ptr [edx+71],0 je near ptr M02_L20 cmp eax,2D je near ptr M02_L18 cmp eax,2B je near ptr M02_L19 M02_L01: xor edx,edx mov [ebp-20],edx xor edi,edi xor edx,edx lea ecx,[eax-30] cmp ecx,9 ja near ptr M02_L07 cmp eax,30 je short M02_L04 M02_L02: add eax,0FFFFFFD0 mov edx,eax sar edx,1F mov edi,eax inc ebx xor eax,eax mov [ebp-24],eax M02_L03: cmp ebx,[ebp+10] jae short M02_L05 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] mov [ebp-18],ecx lea esi,[ecx-30] cmp esi,9 ja near ptr M02_L09 inc ebx push edx push edi push 0 push 0A call CORINFO_HELP_LMUL mov esi,[ebp-18] mov ecx,esi sar esi,1F add eax,ecx adc edx,esi mov edi,eax sub edi,30 sbb edx,0 mov esi,edx mov eax,[ebp-24] inc eax cmp eax,11 jge near ptr M02_L26 mov [ebp-24],eax mov edx,esi jmp short M02_L03 M02_L04: inc ebx cmp ebx,[ebp+10] jb near ptr M02_L27 M02_L05: push edx push edi mov edi,[ebp-1C] mov eax,edi sar eax,1F push eax push edi call CORINFO_HELP_LMUL mov ebx,[ebp+8] mov [ebx],eax mov [ebx+4],edx xor eax,eax M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L07: mov ebx,[ebp+8] mov eax,ebx xor edx,edx mov [eax],edx mov [eax+4],edx mov eax,1 jmp short M02_L06 M02_L08: mov ebx,[ebp+8] mov eax,ebx xor edx,edx mov [eax],edx mov [eax+4],edx mov eax,2 jmp short M02_L06 M02_L09: mov ecx,[ebp-18] cmp ecx,20 je short M02_L10 add ecx,0FFFFFFF7 cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx je short M02_L11 M02_L10: test byte ptr [ebp-10],2 mov [ebp-30],edx je short M02_L07 mov esi,[ebp-1C] jmp short M02_L13 M02_L11: mov [ebp-30],edx jmp short M02_L15 M02_L12: cmp ebx,[ebp+10] jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] cmp ecx,20 je short M02_L13 add ecx,0FFFFFFF7 cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx je short M02_L14 M02_L13: inc ebx cmp ebx,[ebp+10] jl short M02_L12 M02_L14: cmp ebx,[ebp+10] mov [ebp-1C],esi jae short M02_L16 M02_L15: push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,ebx call dword ptr ds:[885D2D0] test eax,eax mov eax,[ebp-30] jne near ptr M02_L30 jmp near ptr M02_L07 M02_L16: mov eax,[ebp-30] jmp near ptr M02_L30 M02_L17: inc ebx cmp ebx,edi jae near ptr M02_L07 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,20 je short M02_L17 lea ecx,[eax-9] cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx jne short M02_L17 jmp near ptr M02_L00 M02_L18: mov ecx,0FFFFFFFF inc ebx cmp ebx,edi jae near ptr M02_L07 mov esi,[ebp-10] jmp near ptr M02_L24 M02_L19: inc ebx cmp ebx,edi jae near ptr M02_L07 mov ecx,[ebp-1C] mov esi,[ebp-10] jmp near ptr M02_L24 M02_L20: cmp byte ptr [edx+72],0 je short M02_L21 mov [ebp-18],eax cmp eax,2D mov eax,[ebp-18] jne short M02_L21 mov ecx,0FFFFFFFF inc ebx cmp ebx,edi mov [ebp-1C],ecx jae near ptr M02_L07 mov esi,[ebp-10] mov ecx,[ebp-1C] jmp near ptr M02_L24 M02_L21: cmp ebx,edi jbe short M02_L22 call dword ptr ds:[89151E0] int 3 M02_L22: mov ecx,[ebp+0C] lea ecx,[ecx+ebx*2] sub edi,ebx mov [ebp+0C],ecx mov [ebp+10],edi xor ebx,ebx mov edi,[edx+10] mov [ebp-4C],edi mov edx,[edx+14] mov [ebp-50],edx test edi,edi je short M02_L23 xor ecx,ecx cmp dword ptr [edi+4],0 sete cl test ecx,ecx jne short M02_L23 mov ecx,[ebp+0C] mov edx,[ebp+10] mov [ebp-2C],edx lea edx,[edi+8] mov edi,[edi+4] cmp edi,[ebp-2C] jg short M02_L23 mov [ebp-18],eax add edi,edi push edi call dword ptr ds:[4FBF120] test eax,eax mov eax,[ebp-18] je short M02_L23 mov edi,[ebp-4C] mov ebx,[edi+4] cmp ebx,[ebp+10] mov [ebp-14],ebx jae near ptr M02_L07 mov esi,[ebp-10] mov ecx,[ebp-1C] mov ebx,[ebp-14] jmp near ptr M02_L24 M02_L23: mov edx,[ebp-50] test edx,edx je near ptr M02_L01 mov [ebp-50],edx cmp dword ptr [edx+4],0 sete dl movzx edx,dl test edx,edx jne near ptr M02_L01 mov [ebp-14],ebx mov edx,[ebp+0C] mov edi,[ebp+10] mov ebx,[ebp-50] add ebx,8 mov ecx,[ebp-50] mov ecx,[ecx+4] cmp ecx,edi mov [ebp-28],ecx mov [ebp-54],ebx jg short M02_L25 mov [ebp-18],eax mov edi,[ebp-50] mov ebx,[ebp-28] add ebx,ebx push ebx mov ecx,edx mov edx,[ebp-54] call dword ptr ds:[4FBF120] test eax,eax mov eax,[ebp-18] mov ebx,[ebp-14] je near ptr M02_L01 mov dword ptr [ebp-1C],0FFFFFFFF mov eax,[edi+4] mov edi,eax cmp edi,[ebp+10] mov ebx,edi mov ecx,[ebp-1C] mov esi,[ebp-10] jae near ptr M02_L07 M02_L24: cmp ebx,[ebp+10] jae near ptr M02_L31 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov edi,eax mov [ebp-10],esi mov [ebp-1C],ecx mov eax,edi jmp near ptr M02_L01 M02_L25: mov ebx,[ebp-14] jmp near ptr M02_L01 M02_L26: cmp ebx,[ebp+10] mov edx,esi jae near ptr M02_L05 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov [ebp-18],eax lea ecx,[eax-30] cmp ecx,9 ja near ptr M02_L09 inc ebx cmp edi,0CCCCCCCD mov ecx,edx sbb ecx,0CCCCCCC setge cl movzx ecx,cl mov [ebp-20],ecx push edx push edi push 0 push 0A call CORINFO_HELP_LMUL mov edi,[ebp-18] mov ecx,edi sar edi,1F add eax,ecx adc edx,edi mov edi,eax sub edi,30 sbb edx,0 mov eax,edx mov edx,[ebp-1C] mov ecx,edx shr ecx,1F mov [ebp-58],ecx xor ecx,ecx mov [ebp-5C],ecx mov ecx,[ebp-58] add ecx,0FFFFFFFF mov [ebp-58],ecx mov ecx,[ebp-5C] adc ecx,7FFFFFFF mov [ebp-5C],ecx mov ecx,[ebp-58] cmp ecx,edi mov ecx,[ebp-5C] sbb ecx,eax setb cl movzx ecx,cl or ecx,[ebp-20] movzx ecx,cl mov [ebp-20],ecx cmp ebx,[ebp+10] jae short M02_L30 jmp short M02_L29 M02_L27: mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,30 je near ptr M02_L04 lea ecx,[eax-30] cmp ecx,9 mov [ebp-18],eax ja near ptr M02_L09 mov eax,[ebp-18] jmp near ptr M02_L02 M02_L28: mov edx,1 inc ebx cmp ebx,[ebp+10] mov [ebp-20],edx jae near ptr M02_L08 M02_L29: cmp ebx,[ebp+10] jae short M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea edx,[ecx-30] cmp edx,9 jbe short M02_L28 mov [ebp-18],ecx mov edx,eax jmp near ptr M02_L09 M02_L30: cmp dword ptr [ebp-20],0 jne near ptr M02_L08 mov edx,eax jmp near ptr M02_L05 M02_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1138 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Int64.ParseSpan(System.String) push ebp mov ebp,esp push edi push esi sub esp,8 test edx,edx je short M00_L01 lea esi,[edx+8] mov edi,[edx+4] M00_L00: push edi push esi call dword ptr ds:[0B0C38B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-10] push ecx mov ecx,7 call dword ptr ds:[902D018]; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef) mov ecx,eax test ecx,ecx jne short M00_L02 mov eax,[ebp-10] mov edx,[ebp-0C] lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L01: xor esi,esi xor edi,edi jmp short M00_L00 M00_L02: push edi push esi mov edx,0B call dword ptr ds:[902D360] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,3674E68 mov edx,250 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[7721240] test ecx,ecx jne short M01_L00 mov ecx,ds:[7721230] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,8A248C0 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[9027330] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[89EB8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,50 mov esi,ecx mov edi,[ebp+10] test edi,edi je near ptr M02_L07 xor ebx,ebx mov eax,[ebp+0C] movzx eax,word ptr [eax] test esi,1 je short M02_L00 cmp eax,20 je near ptr M02_L17 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L17 M02_L00: mov dword ptr [ebp-1C],1 mov [ebp-10],esi test esi,4 je short M02_L01 cmp byte ptr [edx+71],0 je near ptr M02_L20 cmp eax,2D je near ptr M02_L18 cmp eax,2B je near ptr M02_L19 M02_L01: xor edx,edx mov [ebp-20],edx xor edi,edi xor edx,edx lea ecx,[eax-30] cmp ecx,9 ja near ptr M02_L07 cmp eax,30 je short M02_L04 M02_L02: add eax,0FFFFFFD0 mov edx,eax sar edx,1F mov edi,eax inc ebx xor eax,eax mov [ebp-24],eax M02_L03: cmp ebx,[ebp+10] jae short M02_L05 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] mov [ebp-18],ecx lea esi,[ecx-30] cmp esi,9 ja near ptr M02_L09 inc ebx push edx push edi push 0 push 0A call CORINFO_HELP_LMUL mov esi,[ebp-18] mov ecx,esi sar esi,1F add eax,ecx adc edx,esi mov edi,eax sub edi,30 sbb edx,0 mov esi,edx mov eax,[ebp-24] inc eax cmp eax,11 jge near ptr M02_L26 mov [ebp-24],eax mov edx,esi jmp short M02_L03 M02_L04: inc ebx cmp ebx,[ebp+10] jb near ptr M02_L27 M02_L05: push edx push edi mov edi,[ebp-1C] mov eax,edi sar eax,1F push eax push edi call CORINFO_HELP_LMUL mov ebx,[ebp+8] mov [ebx],eax mov [ebx+4],edx xor eax,eax M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L07: mov ebx,[ebp+8] mov eax,ebx xor edx,edx mov [eax],edx mov [eax+4],edx mov eax,1 jmp short M02_L06 M02_L08: mov ebx,[ebp+8] mov eax,ebx xor edx,edx mov [eax],edx mov [eax+4],edx mov eax,2 jmp short M02_L06 M02_L09: mov ecx,[ebp-18] cmp ecx,20 je short M02_L10 add ecx,0FFFFFFF7 cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx je short M02_L11 M02_L10: test byte ptr [ebp-10],2 mov [ebp-30],edx je short M02_L07 mov esi,[ebp-1C] jmp short M02_L13 M02_L11: mov [ebp-30],edx jmp short M02_L15 M02_L12: cmp ebx,[ebp+10] jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] cmp ecx,20 je short M02_L13 add ecx,0FFFFFFF7 cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx je short M02_L14 M02_L13: inc ebx cmp ebx,[ebp+10] jl short M02_L12 M02_L14: cmp ebx,[ebp+10] mov [ebp-1C],esi jae short M02_L16 M02_L15: push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,ebx call dword ptr ds:[902D2D0] test eax,eax mov eax,[ebp-30] jne near ptr M02_L30 jmp near ptr M02_L07 M02_L16: mov eax,[ebp-30] jmp near ptr M02_L30 M02_L17: inc ebx cmp ebx,edi jae near ptr M02_L07 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,20 je short M02_L17 lea ecx,[eax-9] cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx jne short M02_L17 jmp near ptr M02_L00 M02_L18: mov ecx,0FFFFFFFF inc ebx cmp ebx,edi jae near ptr M02_L07 mov esi,[ebp-10] jmp near ptr M02_L24 M02_L19: inc ebx cmp ebx,edi jae near ptr M02_L07 mov ecx,[ebp-1C] mov esi,[ebp-10] jmp near ptr M02_L24 M02_L20: cmp byte ptr [edx+72],0 je short M02_L21 mov [ebp-18],eax cmp eax,2D mov eax,[ebp-18] jne short M02_L21 mov ecx,0FFFFFFFF inc ebx cmp ebx,edi mov [ebp-1C],ecx jae near ptr M02_L07 mov esi,[ebp-10] mov ecx,[ebp-1C] jmp near ptr M02_L24 M02_L21: cmp ebx,edi jbe short M02_L22 call dword ptr ds:[90E5270] int 3 M02_L22: mov ecx,[ebp+0C] lea ecx,[ecx+ebx*2] sub edi,ebx mov [ebp+0C],ecx mov [ebp+10],edi xor ebx,ebx mov edi,[edx+10] mov [ebp-4C],edi mov edx,[edx+14] mov [ebp-50],edx test edi,edi je short M02_L23 xor ecx,ecx cmp dword ptr [edi+4],0 sete cl test ecx,ecx jne short M02_L23 mov ecx,[ebp+0C] mov edx,[ebp+10] mov [ebp-2C],edx lea edx,[edi+8] mov edi,[edi+4] cmp edi,[ebp-2C] jg short M02_L23 mov [ebp-18],eax add edi,edi push edi call dword ptr ds:[89FF120] test eax,eax mov eax,[ebp-18] je short M02_L23 mov edi,[ebp-4C] mov ebx,[edi+4] cmp ebx,[ebp+10] mov [ebp-14],ebx jae near ptr M02_L07 mov esi,[ebp-10] mov ecx,[ebp-1C] mov ebx,[ebp-14] jmp near ptr M02_L24 M02_L23: mov edx,[ebp-50] test edx,edx je near ptr M02_L01 mov [ebp-50],edx cmp dword ptr [edx+4],0 sete dl movzx edx,dl test edx,edx jne near ptr M02_L01 mov [ebp-14],ebx mov edx,[ebp+0C] mov edi,[ebp+10] mov ebx,[ebp-50] add ebx,8 mov ecx,[ebp-50] mov ecx,[ecx+4] cmp ecx,edi mov [ebp-28],ecx mov [ebp-54],ebx jg short M02_L25 mov [ebp-18],eax mov edi,[ebp-50] mov ebx,[ebp-28] add ebx,ebx push ebx mov ecx,edx mov edx,[ebp-54] call dword ptr ds:[89FF120] test eax,eax mov eax,[ebp-18] mov ebx,[ebp-14] je near ptr M02_L01 mov dword ptr [ebp-1C],0FFFFFFFF mov eax,[edi+4] mov edi,eax cmp edi,[ebp+10] mov ebx,edi mov ecx,[ebp-1C] mov esi,[ebp-10] jae near ptr M02_L07 M02_L24: cmp ebx,[ebp+10] jae near ptr M02_L31 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov edi,eax mov [ebp-10],esi mov [ebp-1C],ecx mov eax,edi jmp near ptr M02_L01 M02_L25: mov ebx,[ebp-14] jmp near ptr M02_L01 M02_L26: cmp ebx,[ebp+10] mov edx,esi jae near ptr M02_L05 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov [ebp-18],eax lea ecx,[eax-30] cmp ecx,9 ja near ptr M02_L09 inc ebx cmp edi,0CCCCCCCD mov ecx,edx sbb ecx,0CCCCCCC setge cl movzx ecx,cl mov [ebp-20],ecx push edx push edi push 0 push 0A call CORINFO_HELP_LMUL mov edi,[ebp-18] mov ecx,edi sar edi,1F add eax,ecx adc edx,edi mov edi,eax sub edi,30 sbb edx,0 mov eax,edx mov edx,[ebp-1C] mov ecx,edx shr ecx,1F mov [ebp-58],ecx xor ecx,ecx mov [ebp-5C],ecx mov ecx,[ebp-58] add ecx,0FFFFFFFF mov [ebp-58],ecx mov ecx,[ebp-5C] adc ecx,7FFFFFFF mov [ebp-5C],ecx mov ecx,[ebp-58] cmp ecx,edi mov ecx,[ebp-5C] sbb ecx,eax setb cl movzx ecx,cl or ecx,[ebp-20] movzx ecx,cl mov [ebp-20],ecx cmp ebx,[ebp+10] jae short M02_L30 jmp short M02_L29 M02_L27: mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,30 je near ptr M02_L04 lea ecx,[eax-30] cmp ecx,9 mov [ebp-18],eax ja near ptr M02_L09 mov eax,[ebp-18] jmp near ptr M02_L02 M02_L28: mov edx,1 inc ebx cmp ebx,[ebp+10] mov [ebp-20],edx jae near ptr M02_L08 M02_L29: cmp ebx,[ebp+10] jae short M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea edx,[ecx-30] cmp edx,9 jbe short M02_L28 mov [ebp-18],ecx mov edx,eax jmp near ptr M02_L09 M02_L30: cmp dword ptr [ebp-20],0 jne near ptr M02_L08 mov edx,eax jmp near ptr M02_L05 M02_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1138 ``` ### 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)