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: 21 Regressions on 3/6/2023 11:36:59 AM #13948

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Collections.CreateAddAndClear<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Dictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CreateAddAndClear(Int32).Dictionary(Size%3a%20512).html>) 13.15 μs 14.06 μs 1.07 0.08 False

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.CreateAddAndClear&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.CreateAddAndClear<Int32>.Dictionary(Size: 512) ```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 14.056081904332128 > 13.836187538165515. IsChangePoint: Marked as a change because one of 1/5/2023 9:29:47 PM, 1/20/2023 8:02:54 AM, 1/30/2023 9:42:46 PM, 2/14/2023 5:47:38 PM, 2/16/2023 9:36:08 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -12.764560857469908 (T) = (0 -14165.436249456692) / Math.Sqrt((40555.95466057374 / (24)) + (182615.27184351342 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.08095449616567565 = (13104.562957741364 - 14165.436249456692) / 13104.562957741364 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. ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Collections.IterateForEach<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentStack - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).ConcurrentStack(Size%3a%20512).html>) 4.05 μs 5.13 μs 1.27 0.02 False
[SortedList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).SortedList(Size%3a%20512).html>) 7.94 μs 8.68 μs 1.09 0.03 False

graph graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<String>.ConcurrentStack(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as 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.130283749042775 > 4.253312632149037. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -439.39900208284496 (T) = (0 -5138.77555971346) / Math.Sqrt((54.654414204322315 / (24)) + (134.03660240760473 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.26791686050643065 = (4052.9278533774946 - 5138.77555971346) / 4052.9278533774946 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. ```#### System.Collections.IterateForEach<String>.SortedList(Size: 512) ```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 8.679518631382514 > 8.336263618844152. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/30/2023 9:42:46 PM, 2/9/2023 10:24:28 PM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -27.16373359156897 (T) = (0 -8803.665446934912) / Math.Sqrt((8594.676277900546 / (24)) + (20017.557665670305 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.10387130659488097 = (7975.264321428588 - 8803.665446934912) / 7975.264321428588 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. ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Collections.IterateForEachNonGeneric<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ArrayList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEachNonGeneric(Int32).ArrayList(Size%3a%20512).html>) 2.81 μs 3.45 μs 1.23 0.04 False
[Stack - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEachNonGeneric(Int32).Stack(Size%3a%20512).html>) 3.40 μs 3.87 μs 1.14 0.02 False

graph graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEachNonGeneric&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEachNonGeneric<Int32>.ArrayList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as 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 3.445257627304653 > 2.950874249853479. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -209.67872446309374 (T) = (0 -3443.1001675709153) / Math.Sqrt((36.95247773577524 / (24)) + (265.3474187742196 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.22536876684702578 = (2809.8481540624657 - 3443.1001675709153) / 2809.8481540624657 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. ```#### System.Collections.IterateForEachNonGeneric<Int32>.Stack(Size: 512) ```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 3.8698050326149778 > 3.5684256509376597. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 2/16/2023 9:36:08 AM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -277.05936800782246 (T) = (0 -3870.8764866533206) / Math.Sqrt((38.16790043841436 / (24)) + (46.05378143079718 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.13897505846662883 = (3398.5612396680367 - 3870.8764866533206) / 3398.5612396680367 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. ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
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
[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>) 478.51 μs 577.68 μs 1.21 0.04 False Trace Trace
[IFooObjIsIFooInterAlia - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFooInterAlia.html>) 374.20 μs 445.40 μs 1.19 0.03 False Trace Trace

graph graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

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.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 577.6826157407407 > 506.16589015151516. IsChangePoint: Marked as a change because one of 1/18/2023 6:24:13 PM, 1/27/2023 7:12:54 PM, 2/9/2023 4:27:10 AM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -71.04935261042618 (T) = (0 -582142.0330578184) / Math.Sqrt((31398254.517656684 / (24)) + (25479550.87505564 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.21088716807871835 = (480756.62902720104 - 582142.0330578184) / 480756.62902720104 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:[0A996334] test edi,edi jle short M00_L01 mov ebx,ds:[6DB4274] mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[80AB888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) M00_L00: mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[80AB888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) mov edx,6DB42C4 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:[80AB870] 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:[0AB06834] test edi,edi jle short M00_L01 mov ebx,ds:[6F64274] mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[821B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) M00_L00: mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo call dword ptr ds:[821B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) mov edx,6F642C4 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:[821B870] pop esi pop ebp ret ; Total bytes of code 86 ``` #### PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFooInterAlia ```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 445.3982525510204 > 392.9108080929488. IsChangePoint: Marked as a change because one of 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/27/2023 7:12:54 PM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -75.15314628750748 (T) = (0 -451626.04501683946) / Math.Sqrt((193042.52599733995 / (24)) + (36737233.02037758 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.20647265544230795 = (374335.91468450456 - 451626.04501683946) / 374335.91468450456 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.IFooObjIsIFooInterAlia() push ebp mov ebp,esp push edi push esi push ebx xor esi,esi mov edi,ds:[0AFB6334] test edi,edi jle short M00_L01 mov ebx,ds:[7534274] mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo_5 call dword ptr ds:[873B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) M00_L00: mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo_5 call dword ptr ds:[873B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) mov edx,75342EC 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:[873B870] pop esi pop ebp ret ; Total bytes of code 86 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFooInterAlia() push ebp mov ebp,esp push edi push esi push ebx xor esi,esi mov edi,ds:[0A716834] test edi,edi jle short M00_L01 mov ebx,ds:[6D74274] mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo_5 call dword ptr ds:[4B1B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) M00_L00: mov edx,ebx mov ecx,offset MT_PerfLabTests.CastingPerf2.IFoo_5 call dword ptr ds:[4B1B888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object) mov edx,6D742EC 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:[4B1B870] 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in Microsoft.Extensions.Primitives.StringSegmentBenchmark

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SubString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.Primitives.StringSegmentBenchmark.SubString.html>) 6.77 ns 7.77 ns 1.15 0.07 False Trace Trace

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.Primitives.StringSegmentBenchmark*'
### Payloads [Baseline]() [Compare]() ### Histogram #### Microsoft.Extensions.Primitives.StringSegmentBenchmark.SubString ```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.767383529615287 > 7.162299091890172. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 1/30/2023 9:42:46 PM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -16.93127422538745 (T) = (0 -7.530769996121496) / Math.Sqrt((0.02243147249433925 / (24)) + (0.01853306726355981 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.09412656842244231 = (6.882905701649926 - 7.530769996121496) / 6.882905701649926 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 ; Microsoft.Extensions.Primitives.StringSegmentBenchmark.SubString() push ebp mov ebp,esp push edi push esi push ebx add ecx,0C mov esi,[ecx] test esi,esi je short M00_L02 cmp dword ptr [ecx+8],5 jb short M00_L02 mov edi,[ecx+4] add edi,3 mov ecx,[esi+4] cmp ecx,edi jb short M00_L03 mov eax,ecx sub eax,edi cmp eax,2 jb short M00_L03 cmp ecx,2 je short M00_L01 mov ecx,2 call System.String.FastAllocateString(Int32) mov ebx,eax mov ecx,[ebx+4] lea edx,[ebx+8] lea eax,[esi+edi*2+8] add ecx,ecx push ecx mov ecx,edx mov edx,eax call dword ptr ds:[84B1E10]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov eax,ebx M00_L00: pop ebx pop esi pop edi pop ebp ret M00_L01: mov eax,esi jmp short M00_L00 M00_L02: push 2 push 1 mov edx,3 call dword ptr ds:[0A7218E8] int 3 M00_L03: push 2 mov ecx,esi mov edx,edi call dword ptr ds:[4AC32E8] int 3 ; Total bytes of code 123 ``` ```assembly ; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) push ebp mov ebp,esp push edi push esi push ebx vzeroupper mov eax,[ebp+8] mov esi,ecx sub esi,edx cmp esi,eax jb near ptr M01_L10 mov esi,edx sub esi,ecx cmp esi,eax jb near ptr M01_L10 lea esi,[edx+eax] lea edi,[ecx+eax] cmp eax,10 jbe short M01_L05 cmp eax,40 ja short M01_L03 M01_L00: vmovups xmm0,[edx] vmovups [ecx],xmm0 cmp eax,20 jbe short M01_L01 vmovups xmm0,[edx+10] vmovups [ecx+10],xmm0 cmp eax,30 ja near ptr M01_L09 M01_L01: vmovups xmm0,[esi-10] vmovups [edi-10],xmm0 M01_L02: pop ebx pop esi pop edi pop ebp ret 4 M01_L03: cmp eax,800 ja near ptr M01_L11 mov ebx,eax shr ebx,6 M01_L04: vmovdqu ymm0,ymmword ptr [edx] vmovdqu ymmword ptr [ecx],ymm0 vmovdqu ymm0,ymmword ptr [edx+20] vmovdqu ymmword ptr [ecx+20],ymm0 add ecx,40 add edx,40 dec ebx jne short M01_L04 and eax,3F cmp eax,10 ja short M01_L00 jmp short M01_L01 M01_L05: test al,18 jne short M01_L06 test al,4 jne short M01_L08 test eax,eax je short M01_L02 movzx edx,byte ptr [edx] mov [ecx],dl test al,2 je short M01_L02 movsx eax,word ptr [esi-2] mov [edi-2],ax jmp short M01_L02 M01_L06: mov eax,[edx] mov [ecx],eax mov edx,[edx+4] mov [ecx+4],edx mov ecx,[esi-8] mov [edi-8],ecx M01_L07: mov eax,[esi-4] mov [edi-4],eax jmp short M01_L02 M01_L08: mov eax,[edx] mov [ecx],eax jmp short M01_L07 M01_L09: vmovups xmm0,[edx+20] vmovups [ecx+20],xmm0 jmp near ptr M01_L01 M01_L10: cmp ecx,edx je near ptr M01_L02 M01_L11: push eax call dword ptr ds:[84B1E28] jmp near ptr M01_L02 ; Total bytes of code 250 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.Primitives.StringSegmentBenchmark.SubString() push ebp mov ebp,esp push edi push esi push ebx add ecx,0C mov esi,[ecx] test esi,esi je short M00_L02 cmp dword ptr [ecx+8],5 jb short M00_L02 mov edi,[ecx+4] add edi,3 mov ecx,[esi+4] cmp ecx,edi jb short M00_L03 mov eax,ecx sub eax,edi cmp eax,2 jb short M00_L03 cmp ecx,2 je short M00_L01 mov ecx,2 call System.String.FastAllocateString(Int32) mov ebx,eax mov ecx,[ebx+4] lea edx,[ebx+8] lea eax,[esi+edi*2+8] add ecx,ecx push ecx mov ecx,edx mov edx,eax call dword ptr ds:[8391D68]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov eax,ebx M00_L00: pop ebx pop esi pop edi pop ebp ret M00_L01: mov eax,esi jmp short M00_L00 M00_L02: push 2 push 1 mov edx,3 call dword ptr ds:[0A53F8E8] int 3 M00_L03: push 2 mov ecx,esi mov edx,edi call dword ptr ds:[4A832E8] int 3 ; Total bytes of code 123 ``` ```assembly ; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) push ebp mov ebp,esp push edi push esi push ebx vzeroupper mov eax,[ebp+8] mov esi,ecx sub esi,edx cmp esi,eax jb near ptr M01_L10 mov esi,edx sub esi,ecx cmp esi,eax jb near ptr M01_L10 lea esi,[edx+eax] lea edi,[ecx+eax] cmp eax,10 jbe short M01_L05 cmp eax,40 ja short M01_L03 M01_L00: vmovups xmm0,[edx] vmovups [ecx],xmm0 cmp eax,20 jbe short M01_L01 vmovups xmm0,[edx+10] vmovups [ecx+10],xmm0 cmp eax,30 ja near ptr M01_L09 M01_L01: vmovups xmm0,[esi-10] vmovups [edi-10],xmm0 M01_L02: pop ebx pop esi pop edi pop ebp ret 4 M01_L03: cmp eax,800 ja near ptr M01_L11 mov ebx,eax shr ebx,6 M01_L04: vmovdqu ymm0,ymmword ptr [edx] vmovdqu ymmword ptr [ecx],ymm0 vmovdqu ymm0,ymmword ptr [edx+20] vmovdqu ymmword ptr [ecx+20],ymm0 add ecx,40 add edx,40 dec ebx jne short M01_L04 and eax,3F cmp eax,10 ja short M01_L00 jmp short M01_L01 M01_L05: test al,18 jne short M01_L06 test al,4 jne short M01_L08 test eax,eax je short M01_L02 movzx edx,byte ptr [edx] mov [ecx],dl test al,2 je short M01_L02 movsx eax,word ptr [esi-2] mov [edi-2],ax jmp short M01_L02 M01_L06: mov eax,[edx] mov [ecx],eax mov edx,[edx+4] mov [ecx+4],edx mov ecx,[esi-8] mov [edi-8],ecx M01_L07: mov eax,[esi-4] mov [edi-4],eax jmp short M01_L02 M01_L08: mov eax,[edx] mov [ecx],eax jmp short M01_L07 M01_L09: vmovups xmm0,[edx+20] vmovups [ecx+20],xmm0 jmp near ptr M01_L01 M01_L10: cmp ecx,edx je near ptr M01_L02 M01_L11: push eax call dword ptr ds:[8391D80] jmp near ptr M01_L02 ; Total bytes of code 250 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Collections.IterateForEach<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Stack - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(Int32).Stack(Size%3a%20512).html>) 1.61 μs 1.85 μs 1.15 0.04 False

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<Int32>.Stack(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as 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 1.85004965235792 > 1.6952009570327216. IsChangePoint: Marked as a change because one of 2/20/2023 10:31:48 AM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -43.14446064456657 (T) = (0 -1844.1294230695275) / Math.Sqrt((157.15794928146107 / (24)) + (735.8604867284838 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.14005556246141307 = (1617.5785494945515 - 1844.1294230695275) / 1617.5785494945515 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. ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Numerics.Tests.Perf_BitOperations

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Log2_ulong - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Numerics.Tests.Perf_BitOperations.Log2_ulong.html>) 1.16 μs 1.49 μs 1.28 0.09 False Trace Trace

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_BitOperations*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_BitOperations.Log2_ulong ```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 1.487752172259611 > 1.217503982327898. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 1/15/2023 2:31:53 AM, 1/30/2023 9:42:46 PM, 2/9/2023 4:27:10 AM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -106.13056765992623 (T) = (0 -1487.7701214145948) / Math.Sqrt((2.575731055345413 / (24)) + (332.0189360688417 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.2836154480975782 = (1159.0466004593434 - 1487.7701214145948) / 1159.0466004593434 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.Numerics.Tests.Perf_BitOperations.Log2_ulong() push ebp mov ebp,esp push edi push esi push ebx xor esi,esi mov ecx,0A8A5CF8 mov edx,1B2 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[6E54508] xor edx,edx mov ecx,[eax+4] test ecx,ecx jle short M00_L03 M00_L00: lea edi,[eax+edx*8+8] mov ebx,[edi] mov edi,[edi+4] or ebx,1 or edi,0 jne short M00_L01 or ebx,1 lzcnt ebx,ebx xor ebx,1F jmp short M00_L02 M00_L01: or edi,1 xor ebx,ebx lzcnt ebx,edi xor ebx,1F add ebx,20 M00_L02: add esi,ebx inc edx cmp ecx,edx jg short M00_L00 M00_L03: mov eax,esi pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 95 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_BitOperations.Log2_ulong() push ebp mov ebp,esp push edi push esi push ebx xor esi,esi mov ecx,0AB261F8 mov edx,1B2 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[7194508] xor edx,edx mov ecx,[eax+4] test ecx,ecx jle short M00_L03 M00_L00: lea edi,[eax+edx*8+8] mov ebx,[edi] mov edi,[edi+4] or ebx,1 or edi,0 jne short M00_L01 or ebx,1 lzcnt ebx,ebx xor ebx,1F jmp short M00_L02 M00_L01: or edi,1 xor ebx,ebx lzcnt ebx,edi xor ebx,1F add ebx,20 M00_L02: add esi,ebx inc edx cmp ecx,edx jg short M00_L00 M00_L03: mov eax,esi pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 95 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Collections.CtorFromCollection<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentStack - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CtorFromCollection(String).ConcurrentStack(Size%3a%20512).html>) 5.32 μs 5.67 μs 1.07 0.03 False

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.CtorFromCollection&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.CtorFromCollection<String>.ConcurrentStack(Size: 512) ```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.67254234724743 > 5.582494478783927. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 1/11/2023 2:37:52 AM, 2/9/2023 4:27:10 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -63.297255228892055 (T) = (0 -5672.519241381389) / Math.Sqrt((186.51507670715745 / (24)) + (783.5504365696022 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.06527971786657605 = (5324.91058098964 - 5672.519241381389) / 5324.91058098964 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. ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Linq.Tests.Perf_Enumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ElementAt - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.ElementAt(input%3a%20IEnumerable).html>) 162.47 ns 188.79 ns 1.16 0.14 False Trace Trace
[TakeLastHalf - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.TakeLastHalf(input%3a%20List).html>) 731.09 ns 792.12 ns 1.08 0.09 False Trace Trace
[ToArray - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Linq.Tests.Perf_Enumerable.ToArray(input%3a%20IEnumerable).html>) 760.18 ns 847.02 ns 1.11 0.03 False Trace Trace

graph graph graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Linq.Tests.Perf_Enumerable*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Linq.Tests.Perf_Enumerable.ElementAt(input: IEnumerable) ```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 188.7896728490783 > 170.98356995417618. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/5/2023 11:35:29 PM, 1/13/2023 4:37:08 PM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -35.86877535381221 (T) = (0 -187.5392378052312) / Math.Sqrt((0.27585995257251955 / (24)) + (16.310924907264923 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.15229438828422917 = (162.75288651234158 - 187.5392378052312) / 162.75288651234158 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.Linq.Tests.Perf_Enumerable.ElementAt(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] mov edx,32 call dword ptr ds:[0BB9DA08]; System.Linq.Enumerable.ElementAt[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32) ret ; Total bytes of code 15 ``` ```assembly ; System.Linq.Enumerable.ElementAt[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32) push ebp mov ebp,esp push edi push esi sub esp,8 mov esi,ecx mov edi,edx test esi,esi je short M01_L03 mov edx,esi mov ecx,offset MT_System.Linq.IPartition`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[8A3B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L00 lea ecx,[ebp-0C] push ecx mov ecx,eax mov edx,edi call dword ptr ds:[3D102FC] cmp byte ptr [ebp-0C],0 je short M01_L02 lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: mov edx,esi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[8A3B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L01 mov ecx,eax mov edx,edi call dword ptr ds:[3D102F8] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L01: lea ecx,[ebp-10] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0BB9DA20]; System.Linq.Enumerable.TryGetElement[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32, Int32 ByRef) test eax,eax je short M01_L02 mov eax,[ebp-10] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L02: mov ecx,6 call dword ptr ds:[0B157E28] int 3 M01_L03: mov ecx,10 call dword ptr ds:[0B157E10] int 3 ; Total bytes of code 146 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.ElementAt(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] mov edx,32 call dword ptr ds:[0BA2DA08]; System.Linq.Enumerable.ElementAt[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32) ret ; Total bytes of code 15 ``` ```assembly ; System.Linq.Enumerable.ElementAt[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32) push ebp mov ebp,esp push edi push esi sub esp,8 mov esi,ecx mov edi,edx test esi,esi je short M01_L03 mov edx,esi mov ecx,offset MT_System.Linq.IPartition`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[885B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L00 lea ecx,[ebp-0C] push ecx mov ecx,eax mov edx,edi call dword ptr ds:[32002F8] cmp byte ptr [ebp-0C],0 je short M01_L02 lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L00: mov edx,esi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[885B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax je short M01_L01 mov ecx,eax mov edx,edi call dword ptr ds:[32002F4] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L01: lea ecx,[ebp-10] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0BA2DA20]; System.Linq.Enumerable.TryGetElement[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Int32, Int32 ByRef) test eax,eax je short M01_L02 mov eax,[ebp-10] lea esp,[ebp-8] pop esi pop edi pop ebp ret M01_L02: mov ecx,6 call dword ptr ds:[0B015E28] int 3 M01_L03: mov ecx,10 call dword ptr ds:[0B015E10] int 3 ; Total bytes of code 146 ``` #### System.Linq.Tests.Perf_Enumerable.TakeLastHalf(input: List) ```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 792.1205841470029 > 765.208855202714. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 1/22/2023 11:22:03 PM, 1/27/2023 7:12:54 PM, 2/9/2023 4:10:34 PM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -26.12702449089223 (T) = (0 -790.6412651029751) / Math.Sqrt((103.55121034321009 / (24)) + (64.35268733103771 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.08929102513316257 = (725.831065216315 - 790.6412651029751) / 725.831065216315 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.Linq.Tests.Perf_Enumerable.TakeLastHalf(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,[edx+4] test edi,edi je short M00_L00 mov ecx,offset MT_System.Linq.Enumerable+d__278`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax mov dword ptr [ebx+14],0FFFFFFFE call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+1C],eax lea edx,[ebx+8] call CORINFO_HELP_ASSIGN_REF_EDI mov byte ptr [ebx+35],1 mov dword ptr [ebx+24],32 mov byte ptr [ebx+37],1 xor edx,edx mov [ebx+2C],edx mov edx,[esi+4] mov ecx,ebx call dword ptr ds:[0B57DA80]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop ebx pop esi pop edi pop ebp ret M00_L00: mov ecx,10 call dword ptr ds:[0AB37E10] int 3 ; Total bytes of code 98 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[2F602AC] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[2F602B0] test eax,eax je short M01_L01 M01_L00: mov ecx,[ebp-1C] call dword ptr ds:[2F602B4] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[2F602B0] test eax,eax jne short M01_L00 M01_L01: mov ecx,[ebp-1C] call dword ptr ds:[2F602B8] jmp short M01_L03 cmp dword ptr [ebp-1C],0 je short M01_L02 mov ecx,[ebp-1C] call dword ptr ds:[2F602B8] M01_L02: pop eax jmp eax M01_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.TakeLastHalf(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,[edx+4] test edi,edi je short M00_L00 mov ecx,offset MT_System.Linq.Enumerable+d__278`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax mov dword ptr [ebx+14],0FFFFFFFE call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+1C],eax lea edx,[ebx+8] call CORINFO_HELP_ASSIGN_REF_EDI mov byte ptr [ebx+35],1 mov dword ptr [ebx+24],32 mov byte ptr [ebx+37],1 xor edx,edx mov [ebx+2C],edx mov edx,[esi+4] mov ecx,ebx call dword ptr ds:[0B9FDA80]; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) pop ebx pop esi pop edi pop ebp ret M00_L00: mov ecx,10 call dword ptr ds:[0AFE5E10] int 3 ; Total bytes of code 98 ``` ```assembly ; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, BenchmarkDotNet.Engines.Consumer) push ebp mov ebp,esp push esi sub esp,18 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,edx call dword ptr ds:[34402A8] mov ecx,eax mov [ebp-1C],ecx call dword ptr ds:[34402AC] test eax,eax je short M01_L01 M01_L00: mov ecx,[ebp-1C] call dword ptr ds:[34402B0] mov [esi+24],eax mov ecx,[ebp-1C] call dword ptr ds:[34402AC] test eax,eax jne short M01_L00 M01_L01: mov ecx,[ebp-1C] call dword ptr ds:[34402B4] jmp short M01_L03 cmp dword ptr [ebp-1C],0 je short M01_L02 mov ecx,[ebp-1C] call dword ptr ds:[34402B4] M01_L02: pop eax jmp eax M01_L03: lea esp,[ebp-4] pop esi pop ebp ret ; Total bytes of code 104 ``` #### System.Linq.Tests.Perf_Enumerable.ToArray(input: IEnumerable) ```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 847.0167017436025 > 800.81239036007. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 2/13/2023 6:54:14 PM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -52.66728328926339 (T) = (0 -849.2849475336598) / Math.Sqrt((24.36431107521769 / (24)) + (54.38219554814983 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.11036507722874557 = (764.8700098289377 - 849.2849475336598) / 764.8700098289377 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.Linq.Tests.Perf_Enumerable.ToArray(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] call dword ptr ds:[0ACFB120]; System.Linq.Enumerable.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 10 ``` ```assembly ; System.Linq.Enumerable.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push esi mov esi,ecx test esi,esi je short M01_L01 mov edx,esi mov ecx,offset MT_System.Linq.IIListProvider`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[526B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax jne short M01_L00 mov ecx,esi call dword ptr ds:[0ACFB9D8]; System.Collections.Generic.EnumerableHelpers.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) pop esi pop ebp ret M01_L00: mov ecx,eax call dword ptr ds:[2FC02F4] pop esi pop ebp ret M01_L01: mov ecx,10 call dword ptr ds:[0AB87E10] int 3 ; Total bytes of code 61 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.ToArray(System.Linq.Tests.LinqTestData) mov ecx,[edx+4] call dword ptr ds:[0A899120]; System.Linq.Enumerable.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 10 ``` ```assembly ; System.Linq.Enumerable.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push esi mov esi,ecx test esi,esi je short M01_L01 mov edx,esi mov ecx,offset MT_System.Linq.IIListProvider`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[7C8B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) test eax,eax jne short M01_L00 mov ecx,esi call dword ptr ds:[0A8999D8]; System.Collections.Generic.EnumerableHelpers.ToArray[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1) pop esi pop ebp ret M01_L00: mov ecx,eax call dword ptr ds:[0D502F0] pop esi pop ebp ret M01_L01: mov ecx,10 call dword ptr ds:[0A445E10] int 3 ; Total bytes of code 61 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Numerics.Tests.Perf_VectorOf<Double>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetHashCodeBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Numerics.Tests.Perf_VectorOf(Double).GetHashCodeBenchmark.html>) 21.27 ns 23.32 ns 1.10 0.02 False

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_VectorOf&lt;Double&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_VectorOf<Double>.GetHashCodeBenchmark ```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 23.319995047137127 > 22.341660796825142. IsChangePoint: Marked as a change because one of 1/10/2023 7:48:18 AM, 2/24/2023 9:01:57 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -36.73484573605478 (T) = (0 -23.40419434121898) / Math.Sqrt((0.057530083563129976 / (24)) + (0.035533467685909315 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.10094263766685839 = (21.25832313190963 - 23.40419434121898) / 21.25832313190963 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. ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Collections.ContainsTrue<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Span - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsTrue(Int32).Span(Size%3a%20512).html>) 16.41 μs 17.54 μs 1.07 0.12 False
[HashSet - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsTrue(Int32).HashSet(Size%3a%20512).html>) 4.15 μs 6.55 μs 1.58 0.16 False

graph graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsTrue&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsTrue<Int32>.Span(Size: 512) ```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 17.53546739947388 > 17.20258114060867. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 5:47:38 PM, 2/20/2023 9:09:49 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -67.03766515855008 (T) = (0 -17575.041771205968) / Math.Sqrt((6572.556686996529 / (24)) + (2158.844156017105 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.07511899500838262 = (16347.06655989176 - 17575.041771205968) / 16347.06655989176 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. ```#### System.Collections.ContainsTrue<Int32>.HashSet(Size: 512) ```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 6.550494242173494 > 4.428796102994272. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/11/2023 2:37:52 AM, 2/13/2023 6:54:14 PM, 3/13/2023 12:04:12 PM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -20.994485648491388 (T) = (0 -6652.723566056071) / Math.Sqrt((361551.5215622887 / (55)) + (16064.502069054206 / (4))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (55) + (4) - 2, .025) and -0.48093342411597445 = (4492.250264408297 - 6652.723566056071) / 4492.250264408297 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. ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in PerfLabTests.DelegatePerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[DelegateInvoke - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.DelegatePerf.DelegateInvoke.html>) 438.41 μs 498.88 μs 1.14 0.03 False Trace Trace

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.DelegatePerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.DelegatePerf.DelegateInvoke ```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 498.87991071428576 > 458.39878559027784. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 1/30/2023 9:42:46 PM, 2/13/2023 6:54:14 PM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -289.3214041940763 (T) = (0 -499194.14573317306) / Math.Sqrt((768519.1176506117 / (24)) + (490410.7507173291 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.14200941163207 = (437119.11710058857 - 499194.14573317306) / 437119.11710058857 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.DelegatePerf.DelegateInvoke() push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov esi,[ecx+4] mov edi,[ecx+8] xor ebx,ebx xor eax,eax mov [ebp-1C],eax xor edx,edx mov [ebp-18],edx mov ecx,0A625CF8 mov edx,7D call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE cmp dword ptr ds:[0A6262C4],0 mov edx,[ebp-1C] jle short M00_L01 M00_L00: push 0 push 64 push 0 push 64 mov ecx,[esi+4] mov edx,edi call dword ptr [esi+0C] mov ebx,eax mov eax,[ebp-18] inc eax cmp eax,ds:[0A6262C4] mov [ebp-18],eax jl short M00_L00 M00_L01: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 97 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.DelegatePerf.DelegateInvoke() push ebp mov ebp,esp push edi push esi push ebx sub esp,10 mov esi,[ecx+4] mov edi,[ecx+8] xor ebx,ebx xor eax,eax mov [ebp-1C],eax xor edx,edx mov [ebp-18],edx mov ecx,0A6661F8 mov edx,7D call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE cmp dword ptr ds:[0A6667C4],0 mov edx,[ebp-1C] jle short M00_L01 M00_L00: push 0 push 64 push 0 push 64 mov ecx,[esi+4] mov edx,edi call dword ptr [esi+0C] mov ebx,eax mov eax,[ebp-18] inc eax cmp eax,ds:[0A6667C4] mov [ebp-18],eax jl short M00_L00 M00_L01: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 97 ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Collections.ContainsFalse<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SortedSet - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsFalse(Int32).SortedSet(Size%3a%20512).html>) 35.80 μs 40.06 μs 1.12 0.02 False

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsFalse&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsFalse<Int32>.SortedSet(Size: 512) ```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 40.05804707379135 > 37.545262621073675. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -39.811474428139846 (T) = (0 -39560.49874552842) / Math.Sqrt((27989.27689104861 / (24)) + (266018.30209685606 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.10402680342865663 = (35832.91512730457 - 39560.49874552842) / 35832.91512730457 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. ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Collections.AddGivenSize<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Dictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.AddGivenSize(Int32).Dictionary(Size%3a%20512).html>) 8.10 μs 8.95 μs 1.10 0.07 False

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.AddGivenSize&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.AddGivenSize<Int32>.Dictionary(Size: 512) ```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 8.94649799885649 > 8.487165399912895. IsChangePoint: Marked as a change because one of 1/20/2023 8:02:54 AM, 1/30/2023 9:42:46 PM, 2/9/2023 4:27:10 AM, 2/16/2023 6:27:39 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -15.988046645697532 (T) = (0 -8899.260624905815) / Math.Sqrt((24952.46402797539 / (24)) + (39421.15835221591 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.09124141903551423 = (8155.171229452931 - 8899.260624905815) / 8155.171229452931 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. ``` ### 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 6123cb00bbec8ae3500c970890f5b0efcf7950e8
Compare ffbcb8336ac67496b0565112f663f74fda6cac34
Diff Diff

Regressions in System.Text.Json.Tests.Perf_Get

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetBoolean - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Tests.Perf_Get.GetBoolean.html>) 148.24 ns 167.18 ns 1.13 0.03 False Trace Trace

graph Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Tests.Perf_Get*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Tests.Perf_Get.GetBoolean ```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 167.18047844191898 > 155.84817962622654. IsChangePoint: Marked as a change because one of 1/5/2023 11:35:29 PM, 1/18/2023 8:37:25 PM, 1/30/2023 9:42:46 PM, 2/9/2023 4:27:10 AM, 2/16/2023 9:36:08 AM, 2/20/2023 10:31:48 AM, 3/6/2023 11:14:52 AM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM. IsRegressionStdDev: Marked as regression because -204.66938085605926 (T) = (0 -166.49771452985763) / Math.Sqrt((0.09439310255609189 / (24)) + (0.13208657897440237 / (35))) is less than -2.0024654592901125 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (24) + (35) - 2, .025) and -0.12097066461186325 = (148.52994800493514 - 166.49771452985763) / 148.52994800493514 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.Json.Tests.Perf_Get.GetBoolean() push ebp mov ebp,esp push ebx sub esp,0B8 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-0BC],xmm4 vmovdqu xmmword ptr [ebp-0AC],xmm4 mov eax,0FFFFFF70 M00_L00: vmovdqu xmmword ptr [ebp+eax-0C],xmm4 vmovdqu xmmword ptr [ebp+eax+4],xmm4 vmovdqu xmmword ptr [ebp+eax+14],xmm4 add eax,30 jne short M00_L00 mov [ebp-0C],eax mov [ebp-8],eax xor ebx,ebx mov ecx,0B1A5CF8 mov edx,233 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov ecx,ds:[76F45D0] test ecx,ecx je near ptr M00_L02 lea edx,[ecx+8] mov eax,[ecx+4] M00_L01: xor ecx,ecx mov [ebp-0A4],ecx mov [ebp-0A0],ecx vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [ebp-9C],xmm0 push eax push edx push dword ptr [ebp-90] push dword ptr [ebp-94] push dword ptr [ebp-98] push dword ptr [ebp-9C] push dword ptr [ebp-0A0] push dword ptr [ebp-0A4] push dword ptr [ebp-0A8] push dword ptr [ebp-0AC] push dword ptr [ebp-0B0] push dword ptr [ebp-0B4] push dword ptr [ebp-0B8] push dword ptr [ebp-0BC] lea ecx,[ebp-8C] mov edx,1 call dword ptr ds:[0BA8DBB8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1, Boolean, System.Text.Json.JsonReaderState) cmp byte ptr [ebp-61],0 jne short M00_L03 lea ecx,[ebp-8C] call dword ptr ds:[0BA8DDC8]; System.Text.Json.Utf8JsonReader.ReadSingleSegment() jmp short M00_L04 M00_L02: xor edx,edx xor eax,eax jmp near ptr M00_L01 M00_L03: lea ecx,[ebp-8C] call dword ptr ds:[0BA8F1B0] M00_L04: movzx eax,al test eax,eax jne short M00_L05 cmp byte ptr [ebp-68],0 je short M00_L05 cmp byte ptr [ebp-64],0 je short M00_L10 M00_L05: xor eax,eax M00_L06: movzx ecx,byte ptr [ebp-64] cmp ecx,9 jne short M00_L07 mov edx,1 jmp short M00_L08 M00_L07: cmp ecx,0A jne short M00_L09 xor edx,edx M00_L08: xor edx,ebx movzx ebx,dl inc eax cmp eax,64 jl short M00_L06 mov eax,ebx lea esp,[ebp-4] pop ebx pop ebp ret M00_L09: movzx ecx,byte ptr [ebp-64] call dword ptr ds:[0BA61270] int 3 M00_L10: xor ecx,ecx push 0 push 0 push ecx lea ecx,[ebp-8C] mov edx,20 call dword ptr ds:[0BA61378] int 3 ; Total bytes of code 361 ``` ```assembly ; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1, Boolean, System.Text.Json.JsonReaderState) push ebp mov ebp,esp push edi push esi sub esp,10 vzeroupper xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov eax,ecx lea edi,[eax+30] lea esi,[ebp+38] call CORINFO_HELP_ASSIGN_BYREF movsd mov [eax+24],dl mov byte ptr [eax+25],0 mov ecx,eax mov edx,[ebp+8] mov [ecx],edx mov edx,[ebp+0C] mov [ecx+4],edx lea ecx,[eax+8] mov edx,[ebp+10] mov [ecx],edx mov edx,[ebp+14] mov [ecx+4],edx movzx ecx,byte ptr [ebp+18] mov [eax+26],cl movzx ecx,byte ptr [ebp+19] mov [eax+27],cl movzx ecx,byte ptr [ebp+1A] mov [eax+2E],cl movzx ecx,byte ptr [ebp+1B] mov [eax+2C],cl movzx ecx,byte ptr [ebp+1C] mov [eax+28],cl movzx ecx,byte ptr [ebp+1D] mov [eax+29],cl mov ecx,[ebp+20] mov [eax+38],ecx mov ecx,[ebp+24] mov [eax+3C],ecx cmp dword ptr [eax+38],0 jne short M01_L00 mov dword ptr [eax+38],40 M01_L00: lea edi,[eax+40] lea esi,[ebp+28] movsd movsd call CORINFO_HELP_ASSIGN_BYREF movsd xor ecx,ecx mov [eax+20],ecx lea ecx,[eax+18] xor edx,edx mov [ecx],edx mov [ecx+4],edx lea ecx,[eax+10] mov [ecx],edx mov [ecx+4],edx movzx ecx,byte ptr [eax+24] mov [eax+2A],cl mov byte ptr [eax+2B],0 mov [eax+70],edx mov [eax+74],edx mov [eax+58],edx mov [eax+5C],edx mov [eax+50],edx mov [eax+54],edx vxorps xmm0,xmm0,xmm0 vmovq qword ptr [eax+60],xmm0 vmovq qword ptr [eax+68],xmm0 mov byte ptr [eax+2D],0 mov esi,ds:[76F1F48] add esi,4 lea edi,[ebp-18] mov ecx,4 rep movsd lea edi,[eax+78] lea esi,[ebp-18] call CORINFO_HELP_ASSIGN_BYREF call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea esp,[ebp-8] pop esi pop edi pop ebp ret 38 ; Total bytes of code 264 ``` ```assembly ; System.Text.Json.Utf8JsonReader.ReadSingleSegment() push ebp mov ebp,esp push edi push esi push ebx sub esp,0C mov esi,ecx xor ebx,ebx xor ecx,ecx mov [esi+70],ecx mov [esi+74],ecx mov byte ptr [esi+2E],0 mov ecx,[esi+20] mov eax,ecx sar eax,1F cmp ecx,[esi+34] sbb eax,0 jl short M02_L02 cmp byte ptr [esi+27],0 je near ptr M02_L15 cmp byte ptr [esi+24],0 je near ptr M02_L15 cmp byte ptr [esi+2B],0 je short M02_L00 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M02_L15 M02_L00: cmp dword ptr [esi+4C],0 jne near ptr M02_L17 cmp byte ptr [esi+3C],2 jne short M02_L01 movzx ecx,byte ptr [esi+28] cmp ecx,6 je near ptr M02_L15 M02_L01: movzx ecx,byte ptr [esi+28] cmp ecx,4 je near ptr M02_L15 cmp ecx,2 jne near ptr M02_L18 jmp near ptr M02_L15 M02_L02: mov ecx,[esi+20] lea eax,[esi+30] cmp ecx,[eax+4] jae near ptr M02_L22 mov eax,[eax] movzx edx,byte ptr [eax+ecx] cmp edx,20 jg near ptr M02_L06 mov ecx,esi call dword ptr ds:[0BA8DE28] mov ecx,[esi+20] mov edx,ecx mov eax,edx sar eax,1F cmp edx,[esi+34] sbb eax,0 jl short M02_L05 cmp byte ptr [esi+27],0 je near ptr M02_L15 cmp byte ptr [esi+24],0 je near ptr M02_L15 cmp byte ptr [esi+2B],0 je short M02_L03 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M02_L15 M02_L03: cmp dword ptr [esi+4C],0 jne near ptr M02_L19 cmp byte ptr [esi+3C],2 jne short M02_L04 movzx ecx,byte ptr [esi+28] cmp ecx,6 je near ptr M02_L15 M02_L04: movzx ecx,byte ptr [esi+28] cmp ecx,4 je near ptr M02_L15 cmp ecx,2 jne near ptr M02_L20 jmp near ptr M02_L15 M02_L05: lea edx,[esi+30] cmp ecx,[edx+4] jae near ptr M02_L22 mov edx,[edx] movzx edx,byte ptr [edx+ecx] M02_L06: mov ecx,[esi+20] mov eax,ecx sar eax,1F lea ebx,[esi+18] mov [ebx],ecx mov [ebx+4],eax movzx ebx,byte ptr [esi+28] test ebx,ebx je near ptr M02_L16 cmp edx,2F jne short M02_L08 M02_L07: mov ecx,esi call dword ptr ds:[0BA8DFA8] mov ebx,eax jmp near ptr M02_L15 M02_L08: cmp ebx,1 jne short M02_L11 cmp edx,7D jne short M02_L09 mov ecx,esi call dword ptr ds:[0BA8DD68] jmp near ptr M02_L14 M02_L09: cmp edx,22 jne near ptr M02_L21 mov ebx,[esi+20] lea ecx,[esi+8] mov edi,[ecx] mov eax,[ecx+4] mov [ebp-10],eax mov ecx,esi mov edx,[ecx] mov ecx,[ecx+4] mov [ebp-14],edx mov [ebp-18],ecx mov ecx,esi call dword ptr ds:[0BA8DEB8] test eax,eax jne short M02_L10 mov [esi+20],ebx mov byte ptr [esi+28],1 lea ecx,[esi+8] mov [ecx],edi mov edi,[ebp-10] mov [ecx+4],edi mov edi,[ebp-14] mov [esi],edi mov edi,[ebp-18] mov [esi+4],edi mov ebx,eax jmp short M02_L15 M02_L10: mov ebx,eax jmp short M02_L15 M02_L11: cmp ebx,3 jne short M02_L13 cmp edx,5D jne short M02_L12 mov ecx,esi call dword ptr ds:[0BA8DD98] jmp short M02_L14 M02_L12: mov ecx,esi call dword ptr ds:[0BA8DE40]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte) mov ebx,eax jmp short M02_L15 M02_L13: cmp ebx,5 jne near ptr M02_L07 jmp short M02_L12 M02_L14: mov ebx,1 M02_L15: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L16: mov ecx,esi call dword ptr ds:[0BA8DE10]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte) mov ebx,eax jmp short M02_L15 M02_L17: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0BA61378] int 3 M02_L18: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0BA61378] int 3 M02_L19: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0BA61378] int 3 M02_L20: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0BA61378] int 3 M02_L21: xor ecx,ecx push edx push 0 push ecx mov ecx,esi mov edx,0C call dword ptr ds:[0BA61378] int 3 M02_L22: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 639 ``` ### Compare Jit Disasm ```assembly ; System.Text.Json.Tests.Perf_Get.GetBoolean() push ebp mov ebp,esp push ebx sub esp,0B8 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-0BC],xmm4 vmovdqu xmmword ptr [ebp-0AC],xmm4 mov eax,0FFFFFF70 M00_L00: vmovdqu xmmword ptr [ebp+eax-0C],xmm4 vmovdqu xmmword ptr [ebp+eax+4],xmm4 vmovdqu xmmword ptr [ebp+eax+14],xmm4 add eax,30 jne short M00_L00 mov [ebp-0C],eax mov [ebp-8],eax xor ebx,ebx mov ecx,0AED61F8 mov edx,233 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov ecx,ds:[73745D0] test ecx,ecx je near ptr M00_L02 lea edx,[ecx+8] mov eax,[ecx+4] M00_L01: xor ecx,ecx mov [ebp-0A4],ecx mov [ebp-0A0],ecx vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [ebp-9C],xmm0 push eax push edx push dword ptr [ebp-90] push dword ptr [ebp-94] push dword ptr [ebp-98] push dword ptr [ebp-9C] push dword ptr [ebp-0A0] push dword ptr [ebp-0A4] push dword ptr [ebp-0A8] push dword ptr [ebp-0AC] push dword ptr [ebp-0B0] push dword ptr [ebp-0B4] push dword ptr [ebp-0B8] push dword ptr [ebp-0BC] lea ecx,[ebp-8C] mov edx,1 call dword ptr ds:[0B7BDBB8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1, Boolean, System.Text.Json.JsonReaderState) cmp byte ptr [ebp-61],0 jne short M00_L03 lea ecx,[ebp-8C] call dword ptr ds:[0B7BDDC8]; System.Text.Json.Utf8JsonReader.ReadSingleSegment() jmp short M00_L04 M00_L02: xor edx,edx xor eax,eax jmp near ptr M00_L01 M00_L03: lea ecx,[ebp-8C] call dword ptr ds:[0B7BF1B0] M00_L04: movzx eax,al test eax,eax jne short M00_L05 cmp byte ptr [ebp-68],0 je short M00_L05 cmp byte ptr [ebp-64],0 je short M00_L10 M00_L05: xor eax,eax M00_L06: movzx ecx,byte ptr [ebp-64] cmp ecx,9 jne short M00_L07 mov edx,1 jmp short M00_L08 M00_L07: cmp ecx,0A jne short M00_L09 xor edx,edx M00_L08: xor edx,ebx movzx ebx,dl inc eax cmp eax,64 jl short M00_L06 mov eax,ebx lea esp,[ebp-4] pop ebx pop ebp ret M00_L09: movzx ecx,byte ptr [ebp-64] call dword ptr ds:[0B861270] int 3 M00_L10: xor ecx,ecx push 0 push 0 push ecx lea ecx,[ebp-8C] mov edx,20 call dword ptr ds:[0B861378] int 3 ; Total bytes of code 361 ``` ```assembly ; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1, Boolean, System.Text.Json.JsonReaderState) push ebp mov ebp,esp push edi push esi sub esp,10 vzeroupper xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov eax,ecx lea edi,[eax+30] lea esi,[ebp+38] call CORINFO_HELP_ASSIGN_BYREF movsd mov [eax+24],dl mov byte ptr [eax+25],0 mov ecx,eax mov edx,[ebp+8] mov [ecx],edx mov edx,[ebp+0C] mov [ecx+4],edx lea ecx,[eax+8] mov edx,[ebp+10] mov [ecx],edx mov edx,[ebp+14] mov [ecx+4],edx movzx ecx,byte ptr [ebp+18] mov [eax+26],cl movzx ecx,byte ptr [ebp+19] mov [eax+27],cl movzx ecx,byte ptr [ebp+1A] mov [eax+2E],cl movzx ecx,byte ptr [ebp+1B] mov [eax+2C],cl movzx ecx,byte ptr [ebp+1C] mov [eax+28],cl movzx ecx,byte ptr [ebp+1D] mov [eax+29],cl mov ecx,[ebp+20] mov [eax+38],ecx mov ecx,[ebp+24] mov [eax+3C],ecx cmp dword ptr [eax+38],0 jne short M01_L00 mov dword ptr [eax+38],40 M01_L00: lea edi,[eax+40] lea esi,[ebp+28] movsd movsd call CORINFO_HELP_ASSIGN_BYREF movsd xor ecx,ecx mov [eax+20],ecx lea ecx,[eax+18] xor edx,edx mov [ecx],edx mov [ecx+4],edx lea ecx,[eax+10] mov [ecx],edx mov [ecx+4],edx movzx ecx,byte ptr [eax+24] mov [eax+2A],cl mov byte ptr [eax+2B],0 mov [eax+70],edx mov [eax+74],edx mov [eax+58],edx mov [eax+5C],edx mov [eax+50],edx mov [eax+54],edx vxorps xmm0,xmm0,xmm0 vmovq qword ptr [eax+60],xmm0 vmovq qword ptr [eax+68],xmm0 mov byte ptr [eax+2D],0 mov esi,ds:[7371F40] add esi,4 lea edi,[ebp-18] mov ecx,4 rep movsd lea edi,[eax+78] lea esi,[ebp-18] call CORINFO_HELP_ASSIGN_BYREF call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea esp,[ebp-8] pop esi pop edi pop ebp ret 38 ; Total bytes of code 264 ``` ```assembly ; System.Text.Json.Utf8JsonReader.ReadSingleSegment() push ebp mov ebp,esp push edi push esi push ebx sub esp,0C mov esi,ecx xor ebx,ebx xor ecx,ecx mov [esi+70],ecx mov [esi+74],ecx mov byte ptr [esi+2E],0 mov ecx,[esi+20] mov eax,ecx sar eax,1F cmp ecx,[esi+34] sbb eax,0 jl short M02_L02 cmp byte ptr [esi+27],0 je near ptr M02_L15 cmp byte ptr [esi+24],0 je near ptr M02_L15 cmp byte ptr [esi+2B],0 je short M02_L00 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M02_L15 M02_L00: cmp dword ptr [esi+4C],0 jne near ptr M02_L17 cmp byte ptr [esi+3C],2 jne short M02_L01 movzx ecx,byte ptr [esi+28] cmp ecx,6 je near ptr M02_L15 M02_L01: movzx ecx,byte ptr [esi+28] cmp ecx,4 je near ptr M02_L15 cmp ecx,2 jne near ptr M02_L18 jmp near ptr M02_L15 M02_L02: mov ecx,[esi+20] lea eax,[esi+30] cmp ecx,[eax+4] jae near ptr M02_L22 mov eax,[eax] movzx edx,byte ptr [eax+ecx] cmp edx,20 jg near ptr M02_L06 mov ecx,esi call dword ptr ds:[0B7BDE28] mov ecx,[esi+20] mov edx,ecx mov eax,edx sar eax,1F cmp edx,[esi+34] sbb eax,0 jl short M02_L05 cmp byte ptr [esi+27],0 je near ptr M02_L15 cmp byte ptr [esi+24],0 je near ptr M02_L15 cmp byte ptr [esi+2B],0 je short M02_L03 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M02_L15 M02_L03: cmp dword ptr [esi+4C],0 jne near ptr M02_L19 cmp byte ptr [esi+3C],2 jne short M02_L04 movzx ecx,byte ptr [esi+28] cmp ecx,6 je near ptr M02_L15 M02_L04: movzx ecx,byte ptr [esi+28] cmp ecx,4 je near ptr M02_L15 cmp ecx,2 jne near ptr M02_L20 jmp near ptr M02_L15 M02_L05: lea edx,[esi+30] cmp ecx,[edx+4] jae near ptr M02_L22 mov edx,[edx] movzx edx,byte ptr [edx+ecx] M02_L06: mov ecx,[esi+20] mov eax,ecx sar eax,1F lea ebx,[esi+18] mov [ebx],ecx mov [ebx+4],eax movzx ebx,byte ptr [esi+28] test ebx,ebx je near ptr M02_L16 cmp edx,2F jne short M02_L08 M02_L07: mov ecx,esi call dword ptr ds:[0B7BDFA8] mov ebx,eax jmp near ptr M02_L15 M02_L08: cmp ebx,1 jne short M02_L11 cmp edx,7D jne short M02_L09 mov ecx,esi call dword ptr ds:[0B7BDD68] jmp near ptr M02_L14 M02_L09: cmp edx,22 jne near ptr M02_L21 mov ebx,[esi+20] lea ecx,[esi+8] mov edi,[ecx] mov eax,[ecx+4] mov [ebp-10],eax mov ecx,esi mov edx,[ecx] mov ecx,[ecx+4] mov [ebp-14],edx mov [ebp-18],ecx mov ecx,esi call dword ptr ds:[0B7BDEB8] test eax,eax jne short M02_L10 mov [esi+20],ebx mov byte ptr [esi+28],1 lea ecx,[esi+8] mov [ecx],edi mov edi,[ebp-10] mov [ecx+4],edi mov edi,[ebp-14] mov [esi],edi mov edi,[ebp-18] mov [esi+4],edi mov ebx,eax jmp short M02_L15 M02_L10: mov ebx,eax jmp short M02_L15 M02_L11: cmp ebx,3 jne short M02_L13 cmp edx,5D jne short M02_L12 mov ecx,esi call dword ptr ds:[0B7BDD98] jmp short M02_L14 M02_L12: mov ecx,esi call dword ptr ds:[0B7BDE40]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte) mov ebx,eax jmp short M02_L15 M02_L13: cmp ebx,5 jne near ptr M02_L07 jmp short M02_L12 M02_L14: mov ebx,1 M02_L15: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L16: mov ecx,esi call dword ptr ds:[0B7BDE10]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte) mov ebx,eax jmp short M02_L15 M02_L17: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0B861378] int 3 M02_L18: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0B861378] int 3 M02_L19: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0B861378] int 3 M02_L20: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0B861378] int 3 M02_L21: xor ecx,ecx push edx push 0 push ecx mov ecx,esi mov edx,0C call dword ptr ds:[0B861378] int 3 M02_L22: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 639 ``` ### 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)