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: 8 Regressions on 1/18/2023 8:37:25 PM #12013

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 5a17537f0baaa70a3b5d25679c4af4dff0182bad
Compare 170587e444c43d5c0080f7b2ea454e37463c832a
Diff Diff

Regressions in PerfLabTests.CastingPerf2.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IFooFooIsIFoo - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo.html>) 312.69 μs 440.34 μs 1.41 0.19 False Trace Trace
[IFooObjIsDescendantOfIFoo - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo.html>) 530.25 μs 615.89 μs 1.16 0.03 False Trace Trace
[IFooObjIsIFoo - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFoo.html>) 530.51 μs 595.10 μs 1.12 0.04 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 'PerfLabTests.CastingPerf2.CastingPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo ```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 440.33887648809525 > 327.9046887254902. 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/12/2022 5:25:39 PM, 12/14/2022 5:20:21 PM, 12/20/2022 1:34:12 PM, 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -16.406518339309585 (T) = (0 -443532.5542082591) / Math.Sqrt((1682762144.9672396 / (35)) + (82850679.17228836 / (33))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (35) + (33) - 2, .025) and -0.3570367524517462 = (326839.0140553915 - 443532.5542082591) / 326839.0140553915 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 ; PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo() push ebp mov ebp,esp push esi xor esi,esi mov ecx,0B3046D0 mov edx,0BE call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[0B304D08] test eax,eax jle short M00_L01 mov ecx,ds:[7754264] M00_L00: mov edx,77542C4 call CORINFO_HELP_ASSIGN_REF_ECX inc esi cmp esi,eax jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 54 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.IFooFooIsIFoo() push ebp mov ebp,esp push esi xor esi,esi mov ecx,0B176718 mov edx,0BE call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[0B176D50] test eax,eax jle short M00_L01 mov ecx,ds:[76E4264] M00_L00: mov edx,76E42C4 call CORINFO_HELP_ASSIGN_REF_ECX inc esi cmp esi,eax jl short M00_L00 M00_L01: pop esi pop ebp ret ; Total bytes of code 54 ``` #### PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo ```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 615.8900961538461 > 557.0153604166667. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -19.653466038024103 (T) = (0 -601361.5173845623) / Math.Sqrt((320776952.4942715 / (35)) + (57867121.9074442 / (33))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (35) + (33) - 2, .025) and -0.12106477601515442 = (536419.9556087321 - 601361.5173845623) / 536419.9556087321 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 ; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo() push ebp mov ebp,esp push edi push esi push ebx xor esi,esi mov edi,ds:[0B2E4D0C] test edi,edi jle short M00_L01 mov ebx,ds:[7864274] mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[8A7B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) M00_L00: mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[8A7B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) mov edx,78642C4 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L01: pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 70 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) push ebp mov ebp,esp push esi test edx,edx je short M01_L01 mov eax,[edx] movzx esi,word ptr [eax+0E] test esi,esi je short M01_L04 mov eax,[eax+24] cmp esi,4 jl short M01_L03 M01_L00: cmp [eax],ecx je short M01_L01 cmp [eax+4],ecx je short M01_L01 cmp [eax+8],ecx je short M01_L01 cmp [eax+0C],ecx jne short M01_L02 M01_L01: mov eax,edx pop esi pop ebp ret M01_L02: add eax,10 add esi,0FFFFFFFC cmp esi,4 jge short M01_L00 test esi,esi je short M01_L04 M01_L03: cmp [eax],ecx je short M01_L01 add eax,4 dec esi test esi,esi jg short M01_L03 M01_L04: call dword ptr ds:[8A7B870] pop esi pop ebp ret ; Total bytes of code 86 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo() push ebp mov ebp,esp push edi push esi push ebx xor esi,esi mov edi,ds:[0AD16D54] test edi,edi jle short M00_L01 mov ebx,ds:[7194274] mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[844B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) M00_L00: mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[844B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) mov edx,71942C4 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L01: pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 70 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) push ebp mov ebp,esp push esi test edx,edx je short M01_L01 mov eax,[edx] movzx esi,word ptr [eax+0E] test esi,esi je short M01_L04 mov eax,[eax+24] cmp esi,4 jl short M01_L03 M01_L00: cmp [eax],ecx je short M01_L01 cmp [eax+4],ecx je short M01_L01 cmp [eax+8],ecx je short M01_L01 cmp [eax+0C],ecx jne short M01_L02 M01_L01: mov eax,edx pop esi pop ebp ret M01_L02: add eax,10 add esi,0FFFFFFFC cmp esi,4 jge short M01_L00 test esi,esi je short M01_L04 M01_L03: cmp [eax],ecx je short M01_L01 add eax,4 dec esi test esi,esi jg short M01_L03 M01_L04: call dword ptr ds:[844B870] pop esi pop ebp ret ; Total bytes of code 86 ``` #### PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFoo ```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 595.0957175925927 > 556.7682895833334. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/12/2022 5:25:39 PM, 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -23.07815193224148 (T) = (0 -602320.124223869) / Math.Sqrt((221466442.11015657 / (35)) + (67360006.01116137 / (33))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (35) + (33) - 2, .025) and -0.12466000729509262 = (535557.5198877236 - 602320.124223869) / 535557.5198877236 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 ; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFoo() push ebp mov ebp,esp push edi push esi push ebx xor esi,esi mov edi,ds:[0A4B4D0C] test edi,edi jle short M00_L01 mov ebx,ds:[6B04274] mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[48CB888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) M00_L00: mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[48CB888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) mov edx,6B042C4 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L01: pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 70 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) push ebp mov ebp,esp push esi test edx,edx je short M01_L01 mov eax,[edx] movzx esi,word ptr [eax+0E] test esi,esi je short M01_L04 mov eax,[eax+24] cmp esi,4 jl short M01_L03 M01_L00: cmp [eax],ecx je short M01_L01 cmp [eax+4],ecx je short M01_L01 cmp [eax+8],ecx je short M01_L01 cmp [eax+0C],ecx jne short M01_L02 M01_L01: mov eax,edx pop esi pop ebp ret M01_L02: add eax,10 add esi,0FFFFFFFC cmp esi,4 jge short M01_L00 test esi,esi je short M01_L04 M01_L03: cmp [eax],ecx je short M01_L01 add eax,4 dec esi test esi,esi jg short M01_L03 M01_L04: call dword ptr ds:[48CB870] pop esi pop ebp ret ; Total bytes of code 86 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFoo() push ebp mov ebp,esp push edi push esi push ebx xor esi,esi mov edi,ds:[0B286D54] test edi,edi jle short M00_L01 mov ebx,ds:[77A4274] mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[8A2B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) M00_L00: mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[8A2B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) mov edx,77A42C4 call CORINFO_HELP_ASSIGN_REF_EAX inc esi cmp esi,edi jl short M00_L00 M00_L01: pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 70 ``` ```assembly ; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) push ebp mov ebp,esp push esi test edx,edx je short M01_L01 mov eax,[edx] movzx esi,word ptr [eax+0E] test esi,esi je short M01_L04 mov eax,[eax+24] cmp esi,4 jl short M01_L03 M01_L00: cmp [eax],ecx je short M01_L01 cmp [eax+4],ecx je short M01_L01 cmp [eax+8],ecx je short M01_L01 cmp [eax+0C],ecx jne short M01_L02 M01_L01: mov eax,edx pop esi pop ebp ret M01_L02: add eax,10 add esi,0FFFFFFFC cmp esi,4 jge short M01_L00 test esi,esi je short M01_L04 M01_L03: cmp [eax],ecx je short M01_L01 add eax,4 dec esi test esi,esi jg short M01_L03 M01_L04: call dword ptr ds:[8A2B870] pop esi pop ebp ret ; Total bytes of code 86 ``` ### 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 5a17537f0baaa70a3b5d25679c4af4dff0182bad
Compare 170587e444c43d5c0080f7b2ea454e37463c832a
Diff Diff

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Common

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IP_IsNotMatch - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Common.IP_IsNotMatch(Options%3a%20IgnoreCase%2c%20Compiled).html>) 203.28 ns 215.25 ns 1.06 0.04 False 2140.2982810694575 2251.4486580110965 1.0519321899777911 Trace Trace
[IP_IsMatch - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Common.IP_IsMatch(Options%3a%20IgnoreCase%2c%20Compiled).html>) 201.31 ns 215.24 ns 1.07 0.04 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.Text.RegularExpressions.Tests.Perf_Regex_Common*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.RegularExpressions.Tests.Perf_Regex_Common.IP_IsNotMatch(Options: IgnoreCase, Compiled) ```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 215.24582107655203 > 211.8520272882374. IsChangePoint: Marked as a change because one of 11/7/2022 10:11:20 AM, 1/18/2023 6:24:13 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -13.094868129704116 (T) = (0 -214.96985154669343) / Math.Sqrt((26.01838284492976 / (35)) + (1.2988013930836908 / (33))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (35) + (33) - 2, .025) and -0.05696289790008513 = (203.38448206061304 - 214.96985154669343) / 203.38448206061304 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.Text.RegularExpressions.Tests.Perf_Regex_Common.IP_IsNotMatch() push ebp mov ebp,esp mov ecx,[ecx+0C] test byte ptr [ecx+20],40 jne short M00_L00 xor edx,edx jmp short M00_L01 M00_L00: mov edx,0F M00_L01: push 0FFFFFFFF push 8A5E628 push 0 push 0F push edx xor edx,edx call dword ptr ds:[0B699678]; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) pop ebp ret ; Total bytes of code 43 ``` ```assembly ; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,30 xor eax,eax mov [ebp-30],eax mov [ebp-34],eax mov [ebp-18],eax mov [ebp-2C],ecx mov esi,edx mov ebx,[ebp+14] mov edi,[ebp+10] mov [ebp+14],ebx mov edx,[ebx+4] mov [ebp-28],edx mov eax,[ebp+8] cmp edx,eax jb near ptr M01_L14 mov eax,[ebp+0C] cmp edx,eax jb near ptr M01_L15 cmp [ecx],cl lea eax,[ecx+1C] xor ebx,ebx xchg ebx,[eax] test ebx,ebx jne short M01_L00 mov eax,[ecx+8] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+10] mov ebx,eax mov ecx,[ebp-2C] M01_L00: mov [ebp-30],ebx lea eax,[ecx+2C] push dword ptr [eax+4] push dword ptr [eax] mov ecx,ebx cmp [ecx],ecx call dword ptr ds:[0BB2F8A0]; System.Text.RegularExpressions.RegexRunner.InitializeTimeout(System.TimeSpan) lea edx,[ebx+0C] mov eax,[ebp+14] call CORINFO_HELP_ASSIGN_REF_EAX mov ecx,[ebp-28] cmp ecx,edi jb near ptr M01_L08 sub ecx,edi mov edx,[ebp+0C] cmp ecx,edx jb near ptr M01_L08 mov [ebp+14],eax lea ecx,[eax+edi*2+8] mov [ebp-3C],ecx mov [ebp-24],edx push edx push ecx mov eax,[ebp+8] sub eax,edi push eax push esi mov ecx,ebx mov edx,[ebp-2C] call dword ptr ds:[0BB2F888]; System.Text.RegularExpressions.RegexRunner.InitializeForScan(System.Text.RegularExpressions.Regex, System.ReadOnlySpan`1, Int32, System.Text.RegularExpressions.RegexRunnerMode) cmp dword ptr [ebp+18],0 jne short M01_L03 mov ecx,[ebp-24] mov eax,ecx mov edx,1 mov ecx,[ebp-2C] test byte ptr [ecx+20],40 je short M01_L01 xor eax,eax mov edx,0FFFFFFFF M01_L01: cmp [ebx+2C],eax jne short M01_L02 mov edx,ds:[76E4D20] mov [ebp-34],edx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L11 jmp near ptr M01_L12 M01_L02: add [ebx+30],edx M01_L03: push dword ptr [ebp-24] push dword ptr [ebp-3C] mov ecx,ebx mov eax,[ebx] mov eax,[eax+28] call dword ptr [eax+10] mov eax,[ebx+1C] mov [ebp-38],eax mov edx,[eax+2C] cmp dword ptr [edx+4],0 jbe short M01_L04 cmp dword ptr [edx+8],0 jle short M01_L09 test esi,esi je short M01_L05 lea edx,[eax+4] mov ecx,[ebp+14] call CORINFO_HELP_ASSIGN_REF_ECX xor edx,edx mov [ebx+1C],edx jmp short M01_L06 M01_L04: call CORINFO_HELP_RNGCHKFAIL M01_L05: xor edx,edx mov [eax+4],edx jmp short M01_L07 M01_L06: mov edx,[ebx+30] push edi push esi mov ecx,eax call dword ptr ds:[0C269AB0] mov esi,[ebp-38] mov edx,esi M01_L07: mov [ebp-34],edx jmp short M01_L10 M01_L08: mov ecx,21 call dword ptr ds:[90E53A8] int 3 M01_L09: xor edx,edx mov [eax+4],edx mov edx,ds:[76E4D20] jmp short M01_L07 M01_L10: xor edx,edx mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX jmp short M01_L13 M01_L11: mov dword ptr [ebp-18],0 jmp short M01_L13 M01_L12: xor edx,edx mov ebx,[ebp-30] mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX pop eax jmp eax M01_L13: mov eax,[ebp-34] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 14 M01_L14: mov ecx,0E xor edx,edx call dword ptr ds:[0BAFBD68] int 3 M01_L15: mov ecx,8 mov edx,2 call dword ptr ds:[0BAFBD68] int 3 ; Total bytes of code 467 ``` ### Compare Jit Disasm ```assembly ; System.Text.RegularExpressions.Tests.Perf_Regex_Common.IP_IsNotMatch() push ebp mov ebp,esp mov ecx,[ecx+0C] test byte ptr [ecx+20],40 jne short M00_L00 xor edx,edx jmp short M00_L01 M00_L00: mov edx,0F M00_L01: push 0FFFFFFFF push 7CCE628 push 0 push 0F push edx xor edx,edx call dword ptr ds:[0A919678]; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) pop ebp ret ; Total bytes of code 43 ``` ```assembly ; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,30 xor eax,eax mov [ebp-30],eax mov [ebp-34],eax mov [ebp-18],eax mov [ebp-2C],ecx mov esi,edx mov ebx,[ebp+14] mov edi,[ebp+10] mov [ebp+14],ebx mov edx,[ebx+4] mov [ebp-28],edx mov eax,[ebp+8] cmp edx,eax jb near ptr M01_L14 mov eax,[ebp+0C] cmp edx,eax jb near ptr M01_L15 cmp [ecx],cl lea eax,[ecx+1C] xor ebx,ebx xchg ebx,[eax] test ebx,ebx jne short M01_L00 mov eax,[ecx+8] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+10] mov ebx,eax mov ecx,[ebp-2C] M01_L00: mov [ebp-30],ebx lea eax,[ecx+2C] push dword ptr [eax+4] push dword ptr [eax] mov ecx,ebx cmp [ecx],ecx call dword ptr ds:[0ADAF8A0]; System.Text.RegularExpressions.RegexRunner.InitializeTimeout(System.TimeSpan) lea edx,[ebx+0C] mov eax,[ebp+14] call CORINFO_HELP_ASSIGN_REF_EAX mov ecx,[ebp-28] cmp ecx,edi jb near ptr M01_L08 sub ecx,edi mov edx,[ebp+0C] cmp ecx,edx jb near ptr M01_L08 mov [ebp+14],eax lea ecx,[eax+edi*2+8] mov [ebp-3C],ecx mov [ebp-24],edx push edx push ecx mov eax,[ebp+8] sub eax,edi push eax push esi mov ecx,ebx mov edx,[ebp-2C] call dword ptr ds:[0ADAF888]; System.Text.RegularExpressions.RegexRunner.InitializeForScan(System.Text.RegularExpressions.Regex, System.ReadOnlySpan`1, Int32, System.Text.RegularExpressions.RegexRunnerMode) cmp dword ptr [ebp+18],0 jne short M01_L03 mov ecx,[ebp-24] mov eax,ecx mov edx,1 mov ecx,[ebp-2C] test byte ptr [ecx+20],40 je short M01_L01 xor eax,eax mov edx,0FFFFFFFF M01_L01: cmp [ebx+2C],eax jne short M01_L02 mov edx,ds:[6A44D20] mov [ebp-34],edx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L11 jmp near ptr M01_L12 M01_L02: add [ebx+30],edx M01_L03: push dword ptr [ebp-24] push dword ptr [ebp-3C] mov ecx,ebx mov eax,[ebx] mov eax,[eax+28] call dword ptr [eax+10] mov eax,[ebx+1C] mov [ebp-38],eax mov edx,[eax+2C] cmp dword ptr [edx+4],0 jbe short M01_L04 cmp dword ptr [edx+8],0 jle short M01_L09 test esi,esi je short M01_L05 lea edx,[eax+4] mov ecx,[ebp+14] call CORINFO_HELP_ASSIGN_REF_ECX xor edx,edx mov [ebx+1C],edx jmp short M01_L06 M01_L04: call CORINFO_HELP_RNGCHKFAIL M01_L05: xor edx,edx mov [eax+4],edx jmp short M01_L07 M01_L06: mov edx,[ebx+30] push edi push esi mov ecx,eax call dword ptr ds:[0B4A7C18] mov esi,[ebp-38] mov edx,esi M01_L07: mov [ebp-34],edx jmp short M01_L10 M01_L08: mov ecx,21 call dword ptr ds:[83853A8] int 3 M01_L09: xor edx,edx mov [eax+4],edx mov edx,ds:[6A44D20] jmp short M01_L07 M01_L10: xor edx,edx mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX jmp short M01_L13 M01_L11: mov dword ptr [ebp-18],0 jmp short M01_L13 M01_L12: xor edx,edx mov ebx,[ebp-30] mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX pop eax jmp eax M01_L13: mov eax,[ebp-34] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 14 M01_L14: mov ecx,0E xor edx,edx call dword ptr ds:[0AD9BD68] int 3 M01_L15: mov ecx,8 mov edx,2 call dword ptr ds:[0AD9BD68] int 3 ; Total bytes of code 467 ``` #### System.Text.RegularExpressions.Tests.Perf_Regex_Common.IP_IsMatch(Options: IgnoreCase, Compiled) ```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 215.23606152730517 > 211.89614854173686. IsChangePoint: Marked as a change because one of 11/7/2022 10:11:20 AM, 1/18/2023 6:24:13 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -12.923691355628298 (T) = (0 -216.1600891646427) / Math.Sqrt((1.5547916886278403 / (35)) + (35.566667015023434 / (33))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (35) + (33) - 2, .025) and -0.06761797410397713 = (202.46951101217644 - 216.1600891646427) / 202.46951101217644 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.Text.RegularExpressions.Tests.Perf_Regex_Common.IP_IsMatch() push ebp mov ebp,esp mov ecx,[ecx+0C] test byte ptr [ecx+20],40 jne short M00_L00 xor edx,edx jmp short M00_L01 M00_L00: mov edx,0F M00_L01: push 0FFFFFFFF push 824E628 push 0 push 0F push edx xor edx,edx call dword ptr ds:[0AE69678]; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) pop ebp ret ; Total bytes of code 43 ``` ```assembly ; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,30 xor eax,eax mov [ebp-30],eax mov [ebp-34],eax mov [ebp-18],eax mov [ebp-2C],ecx mov esi,edx mov ebx,[ebp+14] mov edi,[ebp+10] mov [ebp+14],ebx mov edx,[ebx+4] mov [ebp-28],edx mov eax,[ebp+8] cmp edx,eax jb near ptr M01_L14 mov eax,[ebp+0C] cmp edx,eax jb near ptr M01_L15 cmp [ecx],cl lea eax,[ecx+1C] xor ebx,ebx xchg ebx,[eax] test ebx,ebx jne short M01_L00 mov eax,[ecx+8] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+10] mov ebx,eax mov ecx,[ebp-2C] M01_L00: mov [ebp-30],ebx lea eax,[ecx+2C] push dword ptr [eax+4] push dword ptr [eax] mov ecx,ebx cmp [ecx],ecx call dword ptr ds:[0B2FF8A0]; System.Text.RegularExpressions.RegexRunner.InitializeTimeout(System.TimeSpan) lea edx,[ebx+0C] mov eax,[ebp+14] call CORINFO_HELP_ASSIGN_REF_EAX mov ecx,[ebp-28] cmp ecx,edi jb near ptr M01_L08 sub ecx,edi mov edx,[ebp+0C] cmp ecx,edx jb near ptr M01_L08 mov [ebp+14],eax lea ecx,[eax+edi*2+8] mov [ebp-3C],ecx mov [ebp-24],edx push edx push ecx mov eax,[ebp+8] sub eax,edi push eax push esi mov ecx,ebx mov edx,[ebp-2C] call dword ptr ds:[0B2FF888]; System.Text.RegularExpressions.RegexRunner.InitializeForScan(System.Text.RegularExpressions.Regex, System.ReadOnlySpan`1, Int32, System.Text.RegularExpressions.RegexRunnerMode) cmp dword ptr [ebp+18],0 jne short M01_L03 mov ecx,[ebp-24] mov eax,ecx mov edx,1 mov ecx,[ebp-2C] test byte ptr [ecx+20],40 je short M01_L01 xor eax,eax mov edx,0FFFFFFFF M01_L01: cmp [ebx+2C],eax jne short M01_L02 mov edx,ds:[6FE4D20] mov [ebp-34],edx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L11 jmp near ptr M01_L12 M01_L02: add [ebx+30],edx M01_L03: push dword ptr [ebp-24] push dword ptr [ebp-3C] mov ecx,ebx mov eax,[ebx] mov eax,[eax+28] call dword ptr [eax+10] mov eax,[ebx+1C] mov [ebp-38],eax mov edx,[eax+2C] cmp dword ptr [edx+4],0 jbe short M01_L04 cmp dword ptr [edx+8],0 jle short M01_L09 test esi,esi je short M01_L05 lea edx,[eax+4] mov ecx,[ebp+14] call CORINFO_HELP_ASSIGN_REF_ECX xor edx,edx mov [ebx+1C],edx jmp short M01_L06 M01_L04: call CORINFO_HELP_RNGCHKFAIL M01_L05: xor edx,edx mov [eax+4],edx jmp short M01_L07 M01_L06: mov edx,[ebx+30] push edi push esi mov ecx,eax call dword ptr ds:[0BA39AB0] mov esi,[ebp-38] mov edx,esi M01_L07: mov [ebp-34],edx jmp short M01_L10 M01_L08: mov ecx,21 call dword ptr ds:[88B53A8] int 3 M01_L09: xor edx,edx mov [eax+4],edx mov edx,ds:[6FE4D20] jmp short M01_L07 M01_L10: xor edx,edx mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX jmp short M01_L13 M01_L11: mov dword ptr [ebp-18],0 jmp short M01_L13 M01_L12: xor edx,edx mov ebx,[ebp-30] mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX pop eax jmp eax M01_L13: mov eax,[ebp-34] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 14 M01_L14: mov ecx,0E xor edx,edx call dword ptr ds:[0B2CBD68] int 3 M01_L15: mov ecx,8 mov edx,2 call dword ptr ds:[0B2CBD68] int 3 ; Total bytes of code 467 ``` ### Compare Jit Disasm ```assembly ; System.Text.RegularExpressions.Tests.Perf_Regex_Common.IP_IsMatch() push ebp mov ebp,esp mov ecx,[ecx+0C] test byte ptr [ecx+20],40 jne short M00_L00 xor edx,edx jmp short M00_L01 M00_L00: mov edx,0F M00_L01: push 0FFFFFFFF push 87DE628 push 0 push 0F push edx xor edx,edx call dword ptr ds:[0B499678]; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) pop ebp ret ; Total bytes of code 43 ``` ```assembly ; System.Text.RegularExpressions.Regex.RunSingleMatch(System.Text.RegularExpressions.RegexRunnerMode, Int32, System.String, Int32, Int32, Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,30 xor eax,eax mov [ebp-30],eax mov [ebp-34],eax mov [ebp-18],eax mov [ebp-2C],ecx mov esi,edx mov ebx,[ebp+14] mov edi,[ebp+10] mov [ebp+14],ebx mov edx,[ebx+4] mov [ebp-28],edx mov eax,[ebp+8] cmp edx,eax jb near ptr M01_L14 mov eax,[ebp+0C] cmp edx,eax jb near ptr M01_L15 cmp [ecx],cl lea eax,[ecx+1C] xor ebx,ebx xchg ebx,[eax] test ebx,ebx jne short M01_L00 mov eax,[ecx+8] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+10] mov ebx,eax mov ecx,[ebp-2C] M01_L00: mov [ebp-30],ebx lea eax,[ecx+2C] push dword ptr [eax+4] push dword ptr [eax] mov ecx,ebx cmp [ecx],ecx call dword ptr ds:[0B92F8A0]; System.Text.RegularExpressions.RegexRunner.InitializeTimeout(System.TimeSpan) lea edx,[ebx+0C] mov eax,[ebp+14] call CORINFO_HELP_ASSIGN_REF_EAX mov ecx,[ebp-28] cmp ecx,edi jb near ptr M01_L08 sub ecx,edi mov edx,[ebp+0C] cmp ecx,edx jb near ptr M01_L08 mov [ebp+14],eax lea ecx,[eax+edi*2+8] mov [ebp-3C],ecx mov [ebp-24],edx push edx push ecx mov eax,[ebp+8] sub eax,edi push eax push esi mov ecx,ebx mov edx,[ebp-2C] call dword ptr ds:[0B92F888]; System.Text.RegularExpressions.RegexRunner.InitializeForScan(System.Text.RegularExpressions.Regex, System.ReadOnlySpan`1, Int32, System.Text.RegularExpressions.RegexRunnerMode) cmp dword ptr [ebp+18],0 jne short M01_L03 mov ecx,[ebp-24] mov eax,ecx mov edx,1 mov ecx,[ebp-2C] test byte ptr [ecx+20],40 je short M01_L01 xor eax,eax mov edx,0FFFFFFFF M01_L01: cmp [ebx+2C],eax jne short M01_L02 mov edx,ds:[7574D20] mov [ebp-34],edx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L11 jmp near ptr M01_L12 M01_L02: add [ebx+30],edx M01_L03: push dword ptr [ebp-24] push dword ptr [ebp-3C] mov ecx,ebx mov eax,[ebx] mov eax,[eax+28] call dword ptr [eax+10] mov eax,[ebx+1C] mov [ebp-38],eax mov edx,[eax+2C] cmp dword ptr [edx+4],0 jbe short M01_L04 cmp dword ptr [edx+8],0 jle short M01_L09 test esi,esi je short M01_L05 lea edx,[eax+4] mov ecx,[ebp+14] call CORINFO_HELP_ASSIGN_REF_ECX xor edx,edx mov [ebx+1C],edx jmp short M01_L06 M01_L04: call CORINFO_HELP_RNGCHKFAIL M01_L05: xor edx,edx mov [eax+4],edx jmp short M01_L07 M01_L06: mov edx,[ebx+30] push edi push esi mov ecx,eax call dword ptr ds:[0C027C18] mov esi,[ebp-38] mov edx,esi M01_L07: mov [ebp-34],edx jmp short M01_L10 M01_L08: mov ecx,21 call dword ptr ds:[8E953A8] int 3 M01_L09: xor edx,edx mov [eax+4],edx mov edx,ds:[7574D20] jmp short M01_L07 M01_L10: xor edx,edx mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX jmp short M01_L13 M01_L11: mov dword ptr [ebp-18],0 jmp short M01_L13 M01_L12: xor edx,edx mov ebx,[ebp-30] mov [ebx+0C],edx mov ecx,[ebp-2C] lea edx,[ecx+1C] call CORINFO_HELP_ASSIGN_REF_EBX pop eax jmp eax M01_L13: mov eax,[ebp-34] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 14 M01_L14: mov ecx,0E xor edx,edx call dword ptr ds:[0B91BD68] int 3 M01_L15: mov ecx,8 mov edx,2 call dword ptr ds:[0B91BD68] int 3 ; Total bytes of code 467 ``` ### 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 5a17537f0baaa70a3b5d25679c4af4dff0182bad
Compare 170587e444c43d5c0080f7b2ea454e37463c832a
Diff Diff

Regressions in System.MathBenchmarks.Single

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Min - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.MathBenchmarks.Single.Min.html>) 6.29 μs 7.51 μs 1.20 0.08 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.MathBenchmarks.Single*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.MathBenchmarks.Single.Min ```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 7.511955662974037 > 6.732599702451957. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 12/6/2022 2:12:43 AM, 12/20/2022 1:34:12 PM, 1/13/2023 4:37:08 PM, 1/18/2023 6:24:13 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -17.32754431666992 (T) = (0 -7421.9653759385565) / Math.Sqrt((85020.21564536102 / (35)) + (6842.6295502930525 / (33))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (35) + (33) - 2, .025) and -0.13620348390834963 = (6532.250148017712 - 7421.9653759385565) / 6532.250148017712 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.MathBenchmarks.Single.Min() call dword ptr ds:[0B21F828]; System.MathBenchmarks.Single.MinTest() ret ; Total bytes of code 7 ``` ```assembly ; System.MathBenchmarks.Single.MinTest() push ebp mov ebp,esp push esi sub esp,1C vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov [ebp-0C],eax vxorps xmm0,xmm0,xmm0 vmovss xmm1,dword ptr ds:[92608F0] xor ecx,ecx vmovss xmm2,dword ptr ds:[92608F4] M01_L00: vsubss xmm1,xmm1,xmm2 vucomiss xmm1,dword ptr ds:[92608F8] jp short M01_L01 je short M01_L02 M01_L01: vucomiss xmm1,dword ptr ds:[92608F8] ja short M01_L04 M01_L02: vmovaps xmm3,xmm1 M01_L03: vaddss xmm0,xmm0,xmm3 inc ecx cmp ecx,1388 jl short M01_L00 vmovss xmm3,dword ptr ds:[92608FC] vmovss dword ptr [ebp-8],xmm0 vsubss xmm1,xmm3,xmm0 vandps xmm1,xmm1,ds:[9260900] vucomiss xmm1,dword ptr ds:[9260910] ja short M01_L05 lea esp,[ebp-4] pop esi pop ebp ret M01_L04: vmovss xmm3,dword ptr ds:[92608F8] jmp short M01_L03 M01_L05: push 2 lea ecx,[ebp-20] mov edx,20 call dword ptr ds:[0AD096A8] mov ecx,5E71 mov edx,0B1DF804 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0AD09798] vmovss xmm0,dword ptr ds:[92608FC] sub esp,4 vmovss dword ptr [esp],xmm0 mov ecx,5F11 mov edx,0B1DF804 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0BC29678] mov ecx,5E9B mov edx,0B1DF804 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[0AD09798] push dword ptr [ebp-8] mov ecx,5F11 mov edx,0B1DF804 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0BC29678] mov ecx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov esi,eax lea ecx,[ebp-20] call dword ptr ds:[0AD09738] mov edx,eax mov ecx,esi call dword ptr ds:[5655C18] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 329 ``` ### Compare Jit Disasm ```assembly ; System.MathBenchmarks.Single.Min() call dword ptr ds:[0B1FF828]; System.MathBenchmarks.Single.MinTest() ret ; Total bytes of code 7 ``` ```assembly ; System.MathBenchmarks.Single.MinTest() push ebp mov ebp,esp push esi sub esp,1C vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov [ebp-0C],eax vxorps xmm0,xmm0,xmm0 vmovss xmm1,dword ptr ds:[0BC208B0] xor ecx,ecx vmovss xmm2,dword ptr ds:[0BC208B4] M01_L00: vsubss xmm1,xmm1,xmm2 vucomiss xmm1,dword ptr ds:[0BC208B8] jp short M01_L01 je short M01_L02 M01_L01: vucomiss xmm1,dword ptr ds:[0BC208B8] ja short M01_L04 M01_L02: vmovaps xmm3,xmm1 M01_L03: vaddss xmm0,xmm0,xmm3 inc ecx cmp ecx,1388 jl short M01_L00 vmovss xmm3,dword ptr ds:[0BC208BC] vmovss dword ptr [ebp-8],xmm0 vsubss xmm1,xmm3,xmm0 vandps xmm1,xmm1,ds:[0BC208C0] vucomiss xmm1,dword ptr ds:[0BC208D0] ja short M01_L05 lea esp,[ebp-4] pop esi pop ebp ret M01_L04: vmovss xmm3,dword ptr ds:[0BC208B8] jmp short M01_L03 M01_L05: push 2 lea ecx,[ebp-20] mov edx,20 call dword ptr ds:[92DB4E0] mov ecx,5E71 mov edx,0B301E40 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[92DB5D0] vmovss xmm0,dword ptr ds:[0BC208BC] sub esp,4 vmovss dword ptr [esp],xmm0 mov ecx,5F11 mov edx,0B301E40 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0BC09678] mov ecx,5E9B mov edx,0B301E40 call CORINFO_HELP_STRCNS mov edx,eax lea ecx,[ebp-20] call dword ptr ds:[92DB5D0] push dword ptr [ebp-8] mov ecx,5F11 mov edx,0B301E40 call CORINFO_HELP_STRCNS push eax lea ecx,[ebp-20] mov edx,0A call dword ptr ds:[0BC09678] mov ecx,offset MT_System.Exception call CORINFO_HELP_NEWSFAST mov esi,eax lea ecx,[ebp-20] call dword ptr ds:[92DB570] mov edx,eax mov ecx,esi call dword ptr ds:[8AB5C18] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 329 ``` ### 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 5a17537f0baaa70a3b5d25679c4af4dff0182bad
Compare 170587e444c43d5c0080f7b2ea454e37463c832a
Diff Diff

Regressions 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>) 218.29 μs 249.47 μs 1.14 0.02 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 'PerfLabTests.LowLevelPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.LowLevelPerf.InstanceDelegate ```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 249.47349206349207 > 229.20417187500001. 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 12:26:48 AM, 12/20/2022 1:34:12 PM, 1/3/2023 6:29:42 AM, 1/18/2023 6:24:13 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -463.59840433345823 (T) = (0 -249528.89502638014) / Math.Sqrt((92470.89589059874 / (35)) + (61540.836372452795 / (33))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (35) + (33) - 2, .025) and -0.14250051237586817 = (218405.93708573174 - 249528.89502638014) / 218405.93708573174 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 ; PerfLabTests.LowLevelPerf.InstanceDelegate() push ebp mov ebp,esp push edi push esi mov esi,ds:[721419C] xor edi,edi cmp dword ptr ds:[0AD54CA8],0 jle short M00_L01 M00_L00: mov ecx,[esi+4] call dword ptr [esi+0C] inc edi cmp edi,ds:[0AD54CA8] 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:[724419C] xor edi,edi cmp dword ptr ds:[0AD69DA0],0 jle short M00_L01 M00_L00: mov ecx,[esi+4] call dword ptr [esi+0C] inc edi cmp edi,ds:[0AD69DA0] jl short M00_L00 M00_L01: pop esi pop edi pop ebp ret ; Total bytes of code 41 ``` ### 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 5a17537f0baaa70a3b5d25679c4af4dff0182bad
Compare 170587e444c43d5c0080f7b2ea454e37463c832a
Diff Diff

Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Count - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas.Count(Pattern%3a%20%22(%3f%3a(%3f%3a25%5b0-5%5d%7c2%5b0-4%5d%5b0-9%5d%7c%5b01%5d%3f%5b0-9%5d%5b0-9%5d)%5c%5c.)%7b3%7d(%3f%3a25%5b0-5%5d%7c2%5b0-4%5d%5b0-9%5d%7c%5b01%5d%3f%5b0-9%5d%5b0-9%5d)%22%2c%20Options%3a%20Compiled).html>) 4.99 ms 5.30 ms 1.06 0.01 False 35909375 38494791.666666664 1.0719983755402778

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas.Count(Pattern: "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9])", Options: Compiled) ```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 5.300723878205127 > 5.2482787109375. IsChangePoint: Marked as a change because one of 11/7/2022 10:11:20 AM, 1/3/2023 6:29:42 AM, 1/18/2023 6:24:13 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsRegressionStdDev: Marked as regression because -24.72403865764926 (T) = (0 -5318676.708847926) / Math.Sqrt((1585554205.6554646 / (35)) + (3677547558.0931697 / (33))) is less than -1.9965644189515832 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (35) + (33) - 2, .025) and -0.06179445371480158 = (5009139.659978413 - 5318676.708847926) / 5009139.659978413 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.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas.Count() mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] call dword ptr ds:[0BBAD678]; System.Text.RegularExpressions.Tests.Perf_Regex_Industry.Count(System.Text.RegularExpressions.Regex, System.String) ret ; Total bytes of code 15 ``` ```assembly ; System.Text.RegularExpressions.Tests.Perf_Regex_Industry.Count(System.Text.RegularExpressions.Regex, System.String) push ebp mov ebp,esp push esi xor esi,esi cmp [ecx],ecx call dword ptr ds:[0B71B030]; System.Text.RegularExpressions.Regex.Match(System.String) cmp dword ptr [eax+1C],0 je short M01_L01 M01_L00: inc esi mov ecx,eax cmp [ecx],ecx call dword ptr ds:[88213C0]; System.Text.RegularExpressions.Match.NextMatch() cmp dword ptr [eax+1C],0 jne short M01_L00 M01_L01: mov eax,esi pop esi pop ebp ret ; Total bytes of code 42 ``` ### Compare Jit Disasm ```assembly ; System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Mariomkas.Count() mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] call dword ptr ds:[0B6CD678]; System.Text.RegularExpressions.Tests.Perf_Regex_Industry.Count(System.Text.RegularExpressions.Regex, System.String) ret ; Total bytes of code 15 ``` ```assembly ; System.Text.RegularExpressions.Tests.Perf_Regex_Industry.Count(System.Text.RegularExpressions.Regex, System.String) push ebp mov ebp,esp push esi xor esi,esi cmp [ecx],ecx call dword ptr ds:[0B24B030]; System.Text.RegularExpressions.Regex.Match(System.String) cmp dword ptr [eax+1C],0 je short M01_L01 M01_L00: inc esi mov ecx,eax cmp [ecx],ecx call dword ptr ds:[51D13C0]; System.Text.RegularExpressions.Match.NextMatch() cmp dword ptr [eax+1C],0 jne short M01_L00 M01_L01: mov eax,esi pop esi pop ebp ret ; Total bytes of code 42 ``` ### 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)