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: 73 Improvements on 2/9/2023 4:10:34 PM #12974

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements 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
[TrailingZeroCount_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.TrailingZeroCount_ulong.html>) 943.22 ns 716.13 ns 0.76 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.Numerics.Tests.Perf_BitOperations*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_BitOperations.TrailingZeroCount_ulong ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 716.1312719416212 < 896.01962717437. IsChangePoint: Marked as a change because one of 12/12/2022 5:25:39 PM, 12/14/2022 5:20:21 PM, 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/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 12.824800571916613 (T) = (0 -713.0703965058242) / Math.Sqrt((12224.69299417461 / (299)) + (2.3127794801778743 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.10325864515616894 = (795.179560588021 - 713.0703965058242) / 795.179560588021 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Numerics.Tests.Perf_BitOperations.TrailingZeroCount_ulong() push ebp mov ebp,esp push edi push esi push ebx xor esi,esi mov ecx,0A595F80 mov edx,1B2 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[6AD4508] 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] test ebx,ebx jne short M00_L01 tzcnt edi,edi add edi,20 jmp short M00_L02 M00_L01: xor edi,edi tzcnt edi,ebx M00_L02: add esi,edi 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 79 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_BitOperations.TrailingZeroCount_ulong() push ebp mov ebp,esp push edi push esi push ebx xor esi,esi mov ecx,0AC05F80 mov edx,1B2 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov eax,ds:[6FE4508] 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] test ebx,ebx jne short M00_L01 tzcnt edi,edi add edi,20 jmp short M00_L02 M00_L01: xor edi,edi tzcnt edi,ebx M00_L02: add esi,edi 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 79 ``` ### 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 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in Microsoft.Extensions.Logging.LoggingOverhead

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[TwoArguments_FilteredByLevel - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.Logging.LoggingOverhead.TwoArguments_FilteredByLevel.html>) 87.12 ns 63.12 ns 0.72 0.06 False 733.6037494797941 566.1344655664886 0.7717169738676232) Trace Trace
[TwoArguments - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.Logging.LoggingOverhead.TwoArguments.html>) 101.72 ns 80.29 ns 0.79 0.05 False 851.9731334651002 693.4422854018783 0.8139250619107511) 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 'Microsoft.Extensions.Logging.LoggingOverhead*'
### Payloads [Baseline]() [Compare]() ### Histogram #### Microsoft.Extensions.Logging.LoggingOverhead.TwoArguments_FilteredByLevel ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 63.12094340534944 < 78.48298395964211. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 42.55552761386681 (T) = (0 -64.22637290798231) / Math.Sqrt((9.745332421979294 / (299)) + (3.9205848248533037 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.23325475605747972 = (83.76494463498373 - 64.22637290798231) / 83.76494463498373 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; Microsoft.Extensions.Logging.LoggingOverhead.TwoArguments_FilteredByLevel() push ebp mov ebp,esp push edi push esi push ebx mov esi,[ecx+4] mov edi,ds:[6F84480] mov ecx,offset MT_System.Object[] mov edx,2 call CORINFO_HELP_NEWARR_1_OBJ mov ebx,eax mov ecx,offset MT_System.Int32 call CORINFO_HELP_NEWSFAST mov dword ptr [eax+4],1 lea edx,[ebx+8] call CORINFO_HELP_ASSIGN_REF_EAX mov dword ptr [ebx+0C],8317EF0 push 0 push 0 push edi push 8317F0C push ebx mov ecx,esi xor edx,edx call dword ptr ds:[0B561690]; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 90 ``` ```assembly ; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) push ebp mov ebp,esp push edi push esi sub esp,0C xor eax,eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,ecx mov edi,edx test esi,esi je short M01_L00 push dword ptr [ebp+8] lea ecx,[ebp-14] mov edx,[ebp+0C] call dword ptr ds:[0B565B58]; Microsoft.Extensions.Logging.FormattedLogValues..ctor(System.String, System.Object[]) push offset MD_Microsoft.Extensions.Logging.ILogger.Log[[Microsoft.Extensions.Logging.FormattedLogValues, Microsoft.Extensions.Logging.Abstractions]](Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, Microsoft.Extensions.Logging.FormattedLogValues, System.Exception, System.Func`3) mov ecx,esi mov edx,offset MT_Microsoft.Extensions.Logging.ILogger call CORINFO_HELP_VIRTUAL_FUNC_PTR push dword ptr [ebp+18] push dword ptr [ebp+14] push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-14] push dword ptr [ebp+10] push dword ptr ds:[6F852CC] mov ecx,esi mov edx,edi call eax lea esp,[ebp-8] pop esi pop edi pop ebp ret 14 M01_L00: mov ecx,191 mov edx,0B3E636C call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B5632D0] int 3 ; Total bytes of code 122 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.Logging.LoggingOverhead.TwoArguments_FilteredByLevel() push ebp mov ebp,esp push edi push esi push ebx mov esi,[ecx+4] mov edi,ds:[7324480] mov ecx,offset MT_System.Object[] mov edx,2 call CORINFO_HELP_NEWARR_1_OBJ mov ebx,eax mov ecx,offset MT_System.Int32 call CORINFO_HELP_NEWSFAST mov dword ptr [eax+4],1 lea edx,[ebx+8] call CORINFO_HELP_ASSIGN_REF_EAX mov dword ptr [ebx+0C],84F8DEC push 0 push 0 push edi push 84F8E08 push ebx mov ecx,esi xor edx,edx call dword ptr ds:[0B711690]; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 90 ``` ```assembly ; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) push ebp mov ebp,esp push edi push esi sub esp,0C xor eax,eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,ecx mov edi,edx test esi,esi je short M01_L00 push dword ptr [ebp+8] lea ecx,[ebp-14] mov edx,[ebp+0C] call dword ptr ds:[0B715B58]; Microsoft.Extensions.Logging.FormattedLogValues..ctor(System.String, System.Object[]) push offset MD_Microsoft.Extensions.Logging.ILogger.Log[[Microsoft.Extensions.Logging.FormattedLogValues, Microsoft.Extensions.Logging.Abstractions]](Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, Microsoft.Extensions.Logging.FormattedLogValues, System.Exception, System.Func`3) mov ecx,esi mov edx,offset MT_Microsoft.Extensions.Logging.ILogger call CORINFO_HELP_VIRTUAL_FUNC_PTR push dword ptr [ebp+18] push dword ptr [ebp+14] push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-14] push dword ptr [ebp+10] push dword ptr ds:[73252D4] mov ecx,esi mov edx,edi call eax lea esp,[ebp-8] pop esi pop edi pop ebp ret 14 M01_L00: mov ecx,191 mov edx,0B596BF4 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B7132D0] int 3 ; Total bytes of code 122 ``` #### Microsoft.Extensions.Logging.LoggingOverhead.TwoArguments ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 80.29091555683105 < 93.6431345741208. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/9/2023 4:10:34 PM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 54.57477387082834 (T) = (0 -79.46281201727732) / Math.Sqrt((7.338537311342657 / (299)) + (2.249623859717414 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.1994953946099345 = (99.26590238485525 - 79.46281201727732) / 99.26590238485525 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; Microsoft.Extensions.Logging.LoggingOverhead.TwoArguments() push ebp mov ebp,esp push edi push esi push ebx mov esi,[ecx+4] mov edi,ds:[6FE4480] mov ecx,offset MT_System.Object[] mov edx,2 call CORINFO_HELP_NEWARR_1_OBJ mov ebx,eax mov ecx,offset MT_System.Int32 call CORINFO_HELP_NEWSFAST mov dword ptr [eax+4],1 lea edx,[ebx+8] call CORINFO_HELP_ASSIGN_REF_EAX mov dword ptr [ebx+0C],81D7EF0 push 0 push 0 push edi push 81D7F0C push ebx mov ecx,esi mov edx,4 call dword ptr ds:[0B421690]; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 93 ``` ```assembly ; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) push ebp mov ebp,esp push edi push esi sub esp,0C xor eax,eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,ecx mov edi,edx test esi,esi je short M01_L00 push dword ptr [ebp+8] lea ecx,[ebp-14] mov edx,[ebp+0C] call dword ptr ds:[0B425B58]; Microsoft.Extensions.Logging.FormattedLogValues..ctor(System.String, System.Object[]) push offset MD_Microsoft.Extensions.Logging.ILogger.Log[[Microsoft.Extensions.Logging.FormattedLogValues, Microsoft.Extensions.Logging.Abstractions]](Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, Microsoft.Extensions.Logging.FormattedLogValues, System.Exception, System.Func`3) mov ecx,esi mov edx,offset MT_Microsoft.Extensions.Logging.ILogger call CORINFO_HELP_VIRTUAL_FUNC_PTR push dword ptr [ebp+18] push dword ptr [ebp+14] push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-14] push dword ptr [ebp+10] push dword ptr ds:[6FE52CC] mov ecx,esi mov edx,edi call eax lea esp,[ebp-8] pop esi pop edi pop ebp ret 14 M01_L00: mov ecx,191 mov edx,0B2A636C call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B4232D0] int 3 ; Total bytes of code 122 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.Logging.LoggingOverhead.TwoArguments() push ebp mov ebp,esp push edi push esi push ebx mov esi,[ecx+4] mov edi,ds:[7764480] mov ecx,offset MT_System.Object[] mov edx,2 call CORINFO_HELP_NEWARR_1_OBJ mov ebx,eax mov ecx,offset MT_System.Int32 call CORINFO_HELP_NEWSFAST mov dword ptr [eax+4],1 lea edx,[ebx+8] call CORINFO_HELP_ASSIGN_REF_EAX mov dword ptr [ebx+0C],8AD8DEC push 0 push 0 push edi push 8AD8E08 push ebx mov ecx,esi mov edx,4 call dword ptr ds:[0BCF1690]; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 93 ``` ```assembly ; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) push ebp mov ebp,esp push edi push esi sub esp,0C xor eax,eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,ecx mov edi,edx test esi,esi je short M01_L00 push dword ptr [ebp+8] lea ecx,[ebp-14] mov edx,[ebp+0C] call dword ptr ds:[0BCF5B58]; Microsoft.Extensions.Logging.FormattedLogValues..ctor(System.String, System.Object[]) push offset MD_Microsoft.Extensions.Logging.ILogger.Log[[Microsoft.Extensions.Logging.FormattedLogValues, Microsoft.Extensions.Logging.Abstractions]](Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, Microsoft.Extensions.Logging.FormattedLogValues, System.Exception, System.Func`3) mov ecx,esi mov edx,offset MT_Microsoft.Extensions.Logging.ILogger call CORINFO_HELP_VIRTUAL_FUNC_PTR push dword ptr [ebp+18] push dword ptr [ebp+14] push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-14] push dword ptr [ebp+10] push dword ptr ds:[77652D4] mov ecx,esi mov edx,edi call eax lea esp,[ebp-8] pop esi pop edi pop ebp ret 14 M01_L00: mov ecx,191 mov edx,0BB76BF4 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0BCF32D0] int 3 ; Total bytes of code 122 ``` ### 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 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

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

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsKeyTrue(String%2c%20String).ConcurrentDictionary(Size%3a%20512).html>) 24.19 μs 14.05 μs 0.58 0.16 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.ContainsKeyTrue&lt;String, String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsKeyTrue<String, String>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 14.047761689291104 < 22.99913743294697. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 163.90188914488866 (T) = (0 -13785.84298176588) / Math.Sqrt((1214279.2726334713 / (299)) + (22344.103103857156 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.4586164778420926 = (25464.097848447094 - 13785.84298176588) / 25464.097848447094 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.IterateForEach<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - 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).ConcurrentDictionary(Size%3a%20512).html>) 14.09 μs 7.41 μs 0.53 0.01 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>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 7.413383987701041 < 13.425092594416624. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 373.6486763398739 (T) = (0 -7368.754585481746) / Math.Sqrt((42539.10891109922 / (299)) + (3776.771219702914 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.4732548572376097 = (13989.221707556819 - 7368.754585481746) / 13989.221707556819 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.Sort<IntStruct>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Array_Comparison - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(IntStruct).Array_Comparison(Size%3a%20512).html>) 33.89 μs 30.34 μs 0.90 0.00 False
[LinqOrderByExtension - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(IntStruct).LinqOrderByExtension(Size%3a%20512).html>) 42.42 μs 38.59 μs 0.91 0.00 False
[LinqQuery - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(IntStruct).LinqQuery(Size%3a%20512).html>) 42.12 μs 38.66 μs 0.92 0.00 False
[Array_ComparerStruct - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(IntStruct).Array_ComparerStruct(Size%3a%20512).html>) 37.83 μs 35.32 μs 0.93 0.00 False
[Array_ComparerClass - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(IntStruct).Array_ComparerClass(Size%3a%20512).html>) 34.39 μs 30.84 μs 0.90 0.00 False

graph graph 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.Collections.Sort&lt;IntStruct&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.Sort<IntStruct>.Array_Comparison(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 30.343836000000003 < 32.27878803809524. IsChangePoint: Marked as a change because one of 12/1/2022 7:29:59 PM, 1/3/2023 6:29:42 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 44.951412509155226 (T) = (0 -31127.324997002994) / Math.Sqrt((251686.0530893515 / (299)) + (93434.49257711135 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.09339557312534638 = (34333.96537044114 - 31127.324997002994) / 34333.96537044114 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.Sort<IntStruct>.LinqOrderByExtension(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 38.586760000000005 < 39.87368943333333. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 90.15469699788804 (T) = (0 -38744.15385880785) / Math.Sqrt((336040.3512127818 / (299)) + (10205.170667482944 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.08485249816591937 = (42336.51272735736 - 38744.15385880785) / 42336.51272735736 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.Sort<IntStruct>.LinqQuery(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 38.65914133333333 < 39.92929478461538. IsChangePoint: Marked as a change because one of 1/20/2023 8:02:54 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 82.77277216113679 (T) = (0 -38720.00930902431) / Math.Sqrt((333646.05033573945 / (299)) + (17896.112374354525 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.08583785327478088 = (42355.734644811164 - 38720.00930902431) / 42355.734644811164 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.Sort<IntStruct>.Array_ComparerStruct(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 35.32065866666667 < 35.95152493846153. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 75.38417265927612 (T) = (0 -35365.18745321346) / Math.Sqrt((34994.71646484846 / (299)) + (21798.63617364584 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.06624950623801731 = (37874.34404530362 - 35365.18745321346) / 37874.34404530362 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.Sort<IntStruct>.Array_ComparerClass(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 30.838067999999996 < 32.68747367261905. IsChangePoint: Marked as a change because one of 12/1/2022 7:29:59 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 48.888684154422876 (T) = (0 -31445.508332667323) / Math.Sqrt((82237.50911754242 / (299)) + (54173.53952159333 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.07522479649089593 = (34003.40776152499 - 31445.508332667323) / 34003.40776152499 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.IndexerSet<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SortedDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IndexerSet(Int32).SortedDictionary(Size%3a%20512).html>) 46.79 μs 43.46 μs 0.93 0.00 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.IndexerSet&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IndexerSet<Int32>.SortedDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 43.45896296296296 < 44.37235406005685. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 35.368826793474135 (T) = (0 -43591.68705244278) / Math.Sqrt((2663089.2274346882 / (299)) + (56119.18959874113 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.07990857241018703 = (47377.56025684487 - 43591.68705244278) / 47377.56025684487 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.Concurrent.IsEmpty<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.Concurrent.IsEmpty(Int32).Dictionary(Size%3a%200).html>) 253.84 ns 225.86 ns 0.89 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.Concurrent.IsEmpty&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.Concurrent.IsEmpty<Int32>.Dictionary(Size: 0) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 225.86438864738287 < 241.14314826552337. IsChangePoint: Marked as a change because one of 12/23/2022 9:40:21 PM, 1/21/2023 6:49:37 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 63.99182381871548 (T) = (0 -223.32122800925507) / Math.Sqrt((48.05423436215379 / (299)) + (0.7327193274700183 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.1120721183358965 = (251.5082954605719 - 223.32122800925507) / 251.5082954605719 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements 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>) 41.42 μs 35.63 μs 0.86 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.ContainsFalse&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsFalse<Int32>.SortedSet(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 35.62906485671192 < 39.283656580687826. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 43.66553532097949 (T) = (0 -36865.126136501734) / Math.Sqrt((502992.99581835244 / (299)) + (239408.9192611828 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.11720713311738674 = (41759.65565589891 - 36865.126136501734) / 41759.65565589891 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Memory.Span<Byte>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Fill - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Byte).Fill(Size%3a%20512).html>) 18.69 ns 14.08 ns 0.75 0.24 False
[IndexOfValue - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Byte).IndexOfValue(Size%3a%20512).html>) 11.44 ns 10.01 ns 0.88 0.21 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.Memory.Span&lt;Byte&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Memory.Span<Byte>.Fill(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 14.076880594055682 < 17.761868777176534. IsChangePoint: Marked as a change because one of 12/1/2022 11:48:13 PM, 12/12/2022 3:40:04 AM, 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 6.768810505452856 (T) = (0 -14.419513222734297) / Math.Sqrt((5.975512382557881 / (299)) + (1.479501264478522 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.12176389890652153 = (16.41872066609512 - 14.419513222734297) / 16.41872066609512 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Byte>.IndexOfValue(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 10.01388885517653 < 10.681904280147418. IsChangePoint: Marked as a change because one of 1/3/2023 6:29:42 AM, 1/21/2023 8:50:04 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 10.463779971064985 (T) = (0 -10.166169161388012) / Math.Sqrt((0.2839921243451935 / (299)) + (0.056919154474330526 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.05768306061087029 = (10.788481811627387 - 10.166169161388012) / 10.788481811627387 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.Concurrent.Count<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.Concurrent.Count(Int32).Dictionary(Size%3a%20512).html>) 15.10 μs 216.43 ns 0.01 0.05 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.Concurrent.Count&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.Concurrent.Count<Int32>.Dictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 216.42916266907466 < 14.346284083655151. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 597.6043524492248 (T) = (0 -218.84468421520805) / Math.Sqrt((178397.34613276657 / (299)) + (33.56594536824477 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.9852478750047131 = (14834.790532558942 - 218.84468421520805) / 14834.790532558942 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.IndexerSetReverse<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IndexerSetReverse(String).IList(Size%3a%20512).html>) 3.24 μs 2.95 μs 0.91 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.IndexerSetReverse&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IndexerSetReverse<String>.IList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 2.950796435599569 < 3.0767338720803976. IsChangePoint: Marked as a change because one of 12/14/2022 12:26:48 AM, 1/11/2023 2:37:52 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 13.506421859199856 (T) = (0 -2733.8013590400806) / Math.Sqrt((60676.25769747861 / (299)) + (6072.666437263829 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.09757417951955309 = (3029.3917760294344 - 2733.8013590400806) / 3029.3917760294344 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.TryGetValueTrue<Int32, Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.TryGetValueTrue(Int32%2c%20Int32).ConcurrentDictionary(Size%3a%20512).html>) 4.72 μs 3.84 μs 0.81 0.16 False
[ImmutableSortedDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.TryGetValueTrue(Int32%2c%20Int32).ImmutableSortedDictionary(Size%3a%20512).html>) 42.63 μs 38.44 μs 0.90 0.01 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.TryGetValueTrue&lt;Int32, Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.TryGetValueTrue<Int32, Int32>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 3.842641011644833 < 4.4971381864056434. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 36.24958656959164 (T) = (0 -3864.9260274647645) / Math.Sqrt((193768.53355401038 / (299)) + (238.5146712377506 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.194037413348682 = (4795.416178712573 - 3864.9260274647645) / 4795.416178712573 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.TryGetValueTrue<Int32, Int32>.ImmutableSortedDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 38.44221674876847 < 40.43970876887797. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/13/2023 4:37:08 PM, 2/9/2023 4:10:34 PM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 85.25092576635765 (T) = (0 -38739.74425154909) / Math.Sqrt((449418.3697715531 / (299)) + (19630.796524044767 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.09800574080471386 = (42948.992032511094 - 38739.74425154909) / 42948.992032511094 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.CtorFromCollection<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - 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).ConcurrentDictionary(Size%3a%20512).html>) 95.01 μs 48.03 μs 0.51 0.49 False
[ImmutableHashSet - 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).ImmutableHashSet(Size%3a%20512).html>) 190.45 μs 175.30 μs 0.92 0.01 False
[ImmutableDictionary - 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).ImmutableDictionary(Size%3a%20512).html>) 219.98 μs 201.64 μs 0.92 0.01 False

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.Collections.CtorFromCollection&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.CtorFromCollection<String>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 48.0292824074074 < 87.54264026913803. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 47.08627946501801 (T) = (0 -48928.48868303539) / Math.Sqrt((204243061.27750915 / (299)) + (292481.2052635418 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.4453919922949237 = (88221.74942171783 - 48928.48868303539) / 88221.74942171783 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.CtorFromCollection<String>.ImmutableHashSet(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 175.29797222222228 < 180.3957285376261. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 32.721839358557915 (T) = (0 -175047.05993575335) / Math.Sqrt((5471827.174841231 / (299)) + (3410943.009545933 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.07220826401035214 = (188670.63926694266 - 175047.05993575335) / 188670.63926694266 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.CtorFromCollection<String>.ImmutableDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 201.6380128205128 < 210.1292992208056. IsChangePoint: Marked as a change because one of 2/5/2023 11:24:06 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 54.44643924554416 (T) = (0 -201140.01622470526) / Math.Sqrt((7893346.5878030965 / (299)) + (1866002.5728018607 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.0827984576814101 = (219297.51199092434 - 201140.01622470526) / 219297.51199092434 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.CreateAddAndClear<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ImmutableList - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CreateAddAndClear(String).ImmutableList(Size%3a%20512).html>) 116.05 μs 96.53 μs 0.83 0.09 False
[ImmutableDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CreateAddAndClear(String).ImmutableDictionary(Size%3a%20512).html>) 444.83 μs 409.86 μs 0.92 0.00 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.CreateAddAndClear&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.CreateAddAndClear<String>.ImmutableList(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 96.52862620508324 < 110.1643476483943. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 58.07831003721727 (T) = (0 -96496.74820250086) / Math.Sqrt((6225468.513773834 / (299)) + (2033903.0420509253 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.16844297211172507 = (116043.45218217051 - 96496.74820250086) / 116043.45218217051 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.CreateAddAndClear<String>.ImmutableDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 409.8601602564103 < 420.13843460648144. IsChangePoint: Marked as a change because one of 2/6/2023 2:52:08 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 26.064998975941972 (T) = (0 -417018.7618646752) / Math.Sqrt((15015737.957748128 / (299)) + (37991735.107601345 / (39))) is greater than 1.9670493839589689 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (39) - 2, .975) and 0.059496356566358585 = (443399.41134326777 - 417018.7618646752) / 443399.41134326777 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.Sort<BigStruct>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Array_ComparerClass - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(BigStruct).Array_ComparerClass(Size%3a%20512).html>) 38.48 μs 36.16 μs 0.94 0.01 False
[LinqQuery - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(BigStruct).LinqQuery(Size%3a%20512).html>) 55.82 μs 52.67 μs 0.94 0.00 False
[LinqOrderByExtension - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(BigStruct).LinqOrderByExtension(Size%3a%20512).html>) 56.79 μs 52.34 μs 0.92 0.00 False

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.Collections.Sort&lt;BigStruct&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.Sort<BigStruct>.Array_ComparerClass(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 36.155671999999996 < 36.48108046666667. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 1/20/2023 8:02:54 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 34.010128756148745 (T) = (0 -35609.45734965035) / Math.Sqrt((798223.5969031721 / (299)) + (87804.88784604536 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.0723115182142537 = (38385.14549744567 - 35609.45734965035) / 38385.14549744567 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.Sort<BigStruct>.LinqQuery(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 52.67318000000001 < 53.635871399999985. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 58.55072185697179 (T) = (0 -52700.061177489166) / Math.Sqrt((252366.93794056127 / (299)) + (76669.85463637649 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.06812026054988085 = (56552.42725696157 - 52700.061177489166) / 56552.42725696157 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.Sort<BigStruct>.LinqOrderByExtension(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 52.343890769230775 < 53.91706443333333. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 44.33168944887863 (T) = (0 -52786.7540992341) / Math.Sqrt((233058.79530260837 / (299)) + (141259.67612382481 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.06652272563662918 = (56548.51547964522 - 52786.7540992341) / 56548.51547964522 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

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

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.TryGetValueFalse(String%2c%20String).ConcurrentDictionary(Size%3a%20512).html>) 19.64 μs 10.23 μs 0.52 0.06 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.TryGetValueFalse&lt;String, String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.TryGetValueFalse<String, String>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 10.233110670194003 < 18.619246038251845. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 192.2041438117458 (T) = (0 -10355.357496002403) / Math.Sqrt((642526.9286958901 / (299)) + (9919.450861811658 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.48622707383416336 = (20155.51417487476 - 10355.357496002403) / 20155.51417487476 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.Sort<IntClass>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Array - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(IntClass).Array(Size%3a%20512).html>) 44.40 μs 40.08 μs 0.90 0.12 False
[List - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(IntClass).List(Size%3a%20512).html>) 44.51 μs 41.13 μs 0.92 0.13 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.Sort&lt;IntClass&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.Sort<IntClass>.Array(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 40.084591999999994 < 42.35782095128205. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 36.15741197154954 (T) = (0 -40356.29643789544) / Math.Sqrt((1067929.034772033 / (299)) + (290385.67137494416 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.10396576338879394 = (45038.788462506316 - 40356.29643789544) / 45038.788462506316 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.Sort<IntClass>.List(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 41.12928 < 42.27716260714286. IsChangePoint: Marked as a change because one of 1/3/2023 9:28:36 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 28.100765857162855 (T) = (0 -41195.38741924742) / Math.Sqrt((1219917.411669519 / (299)) + (234354.91206936006 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.07646471857160804 = (44606.18695100884 - 41195.38741924742) / 44606.18695100884 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

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

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.TryGetValueFalse(Int32%2c%20Int32).ConcurrentDictionary(Size%3a%20512).html>) 4.60 μs 3.31 μs 0.72 0.18 False
[ImmutableSortedDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.TryGetValueFalse(Int32%2c%20Int32).ImmutableSortedDictionary(Size%3a%20512).html>) 49.07 μs 44.57 μs 0.91 0.00 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.TryGetValueFalse&lt;Int32, Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.TryGetValueFalse<Int32, Int32>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 3.305021439617601 < 4.384307185259905. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 113.5604628931024 (T) = (0 -3348.7920672786017) / Math.Sqrt((33399.66585775149 / (299)) + (533.5459228541054 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.2833607992734104 = (4672.912204472365 - 3348.7920672786017) / 4672.912204472365 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.TryGetValueFalse<Int32, Int32>.ImmutableSortedDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 44.56963423295455 < 46.55050948418723. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/13/2023 4:37:08 PM, 2/9/2023 4:10:34 PM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 54.96816737844161 (T) = (0 -44465.4830647666) / Math.Sqrt((657224.8823378352 / (299)) + (153021.44917288987 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.1074563480757148 = (49818.83291523161 - 44465.4830647666) / 49818.83291523161 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.Sort<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Array_ComparerClass - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Sort(Int32).Array_ComparerClass(Size%3a%20512).html>) 32.88 μs 31.02 μs 0.94 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.Sort&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.Sort<Int32>.Array_ComparerClass(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 31.01823733333334 < 31.192837066666662. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 18.325569133602972 (T) = (0 -30905.564496836498) / Math.Sqrt((209628.09978215853 / (299)) + (284784.89242420346 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.06477918682996299 = (33046.27534119839 - 30905.564496836498) / 33046.27534119839 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

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

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.TryGetValueTrue(String%2c%20String).ConcurrentDictionary(Size%3a%20512).html>) 22.81 μs 13.72 μs 0.60 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.TryGetValueTrue&lt;String, String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.TryGetValueTrue<String, String>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 13.722251331453633 < 21.781098163427654. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 183.17725480116866 (T) = (0 -13616.156459065427) / Math.Sqrt((637484.6663830036 / (299)) + (19632.187226009806 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.4252349668655408 = (23689.952718261648 - 13616.156459065427) / 23689.952718261648 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Singleton - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable.Singleton.html>) 44.97 ns 37.93 ns 0.84 0.35 False 358.81002838538234 325.73278179610446 0.9078140409337974) 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.DependencyInjection.GetServiceIEnumerable*'
### Payloads [Baseline]() [Compare]() ### Histogram #### Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable.Singleton ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 37.933540291671086 < 41.88138350998014. IsChangePoint: Marked as a change because one of 1/6/2023 5:32:27 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 17.828443780476324 (T) = (0 -39.13716320160626) / Math.Sqrt((13.011183712204938 / (299)) + (1.088821255080513 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.12197974120888075 = (44.57432822278077 - 39.13716320160626) / 44.57432822278077 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__() push ebp mov ebp,esp push eax mov [ebp-4],ecx mov ecx,[ebp-4] cmp dword ptr [ecx+24],0B jne short M00_L00 mov ecx,[ebp-4] call dword ptr ds:[0AD8F4E0] mov esp,ebp pop ebp ret M00_L00: xor eax,eax mov esp,ebp pop ebp ret ; Total bytes of code 35 ``` ### Compare Jit Disasm ```assembly ; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__() push ebp mov ebp,esp push eax mov [ebp-4],ecx mov ecx,[ebp-4] cmp dword ptr [ecx+24],0B jne short M00_L00 mov ecx,[ebp-4] call dword ptr ds:[0AC4F4E0] mov esp,ebp pop ebp ret M00_L00: xor eax,eax mov esp,ebp pop ebp ret ; Total bytes of code 35 ``` ### 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 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in IfStatements.IfStatements

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Single - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/IfStatements.IfStatements.Single.html>) 67.98 μs 28.16 μs 0.41 0.02 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 'IfStatements.IfStatements*'
### Payloads [Baseline]() [Compare]() ### Histogram #### IfStatements.IfStatements.Single ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 28.162488738738737 < 64.64555279503105. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 69.61251158265149 (T) = (0 -33518.895811457194) / Math.Sqrt((5951839.621220551 / (299)) + (4801541.317961188 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.5033559155142442 = (67490.77832299953 - 33518.895811457194) / 67490.77832299953 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; IfStatements.IfStatements.Single() push ebp mov ebp,esp push esi xor esi,esi M00_L00: mov ecx,ds:[73B4110] cmp esi,[ecx+4] jae short M00_L01 mov ecx,[ecx+esi*4+8] call dword ptr ds:[0AD3F498]; IfStatements.IfStatements.SingleInner(Int32) inc esi cmp esi,2710 jl short M00_L00 pop esi pop ebp ret M00_L01: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 45 ``` ```assembly ; IfStatements.IfStatements.SingleInner(Int32) push ebp mov ebp,esp test cl,1 jne short M01_L00 mov ecx,5 M01_L00: push 0 push 0 xor edx,edx call dword ptr ds:[0AD3F468]; IfStatements.IfStatements.Consume(Int32, Int32, Int32, Int32) pop ebp ret ; Total bytes of code 27 ``` ### Compare Jit Disasm ```assembly ; IfStatements.IfStatements.Single() push ebp mov ebp,esp push esi xor esi,esi M00_L00: mov ecx,ds:[7304110] cmp esi,[ecx+4] jae short M00_L01 mov ecx,[ecx+esi*4+8] call dword ptr ds:[0ABCF498]; IfStatements.IfStatements.SingleInner(Int32) inc esi cmp esi,2710 jl short M00_L00 pop esi pop ebp ret M00_L01: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 45 ``` ```assembly ; IfStatements.IfStatements.SingleInner(Int32) push ebp mov ebp,esp mov edx,5 test cl,1 cmove ecx,edx push 0 push 0 xor edx,edx call dword ptr ds:[0ABCF468]; IfStatements.IfStatements.Consume(Int32, Int32, Int32, Int32) pop ebp ret ; Total bytes of code 28 ``` ### 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 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.IndexerSet<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IndexerSet(String).ConcurrentDictionary(Size%3a%20512).html>) 40.34 μs 31.58 μs 0.78 0.00 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.IndexerSet&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IndexerSet<String>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 31.58157612340711 < 38.76485196111849. IsChangePoint: Marked as a change because one of 1/11/2023 8:19:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 86.04644821937114 (T) = (0 -32224.021384566695) / Math.Sqrt((505207.3801705156 / (299)) + (176342.0801092953 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.20827226754792275 = (40700.88751945694 - 32224.021384566695) / 40700.88751945694 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.CreateAddAndRemove<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Queue - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CreateAddAndRemove(Int32).Queue(Size%3a%20512).html>) 3.73 μs 3.46 μs 0.93 0.01 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.CreateAddAndRemove&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.CreateAddAndRemove<Int32>.Queue(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 3.4614000110913925 < 3.5449705084768937. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 30.471785944068888 (T) = (0 -3499.426326284032) / Math.Sqrt((9862.024155143927 / (299)) + (252.88464731433652 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.05488562451573879 = (3702.6485016599 - 3499.426326284032) / 3702.6485016599 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in Microsoft.Extensions.Logging.FormattingOverhead

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[TwoArguments - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/Microsoft.Extensions.Logging.FormattingOverhead.TwoArguments.html>) 242.25 ns 211.46 ns 0.87 0.06 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.Logging.FormattingOverhead*'
### Payloads [Baseline]() [Compare]() ### Histogram #### Microsoft.Extensions.Logging.FormattingOverhead.TwoArguments ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 211.4588910855746 < 228.73790278828022. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 1/17/2023 6:49:05 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 22.932337466998053 (T) = (0 -217.18456717728986) / Math.Sqrt((36.23367122307648 / (299)) + (14.145490047925954 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.08450232601291514 = (237.23115126161832 - 217.18456717728986) / 237.23115126161832 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; Microsoft.Extensions.Logging.FormattingOverhead.TwoArguments() push ebp mov ebp,esp push edi push esi push ebx mov esi,[ecx+4] mov edi,ds:[6BE4480] mov ecx,offset MT_System.Object[] mov edx,2 call CORINFO_HELP_NEWARR_1_OBJ mov ebx,eax mov ecx,offset MT_System.Int32 call CORINFO_HELP_NEWSFAST mov dword ptr [eax+4],1 lea edx,[ebx+8] call CORINFO_HELP_ASSIGN_REF_EAX mov dword ptr [ebx+0C],7E07EF0 push 0 push 0 push edi push 7E07F0C push ebx mov ecx,esi mov edx,4 call dword ptr ds:[0B051690]; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 93 ``` ```assembly ; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) push ebp mov ebp,esp push edi push esi sub esp,0C xor eax,eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,ecx mov edi,edx test esi,esi je short M01_L00 push dword ptr [ebp+8] lea ecx,[ebp-14] mov edx,[ebp+0C] call dword ptr ds:[0B055B58]; Microsoft.Extensions.Logging.FormattedLogValues..ctor(System.String, System.Object[]) push offset MD_Microsoft.Extensions.Logging.ILogger.Log[[Microsoft.Extensions.Logging.FormattedLogValues, Microsoft.Extensions.Logging.Abstractions]](Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, Microsoft.Extensions.Logging.FormattedLogValues, System.Exception, System.Func`3) mov ecx,esi mov edx,offset MT_Microsoft.Extensions.Logging.ILogger call CORINFO_HELP_VIRTUAL_FUNC_PTR push dword ptr [ebp+18] push dword ptr [ebp+14] push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-14] push dword ptr [ebp+10] push dword ptr ds:[6BE52CC] mov ecx,esi mov edx,edi call eax lea esp,[ebp-8] pop esi pop edi pop ebp ret 14 M01_L00: mov ecx,191 mov edx,0AED633C call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B0532D0] int 3 ; Total bytes of code 122 ``` ### Compare Jit Disasm ```assembly ; Microsoft.Extensions.Logging.FormattingOverhead.TwoArguments() push ebp mov ebp,esp push edi push esi push ebx mov esi,[ecx+4] mov edi,ds:[7464480] mov ecx,offset MT_System.Object[] mov edx,2 call CORINFO_HELP_NEWARR_1_OBJ mov ebx,eax mov ecx,offset MT_System.Int32 call CORINFO_HELP_NEWSFAST mov dword ptr [eax+4],1 lea edx,[ebx+8] call CORINFO_HELP_ASSIGN_REF_EAX mov dword ptr [ebx+0C],86F8DEC push 0 push 0 push edi push 86F8E08 push ebx mov ecx,esi mov edx,4 call dword ptr ds:[0B981690]; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 93 ``` ```assembly ; Microsoft.Extensions.Logging.LoggerExtensions.Log(Microsoft.Extensions.Logging.ILogger, Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, System.Exception, System.String, System.Object[]) push ebp mov ebp,esp push edi push esi sub esp,0C xor eax,eax mov [ebp-14],eax mov [ebp-10],eax mov [ebp-0C],eax mov esi,ecx mov edi,edx test esi,esi je short M01_L00 push dword ptr [ebp+8] lea ecx,[ebp-14] mov edx,[ebp+0C] call dword ptr ds:[0B985B58]; Microsoft.Extensions.Logging.FormattedLogValues..ctor(System.String, System.Object[]) push offset MD_Microsoft.Extensions.Logging.ILogger.Log[[Microsoft.Extensions.Logging.FormattedLogValues, Microsoft.Extensions.Logging.Abstractions]](Microsoft.Extensions.Logging.LogLevel, Microsoft.Extensions.Logging.EventId, Microsoft.Extensions.Logging.FormattedLogValues, System.Exception, System.Func`3) mov ecx,esi mov edx,offset MT_Microsoft.Extensions.Logging.ILogger call CORINFO_HELP_VIRTUAL_FUNC_PTR push dword ptr [ebp+18] push dword ptr [ebp+14] push dword ptr [ebp-0C] push dword ptr [ebp-10] push dword ptr [ebp-14] push dword ptr [ebp+10] push dword ptr ds:[74652D4] mov ecx,esi mov edx,edi call eax lea esp,[ebp-8] pop esi pop edi pop ebp ret 14 M01_L00: mov ecx,191 mov edx,0B7F6BC4 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B9832D0] int 3 ; Total bytes of code 122 ``` ### 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 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.AddGivenSize<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ICollection - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.AddGivenSize(String).ICollection(Size%3a%20512).html>) 4.21 μs 3.63 μs 0.86 0.01 False
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.AddGivenSize(String).ConcurrentDictionary(Size%3a%20512).html>) 57.46 μs 48.88 μs 0.85 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.AddGivenSize&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.AddGivenSize<String>.ICollection(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 3.6277890503875967 < 3.999205150530325. IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 22.15099716820529 (T) = (0 -3626.777756716871) / Math.Sqrt((63036.79707871358 / (299)) + (113.76786309297127 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.08236902680799761 = (3952.3270929936393 - 3626.777756716871) / 3952.3270929936393 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.AddGivenSize<String>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 48.8784981827622 < 54.966813038548715. IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 20.62588009795939 (T) = (0 -51784.87677097428) / Math.Sqrt((970715.4167182314 / (299)) + (1873288.474997064 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.10588169252603662 = (57917.25360962062 - 51784.87677097428) / 57917.25360962062 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.Concurrent.IsEmpty<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Dictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Concurrent.IsEmpty(String).Dictionary(Size%3a%200).html>) 253.31 ns 223.69 ns 0.88 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.Concurrent.IsEmpty&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.Concurrent.IsEmpty<String>.Dictionary(Size: 0) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 223.69433300989152 < 241.16427138953387. IsChangePoint: Marked as a change because one of 12/23/2022 9:40:21 PM, 1/21/2023 6:49:37 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 66.87018685423898 (T) = (0 -223.93432734278605) / Math.Sqrt((46.06541347407183 / (299)) + (0.3866052614379183 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.11009376023000199 = (251.63811347211512 - 223.93432734278605) / 251.63811347211512 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.IterateForEach<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - 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).ConcurrentDictionary(Size%3a%20512).html>) 16.36 μs 13.83 μs 0.84 0.38 False
[ConcurrentBag - 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).ConcurrentBag(Size%3a%20512).html>) 6.42 μs 5.71 μs 0.89 0.02 False
[HashSet - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).HashSet(Size%3a%20512).html>) 2.57 μs 2.23 μs 0.87 0.03 False
[Queue - 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).Queue(Size%3a%20512).html>) 4.14 μs 3.45 μs 0.83 0.17 False

graph 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.Collections.IterateForEach&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<String>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 13.826965311986863 < 17.48682641756203. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 38.23948383005821 (T) = (0 -14106.215764211664) / Math.Sqrt((4423676.454444624 / (299)) + (47374.0947422535 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.2608526450421511 = (19084.44327047087 - 14106.215764211664) / 19084.44327047087 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.ConcurrentBag(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 5.711868294318458 < 6.090687379027149. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 1/18/2023 8:37:25 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 32.36631510312193 (T) = (0 -5686.86479021759) / Math.Sqrt((39712.93401314594 / (299)) + (1811.5499339389917 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.07705147894994592 = (6161.627285287318 - 5686.86479021759) / 6161.627285287318 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.HashSet(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 2.2286867914235566 < 2.4372435652467352. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/21/2022 9:23:17 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 32.21220312415274 (T) = (0 -2201.547486206813) / Math.Sqrt((13140.89860639918 / (299)) + (1184.3796880856562 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.12639844816382392 = (2520.081931607721 - 2201.547486206813) / 2520.081931607721 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.Queue(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 3.4491159075834616 < 3.91028170447049. IsChangePoint: Marked as a change because one of 12/23/2022 9:40:21 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 22.775556628993904 (T) = (0 -3656.6667782062736) / Math.Sqrt((73362.28398158267 / (299)) + (8459.87352474158 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.13518866495391227 = (4228.282667006673 - 3656.6667782062736) / 4228.282667006673 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.TryAddGiventSize<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.TryAddGiventSize(String).ConcurrentDictionary(Count%3a%20512).html>) 58.05 μs 48.63 μs 0.84 0.01 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.TryAddGiventSize&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.TryAddGiventSize<String>.ConcurrentDictionary(Count: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 48.62651105967079 < 54.778629159459356. IsChangePoint: Marked as a change because one of 1/11/2023 4:46:06 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 20.23855201506029 (T) = (0 -51705.059977543104) / Math.Sqrt((884336.3261264769 / (299)) + (1918209.089127282 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.10516467692496771 = (57781.64835945755 - 51705.059977543104) / 57781.64835945755 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Tests.Perf_Random

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[NextBytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Random.NextBytes.html>) 8.69 μs 3.83 μs 0.44 0.05 False Trace Trace
[Next_long - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Random.Next_long.html>) 57.74 ns 39.08 ns 0.68 0.08 False Trace Trace
[Next_int_int - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Random.Next_int_int.html>) 17.39 ns 11.89 ns 0.68 0.19 False 116.49852168110851 119.82917894949179 1.0285896955628355) Trace Trace
[Next_int - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Random.Next_int.html>) 12.78 ns 7.07 ns 0.55 0.13 False 66.1318878540939 73.74618148666924 1.1151380049723467) Trace Trace
[Next - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Random.Next.html>) 12.17 ns 5.95 ns 0.49 0.11 False 51.8445828685329 55.536022230228326 1.0712020264693063) Trace Trace
[Next_long_long - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Random.Next_long_long.html>) 61.57 ns 44.71 ns 0.73 0.08 False Trace Trace
[NextBytes_span - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Random.NextBytes_span.html>) 8.61 μs 3.77 μs 0.44 0.04 False Trace Trace
[NextSingle - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Random.NextSingle.html>) 15.33 ns 12.03 ns 0.79 0.21 False 66.99888832317903 73.31061901118977 1.0942064987342055) Trace Trace

graph graph graph graph graph 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.Tests.Perf_Random*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Random.NextBytes ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 3.8282190635451507 < 8.172120634131307. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 247.6695165327445 (T) = (0 -3778.87330523305) / Math.Sqrt((112969.17390796832 / (299)) + (600.3199373362487 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.5688091429906214 = (8763.806661955397 - 3778.87330523305) / 8763.806661955397 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Random.NextBytes() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax+10] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Random.NextBytes() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax+10] pop ebp ret ; Total bytes of code 21 ``` #### System.Tests.Perf_Random.Next_long ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 39.08304734805397 < 54.85399620968658. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 79.47188321645169 (T) = (0 -39.200394033451204) / Math.Sqrt((14.081513721855297 / (299)) + (0.16590167276879716 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.3215164654643782 = (57.77648540915786 - 39.200394033451204) / 57.77648540915786 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Random.Next_long() push ebp mov ebp,esp sub esp,8 mov ecx,[ecx+8] push 0 push 16 mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax] mov esp,ebp pop ebp ret ; Total bytes of code 24 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Random.Next_long() push ebp mov ebp,esp sub esp,8 mov ecx,[ecx+8] push 0 push 16 mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax] mov esp,ebp pop ebp ret ; Total bytes of code 24 ``` #### System.Tests.Perf_Random.Next_int_int ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 11.892472883107128 < 16.702305807252444. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 47.74833277285729 (T) = (0 -12.121135580815304) / Math.Sqrt((0.41451689007075787 / (299)) + (0.31277480580038647 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.32978881757940276 = (18.08554661388591 - 12.121135580815304) / 18.08554661388591 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Random.Next_int_int() push ebp mov ebp,esp mov ecx,[ecx+8] push 2710 mov edx,64 mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+18] pop ebp ret ; Total bytes of code 26 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Random.Next_int_int() push ebp mov ebp,esp mov ecx,[ecx+8] push 2710 mov edx,64 mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+18] pop ebp ret ; Total bytes of code 26 ``` #### System.Tests.Perf_Random.Next_int ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 7.070996852136127 < 12.255983640675016. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 143.15595251772635 (T) = (0 -7.106214471431439) / Math.Sqrt((0.2290148153173085 / (299)) + (0.02049773067930295 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.4535617270131429 = (13.00460605108888 - 7.106214471431439) / 13.00460605108888 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Random.Next_int() push ebp mov ebp,esp mov ecx,[ecx+8] mov edx,2710 mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Random.Next_int() push ebp mov ebp,esp mov ecx,[ecx+8] mov edx,2710 mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` #### System.Tests.Perf_Random.Next ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 5.950911312765807 < 11.568672988365545. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 198.5980437014013 (T) = (0 -5.900639392248701) / Math.Sqrt((0.1131288329384257 / (299)) + (0.01424485655623977 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.5187676022306361 = (12.261517345049263 - 5.900639392248701) / 12.261517345049263 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Random.Next() push ebp mov ebp,esp mov ecx,[ecx+8] mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+10] pop ebp ret ; Total bytes of code 16 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Random.Next() push ebp mov ebp,esp mov ecx,[ecx+8] mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+10] pop ebp ret ; Total bytes of code 16 ``` #### System.Tests.Perf_Random.Next_long_long ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 44.706872552019945 < 58.60641049120985. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 60.87140457305336 (T) = (0 -44.1590359256477) / Math.Sqrt((15.681620286943692 / (299)) + (0.7376826568638911 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.28784643761430423 = (62.007744197355535 - 44.1590359256477) / 62.007744197355535 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Random.Next_long_long() push ebp mov ebp,esp sub esp,8 mov ecx,[ecx+8] push 0 push 64 push 0 push 2710 mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax+4] mov esp,ebp pop ebp ret ; Total bytes of code 32 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Random.Next_long_long() push ebp mov ebp,esp sub esp,8 mov ecx,[ecx+8] push 0 push 64 push 0 push 2710 mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax+4] mov esp,ebp pop ebp ret ; Total bytes of code 32 ``` #### System.Tests.Perf_Random.NextBytes_span ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 3.7667685475444097 < 8.180595298733481. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 123.8854601995509 (T) = (0 -3814.187019016502) / Math.Sqrt((67425.35331841017 / (299)) + (30661.525390580995 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.5665333264124671 = (8799.26243798366 - 3814.187019016502) / 8799.26243798366 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Random.NextBytes_span() push ebp mov ebp,esp push edi push esi mov eax,[ecx+8] mov ecx,[ecx+0C] test ecx,ecx je short M00_L01 lea esi,[ecx+8] mov edi,[ecx+4] M00_L00: push edi push esi mov ecx,eax mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+14] pop esi pop edi pop ebp ret M00_L01: xor esi,esi xor edi,edi jmp short M00_L00 ; Total bytes of code 43 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Random.NextBytes_span() push ebp mov ebp,esp push edi push esi mov eax,[ecx+8] mov ecx,[ecx+0C] test ecx,ecx je short M00_L01 lea esi,[ecx+8] mov edi,[ecx+4] M00_L00: push edi push esi mov ecx,eax mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+14] pop esi pop edi pop ebp ret M00_L01: xor esi,esi xor edi,edi jmp short M00_L00 ; Total bytes of code 43 ``` #### System.Tests.Perf_Random.NextSingle ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 12.033177909848375 < 14.628725366886083. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 48.017616775286214 (T) = (0 -10.16817217926923) / Math.Sqrt((0.8203269389143767 / (299)) + (0.22005616671159117 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.34774670126637053 = (15.589299738324145 - 10.16817217926923) / 15.589299738324145 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Random.NextSingle() push ebp mov ebp,esp push eax vzeroupper mov ecx,[ecx+8] mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax+8] fstp dword ptr [ebp-4] vmovss xmm0,dword ptr [ebp-4] vmovss dword ptr [ebp-4],xmm0 fld dword ptr [ebp-4] mov esp,ebp pop ebp ret ; Total bytes of code 38 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Random.NextSingle() push ebp mov ebp,esp push eax vzeroupper mov ecx,[ecx+8] mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax+8] fstp dword ptr [ebp-4] vmovss xmm0,dword ptr [ebp-4] vmovss dword ptr [ebp-4],xmm0 fld dword ptr [ebp-4] mov esp,ebp pop ebp ret ; Total bytes of code 38 ``` ### 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 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

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

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsKeyFalse(String%2c%20String).ConcurrentDictionary(Size%3a%20512).html>) 20.71 μs 10.43 μs 0.50 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.ContainsKeyFalse&lt;String, String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsKeyFalse<String, String>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 10.426379034040671 < 19.39986369586987. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 197.03561067233053 (T) = (0 -10368.821673878854) / Math.Sqrt((607705.708797069 / (299)) + (20543.83581159429 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.508588230818237 = (21100.067853775075 - 10368.821673878854) / 21100.067853775075 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

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

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsKeyFalse(Int32%2c%20Int32).ConcurrentDictionary(Size%3a%20512).html>) 5.52 μs 3.03 μs 0.55 0.23 False
[ImmutableSortedDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsKeyFalse(Int32%2c%20Int32).ImmutableSortedDictionary(Size%3a%20512).html>) 49.88 μs 43.06 μs 0.86 0.01 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.ContainsKeyFalse&lt;Int32, Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsKeyFalse<Int32, Int32>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 3.030339222329784 < 5.141097428119305. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 143.8066650977939 (T) = (0 -3038.353745261149) / Math.Sqrt((77382.35136156429 / (299)) + (174.65563169408804 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.4359884494251047 = (5387.041705376714 - 3038.353745261149) / 5387.041705376714 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.ContainsKeyFalse<Int32, Int32>.ImmutableSortedDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 43.056508699633696 < 46.90130394653258. IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 1/13/2023 4:37:08 PM, 2/9/2023 4:10:34 PM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 103.03052010122184 (T) = (0 -43225.4163838844) / Math.Sqrt((685146.9287462834 / (299)) + (37908.19260666323 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.13236581778506182 = (49819.86333633892 - 43225.4163838844) / 49819.86333633892 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Globalization.Tests.StringEquality

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Compare_Same - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Globalization.Tests.StringEquality.Compare_Same(Count%3a%201024%2c%20Options%3a%20(en-US%2c%20OrdinalIgnoreCase)).html>) 1.07 μs 771.28 ns 0.72 0.00 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.Globalization.Tests.StringEquality*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Globalization.Tests.StringEquality.Compare_Same(Count: 1024, Options: (en-US, OrdinalIgnoreCase)) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 771.2791687324408 < 1.0186916305715452. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 636.8501428421 (T) = (0 -770.743147215835) / Math.Sqrt((40.80699711557002 / (299)) + (1.9664211527260556 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.2819643671245786 = (1073.4051513980482 - 770.743147215835) / 1073.4051513980482 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Globalization.Tests.StringEquality.Compare_Same() push ebp mov ebp,esp push esi mov esi,ecx mov ecx,[esi+18] mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax+18] mov ecx,eax mov edx,[esi+4] push dword ptr [esi+8] push dword ptr [esi+1C] cmp [ecx],ecx call dword ptr ds:[8D7D7C8]; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions) pop esi pop ebp ret ; Total bytes of code 39 ``` ```assembly ; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions) push ebp mov ebp,esp push edi push esi mov eax,[ebp+0C] test edx,edx je short M01_L02 test eax,eax je short M01_L05 lea esi,[edx+8] mov edx,[edx+4] lea edi,[eax+8] mov eax,[eax+4] push edx push esi push eax push edi mov edx,[ebp+8] call dword ptr ds:[8D7D858]; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1, System.ReadOnlySpan`1, System.Globalization.CompareOptions) pop esi pop edi pop ebp ret 8 M01_L00: mov edx,[ebp+8] test edx,0DFFFFFE0 je short M01_L01 cmp edx,40000000 je short M01_L01 cmp edx,10000000 je short M01_L01 mov ecx,edx call dword ptr ds:[8D7D888] int 3 M01_L01: pop esi pop edi pop ebp ret 8 M01_L02: test eax,eax je short M01_L03 mov eax,0FFFFFFFF jmp short M01_L04 M01_L03: xor eax,eax M01_L04: jmp short M01_L00 M01_L05: mov eax,1 jmp short M01_L00 ; Total bytes of code 111 ``` ### Compare Jit Disasm ```assembly ; System.Globalization.Tests.StringEquality.Compare_Same() push ebp mov ebp,esp push esi mov esi,ecx mov ecx,[esi+18] mov eax,[ecx] mov eax,[eax+2C] call dword ptr [eax+18] mov ecx,eax mov edx,[esi+4] push dword ptr [esi+8] push dword ptr [esi+1C] cmp [ecx],ecx call dword ptr ds:[84BD7C8]; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions) pop esi pop ebp ret ; Total bytes of code 39 ``` ```assembly ; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions) push ebp mov ebp,esp push edi push esi mov eax,[ebp+0C] test edx,edx je short M01_L02 test eax,eax je short M01_L03 lea esi,[edx+8] mov edx,[edx+4] lea edi,[eax+8] mov eax,[eax+4] push edx push esi push eax push edi mov edx,[ebp+8] call dword ptr ds:[84BD858]; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1, System.ReadOnlySpan`1, System.Globalization.CompareOptions) pop esi pop edi pop ebp ret 8 M01_L00: mov edx,[ebp+8] test edx,0DFFFFFE0 je short M01_L01 cmp edx,40000000 je short M01_L01 cmp edx,10000000 je short M01_L01 mov ecx,edx call dword ptr ds:[84BD888] int 3 M01_L01: pop esi pop edi pop ebp ret 8 M01_L02: xor ecx,ecx mov edx,0FFFFFFFF test eax,eax cmovne ecx,edx mov eax,ecx jmp short M01_L00 M01_L03: mov eax,1 jmp short M01_L00 ; Total bytes of code 112 ``` ### 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 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.CtorFromCollection<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CtorFromCollection(Int32).ConcurrentDictionary(Size%3a%20512).html>) 69.94 μs 30.98 μs 0.44 0.00 False
[ImmutableHashSet - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CtorFromCollection(Int32).ImmutableHashSet(Size%3a%20512).html>) 143.52 μs 132.18 μs 0.92 0.02 False
[ImmutableDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.CtorFromCollection(Int32).ImmutableDictionary(Size%3a%20512).html>) 173.15 μs 151.59 μs 0.88 0.01 False

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.Collections.CtorFromCollection&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.CtorFromCollection<Int32>.ConcurrentDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 30.98071864686469 < 66.41446796194089. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 594.4450490626342 (T) = (0 -30660.007922485176) / Math.Sqrt((939741.1101497746 / (299)) + (21496.15238806754 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.5544639219949704 = (68815.99366715946 - 30660.007922485176) / 68815.99366715946 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.CtorFromCollection<Int32>.ImmutableHashSet(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 132.18003151260507 < 136.33993272171256. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 25.736650275857766 (T) = (0 -132989.3849212673) / Math.Sqrt((6482810.785518469 / (299)) + (5455278.40541959 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.09131606208492221 = (146353.84138780276 - 132989.3849212673) / 146353.84138780276 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.CtorFromCollection<Int32>.ImmutableDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 151.5878926282051 < 163.73617559523808. IsChangePoint: Marked as a change because one of 2/6/2023 2:52:08 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 64.70987571692869 (T) = (0 -151354.03555933925) / Math.Sqrt((16836833.564592324 / (299)) + (1681256.8758061738 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.13477039984927214 = (174929.3315126673 - 151354.03555933925) / 174929.3315126673 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Linq.Tests.Perf_Enumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Average - 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.Average(input%3a%20IEnumerable).html>) 565.03 ns 475.62 ns 0.84 0.07 False Trace Trace
[WhereSingle_LastElementMatches - 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.WhereSingle_LastElementMatches(input%3a%20IEnumerable).html>) 752.30 ns 688.76 ns 0.92 0.02 False Trace Trace
[SequenceEqual - 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.SequenceEqual(input1%3a%20IEnumerable%2c%20input2%3a%20IEnumerable).html>) 1.17 μs 1.08 μs 0.92 0.02 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.Average(input: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 475.62066869142296 < 538.4969886240303. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/21/2022 9:23:17 AM, 1/13/2023 4:37:08 PM, 1/20/2023 8:02:54 AM, 1/27/2023 7:12:54 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 19.81154363146423 (T) = (0 -475.8114690651453) / Math.Sqrt((1893.0508866074554 / (299)) + (0.5156480914373978 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.09499135596000648 = (525.7535076583407 - 475.8114690651453) / 525.7535076583407 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Average(System.Linq.Tests.LinqTestData) sub esp,8 vzeroupper mov ecx,[edx+4] call dword ptr ds:[873BB58]; System.Linq.Enumerable.Average(System.Collections.Generic.IEnumerable`1) fstp qword ptr [esp] vmovsd xmm0,qword ptr [esp] vmovsd qword ptr [esp],xmm0 fld qword ptr [esp] add esp,8 ret ; Total bytes of code 35 ``` ```assembly ; System.Linq.Enumerable.Average(System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,58 vzeroupper xor eax,eax mov [ebp-18],eax test ecx,ecx je near ptr M01_L16 cmp dword ptr [ecx],4D66158 jne short M01_L00 lea eax,[ecx+8] mov esi,[ecx+4] jmp short M01_L01 M01_L00: cmp dword ptr [ecx],86E3A90 jne near ptr M01_L08 mov eax,[ecx+4] mov esi,[ecx+8] test eax,eax je near ptr M01_L17 mov edx,[eax+4] cmp [eax+4],esi jb near ptr M01_L19 add eax,8 M01_L01: test esi,esi je near ptr M01_L18 xor edx,edx xor ecx,ecx xor edi,edi cmp esi,8 jl near ptr M01_L07 vxorps ymm0,ymm0,ymm0 M01_L02: cmp edi,esi ja near ptr M01_L19 mov [ebp-54],eax lea edx,[eax+edi*4] mov ecx,esi sub ecx,edi cmp ecx,8 jl near ptr M01_L20 vmovups ymm1,[edx] vmovaps ymm2,ymm1 vpmovsxdq ymm2,xmm2 vpaddq ymm0,ymm0,ymm2 vextractf128 xmm1,ymm1,1 vpmovsxdq ymm1,xmm1 vpaddq ymm0,ymm0,ymm1 add edi,8 lea edx,[esi-8] cmp edi,edx jle near ptr M01_L06 vmovups [ebp-48],ymm0 lea edx,[ebp-48] mov ecx,[edx] mov edx,[edx+4] lea ebx,[ebp-40] mov eax,[ebx] mov ebx,[ebx+4] add ecx,eax adc edx,ebx lea eax,[ebp-38] mov ebx,[eax] mov eax,[eax+4] add ebx,ecx adc eax,edx mov ecx,ebx mov edx,eax lea eax,[ebp-30] mov ebx,[eax] mov eax,[eax+4] add ebx,ecx adc eax,edx mov edx,ebx mov ecx,eax M01_L03: cmp edi,esi jae short M01_L05 nop nop nop nop nop nop nop nop nop nop nop nop nop M01_L04: cmp edi,esi jae near ptr M01_L21 mov eax,[ebp-54] mov ebx,[eax+edi*4] mov eax,ebx sar eax,1F add edx,ebx adc ecx,eax inc edi cmp edi,esi jb short M01_L04 M01_L05: push ecx push edx call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-5C] vxorps xmm1,xmm1,xmm1 vcvtsi2sd xmm1,xmm1,esi vmovsd xmm0,qword ptr [ebp-5C] vdivsd xmm0,xmm0,xmm1 vmovsd qword ptr [ebp-5C],xmm0 fld qword ptr [ebp-5C] vzeroupper lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L06: mov eax,[ebp-54] jmp near ptr M01_L02 M01_L07: mov [ebp-54],eax jmp short M01_L03 M01_L08: call dword ptr ds:[4A702A8] mov ecx,eax mov [ebp-50],ecx call dword ptr ds:[4A702AC] test eax,eax je near ptr M01_L12 mov ecx,[ebp-50] call dword ptr ds:[4A702B0] mov esi,eax sar esi,1F mov edi,eax xor ebx,ebx mov dword ptr [ebp-4C],1 mov ecx,[ebp-50] call dword ptr ds:[4A702B4] test eax,eax je short M01_L10 M01_L09: mov ecx,[ebp-50] call dword ptr ds:[4A702B8] mov ecx,eax sar ecx,1F add edi,eax adc esi,ecx jo short M01_L11 mov eax,[ebp-4C] add eax,1 adc ebx,0 mov [ebp-4C],eax mov ecx,[ebp-50] call dword ptr ds:[4A702B4] test eax,eax jne short M01_L09 M01_L10: push esi push edi call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-5C] push ebx push dword ptr [ebp-4C] call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-64] vmovsd xmm1,qword ptr [ebp-5C] vmovsd xmm0,qword ptr [ebp-64] vdivsd xmm0,xmm1,xmm0 vmovsd qword ptr [ebp-28],xmm0 jmp short M01_L13 M01_L11: call CORINFO_HELP_OVERFLOW M01_L12: call dword ptr ds:[0A7C5E70] int 3 M01_L13: mov ecx,[ebp-50] call dword ptr ds:[4A702BC] jmp short M01_L15 cmp dword ptr [ebp-50],0 je short M01_L14 mov ecx,[ebp-50] call dword ptr ds:[4A702BC] M01_L14: pop eax jmp eax M01_L15: vmovsd xmm0,qword ptr [ebp-28] vmovsd qword ptr [ebp-28],xmm0 fld qword ptr [ebp-28] vzeroupper lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L16: mov ecx,10 call dword ptr ds:[0A7C5E10] int 3 M01_L17: test esi,esi jne short M01_L19 xor eax,eax xor esi,esi jmp near ptr M01_L01 M01_L18: call dword ptr ds:[0A7C5E70] int 3 M01_L19: call dword ptr ds:[8705270] int 3 M01_L20: mov ecx,6 call dword ptr ds:[87055B8] int 3 M01_L21: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 616 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.Average(System.Linq.Tests.LinqTestData) sub esp,8 vzeroupper mov ecx,[edx+4] call dword ptr ds:[868BB58]; System.Linq.Enumerable.Average(System.Collections.Generic.IEnumerable`1) fstp qword ptr [esp] vmovsd xmm0,qword ptr [esp] vmovsd qword ptr [esp],xmm0 fld qword ptr [esp] add esp,8 ret ; Total bytes of code 35 ``` ```assembly ; System.Linq.Enumerable.Average(System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,58 vzeroupper xor eax,eax mov [ebp-18],eax test ecx,ecx je near ptr M01_L16 cmp dword ptr [ecx],7E26158 jne short M01_L00 lea eax,[ecx+8] mov esi,[ecx+4] jmp short M01_L01 M01_L00: cmp dword ptr [ecx],8533A90 jne near ptr M01_L08 mov eax,[ecx+4] mov esi,[ecx+8] test eax,eax je near ptr M01_L17 mov edx,[eax+4] cmp [eax+4],esi jb near ptr M01_L19 add eax,8 M01_L01: test esi,esi je near ptr M01_L18 xor edx,edx xor ecx,ecx xor edi,edi cmp esi,8 jl near ptr M01_L07 vxorps ymm0,ymm0,ymm0 M01_L02: cmp edi,esi ja near ptr M01_L19 mov [ebp-54],eax lea edx,[eax+edi*4] mov ecx,esi sub ecx,edi cmp ecx,8 jl near ptr M01_L20 vmovups ymm1,[edx] vmovaps ymm2,ymm1 vpmovsxdq ymm2,xmm2 vpaddq ymm0,ymm0,ymm2 vextractf128 xmm1,ymm1,1 vpmovsxdq ymm1,xmm1 vpaddq ymm0,ymm0,ymm1 add edi,8 lea edx,[esi-8] cmp edi,edx jle near ptr M01_L06 vmovups [ebp-48],ymm0 lea edx,[ebp-48] mov ecx,[edx] mov edx,[edx+4] lea ebx,[ebp-40] mov eax,[ebx] mov ebx,[ebx+4] add ecx,eax adc edx,ebx lea eax,[ebp-38] mov ebx,[eax] mov eax,[eax+4] add ebx,ecx adc eax,edx mov ecx,ebx mov edx,eax lea eax,[ebp-30] mov ebx,[eax] mov eax,[eax+4] add ebx,ecx adc eax,edx mov edx,ebx mov ecx,eax M01_L03: cmp edi,esi jae short M01_L05 nop nop nop nop nop nop nop nop nop nop nop nop nop M01_L04: cmp edi,esi jae near ptr M01_L21 mov eax,[ebp-54] mov ebx,[eax+edi*4] mov eax,ebx sar eax,1F add edx,ebx adc ecx,eax inc edi cmp edi,esi jb short M01_L04 M01_L05: push ecx push edx call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-5C] vxorps xmm1,xmm1,xmm1 vcvtsi2sd xmm1,xmm1,esi vmovsd xmm0,qword ptr [ebp-5C] vdivsd xmm0,xmm0,xmm1 vmovsd qword ptr [ebp-5C],xmm0 fld qword ptr [ebp-5C] vzeroupper lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L06: mov eax,[ebp-54] jmp near ptr M01_L02 M01_L07: mov [ebp-54],eax jmp short M01_L03 M01_L08: call dword ptr ds:[25D02AC] mov ecx,eax mov [ebp-50],ecx call dword ptr ds:[25D02B0] test eax,eax je near ptr M01_L12 mov ecx,[ebp-50] call dword ptr ds:[25D02B4] mov esi,eax sar esi,1F mov edi,eax xor ebx,ebx mov dword ptr [ebp-4C],1 mov ecx,[ebp-50] call dword ptr ds:[25D02B8] test eax,eax je short M01_L10 M01_L09: mov ecx,[ebp-50] call dword ptr ds:[25D02BC] mov ecx,eax sar ecx,1F add edi,eax adc esi,ecx jo short M01_L11 mov eax,[ebp-4C] add eax,1 adc ebx,0 mov [ebp-4C],eax mov ecx,[ebp-50] call dword ptr ds:[25D02B8] test eax,eax jne short M01_L09 M01_L10: push esi push edi call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-5C] push ebx push dword ptr [ebp-4C] call CORINFO_HELP_LNG2DBL fstp qword ptr [ebp-64] vmovsd xmm1,qword ptr [ebp-5C] vmovsd xmm0,qword ptr [ebp-64] vdivsd xmm0,xmm1,xmm0 vmovsd qword ptr [ebp-28],xmm0 jmp short M01_L13 M01_L11: call CORINFO_HELP_OVERFLOW M01_L12: call dword ptr ds:[0A5A5E70] int 3 M01_L13: mov ecx,[ebp-50] call dword ptr ds:[25D02C0] jmp short M01_L15 cmp dword ptr [ebp-50],0 je short M01_L14 mov ecx,[ebp-50] call dword ptr ds:[25D02C0] M01_L14: pop eax jmp eax M01_L15: vmovsd xmm0,qword ptr [ebp-28] vmovsd qword ptr [ebp-28],xmm0 fld qword ptr [ebp-28] vzeroupper lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L16: mov ecx,10 call dword ptr ds:[0A5A5E10] int 3 M01_L17: test esi,esi jne short M01_L19 xor eax,eax xor esi,esi jmp near ptr M01_L01 M01_L18: call dword ptr ds:[0A5A5E70] int 3 M01_L19: call dword ptr ds:[8555270] int 3 M01_L20: mov ecx,6 call dword ptr ds:[85555B8] int 3 M01_L21: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 616 ``` #### System.Linq.Tests.Perf_Enumerable.WhereSingle_LastElementMatches(input: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 688.7611914981491 < 711.2314791080951. IsChangePoint: Marked as a change because one of 12/1/2022 7:29:59 PM, 1/13/2023 4:37:08 PM, 1/15/2023 4:08:29 PM, 1/22/2023 11:22:03 PM, 1/27/2023 7:12:54 PM, 1/31/2023 6:07:33 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 25.219803439790194 (T) = (0 -691.180193016753) / Math.Sqrt((904.7971969775574 / (299)) + (11.377602852301477 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.06426903543651376 = (738.6526888518487 - 691.180193016753) / 738.6526888518487 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereSingle_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[721490C] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[72148DC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B6AA7B0 mov edx,721490C call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B6AB930]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0B6ABBB8]; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) cmp byte ptr [ebp-8],0 je short M00_L02 pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[84DB630] int 3 M00_L02: call dword ptr ds:[0AC95E70] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[84DB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+8] jmp near ptr M01_L04 M01_L00: mov edx,esi mov ecx,offset MT_System.Int32[] call dword ptr ds:[84DB7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,0AA759F0 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[7211F80] jmp short M01_L04 M01_L02: mov edx,esi mov ecx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[84DB828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L03 mov ecx,offset MT_System.Linq.Enumerable+WhereListIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L03: mov ecx,offset MT_System.Linq.Enumerable+WhereEnumerableIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+10] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx M01_L04: pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0AC95E10] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0AC95E10] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov edi,ecx mov esi,edx test edi,edi je near ptr M02_L09 mov edx,edi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[84DB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[4F4031C] test eax,eax je short M02_L00 cmp eax,1 jne near ptr M02_L10 mov byte ptr [esi],1 mov ecx,ebx xor edx,edx call dword ptr ds:[4F40320] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov byte ptr [esi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,edi call dword ptr ds:[4F40308] mov ecx,eax mov [ebp-28],ecx call dword ptr ds:[4F4030C] test eax,eax jne short M02_L02 mov byte ptr [esi],0 xor ecx,ecx mov [ebp-24],ecx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L04 jmp short M02_L06 M02_L02: mov ecx,[ebp-28] call dword ptr ds:[4F40310] mov edi,eax mov ecx,[ebp-28] call dword ptr ds:[4F40314] test eax,eax jne short M02_L03 mov byte ptr [esi],1 mov [ebp-24],edi mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L05 jmp short M02_L06 M02_L03: mov ecx,[ebp-28] call dword ptr ds:[4F40318] jmp short M02_L10 M02_L04: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L05: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L06: mov ecx,[ebp-28] test ecx,ecx je short M02_L07 call dword ptr ds:[4F40318] mov ecx,[ebp-28] M02_L07: pop eax jmp eax M02_L08: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L09: mov ecx,10 call dword ptr ds:[0AC95E10] int 3 M02_L10: mov byte ptr [esi],0 call dword ptr ds:[0AC95E40] int 3 ; Total bytes of code 287 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.WhereSingle_LastElementMatches(System.Linq.Tests.LinqTestData) push ebp mov ebp,esp push esi push eax mov esi,[edx+4] mov edx,ds:[72E490C] test edx,edx jne short M00_L00 mov ecx,offset MT_System.Func`2[[System.Int32, System.Private.CoreLib],[System.Boolean, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ecx,ds:[72E48DC] test ecx,ecx je short M00_L01 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ECX mov dword ptr [eax+0C],0B79AB40 mov edx,72E490C call CORINFO_HELP_ASSIGN_REF_EAX mov edx,eax M00_L00: mov ecx,esi call dword ptr ds:[0B79BCC0]; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) mov ecx,eax lea edx,[ebp-8] call dword ptr ds:[0B79BF48]; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) cmp byte ptr [ebp-8],0 je short M00_L02 pop ecx pop esi pop ebp ret M00_L01: call dword ptr ds:[863B630] int 3 M00_L02: call dword ptr ds:[0AD85E70] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Linq.Enumerable.Where[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Func`2) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,edx test esi,esi je near ptr M01_L05 test edi,edi je near ptr M01_L06 mov edx,esi mov ecx,offset MT_System.Linq.Enumerable+Iterator`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[863B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax je short M01_L00 mov ecx,eax mov edx,edi mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+8] jmp near ptr M01_L04 M01_L00: mov edx,esi mov ecx,offset MT_System.Int32[] call dword ptr ds:[863B7F8]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L02 cmp dword ptr [ebx+4],0 je short M01_L01 mov ecx,offset MT_System.Linq.Enumerable+WhereArrayIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L01: mov ecx,0AC659F0 mov edx,4 call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS mov eax,ds:[72E1F84] jmp short M01_L04 M01_L02: mov edx,esi mov ecx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[863B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) mov ebx,eax test ebx,ebx je short M01_L03 mov ecx,offset MT_System.Linq.Enumerable+WhereListIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov esi,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [esi+4],eax lea edx,[esi+10] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[esi+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi jmp short M01_L04 M01_L03: mov ecx,offset MT_System.Linq.Enumerable+WhereEnumerableIterator`1[[System.Int32, System.Private.CoreLib]] call CORINFO_HELP_NEWSFAST mov ebx,eax call CORINFO_HELP_GETCURRENTMANAGEDTHREADID mov [ebx+4],eax lea edx,[ebx+10] call CORINFO_HELP_ASSIGN_REF_ESI lea edx,[ebx+14] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,ebx M01_L04: pop ebx pop esi pop edi pop ebp ret M01_L05: mov ecx,10 call dword ptr ds:[0AD85E10] int 3 M01_L06: mov ecx,0C call dword ptr ds:[0AD85E10] int 3 ; Total bytes of code 273 ``` ```assembly ; System.Linq.Enumerable.TryGetSingle[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, Boolean ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,1C xor eax,eax mov [ebp-28],eax mov [ebp-18],eax mov edi,ecx mov esi,edx test edi,edi je near ptr M02_L09 mov edx,edi mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[863B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov ebx,eax test ebx,ebx je short M02_L01 mov ecx,ebx call dword ptr ds:[3780320] test eax,eax je short M02_L00 cmp eax,1 jne near ptr M02_L10 mov byte ptr [esi],1 mov ecx,ebx xor edx,edx call dword ptr ds:[3780324] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L00: mov byte ptr [esi],0 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L01: mov ecx,edi call dword ptr ds:[378030C] mov ecx,eax mov [ebp-28],ecx call dword ptr ds:[3780310] test eax,eax jne short M02_L02 mov byte ptr [esi],0 xor ecx,ecx mov [ebp-24],ecx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L04 jmp short M02_L06 M02_L02: mov ecx,[ebp-28] call dword ptr ds:[3780314] mov edi,eax mov ecx,[ebp-28] call dword ptr ds:[3780318] test eax,eax jne short M02_L03 mov byte ptr [esi],1 mov [ebp-24],edi mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M02_L05 jmp short M02_L06 M02_L03: mov ecx,[ebp-28] call dword ptr ds:[378031C] jmp short M02_L10 M02_L04: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L05: mov dword ptr [ebp-18],0 jmp short M02_L08 M02_L06: mov ecx,[ebp-28] test ecx,ecx je short M02_L07 call dword ptr ds:[378031C] mov ecx,[ebp-28] M02_L07: pop eax jmp eax M02_L08: mov eax,[ebp-24] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L09: mov ecx,10 call dword ptr ds:[0AD85E10] int 3 M02_L10: mov byte ptr [esi],0 call dword ptr ds:[0AD85E40] int 3 ; Total bytes of code 287 ``` #### System.Linq.Tests.Perf_Enumerable.SequenceEqual(input1: IEnumerable, input2: IEnumerable) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 1.0764160042085573 < 1.1152905786204592. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 1/13/2023 4:37:08 PM, 1/27/2023 7:12:54 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 24.980518054326037 (T) = (0 -1048.5830065545522) / Math.Sqrt((2296.6062689503397 / (299)) + (188.6929158438976 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.08763904737112613 = (1149.3071941901596 - 1048.5830065545522) / 1149.3071941901596 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.SequenceEqual(System.Linq.Tests.LinqTestData, System.Linq.Tests.LinqTestData) mov ecx,[edx+4] mov edx,[esp+4] mov edx,[edx+4] push 0 call dword ptr ds:[0AE6B690]; System.Linq.Enumerable.SequenceEqual[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEqualityComparer`1) ret 4 ; Total bytes of code 21 ``` ```assembly ; System.Linq.Enumerable.SequenceEqual[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEqualityComparer`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,3C xor eax,eax mov [ebp-40],eax mov [ebp-44],eax mov [ebp-18],eax mov edi,ecx mov ebx,edx mov esi,[ebp+8] test edi,edi je near ptr M01_L20 test ebx,ebx je near ptr M01_L21 mov edx,edi mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[2FFB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-2C],eax test eax,eax je near ptr M01_L05 mov edx,ebx mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[2FFB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-30],eax test eax,eax je near ptr M01_L05 mov edx,edi mov ecx,offset MT_System.Int32[] call dword ptr ds:[2FFB7F8] mov [ebp-34],eax test eax,eax je short M01_L00 mov edx,ebx mov ecx,offset MT_System.Int32[] call dword ptr ds:[2FFB7F8] test eax,eax je short M01_L00 mov edi,[ebp-34] lea ecx,[edi+8] mov edx,[edi+4] lea ebx,[eax+8] mov eax,[eax+4] push edx push ecx push eax push ebx mov ecx,esi call dword ptr ds:[0AE6BA20] jmp near ptr M01_L19 M01_L00: mov ecx,[ebp-2C] call dword ptr ds:[9A02D0] mov [ebp-48],eax mov ecx,[ebp-30] call dword ptr ds:[9A02D4] mov edx,[ebp-48] cmp edx,eax jne near ptr M01_L04 mov edx,[ebp-2C] mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[2FFB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-38],eax test eax,eax je short M01_L05 mov edx,[ebp-30] mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[2FFB810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-3C],eax test eax,eax je short M01_L05 test esi,esi jne short M01_L01 mov esi,ds:[6AC1EFC] M01_L01: mov ecx,[ebp-2C] call dword ptr ds:[9A02D8] mov edi,eax xor ebx,ebx test edi,edi jle short M01_L03 M01_L02: mov ecx,[ebp-38] mov edx,ebx call dword ptr ds:[9A02DC] mov [ebp-28],eax mov ecx,[ebp-3C] mov edx,ebx call dword ptr ds:[9A02E0] push eax mov edx,[ebp-28] mov ecx,esi call dword ptr ds:[9A02E4] test eax,eax je short M01_L04 inc ebx cmp ebx,edi jl short M01_L02 M01_L03: mov eax,1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L04: xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L05: mov ecx,edi call dword ptr ds:[9A02A8] mov ecx,eax mov [ebp-40],ecx mov ecx,ebx call dword ptr ds:[9A02AC] mov ecx,eax mov [ebp-44],ecx test esi,esi jne short M01_L06 mov esi,ds:[6AC1EFC] M01_L06: mov ecx,[ebp-40] call dword ptr ds:[9A02B0] test eax,eax je short M01_L08 M01_L07: mov ecx,[ebp-44] call dword ptr ds:[9A02B4] test eax,eax je short M01_L09 mov ecx,[ebp-40] call dword ptr ds:[9A02B8] mov edi,eax mov ecx,[ebp-44] call dword ptr ds:[9A02BC] push eax mov edx,edi mov ecx,esi call dword ptr ds:[9A02C0] test eax,eax je short M01_L09 mov ecx,[ebp-40] call dword ptr ds:[9A02B0] test eax,eax jne short M01_L07 M01_L08: mov ecx,[ebp-44] call dword ptr ds:[9A02C4] xor ecx,ecx test eax,eax sete cl mov [ebp-24],ecx jmp short M01_L10 M01_L09: xor ecx,ecx mov [ebp-24],ecx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L11 jmp short M01_L12 M01_L10: mov ecx,[ebp-44] call dword ptr ds:[9A02C8] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L15 jmp short M01_L16 M01_L11: mov dword ptr [ebp-18],0 jmp short M01_L14 M01_L12: mov ecx,[ebp-44] test ecx,ecx je short M01_L13 call dword ptr ds:[9A02C8] mov ecx,[ebp-44] M01_L13: pop eax jmp eax M01_L14: mov ecx,[ebp-40] test ecx,ecx je short M01_L18 call dword ptr ds:[9A02CC] jmp short M01_L18 M01_L15: mov dword ptr [ebp-18],0 jmp short M01_L18 M01_L16: mov ecx,[ebp-40] test ecx,ecx je short M01_L17 call dword ptr ds:[9A02CC] mov ecx,[ebp-40] M01_L17: pop eax jmp eax M01_L18: mov eax,[ebp-24] M01_L19: movzx eax,al lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L20: mov ecx,4 call dword ptr ds:[0A455E10] int 3 M01_L21: mov ecx,0E call dword ptr ds:[0A455E10] int 3 ; Total bytes of code 632 ``` ### Compare Jit Disasm ```assembly ; System.Linq.Tests.Perf_Enumerable.SequenceEqual(System.Linq.Tests.LinqTestData, System.Linq.Tests.LinqTestData) mov ecx,[edx+4] mov edx,[esp+4] mov edx,[edx+4] push 0 call dword ptr ds:[0B82BA20]; System.Linq.Enumerable.SequenceEqual[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEqualityComparer`1) ret 4 ; Total bytes of code 21 ``` ```assembly ; System.Linq.Enumerable.SequenceEqual[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEnumerable`1, System.Collections.Generic.IEqualityComparer`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,3C xor eax,eax mov [ebp-40],eax mov [ebp-44],eax mov [ebp-18],eax mov edi,ecx mov ebx,edx mov esi,[ebp+8] test edi,edi je near ptr M01_L18 test ebx,ebx je near ptr M01_L19 mov edx,edi mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[865B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-2C],eax test eax,eax je near ptr M01_L04 mov edx,ebx mov ecx,offset MT_System.Collections.Generic.ICollection`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[865B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-30],eax test eax,eax je near ptr M01_L04 mov edx,edi mov ecx,offset MT_System.Int32[] call dword ptr ds:[865B7F8] mov [ebp-34],eax test eax,eax je short M01_L00 mov edx,ebx mov ecx,offset MT_System.Int32[] call dword ptr ds:[865B7F8] test eax,eax je short M01_L00 mov edi,[ebp-34] lea ecx,[edi+8] mov edx,[edi+4] lea ebx,[eax+8] mov eax,[eax+4] push edx push ecx push eax push ebx mov ecx,esi call dword ptr ds:[0B82BDB0] jmp near ptr M01_L17 M01_L00: mov ecx,[ebp-2C] call dword ptr ds:[50C02D4] mov [ebp-48],eax mov ecx,[ebp-30] call dword ptr ds:[50C02D8] cmp [ebp-48],eax jne near ptr M01_L03 mov edx,[ebp-2C] mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[865B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-38],eax test eax,eax je short M01_L04 mov edx,[ebp-30] mov ecx,offset MT_System.Collections.Generic.IList`1[[System.Int32, System.Private.CoreLib]] call dword ptr ds:[865B810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object) mov [ebp-3C],eax test eax,eax je short M01_L04 test esi,esi cmove esi,ds:[7391F00] mov ecx,[ebp-2C] call dword ptr ds:[50C02DC] mov edi,eax xor ebx,ebx test edi,edi jle short M01_L02 M01_L01: mov ecx,[ebp-38] mov edx,ebx call dword ptr ds:[50C02E0] mov [ebp-28],eax mov ecx,[ebp-3C] mov edx,ebx call dword ptr ds:[50C02E4] push eax mov edx,[ebp-28] mov ecx,esi call dword ptr ds:[50C02E8] test eax,eax je short M01_L03 inc ebx cmp ebx,edi jl short M01_L01 M01_L02: mov eax,1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L03: xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L04: mov ecx,edi call dword ptr ds:[50C02AC] mov ecx,eax mov [ebp-40],ecx mov ecx,ebx call dword ptr ds:[50C02B0] mov ecx,eax mov [ebp-44],ecx test esi,esi cmove esi,ds:[7391F00] mov ecx,[ebp-40] call dword ptr ds:[50C02B4] test eax,eax je short M01_L06 M01_L05: mov ecx,[ebp-44] call dword ptr ds:[50C02B8] test eax,eax je short M01_L07 mov ecx,[ebp-40] call dword ptr ds:[50C02BC] mov edi,eax mov ecx,[ebp-44] call dword ptr ds:[50C02C0] push eax mov edx,edi mov ecx,esi call dword ptr ds:[50C02C4] test eax,eax je short M01_L07 mov ecx,[ebp-40] call dword ptr ds:[50C02B4] test eax,eax jne short M01_L05 M01_L06: mov ecx,[ebp-44] call dword ptr ds:[50C02C8] xor ecx,ecx test eax,eax sete cl mov [ebp-24],ecx jmp short M01_L08 M01_L07: xor ecx,ecx mov [ebp-24],ecx mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L09 jmp short M01_L10 M01_L08: mov ecx,[ebp-44] call dword ptr ds:[50C02CC] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M01_L13 jmp short M01_L14 M01_L09: mov dword ptr [ebp-18],0 jmp short M01_L12 M01_L10: mov ecx,[ebp-44] test ecx,ecx je short M01_L11 call dword ptr ds:[50C02CC] mov ecx,[ebp-44] M01_L11: pop eax jmp eax M01_L12: mov ecx,[ebp-40] test ecx,ecx je short M01_L16 call dword ptr ds:[50C02D0] jmp short M01_L16 M01_L13: mov dword ptr [ebp-18],0 jmp short M01_L16 M01_L14: mov ecx,[ebp-40] test ecx,ecx je short M01_L15 call dword ptr ds:[50C02D0] mov ecx,[ebp-40] M01_L15: pop eax jmp eax M01_L16: mov eax,[ebp-24] M01_L17: movzx eax,al lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 M01_L18: mov ecx,4 call dword ptr ds:[0AE15E10] int 3 M01_L19: mov ecx,0E call dword ptr ds:[0AE15E10] int 3 ; Total bytes of code 628 ``` ### 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 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.Concurrent.Count<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Dictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.Concurrent.Count(String).Dictionary(Size%3a%20512).html>) 15.11 μs 226.81 ns 0.02 0.36 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.Concurrent.Count&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.Concurrent.Count<String>.Dictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 226.8128326405108 < 14.354662527484708. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 64.24017725130285 (T) = (0 -226.9295380723148) / Math.Sqrt((11695505.461230423 / (299)) + (13.172372539457301 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.9824523657565207 = (12932.201282725131 - 226.9295380723148) / 12932.201282725131 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Tests.Perf_Double

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[TryParse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Double.TryParse(value%3a%20%22-1.7976931348623157e%2b308%22).html>) 217.23 ns 200.34 ns 0.92 0.00 False 1967.9802166831373 2029.3708270807508 1.0311947294374137) Trace Trace
[TryParse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Double.TryParse(value%3a%20%221.7976931348623157e%2b308%22).html>) 215.88 ns 199.30 ns 0.92 0.01 False 1945.1349148900333 2003.2040873763285 1.0298535448835837) 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 'System.Tests.Perf_Double*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Double.TryParse(value: "-1.7976931348623157e+308") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 200.3443562149549 < 202.80744831565403. IsChangePoint: Marked as a change because one of 1/13/2023 11:01:49 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 36.747869067605265 (T) = (0 -200.10834957626383) / Math.Sqrt((12.559032876285984 / (299)) + (2.3502001219102007 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.06615861100252891 = (214.28515798715122 - 200.10834957626383) / 214.28515798715122 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Double.TryParse(System.String) push ebp mov ebp,esp sub esp,8 vzeroupper xor eax,eax mov [ebp-8],eax mov [ebp-4],eax test edx,edx jne short M00_L00 vxorps xmm0,xmm0,xmm0 vmovsd qword ptr [ebp-8],xmm0 xor eax,eax jmp short M00_L01 M00_L00: lea eax,[edx+8] mov edx,[edx+4] push edx push eax call dword ptr ds:[0A5D38B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-8] push ecx mov ecx,0E7 call dword ptr ds:[853D270]; System.Number.TryParseDouble(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Double ByRef) M00_L01: mov esp,ebp pop ebp ret ; Total bytes of code 69 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,2B94E68 mov edx,250 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[6C21240] test ecx,ecx jne short M01_L00 mov ecx,ds:[6C21230] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,7F348C0 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[8537330] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[7EFB8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseDouble(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Double ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,44 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],esp mov dword ptr [ebp-48],1AA2AAED mov esi,edx test [esp],esp sub esp,304 lea edx,[esp] mov [ebp-10],esp mov byte ptr [ebp-1A],3 mov [ebp-18],edx mov dword ptr [ebp-14],301 lea edx,[ebp-18] cmp dword ptr [edx+4],0 jbe near ptr M02_L83 mov edx,[edx] mov byte ptr [edx],0 mov edi,[ebp+0C] mov ebx,[ebp+10] mov [ebp-28],edi mov eax,edi mov [ebp-2C],eax mov [ebp-30],eax push ecx lea edx,[ebp-24] push edx push esi mov edx,[ebp-30] lea edx,[edx+ebx*2] lea ecx,[ebp-30] call dword ptr ds:[853BFA8]; System.Number.TryParseNumber(Char* ByRef, Char*, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo) test eax,eax jne short M02_L04 M02_L00: xor ecx,ecx M02_L01: xor eax,eax mov [ebp-28],eax test ecx,ecx jne near ptr M02_L49 mov edi,[ebp+0C] mov ebx,[ebp+10] xor eax,eax test ebx,ebx jle short M02_L08 M02_L02: mov [ebp-34],eax movzx ecx,word ptr [edi+eax*2] cmp ecx,100 jae short M02_L06 test byte ptr [ecx+6C5A12C0],80 je short M02_L03 jmp short M02_L07 M02_L03: mov eax,[ebp-34] jmp short M02_L08 M02_L04: mov ecx,[ebp-30] mov eax,[ebp-2C] sub ecx,eax mov edx,ecx shr edx,1F add ecx,edx sar ecx,1 cmp ecx,ebx jl near ptr M02_L52 M02_L05: xor ecx,ecx mov [ebp-28],ecx mov ecx,1 jmp short M02_L01 M02_L06: call dword ptr ds:[0B05F420] test eax,eax je short M02_L11 M02_L07: mov eax,[ebp-34] inc eax cmp eax,ebx jl short M02_L02 M02_L08: lea edx,[ebx-1] mov [ebp-34],eax cmp edx,eax jle short M02_L14 M02_L09: cmp edx,ebx jae near ptr M02_L83 mov [ebp-38],edx movzx ecx,word ptr [edi+edx*2] cmp ecx,100 jae short M02_L12 test byte ptr [ecx+6C5A12C0],80 je short M02_L10 jmp short M02_L13 M02_L10: mov edx,[ebp-38] jmp short M02_L14 M02_L11: mov eax,[ebp-34] jmp short M02_L08 M02_L12: call dword ptr ds:[0B05F420] test eax,eax je short M02_L16 M02_L13: mov edx,[ebp-38] dec edx mov eax,[ebp-34] cmp edx,eax mov [ebp-34],eax jg short M02_L09 M02_L14: mov eax,[ebp-34] sub edx,eax inc edx cmp eax,ebx ja near ptr M02_L76 sub ebx,eax cmp ebx,edx jb near ptr M02_L76 lea edi,[edi+eax*2] mov ebx,edx mov ecx,[esi+30] test ecx,ecx je short M02_L17 lea edx,[ecx+8] mov eax,[ecx+4] M02_L15: mov ecx,ebx cmp ecx,eax jne short M02_L23 test eax,eax je near ptr M02_L53 jmp short M02_L20 M02_L16: mov edx,[ebp-38] jmp short M02_L14 M02_L17: xor edx,edx xor eax,eax jmp short M02_L15 M02_L18: lea edx,[ecx+8] mov eax,[ecx+4] M02_L19: mov ecx,ebx cmp ecx,eax jne short M02_L29 test eax,eax je near ptr M02_L54 jmp short M02_L26 M02_L20: mov ecx,ebx cmp ecx,8 jge short M02_L21 push ebx mov ecx,edi call dword ptr ds:[871D3F0] jmp short M02_L22 M02_L21: push ebx mov ecx,edi call dword ptr ds:[871D3C0] M02_L22: test eax,eax jne near ptr M02_L53 M02_L23: mov ecx,[esi+34] test ecx,ecx jne short M02_L18 xor edx,edx xor eax,eax jmp short M02_L19 M02_L24: lea edx,[ecx+8] mov eax,[ecx+4] M02_L25: mov ecx,ebx cmp ecx,eax jne short M02_L32 test eax,eax je near ptr M02_L55 jmp near ptr M02_L39 M02_L26: mov ecx,ebx cmp ecx,8 jge short M02_L27 push ebx mov ecx,edi call dword ptr ds:[871D3F0] jmp short M02_L28 M02_L27: push ebx mov ecx,edi call dword ptr ds:[871D3C0] M02_L28: test eax,eax jne near ptr M02_L54 M02_L29: mov ecx,[esi+2C] test ecx,ecx jne short M02_L24 xor edx,edx xor eax,eax jmp short M02_L25 M02_L30: push ebx mov ecx,edi call dword ptr ds:[871D3C0] M02_L31: test eax,eax jne near ptr M02_L55 M02_L32: mov ecx,[esi+10] test ecx,ecx je short M02_L34 lea edx,[ecx+8] mov eax,[ecx+4] M02_L33: cmp eax,ebx jg short M02_L35 cmp eax,8 jge short M02_L40 push eax mov ecx,edi call dword ptr ds:[871D3F0] jmp short M02_L41 M02_L34: xor edx,edx xor eax,eax jmp short M02_L33 M02_L35: xor eax,eax M02_L36: test eax,eax jne near ptr M02_L56 mov ecx,[esi+14] test ecx,ecx je short M02_L38 lea edx,[ecx+8] mov eax,[ecx+4] M02_L37: cmp eax,ebx jg short M02_L42 cmp eax,8 jge short M02_L47 push eax mov ecx,edi call dword ptr ds:[871D3F0] jmp short M02_L48 M02_L38: xor edx,edx xor eax,eax jmp short M02_L37 M02_L39: mov ecx,ebx cmp ecx,8 jge short M02_L30 push ebx mov ecx,edi call dword ptr ds:[871D3F0] jmp short M02_L31 M02_L40: push eax mov ecx,edi call dword ptr ds:[871D3C0] M02_L41: jmp short M02_L36 M02_L42: xor eax,eax M02_L43: test eax,eax jne near ptr M02_L70 M02_L44: cmp byte ptr [esi+72],0 jne near ptr M02_L75 M02_L45: vxorps xmm0,xmm0,xmm0 mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 xor eax,eax cmp dword ptr [ebp-48],1AA2AAED je short M02_L46 call CORINFO_HELP_FAIL_FAST M02_L46: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L47: push eax mov ecx,edi call dword ptr ds:[871D3C0] M02_L48: jmp short M02_L43 M02_L49: lea ecx,[ebp-24] call dword ptr ds:[853D420]; System.Number.NumberToDouble(NumberBuffer ByRef) fstp qword ptr [ebp-50] mov esi,[ebp+8] vmovsd xmm0,qword ptr [ebp-50] vmovsd qword ptr [esi],xmm0 M02_L50: mov eax,1 cmp dword ptr [ebp-48],1AA2AAED je short M02_L51 call CORINFO_HELP_FAIL_FAST M02_L51: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L52: push ebx push edi mov ecx,[ebp-30] sub ecx,eax mov eax,ecx shr eax,1F add ecx,eax sar ecx,1 call dword ptr ds:[853D2D0] test eax,eax jne near ptr M02_L05 jmp near ptr M02_L00 M02_L53: vmovsd xmm0,qword ptr ds:[87029B0] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L54: vmovsd xmm0,qword ptr ds:[87029B8] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L55: vmovsd xmm0,qword ptr ds:[87029C0] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L56: mov ecx,[esi+10] mov ecx,[ecx+4] cmp ecx,ebx ja near ptr M02_L76 lea edi,[edi+ecx*2] sub ebx,ecx mov ecx,[esi+30] test ecx,ecx jne short M02_L57 xor edx,edx xor eax,eax jmp short M02_L58 M02_L57: lea edx,[ecx+8] mov eax,[ecx+4] M02_L58: cmp ebx,eax jne short M02_L62 test eax,eax je short M02_L61 mov ecx,ebx cmp ecx,8 jge short M02_L59 push ebx mov ecx,edi call dword ptr ds:[871D3F0] jmp short M02_L60 M02_L59: push ebx mov ecx,edi call dword ptr ds:[871D3C0] M02_L60: test eax,eax je short M02_L62 M02_L61: vmovsd xmm0,qword ptr ds:[87029B0] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L62: mov eax,ebx mov ecx,[esi+2C] test ecx,ecx jne short M02_L63 xor edx,edx xor esi,esi jmp short M02_L64 M02_L63: lea edx,[ecx+8] mov esi,[ecx+4] M02_L64: mov ecx,edi cmp eax,esi jne short M02_L68 test esi,esi je short M02_L67 cmp eax,8 jge short M02_L65 push eax call dword ptr ds:[871D3F0] jmp short M02_L66 M02_L65: push eax call dword ptr ds:[871D3C0] M02_L66: test eax,eax je short M02_L68 M02_L67: vmovsd xmm0,qword ptr ds:[87029C0] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L68: vxorps xmm0,xmm0,xmm0 mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 xor eax,eax cmp dword ptr [ebp-48],1AA2AAED je short M02_L69 call CORINFO_HELP_FAIL_FAST M02_L69: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L70: mov ecx,[esi+14] mov ecx,[ecx+4] cmp ecx,ebx ja near ptr M02_L76 lea edx,[edi+ecx*2] mov eax,ebx sub eax,ecx mov [ebp-3C],eax mov ecx,[esi+2C] test ecx,ecx jne short M02_L71 xor ecx,ecx xor eax,eax jmp short M02_L72 M02_L71: lea eax,[ecx+8] mov ecx,[ecx+4] xchg eax,ecx M02_L72: mov [ebp-44],edx mov edx,[ebp-3C] cmp edx,eax jne near ptr M02_L44 test eax,eax je near ptr M02_L82 mov eax,[ebp-44] mov [ebp-40],ecx cmp edx,8 jge short M02_L73 push edx mov ecx,eax mov edx,[ebp-40] call dword ptr ds:[871D3F0] jmp short M02_L74 M02_L73: push edx mov ecx,eax mov edx,[ebp-40] call dword ptr ds:[871D3C0] M02_L74: test eax,eax jne short M02_L82 jmp near ptr M02_L44 M02_L75: push ebx push edi mov ecx,2D call dword ptr ds:[853D258] test eax,eax je near ptr M02_L45 cmp ebx,1 jae short M02_L77 M02_L76: call dword ptr ds:[85F5270] int 3 M02_L77: lea ecx,[edi+2] lea eax,[ebx-1] mov edx,[esi+2C] test edx,edx jne short M02_L78 xor edx,edx xor esi,esi jmp short M02_L79 M02_L78: lea esi,[edx+8] mov edx,[edx+4] mov ebx,edx mov edx,esi mov esi,ebx M02_L79: cmp eax,esi jne near ptr M02_L45 test esi,esi je short M02_L82 cmp eax,8 jge short M02_L80 push eax call dword ptr ds:[871D3F0] jmp short M02_L81 M02_L80: push eax call dword ptr ds:[871D3C0] M02_L81: test eax,eax je near ptr M02_L45 M02_L82: vmovsd xmm0,qword ptr ds:[87029C0] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L83: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1328 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Double.TryParse(System.String) push ebp mov ebp,esp sub esp,8 vzeroupper xor eax,eax mov [ebp-8],eax mov [ebp-4],eax test edx,edx jne short M00_L00 vxorps xmm0,xmm0,xmm0 vmovsd qword ptr [ebp-8],xmm0 xor eax,eax jmp short M00_L01 M00_L00: lea eax,[edx+8] mov edx,[edx+4] push edx push eax call dword ptr ds:[0A3D38B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-8] push ecx mov ecx,0E7 call dword ptr ds:[82CD270]; System.Number.TryParseDouble(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Double ByRef) M00_L01: mov esp,ebp pop ebp ret ; Total bytes of code 69 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,2FA4E68 mov edx,250 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[6A41240] test ecx,ecx jne short M01_L00 mov ecx,ds:[6A41230] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,7CC56F8 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[82C7330] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[7C8B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseDouble(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Double ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,44 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],esp mov dword ptr [ebp-48],171ECB7B mov esi,edx test [esp],esp sub esp,304 lea edx,[esp] mov [ebp-10],esp mov byte ptr [ebp-1A],3 mov [ebp-18],edx mov dword ptr [ebp-14],301 lea edx,[ebp-18] cmp dword ptr [edx+4],0 jbe near ptr M02_L83 mov edx,[edx] mov byte ptr [edx],0 mov edi,[ebp+0C] mov ebx,[ebp+10] mov [ebp-28],edi mov eax,edi mov [ebp-2C],eax mov [ebp-30],eax push ecx lea edx,[ebp-24] push edx push esi mov edx,[ebp-30] lea edx,[edx+ebx*2] lea ecx,[ebp-30] call dword ptr ds:[82CBFA8]; System.Number.TryParseNumber(Char* ByRef, Char*, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo) test eax,eax jne short M02_L04 M02_L00: xor ecx,ecx M02_L01: xor eax,eax mov [ebp-28],eax test ecx,ecx jne near ptr M02_L49 mov edi,[ebp+0C] mov ebx,[ebp+10] xor eax,eax test ebx,ebx jle short M02_L08 M02_L02: mov [ebp-34],eax movzx ecx,word ptr [edi+eax*2] cmp ecx,100 jae short M02_L06 test byte ptr [ecx+6C490D30],80 je short M02_L03 jmp short M02_L07 M02_L03: mov eax,[ebp-34] jmp short M02_L08 M02_L04: mov ecx,[ebp-30] mov eax,[ebp-2C] sub ecx,eax mov edx,ecx shr edx,1F add ecx,edx sar ecx,1 cmp ecx,ebx jl near ptr M02_L52 M02_L05: xor ecx,ecx mov [ebp-28],ecx mov ecx,1 jmp short M02_L01 M02_L06: call dword ptr ds:[0AE5F708] test eax,eax je short M02_L11 M02_L07: mov eax,[ebp-34] inc eax cmp eax,ebx jl short M02_L02 M02_L08: lea edx,[ebx-1] mov [ebp-34],eax cmp edx,eax jle short M02_L14 M02_L09: cmp edx,ebx jae near ptr M02_L83 mov [ebp-38],edx movzx ecx,word ptr [edi+edx*2] cmp ecx,100 jae short M02_L12 test byte ptr [ecx+6C490D30],80 je short M02_L10 jmp short M02_L13 M02_L10: mov edx,[ebp-38] jmp short M02_L14 M02_L11: mov eax,[ebp-34] jmp short M02_L08 M02_L12: call dword ptr ds:[0AE5F708] test eax,eax je short M02_L16 M02_L13: mov edx,[ebp-38] dec edx mov eax,[ebp-34] cmp edx,eax mov [ebp-34],eax jg short M02_L09 M02_L14: mov eax,[ebp-34] sub edx,eax inc edx cmp eax,ebx ja near ptr M02_L76 sub ebx,eax cmp ebx,edx jb near ptr M02_L76 lea edi,[edi+eax*2] mov ebx,edx mov ecx,[esi+30] test ecx,ecx je short M02_L17 lea edx,[ecx+8] mov eax,[ecx+4] M02_L15: mov ecx,ebx cmp ecx,eax jne short M02_L23 test eax,eax je near ptr M02_L53 jmp short M02_L20 M02_L16: mov edx,[ebp-38] jmp short M02_L14 M02_L17: xor edx,edx xor eax,eax jmp short M02_L15 M02_L18: lea edx,[ecx+8] mov eax,[ecx+4] M02_L19: mov ecx,ebx cmp ecx,eax jne short M02_L29 test eax,eax je near ptr M02_L54 jmp short M02_L26 M02_L20: mov ecx,ebx cmp ecx,8 jge short M02_L21 push ebx mov ecx,edi call dword ptr ds:[84AD3F0] jmp short M02_L22 M02_L21: push ebx mov ecx,edi call dword ptr ds:[84AD3C0] M02_L22: test eax,eax jne near ptr M02_L53 M02_L23: mov ecx,[esi+34] test ecx,ecx jne short M02_L18 xor edx,edx xor eax,eax jmp short M02_L19 M02_L24: lea edx,[ecx+8] mov eax,[ecx+4] M02_L25: mov ecx,ebx cmp ecx,eax jne short M02_L32 test eax,eax je near ptr M02_L55 jmp near ptr M02_L39 M02_L26: mov ecx,ebx cmp ecx,8 jge short M02_L27 push ebx mov ecx,edi call dword ptr ds:[84AD3F0] jmp short M02_L28 M02_L27: push ebx mov ecx,edi call dword ptr ds:[84AD3C0] M02_L28: test eax,eax jne near ptr M02_L54 M02_L29: mov ecx,[esi+2C] test ecx,ecx jne short M02_L24 xor edx,edx xor eax,eax jmp short M02_L25 M02_L30: push ebx mov ecx,edi call dword ptr ds:[84AD3C0] M02_L31: test eax,eax jne near ptr M02_L55 M02_L32: mov ecx,[esi+10] test ecx,ecx je short M02_L34 lea edx,[ecx+8] mov eax,[ecx+4] M02_L33: cmp eax,ebx jg short M02_L35 cmp eax,8 jge short M02_L40 push eax mov ecx,edi call dword ptr ds:[84AD3F0] jmp short M02_L41 M02_L34: xor edx,edx xor eax,eax jmp short M02_L33 M02_L35: xor eax,eax M02_L36: test eax,eax jne near ptr M02_L56 mov ecx,[esi+14] test ecx,ecx je short M02_L38 lea edx,[ecx+8] mov eax,[ecx+4] M02_L37: cmp eax,ebx jg short M02_L42 cmp eax,8 jge short M02_L47 push eax mov ecx,edi call dword ptr ds:[84AD3F0] jmp short M02_L48 M02_L38: xor edx,edx xor eax,eax jmp short M02_L37 M02_L39: mov ecx,ebx cmp ecx,8 jge short M02_L30 push ebx mov ecx,edi call dword ptr ds:[84AD3F0] jmp short M02_L31 M02_L40: push eax mov ecx,edi call dword ptr ds:[84AD3C0] M02_L41: jmp short M02_L36 M02_L42: xor eax,eax M02_L43: test eax,eax jne near ptr M02_L70 M02_L44: cmp byte ptr [esi+72],0 jne near ptr M02_L75 M02_L45: vxorps xmm0,xmm0,xmm0 mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 xor eax,eax cmp dword ptr [ebp-48],171ECB7B je short M02_L46 call CORINFO_HELP_FAIL_FAST M02_L46: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L47: push eax mov ecx,edi call dword ptr ds:[84AD3C0] M02_L48: jmp short M02_L43 M02_L49: lea ecx,[ebp-24] call dword ptr ds:[82CD420]; System.Number.NumberToDouble(NumberBuffer ByRef) fstp qword ptr [ebp-50] mov esi,[ebp+8] vmovsd xmm0,qword ptr [ebp-50] vmovsd qword ptr [esi],xmm0 M02_L50: mov eax,1 cmp dword ptr [ebp-48],171ECB7B je short M02_L51 call CORINFO_HELP_FAIL_FAST M02_L51: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L52: push ebx push edi mov ecx,[ebp-30] sub ecx,eax mov eax,ecx shr eax,1F add ecx,eax sar ecx,1 call dword ptr ds:[82CD2D0] test eax,eax jne near ptr M02_L05 jmp near ptr M02_L00 M02_L53: vmovsd xmm0,qword ptr ds:[0AE61C50] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L54: vmovsd xmm0,qword ptr ds:[0AE61C58] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L55: vmovsd xmm0,qword ptr ds:[0AE61C60] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L56: mov ecx,[esi+10] mov ecx,[ecx+4] cmp ecx,ebx ja near ptr M02_L76 lea edi,[edi+ecx*2] sub ebx,ecx mov ecx,[esi+30] test ecx,ecx jne short M02_L57 xor edx,edx xor eax,eax jmp short M02_L58 M02_L57: lea edx,[ecx+8] mov eax,[ecx+4] M02_L58: cmp ebx,eax jne short M02_L62 test eax,eax je short M02_L61 mov ecx,ebx cmp ecx,8 jge short M02_L59 push ebx mov ecx,edi call dword ptr ds:[84AD3F0] jmp short M02_L60 M02_L59: push ebx mov ecx,edi call dword ptr ds:[84AD3C0] M02_L60: test eax,eax je short M02_L62 M02_L61: vmovsd xmm0,qword ptr ds:[0AE61C50] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L62: mov eax,ebx mov ecx,[esi+2C] test ecx,ecx jne short M02_L63 xor edx,edx xor esi,esi jmp short M02_L64 M02_L63: lea edx,[ecx+8] mov esi,[ecx+4] M02_L64: mov ecx,edi cmp eax,esi jne short M02_L68 test esi,esi je short M02_L67 cmp eax,8 jge short M02_L65 push eax call dword ptr ds:[84AD3F0] jmp short M02_L66 M02_L65: push eax call dword ptr ds:[84AD3C0] M02_L66: test eax,eax je short M02_L68 M02_L67: vmovsd xmm0,qword ptr ds:[0AE61C60] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L68: vxorps xmm0,xmm0,xmm0 mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 xor eax,eax cmp dword ptr [ebp-48],171ECB7B je short M02_L69 call CORINFO_HELP_FAIL_FAST M02_L69: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L70: mov ecx,[esi+14] mov ecx,[ecx+4] cmp ecx,ebx ja near ptr M02_L76 lea edx,[edi+ecx*2] mov eax,ebx sub eax,ecx mov [ebp-3C],eax mov ecx,[esi+2C] test ecx,ecx jne short M02_L71 xor ecx,ecx xor eax,eax jmp short M02_L72 M02_L71: lea eax,[ecx+8] mov ecx,[ecx+4] xchg eax,ecx M02_L72: mov [ebp-44],edx mov edx,[ebp-3C] cmp edx,eax jne near ptr M02_L44 test eax,eax je near ptr M02_L82 mov eax,[ebp-44] mov [ebp-40],ecx cmp edx,8 jge short M02_L73 push edx mov ecx,eax mov edx,[ebp-40] call dword ptr ds:[84AD3F0] jmp short M02_L74 M02_L73: push edx mov ecx,eax mov edx,[ebp-40] call dword ptr ds:[84AD3C0] M02_L74: test eax,eax jne short M02_L82 jmp near ptr M02_L44 M02_L75: push ebx push edi mov ecx,2D call dword ptr ds:[82CD258] test eax,eax je near ptr M02_L45 cmp ebx,1 jae short M02_L77 M02_L76: call dword ptr ds:[8385270] int 3 M02_L77: lea ecx,[edi+2] lea eax,[ebx-1] mov edx,[esi+2C] test edx,edx jne short M02_L78 xor edx,edx xor esi,esi jmp short M02_L79 M02_L78: lea esi,[edx+8] mov edx,[edx+4] mov ebx,edx mov edx,esi mov esi,ebx M02_L79: cmp eax,esi jne near ptr M02_L45 test esi,esi je short M02_L82 cmp eax,8 jge short M02_L80 push eax call dword ptr ds:[84AD3F0] jmp short M02_L81 M02_L80: push eax call dword ptr ds:[84AD3C0] M02_L81: test eax,eax je near ptr M02_L45 M02_L82: vmovsd xmm0,qword ptr ds:[0AE61C60] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L83: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1328 ``` #### System.Tests.Perf_Double.TryParse(value: "1.7976931348623157e+308") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 199.30411709367405 < 202.11289137757396. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 35.39407716019526 (T) = (0 -198.84874940774745) / Math.Sqrt((15.563389025847139 / (299)) + (2.2175187033988526 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.06506097607549893 = (212.68632961009556 - 198.84874940774745) / 212.68632961009556 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Double.TryParse(System.String) push ebp mov ebp,esp sub esp,8 vzeroupper xor eax,eax mov [ebp-8],eax mov [ebp-4],eax test edx,edx jne short M00_L00 vxorps xmm0,xmm0,xmm0 vmovsd qword ptr [ebp-8],xmm0 xor eax,eax jmp short M00_L01 M00_L00: lea eax,[edx+8] mov edx,[edx+4] push edx push eax call dword ptr ds:[0A6A38B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-8] push ecx mov ecx,0E7 call dword ptr ds:[860D270]; System.Number.TryParseDouble(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Double ByRef) M00_L01: mov esp,ebp pop ebp ret ; Total bytes of code 69 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,2BC4E68 mov edx,250 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[6F01240] test ecx,ecx jne short M01_L00 mov ecx,ds:[6F01230] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,80848C0 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[8607330] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[2D2B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseDouble(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Double ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,44 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],esp mov dword ptr [ebp-48],126651B8 mov esi,edx test [esp],esp sub esp,304 lea edx,[esp] mov [ebp-10],esp mov byte ptr [ebp-1A],3 mov [ebp-18],edx mov dword ptr [ebp-14],301 lea edx,[ebp-18] cmp dword ptr [edx+4],0 jbe near ptr M02_L83 mov edx,[edx] mov byte ptr [edx],0 mov edi,[ebp+0C] mov ebx,[ebp+10] mov [ebp-28],edi mov eax,edi mov [ebp-2C],eax mov [ebp-30],eax push ecx lea edx,[ebp-24] push edx push esi mov edx,[ebp-30] lea edx,[edx+ebx*2] lea ecx,[ebp-30] call dword ptr ds:[860BFA8]; System.Number.TryParseNumber(Char* ByRef, Char*, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo) test eax,eax jne short M02_L04 M02_L00: xor ecx,ecx M02_L01: xor eax,eax mov [ebp-28],eax test ecx,ecx jne near ptr M02_L49 mov edi,[ebp+0C] mov ebx,[ebp+10] xor eax,eax test ebx,ebx jle short M02_L08 M02_L02: mov [ebp-34],eax movzx ecx,word ptr [edi+eax*2] cmp ecx,100 jae short M02_L06 test byte ptr [ecx+6B8712C0],80 je short M02_L03 jmp short M02_L07 M02_L03: mov eax,[ebp-34] jmp short M02_L08 M02_L04: mov ecx,[ebp-30] mov eax,[ebp-2C] sub ecx,eax mov edx,ecx shr edx,1F add ecx,edx sar ecx,1 cmp ecx,ebx jl near ptr M02_L52 M02_L05: xor ecx,ecx mov [ebp-28],ecx mov ecx,1 jmp short M02_L01 M02_L06: call dword ptr ds:[0B12F420] test eax,eax je short M02_L11 M02_L07: mov eax,[ebp-34] inc eax cmp eax,ebx jl short M02_L02 M02_L08: lea edx,[ebx-1] mov [ebp-34],eax cmp edx,eax jle short M02_L14 M02_L09: cmp edx,ebx jae near ptr M02_L83 mov [ebp-38],edx movzx ecx,word ptr [edi+edx*2] cmp ecx,100 jae short M02_L12 test byte ptr [ecx+6B8712C0],80 je short M02_L10 jmp short M02_L13 M02_L10: mov edx,[ebp-38] jmp short M02_L14 M02_L11: mov eax,[ebp-34] jmp short M02_L08 M02_L12: call dword ptr ds:[0B12F420] test eax,eax je short M02_L16 M02_L13: mov edx,[ebp-38] dec edx mov eax,[ebp-34] cmp edx,eax mov [ebp-34],eax jg short M02_L09 M02_L14: mov eax,[ebp-34] sub edx,eax inc edx cmp eax,ebx ja near ptr M02_L76 sub ebx,eax cmp ebx,edx jb near ptr M02_L76 lea edi,[edi+eax*2] mov ebx,edx mov ecx,[esi+30] test ecx,ecx je short M02_L17 lea edx,[ecx+8] mov eax,[ecx+4] M02_L15: mov ecx,ebx cmp ecx,eax jne short M02_L23 test eax,eax je near ptr M02_L53 jmp short M02_L20 M02_L16: mov edx,[ebp-38] jmp short M02_L14 M02_L17: xor edx,edx xor eax,eax jmp short M02_L15 M02_L18: lea edx,[ecx+8] mov eax,[ecx+4] M02_L19: mov ecx,ebx cmp ecx,eax jne short M02_L29 test eax,eax je near ptr M02_L54 jmp short M02_L26 M02_L20: mov ecx,ebx cmp ecx,8 jge short M02_L21 push ebx mov ecx,edi call dword ptr ds:[86ED3F0] jmp short M02_L22 M02_L21: push ebx mov ecx,edi call dword ptr ds:[86ED3C0] M02_L22: test eax,eax jne near ptr M02_L53 M02_L23: mov ecx,[esi+34] test ecx,ecx jne short M02_L18 xor edx,edx xor eax,eax jmp short M02_L19 M02_L24: lea edx,[ecx+8] mov eax,[ecx+4] M02_L25: mov ecx,ebx cmp ecx,eax jne short M02_L32 test eax,eax je near ptr M02_L55 jmp near ptr M02_L39 M02_L26: mov ecx,ebx cmp ecx,8 jge short M02_L27 push ebx mov ecx,edi call dword ptr ds:[86ED3F0] jmp short M02_L28 M02_L27: push ebx mov ecx,edi call dword ptr ds:[86ED3C0] M02_L28: test eax,eax jne near ptr M02_L54 M02_L29: mov ecx,[esi+2C] test ecx,ecx jne short M02_L24 xor edx,edx xor eax,eax jmp short M02_L25 M02_L30: push ebx mov ecx,edi call dword ptr ds:[86ED3C0] M02_L31: test eax,eax jne near ptr M02_L55 M02_L32: mov ecx,[esi+10] test ecx,ecx je short M02_L34 lea edx,[ecx+8] mov eax,[ecx+4] M02_L33: cmp eax,ebx jg short M02_L35 cmp eax,8 jge short M02_L40 push eax mov ecx,edi call dword ptr ds:[86ED3F0] jmp short M02_L41 M02_L34: xor edx,edx xor eax,eax jmp short M02_L33 M02_L35: xor eax,eax M02_L36: test eax,eax jne near ptr M02_L56 mov ecx,[esi+14] test ecx,ecx je short M02_L38 lea edx,[ecx+8] mov eax,[ecx+4] M02_L37: cmp eax,ebx jg short M02_L42 cmp eax,8 jge short M02_L47 push eax mov ecx,edi call dword ptr ds:[86ED3F0] jmp short M02_L48 M02_L38: xor edx,edx xor eax,eax jmp short M02_L37 M02_L39: mov ecx,ebx cmp ecx,8 jge short M02_L30 push ebx mov ecx,edi call dword ptr ds:[86ED3F0] jmp short M02_L31 M02_L40: push eax mov ecx,edi call dword ptr ds:[86ED3C0] M02_L41: jmp short M02_L36 M02_L42: xor eax,eax M02_L43: test eax,eax jne near ptr M02_L70 M02_L44: cmp byte ptr [esi+72],0 jne near ptr M02_L75 M02_L45: vxorps xmm0,xmm0,xmm0 mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 xor eax,eax cmp dword ptr [ebp-48],126651B8 je short M02_L46 call CORINFO_HELP_FAIL_FAST M02_L46: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L47: push eax mov ecx,edi call dword ptr ds:[86ED3C0] M02_L48: jmp short M02_L43 M02_L49: lea ecx,[ebp-24] call dword ptr ds:[860D420]; System.Number.NumberToDouble(NumberBuffer ByRef) fstp qword ptr [ebp-50] mov esi,[ebp+8] vmovsd xmm0,qword ptr [ebp-50] vmovsd qword ptr [esi],xmm0 M02_L50: mov eax,1 cmp dword ptr [ebp-48],126651B8 je short M02_L51 call CORINFO_HELP_FAIL_FAST M02_L51: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L52: push ebx push edi mov ecx,[ebp-30] sub ecx,eax mov eax,ecx shr eax,1F add ecx,eax sar ecx,1 call dword ptr ds:[860D2D0] test eax,eax jne near ptr M02_L05 jmp near ptr M02_L00 M02_L53: vmovsd xmm0,qword ptr ds:[86D29B0] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L54: vmovsd xmm0,qword ptr ds:[86D29B8] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L55: vmovsd xmm0,qword ptr ds:[86D29C0] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L56: mov ecx,[esi+10] mov ecx,[ecx+4] cmp ecx,ebx ja near ptr M02_L76 lea edi,[edi+ecx*2] sub ebx,ecx mov ecx,[esi+30] test ecx,ecx jne short M02_L57 xor edx,edx xor eax,eax jmp short M02_L58 M02_L57: lea edx,[ecx+8] mov eax,[ecx+4] M02_L58: cmp ebx,eax jne short M02_L62 test eax,eax je short M02_L61 mov ecx,ebx cmp ecx,8 jge short M02_L59 push ebx mov ecx,edi call dword ptr ds:[86ED3F0] jmp short M02_L60 M02_L59: push ebx mov ecx,edi call dword ptr ds:[86ED3C0] M02_L60: test eax,eax je short M02_L62 M02_L61: vmovsd xmm0,qword ptr ds:[86D29B0] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L62: mov eax,ebx mov ecx,[esi+2C] test ecx,ecx jne short M02_L63 xor edx,edx xor esi,esi jmp short M02_L64 M02_L63: lea edx,[ecx+8] mov esi,[ecx+4] M02_L64: mov ecx,edi cmp eax,esi jne short M02_L68 test esi,esi je short M02_L67 cmp eax,8 jge short M02_L65 push eax call dword ptr ds:[86ED3F0] jmp short M02_L66 M02_L65: push eax call dword ptr ds:[86ED3C0] M02_L66: test eax,eax je short M02_L68 M02_L67: vmovsd xmm0,qword ptr ds:[86D29C0] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L68: vxorps xmm0,xmm0,xmm0 mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 xor eax,eax cmp dword ptr [ebp-48],126651B8 je short M02_L69 call CORINFO_HELP_FAIL_FAST M02_L69: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L70: mov ecx,[esi+14] mov ecx,[ecx+4] cmp ecx,ebx ja near ptr M02_L76 lea edx,[edi+ecx*2] mov eax,ebx sub eax,ecx mov [ebp-3C],eax mov ecx,[esi+2C] test ecx,ecx jne short M02_L71 xor ecx,ecx xor eax,eax jmp short M02_L72 M02_L71: lea eax,[ecx+8] mov ecx,[ecx+4] xchg eax,ecx M02_L72: mov [ebp-44],edx mov edx,[ebp-3C] cmp edx,eax jne near ptr M02_L44 test eax,eax je near ptr M02_L82 mov eax,[ebp-44] mov [ebp-40],ecx cmp edx,8 jge short M02_L73 push edx mov ecx,eax mov edx,[ebp-40] call dword ptr ds:[86ED3F0] jmp short M02_L74 M02_L73: push edx mov ecx,eax mov edx,[ebp-40] call dword ptr ds:[86ED3C0] M02_L74: test eax,eax jne short M02_L82 jmp near ptr M02_L44 M02_L75: push ebx push edi mov ecx,2D call dword ptr ds:[860D258] test eax,eax je near ptr M02_L45 cmp ebx,1 jae short M02_L77 M02_L76: call dword ptr ds:[86C5270] int 3 M02_L77: lea ecx,[edi+2] lea eax,[ebx-1] mov edx,[esi+2C] test edx,edx jne short M02_L78 xor edx,edx xor esi,esi jmp short M02_L79 M02_L78: lea esi,[edx+8] mov edx,[edx+4] mov ebx,edx mov edx,esi mov esi,ebx M02_L79: cmp eax,esi jne near ptr M02_L45 test esi,esi je short M02_L82 cmp eax,8 jge short M02_L80 push eax call dword ptr ds:[86ED3F0] jmp short M02_L81 M02_L80: push eax call dword ptr ds:[86ED3C0] M02_L81: test eax,eax je near ptr M02_L45 M02_L82: vmovsd xmm0,qword ptr ds:[86D29C0] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L83: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1328 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Double.TryParse(System.String) push ebp mov ebp,esp sub esp,8 vzeroupper xor eax,eax mov [ebp-8],eax mov [ebp-4],eax test edx,edx jne short M00_L00 vxorps xmm0,xmm0,xmm0 vmovsd qword ptr [ebp-8],xmm0 xor eax,eax jmp short M00_L01 M00_L00: lea eax,[edx+8] mov edx,[edx+4] push edx push eax call dword ptr ds:[0AFF38B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-8] push ecx mov ecx,0E7 call dword ptr ds:[8EED270]; System.Number.TryParseDouble(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Double ByRef) M00_L01: mov esp,ebp pop ebp ret ; Total bytes of code 69 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,5364E68 mov edx,250 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[75D1240] test ecx,ecx jne short M01_L00 mov ecx,ds:[75D1230] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,88E56F8 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[8EE7330] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[88AB8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseDouble(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Double ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,44 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-10],esp mov dword ptr [ebp-48],0D2A67E15 mov esi,edx test [esp],esp sub esp,304 lea edx,[esp] mov [ebp-10],esp mov byte ptr [ebp-1A],3 mov [ebp-18],edx mov dword ptr [ebp-14],301 lea edx,[ebp-18] cmp dword ptr [edx+4],0 jbe near ptr M02_L83 mov edx,[edx] mov byte ptr [edx],0 mov edi,[ebp+0C] mov ebx,[ebp+10] mov [ebp-28],edi mov eax,edi mov [ebp-2C],eax mov [ebp-30],eax push ecx lea edx,[ebp-24] push edx push esi mov edx,[ebp-30] lea edx,[edx+ebx*2] lea ecx,[ebp-30] call dword ptr ds:[8EEBFA8]; System.Number.TryParseNumber(Char* ByRef, Char*, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo) test eax,eax jne short M02_L04 M02_L00: xor ecx,ecx M02_L01: xor eax,eax mov [ebp-28],eax test ecx,ecx jne near ptr M02_L49 mov edi,[ebp+0C] mov ebx,[ebp+10] xor eax,eax test ebx,ebx jle short M02_L08 M02_L02: mov [ebp-34],eax movzx ecx,word ptr [edi+eax*2] cmp ecx,100 jae short M02_L06 test byte ptr [ecx+6B760D30],80 je short M02_L03 jmp short M02_L07 M02_L03: mov eax,[ebp-34] jmp short M02_L08 M02_L04: mov ecx,[ebp-30] mov eax,[ebp-2C] sub ecx,eax mov edx,ecx shr edx,1F add ecx,edx sar ecx,1 cmp ecx,ebx jl near ptr M02_L52 M02_L05: xor ecx,ecx mov [ebp-28],ecx mov ecx,1 jmp short M02_L01 M02_L06: call dword ptr ds:[0BA7F708] test eax,eax je short M02_L11 M02_L07: mov eax,[ebp-34] inc eax cmp eax,ebx jl short M02_L02 M02_L08: lea edx,[ebx-1] mov [ebp-34],eax cmp edx,eax jle short M02_L14 M02_L09: cmp edx,ebx jae near ptr M02_L83 mov [ebp-38],edx movzx ecx,word ptr [edi+edx*2] cmp ecx,100 jae short M02_L12 test byte ptr [ecx+6B760D30],80 je short M02_L10 jmp short M02_L13 M02_L10: mov edx,[ebp-38] jmp short M02_L14 M02_L11: mov eax,[ebp-34] jmp short M02_L08 M02_L12: call dword ptr ds:[0BA7F708] test eax,eax je short M02_L16 M02_L13: mov edx,[ebp-38] dec edx mov eax,[ebp-34] cmp edx,eax mov [ebp-34],eax jg short M02_L09 M02_L14: mov eax,[ebp-34] sub edx,eax inc edx cmp eax,ebx ja near ptr M02_L76 sub ebx,eax cmp ebx,edx jb near ptr M02_L76 lea edi,[edi+eax*2] mov ebx,edx mov ecx,[esi+30] test ecx,ecx je short M02_L17 lea edx,[ecx+8] mov eax,[ecx+4] M02_L15: mov ecx,ebx cmp ecx,eax jne short M02_L23 test eax,eax je near ptr M02_L53 jmp short M02_L20 M02_L16: mov edx,[ebp-38] jmp short M02_L14 M02_L17: xor edx,edx xor eax,eax jmp short M02_L15 M02_L18: lea edx,[ecx+8] mov eax,[ecx+4] M02_L19: mov ecx,ebx cmp ecx,eax jne short M02_L29 test eax,eax je near ptr M02_L54 jmp short M02_L26 M02_L20: mov ecx,ebx cmp ecx,8 jge short M02_L21 push ebx mov ecx,edi call dword ptr ds:[8FCD3F0] jmp short M02_L22 M02_L21: push ebx mov ecx,edi call dword ptr ds:[8FCD3C0] M02_L22: test eax,eax jne near ptr M02_L53 M02_L23: mov ecx,[esi+34] test ecx,ecx jne short M02_L18 xor edx,edx xor eax,eax jmp short M02_L19 M02_L24: lea edx,[ecx+8] mov eax,[ecx+4] M02_L25: mov ecx,ebx cmp ecx,eax jne short M02_L32 test eax,eax je near ptr M02_L55 jmp near ptr M02_L39 M02_L26: mov ecx,ebx cmp ecx,8 jge short M02_L27 push ebx mov ecx,edi call dword ptr ds:[8FCD3F0] jmp short M02_L28 M02_L27: push ebx mov ecx,edi call dword ptr ds:[8FCD3C0] M02_L28: test eax,eax jne near ptr M02_L54 M02_L29: mov ecx,[esi+2C] test ecx,ecx jne short M02_L24 xor edx,edx xor eax,eax jmp short M02_L25 M02_L30: push ebx mov ecx,edi call dword ptr ds:[8FCD3C0] M02_L31: test eax,eax jne near ptr M02_L55 M02_L32: mov ecx,[esi+10] test ecx,ecx je short M02_L34 lea edx,[ecx+8] mov eax,[ecx+4] M02_L33: cmp eax,ebx jg short M02_L35 cmp eax,8 jge short M02_L40 push eax mov ecx,edi call dword ptr ds:[8FCD3F0] jmp short M02_L41 M02_L34: xor edx,edx xor eax,eax jmp short M02_L33 M02_L35: xor eax,eax M02_L36: test eax,eax jne near ptr M02_L56 mov ecx,[esi+14] test ecx,ecx je short M02_L38 lea edx,[ecx+8] mov eax,[ecx+4] M02_L37: cmp eax,ebx jg short M02_L42 cmp eax,8 jge short M02_L47 push eax mov ecx,edi call dword ptr ds:[8FCD3F0] jmp short M02_L48 M02_L38: xor edx,edx xor eax,eax jmp short M02_L37 M02_L39: mov ecx,ebx cmp ecx,8 jge short M02_L30 push ebx mov ecx,edi call dword ptr ds:[8FCD3F0] jmp short M02_L31 M02_L40: push eax mov ecx,edi call dword ptr ds:[8FCD3C0] M02_L41: jmp short M02_L36 M02_L42: xor eax,eax M02_L43: test eax,eax jne near ptr M02_L70 M02_L44: cmp byte ptr [esi+72],0 jne near ptr M02_L75 M02_L45: vxorps xmm0,xmm0,xmm0 mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 xor eax,eax cmp dword ptr [ebp-48],0D2A67E15 je short M02_L46 call CORINFO_HELP_FAIL_FAST M02_L46: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L47: push eax mov ecx,edi call dword ptr ds:[8FCD3C0] M02_L48: jmp short M02_L43 M02_L49: lea ecx,[ebp-24] call dword ptr ds:[8EED420]; System.Number.NumberToDouble(NumberBuffer ByRef) fstp qword ptr [ebp-50] mov esi,[ebp+8] vmovsd xmm0,qword ptr [ebp-50] vmovsd qword ptr [esi],xmm0 M02_L50: mov eax,1 cmp dword ptr [ebp-48],0D2A67E15 je short M02_L51 call CORINFO_HELP_FAIL_FAST M02_L51: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L52: push ebx push edi mov ecx,[ebp-30] sub ecx,eax mov eax,ecx shr eax,1F add ecx,eax sar ecx,1 call dword ptr ds:[8EED2D0] test eax,eax jne near ptr M02_L05 jmp near ptr M02_L00 M02_L53: vmovsd xmm0,qword ptr ds:[0BA51C50] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L54: vmovsd xmm0,qword ptr ds:[0BA51C58] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L55: vmovsd xmm0,qword ptr ds:[0BA51C60] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp short M02_L50 M02_L56: mov ecx,[esi+10] mov ecx,[ecx+4] cmp ecx,ebx ja near ptr M02_L76 lea edi,[edi+ecx*2] sub ebx,ecx mov ecx,[esi+30] test ecx,ecx jne short M02_L57 xor edx,edx xor eax,eax jmp short M02_L58 M02_L57: lea edx,[ecx+8] mov eax,[ecx+4] M02_L58: cmp ebx,eax jne short M02_L62 test eax,eax je short M02_L61 mov ecx,ebx cmp ecx,8 jge short M02_L59 push ebx mov ecx,edi call dword ptr ds:[8FCD3F0] jmp short M02_L60 M02_L59: push ebx mov ecx,edi call dword ptr ds:[8FCD3C0] M02_L60: test eax,eax je short M02_L62 M02_L61: vmovsd xmm0,qword ptr ds:[0BA51C50] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L62: mov eax,ebx mov ecx,[esi+2C] test ecx,ecx jne short M02_L63 xor edx,edx xor esi,esi jmp short M02_L64 M02_L63: lea edx,[ecx+8] mov esi,[ecx+4] M02_L64: mov ecx,edi cmp eax,esi jne short M02_L68 test esi,esi je short M02_L67 cmp eax,8 jge short M02_L65 push eax call dword ptr ds:[8FCD3F0] jmp short M02_L66 M02_L65: push eax call dword ptr ds:[8FCD3C0] M02_L66: test eax,eax je short M02_L68 M02_L67: vmovsd xmm0,qword ptr ds:[0BA51C60] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L68: vxorps xmm0,xmm0,xmm0 mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 xor eax,eax cmp dword ptr [ebp-48],0D2A67E15 je short M02_L69 call CORINFO_HELP_FAIL_FAST M02_L69: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L70: mov ecx,[esi+14] mov ecx,[ecx+4] cmp ecx,ebx ja near ptr M02_L76 lea edx,[edi+ecx*2] mov eax,ebx sub eax,ecx mov [ebp-3C],eax mov ecx,[esi+2C] test ecx,ecx jne short M02_L71 xor ecx,ecx xor eax,eax jmp short M02_L72 M02_L71: lea eax,[ecx+8] mov ecx,[ecx+4] xchg eax,ecx M02_L72: mov [ebp-44],edx mov edx,[ebp-3C] cmp edx,eax jne near ptr M02_L44 test eax,eax je near ptr M02_L82 mov eax,[ebp-44] mov [ebp-40],ecx cmp edx,8 jge short M02_L73 push edx mov ecx,eax mov edx,[ebp-40] call dword ptr ds:[8FCD3F0] jmp short M02_L74 M02_L73: push edx mov ecx,eax mov edx,[ebp-40] call dword ptr ds:[8FCD3C0] M02_L74: test eax,eax jne short M02_L82 jmp near ptr M02_L44 M02_L75: push ebx push edi mov ecx,2D call dword ptr ds:[8EED258] test eax,eax je near ptr M02_L45 cmp ebx,1 jae short M02_L77 M02_L76: call dword ptr ds:[8FA5270] int 3 M02_L77: lea ecx,[edi+2] lea eax,[ebx-1] mov edx,[esi+2C] test edx,edx jne short M02_L78 xor edx,edx xor esi,esi jmp short M02_L79 M02_L78: lea esi,[edx+8] mov edx,[edx+4] mov ebx,edx mov edx,esi mov esi,ebx M02_L79: cmp eax,esi jne near ptr M02_L45 test esi,esi je short M02_L82 cmp eax,8 jge short M02_L80 push eax call dword ptr ds:[8FCD3F0] jmp short M02_L81 M02_L80: push eax call dword ptr ds:[8FCD3C0] M02_L81: test eax,eax je near ptr M02_L45 M02_L82: vmovsd xmm0,qword ptr ds:[0BA51C60] mov esi,[ebp+8] vmovsd qword ptr [esi],xmm0 jmp near ptr M02_L50 M02_L83: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1328 ``` ### 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 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in PerfLabTests.LowLevelPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ObjectStringIsString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.LowLevelPerf.ObjectStringIsString.html>) 113.89 μs 93.56 μs 0.82 0.00 False Trace Trace
[NewDelegateClassEmptyInstanceFn - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/PerfLabTests.LowLevelPerf.NewDelegateClassEmptyInstanceFn.html>) 536.06 μs 473.94 μs 0.88 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.LowLevelPerf*'
### Payloads [Baseline]() [Compare]() ### Histogram #### PerfLabTests.LowLevelPerf.ObjectStringIsString ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 93.55746199907877 < 108.39319130170315. IsChangePoint: Marked as a change because one of 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 424.49756459114934 (T) = (0 -93682.57743192436) / Math.Sqrt((218260.47918305252 / (299)) + (34896.52846781556 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.17903116379066614 = (114112.22119524743 - 93682.57743192436) / 114112.22119524743 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.ObjectStringIsString() push ebp mov ebp,esp push esi xor eax,eax xor edx,edx mov ecx,ds:[0AE56558] test ecx,ecx jle short M00_L02 mov esi,ds:[74341AC] nop nop nop nop nop nop nop nop M00_L00: mov eax,esi test eax,eax je short M00_L01 cmp dword ptr [eax],5229574 je short M00_L01 xor eax,eax M00_L01: test eax,eax setne al movzx eax,al inc edx cmp edx,ecx jl short M00_L00 M00_L02: pop esi pop ebp ret ; Total bytes of code 64 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.ObjectStringIsString() push ebp mov ebp,esp push edi push esi xor eax,eax xor edx,edx mov ecx,ds:[0A576558] test ecx,ecx jle short M00_L02 mov esi,ds:[69341AC] nop nop nop nop nop nop nop M00_L00: mov eax,esi test eax,eax je short M00_L01 xor edi,edi cmp dword ptr [eax],7C59574 cmovne eax,edi M00_L01: test eax,eax setne al movzx eax,al inc edx cmp edx,ecx jl short M00_L00 M00_L02: pop esi pop edi pop ebp ret ; Total bytes of code 66 ``` #### PerfLabTests.LowLevelPerf.NewDelegateClassEmptyInstanceFn ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 473.9391504329004 < 507.68127750496024. IsChangePoint: Marked as a change because one of 12/12/2022 5:25:39 PM, 12/20/2022 1:34:12 PM, 1/3/2023 6:29:42 AM, 1/18/2023 6:24:13 PM, 1/30/2023 9:42:46 PM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 19.2664098549491 (T) = (0 -481207.4091499962) / Math.Sqrt((755213407.6577746 / (299)) + (7862026.74377327 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.06365587840407008 = (513921.5359517753 - 481207.4091499962) / 513921.5359517753 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.NewDelegateClassEmptyInstanceFn() push ebp mov ebp,esp push edi push esi push ebx mov esi,ds:[6AA4180] xor edi,edi mov ebx,ds:[0A6D6558] test ebx,ebx jle short M00_L01 M00_L00: mov ecx,offset MT_PerfLabTests.MyDelegate call CORINFO_HELP_NEWSFAST test esi,esi je short M00_L02 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ESI mov dword ptr [eax+0C],0AF6C738 inc edi cmp edi,ebx jl short M00_L00 M00_L01: pop ebx pop esi pop edi pop ebp ret M00_L02: call dword ptr ds:[7DEB630] int 3 ; Total bytes of code 70 ``` ### Compare Jit Disasm ```assembly ; PerfLabTests.LowLevelPerf.NewDelegateClassEmptyInstanceFn() push ebp mov ebp,esp push edi push esi push ebx mov esi,ds:[7274180] xor edi,edi mov ebx,ds:[0ACB6558] test ebx,ebx jle short M00_L01 M00_L00: mov ecx,offset MT_PerfLabTests.MyDelegate call CORINFO_HELP_NEWSFAST test esi,esi je short M00_L02 lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_ESI mov dword ptr [eax+0C],0B4FC9F0 inc edi cmp edi,ebx jl short M00_L00 M00_L01: pop ebx pop esi pop edi pop ebp ret M00_L02: call dword ptr ds:[843B630] int 3 ; Total bytes of code 70 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.ContainsTrue<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ImmutableSortedSet - 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).ImmutableSortedSet(Size%3a%20512).html>) 40.92 μs 35.48 μs 0.87 0.00 False
[Array - 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).Array(Size%3a%20512).html>) 20.36 μs 16.25 μs 0.80 0.25 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>.ImmutableSortedSet(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 35.47637059631544 < 38.796561387463036. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 110.81382419125094 (T) = (0 -35035.33278075914) / Math.Sqrt((130425.72032535836 / (299)) + (51108.215732857105 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.14247383038762854 = (40856.28406722118 - 35035.33278075914) / 40856.28406722118 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.ContainsTrue<Int32>.Array(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 16.24905762806236 < 18.907298846128437. IsChangePoint: Marked as a change because one of 2/10/2023 8:30:00 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 6.005632494758367 (T) = (0 -17242.847435623997) / Math.Sqrt((694542.035042768 / (299)) + (1275510.1564045108 / (18))) is greater than 1.9675235316906419 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (18) - 2, .975) and 0.08610996945756415 = (18867.529855194472 - 17242.847435623997) / 18867.529855194472 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 765e3dbb2d3aa2b114d8c07e44ae2ca926df16b4
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Tests.Perf_Int32

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ToStringHex - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Int32.ToStringHex(value%3a%202147483647).html>) 26.25 ns 22.25 ns 0.85 0.01 False 290.99922566414944 281.7864304055529 0.968340825520858) 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.Tests.Perf_Int32*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Int32.ToStringHex(value: 2147483647) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 22.247811986291257 < 24.928715782834978. IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 2/14/2023 7:27:15 AM falls between 2/5/2023 7:19:43 PM and 2/14/2023 7:27:15 AM. IsImprovementStdDev: Marked as improvement because 50.40937383490664 (T) = (0 -22.743758467153352) / Math.Sqrt((0.3734464301903822 / (299)) + (0.04376638507385934 / (22))) is greater than 1.9674283869023508 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (22) - 2, .975) and 0.11200159555217355 = (25.612386636320405 - 22.743758467153352) / 25.612386636320405 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Int32.ToStringHex(Int32) push ebp mov ebp,esp mov ecx,edx push 8227534 push 0 mov edx,0FFFFFFFF call dword ptr ds:[882D480]; System.Number.g__FormatInt32Slow|42_0(Int32, Int32, System.String, System.IFormatProvider) pop ebp ret ; Total bytes of code 25 ``` ```assembly ; System.Number.g__FormatInt32Slow|42_0(Int32, Int32, System.String, System.IFormatProvider) push ebp mov ebp,esp push edi push esi push ebx sub esp,54 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-4C],xmm4 vmovdqu xmmword ptr [ebp-3C],xmm4 xor eax,eax mov [ebp-2C],eax mov [ebp-10],esp mov dword ptr [ebp-14],0F7F959B6 mov esi,ecx mov edi,edx mov ebx,[ebp+8] mov ecx,[ebp+0C] test ecx,ecx je short M01_L01 lea eax,[ecx+8] mov edx,[ecx+4] M01_L00: mov [ebp-60],eax mov [ebp-58],edx push edx push eax lea ecx,[ebp-28] call dword ptr ds:[882BBA0]; System.Number.ParseFormatSpecifier(System.ReadOnlySpan`1, Int32 ByRef) mov [ebp-24],eax mov edx,eax and edx,0FFDF cmp edx,47 je short M01_L02 cmp edx,44 jne short M01_L09 jmp short M01_L03 M01_L01: xor eax,eax xor edx,edx jmp short M01_L00 M01_L02: cmp dword ptr [ebp-28],0 jg short M01_L09 M01_L03: test esi,esi jge short M01_L07 mov edi,[ebp-28] test ebx,ebx je short M01_L04 mov ecx,ebx call dword ptr ds:[0A8C3D08]; System.Globalization.NumberFormatInfo.g__GetProviderNonNull|44_0(System.IFormatProvider) jmp short M01_L05 M01_L04: call dword ptr ds:[0A8C38B8] M01_L05: push dword ptr [eax+14] mov ecx,esi mov edx,edi call dword ptr ds:[882B720] cmp dword ptr [ebp-14],0F7F959B6 je short M01_L06 call CORINFO_HELP_FAIL_FAST M01_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M01_L07: mov ecx,esi mov edx,[ebp-28] call dword ptr ds:[882B870] cmp dword ptr [ebp-14],0F7F959B6 je short M01_L08 call CORINFO_HELP_FAIL_FAST M01_L08: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M01_L09: cmp edx,58 jne short M01_L11 push dword ptr [ebp-28] mov ecx,esi and ecx,edi add eax,0FFFFFFDF movzx edx,ax call dword ptr ds:[882B750]; System.Number.Int32ToHexStr(Int32, Char, Int32) cmp dword ptr [ebp-14],0F7F959B6 je short M01_L10 call CORINFO_HELP_FAIL_FAST M01_L10: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M01_L11: test ebx,ebx je short M01_L13 mov ecx,ebx call dword ptr ds:[0A8C3D08]; System.Globalization.NumberFormatInfo.g__GetProviderNonNull|44_0(System.IFormatProvider) mov edi,eax M01_L12: mov [ebp-5C],edi lea eax,[ebp-20] xor edx,edx mov [ebp-3C],edx mov [ebp-38],edx mov byte ptr [ebp-34],0 mov byte ptr [ebp-33],0 mov byte ptr [ebp-32],1 mov [ebp-30],eax mov dword ptr [ebp-2C],0B lea eax,[ebp-30] cmp dword ptr [eax+4],0 jbe near ptr M01_L31 mov eax,[eax] mov byte ptr [eax],0 mov ecx,esi mov dword ptr [ebp-3C],0A test ecx,ecx jl short M01_L14 mov byte ptr [ebp-34],0 jmp short M01_L15 M01_L13: call dword ptr ds:[0A8C38B8] mov edi,eax jmp short M01_L12 M01_L14: mov byte ptr [ebp-34],1 neg ecx M01_L15: mov esi,[ebp-30] lea ebx,[esi+0A] xor eax,eax cmp ecx,64 jb near ptr M01_L27 M01_L16: add ebx,0FFFFFFFE add eax,0FFFFFFFE mov [ebp-54],eax mov edx,51EB851F mov eax,ecx mul edx shr edx,5 imul eax,edx,64 sub ecx,eax movzx eax,word ptr [ecx*2+6AEF828C] mov [ebx],ax cmp edx,64 jae near ptr M01_L26 M01_L17: test edx,edx je near ptr M01_L25 M01_L18: mov ecx,[ebp-54] dec ecx mov eax,0CCCCCCCD mov [ebp-50],edx mul edx shr edx,3 lea eax,[edx+edx*4] add eax,eax mov edi,[ebp-50] sub edi,eax mov eax,edi dec ebx add eax,30 mov [ebx],al test edx,edx jne short M01_L24 M01_L19: test ecx,ecx mov [ebp-54],ecx jg short M01_L18 mov ecx,ebx add esi,0A sub esi,ecx mov [ebp-3C],esi mov [ebp-38],esi mov edx,[ebp-30] dec esi js short M01_L23 M01_L20: lea eax,[edx+1] lea ebx,[ecx+1] movzx ecx,byte ptr [ecx] mov [edx],cl dec esi mov ecx,ebx jns short M01_L22 M01_L21: mov byte ptr [eax],0 test [esp],esp sub esp,40 lea ecx,[esp] mov [ebp-10],esp xor edx,edx mov [ebp-4C],edx mov [ebp-44],ecx mov dword ptr [ebp-40],20 mov [ebp-48],edx mov esi,[ebp-24] test esi,esi je short M01_L28 push esi push dword ptr [ebp-28] push dword ptr [ebp-5C] lea ecx,[ebp-4C] lea edx,[ebp-3C] call dword ptr ds:[882BBB8]; System.Number.NumberToString(System.Text.ValueStringBuilder ByRef, NumberBuffer ByRef, Char, Int32, System.Globalization.NumberFormatInfo) jmp short M01_L29 M01_L22: mov edx,eax jmp short M01_L20 M01_L23: mov eax,edx jmp short M01_L21 M01_L24: mov [ebp-54],ecx jmp near ptr M01_L18 M01_L25: mov ecx,[ebp-54] jmp short M01_L19 M01_L26: mov ecx,edx mov eax,[ebp-54] jmp near ptr M01_L16 M01_L27: mov [ebp-54],eax mov edx,ecx jmp near ptr M01_L17 M01_L28: push dword ptr [ebp-58] push dword ptr [ebp-60] push dword ptr [ebp-5C] lea edx,[ebp-3C] lea ecx,[ebp-4C] call dword ptr ds:[882BBD0]; System.Number.NumberToStringFormat(System.Text.ValueStringBuilder ByRef, NumberBuffer ByRef, System.ReadOnlySpan`1, System.Globalization.NumberFormatInfo) M01_L29: lea ecx,[ebp-4C] call dword ptr ds:[0AE99120]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-14],0F7F959B6 je short M01_L30 call CORINFO_HELP_FAIL_FAST M01_L30: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M01_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 674 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Int32.ToStringHex(Int32) push ebp mov ebp,esp mov ecx,edx push 7E38430 push 0 mov edx,0FFFFFFFF call dword ptr ds:[843D480]; System.Number.g__FormatInt32Slow|42_0(Int32, Int32, System.String, System.IFormatProvider) pop ebp ret ; Total bytes of code 25 ``` ```assembly ; System.Number.g__FormatInt32Slow|42_0(Int32, Int32, System.String, System.IFormatProvider) push ebp mov ebp,esp push edi push esi push ebx sub esp,54 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-4C],xmm4 vmovdqu xmmword ptr [ebp-3C],xmm4 xor eax,eax mov [ebp-2C],eax mov [ebp-10],esp mov dword ptr [ebp-14],72166E62 mov esi,ecx mov edi,edx mov ebx,[ebp+8] mov ecx,[ebp+0C] test ecx,ecx je short M01_L01 lea eax,[ecx+8] mov edx,[ecx+4] M01_L00: mov [ebp-60],eax mov [ebp-58],edx push edx push eax lea ecx,[ebp-28] call dword ptr ds:[843BBA0]; System.Number.ParseFormatSpecifier(System.ReadOnlySpan`1, Int32 ByRef) mov [ebp-24],eax mov edx,eax and edx,0FFDF cmp edx,47 je short M01_L02 cmp edx,44 jne short M01_L09 jmp short M01_L03 M01_L01: xor eax,eax xor edx,edx jmp short M01_L00 M01_L02: cmp dword ptr [ebp-28],0 jg short M01_L09 M01_L03: test esi,esi jge short M01_L07 mov edi,[ebp-28] test ebx,ebx je short M01_L04 mov ecx,ebx call dword ptr ds:[0A4D3D08]; System.Globalization.NumberFormatInfo.g__GetProviderNonNull|44_0(System.IFormatProvider) jmp short M01_L05 M01_L04: call dword ptr ds:[0A4D38B8] M01_L05: push dword ptr [eax+14] mov ecx,esi mov edx,edi call dword ptr ds:[843B720] cmp dword ptr [ebp-14],72166E62 je short M01_L06 call CORINFO_HELP_FAIL_FAST M01_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M01_L07: mov ecx,esi mov edx,[ebp-28] call dword ptr ds:[843B870] cmp dword ptr [ebp-14],72166E62 je short M01_L08 call CORINFO_HELP_FAIL_FAST M01_L08: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M01_L09: cmp edx,58 jne short M01_L11 push dword ptr [ebp-28] mov ecx,esi and ecx,edi add eax,0FFFFFFDF movzx edx,ax call dword ptr ds:[843B750]; System.Number.Int32ToHexStr(Int32, Char, Int32) cmp dword ptr [ebp-14],72166E62 je short M01_L10 call CORINFO_HELP_FAIL_FAST M01_L10: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M01_L11: test ebx,ebx je short M01_L13 mov ecx,ebx call dword ptr ds:[0A4D3D08]; System.Globalization.NumberFormatInfo.g__GetProviderNonNull|44_0(System.IFormatProvider) mov edi,eax M01_L12: mov [ebp-5C],edi lea eax,[ebp-20] xor edx,edx mov [ebp-3C],edx mov [ebp-38],edx mov byte ptr [ebp-34],0 mov byte ptr [ebp-33],0 mov byte ptr [ebp-32],1 mov [ebp-30],eax mov dword ptr [ebp-2C],0B lea eax,[ebp-30] cmp dword ptr [eax+4],0 jbe near ptr M01_L31 mov eax,[eax] mov byte ptr [eax],0 mov ecx,esi mov dword ptr [ebp-3C],0A test ecx,ecx jl short M01_L14 mov byte ptr [ebp-34],0 jmp short M01_L15 M01_L13: call dword ptr ds:[0A4D38B8] mov edi,eax jmp short M01_L12 M01_L14: mov byte ptr [ebp-34],1 neg ecx M01_L15: mov esi,[ebp-30] lea ebx,[esi+0A] xor eax,eax cmp ecx,64 jb near ptr M01_L27 M01_L16: add ebx,0FFFFFFFE add eax,0FFFFFFFE mov [ebp-54],eax mov edx,51EB851F mov eax,ecx mul edx shr edx,5 imul eax,edx,64 sub ecx,eax movzx eax,word ptr [ecx*2+6B277CFC] mov [ebx],ax cmp edx,64 jae near ptr M01_L26 M01_L17: test edx,edx je near ptr M01_L25 M01_L18: mov ecx,[ebp-54] dec ecx mov eax,0CCCCCCCD mov [ebp-50],edx mul edx shr edx,3 lea eax,[edx+edx*4] add eax,eax mov edi,[ebp-50] sub edi,eax mov eax,edi dec ebx add eax,30 mov [ebx],al test edx,edx jne short M01_L24 M01_L19: test ecx,ecx mov [ebp-54],ecx jg short M01_L18 mov ecx,ebx add esi,0A sub esi,ecx mov [ebp-3C],esi mov [ebp-38],esi mov edx,[ebp-30] dec esi js short M01_L23 M01_L20: lea eax,[edx+1] lea ebx,[ecx+1] movzx ecx,byte ptr [ecx] mov [edx],cl dec esi mov ecx,ebx jns short M01_L22 M01_L21: mov byte ptr [eax],0 test [esp],esp sub esp,40 lea ecx,[esp] mov [ebp-10],esp xor edx,edx mov [ebp-4C],edx mov [ebp-44],ecx mov dword ptr [ebp-40],20 mov [ebp-48],edx mov esi,[ebp-24] test esi,esi je short M01_L28 push esi push dword ptr [ebp-28] push dword ptr [ebp-5C] lea ecx,[ebp-4C] lea edx,[ebp-3C] call dword ptr ds:[843BBB8]; System.Number.NumberToString(System.Text.ValueStringBuilder ByRef, NumberBuffer ByRef, Char, Int32, System.Globalization.NumberFormatInfo) jmp short M01_L29 M01_L22: mov edx,eax jmp short M01_L20 M01_L23: mov eax,edx jmp short M01_L21 M01_L24: mov [ebp-54],ecx jmp near ptr M01_L18 M01_L25: mov ecx,[ebp-54] jmp short M01_L19 M01_L26: mov ecx,edx mov eax,[ebp-54] jmp near ptr M01_L16 M01_L27: mov [ebp-54],eax mov edx,ecx jmp near ptr M01_L17 M01_L28: push dword ptr [ebp-58] push dword ptr [ebp-60] push dword ptr [ebp-5C] lea edx,[ebp-3C] lea ecx,[ebp-4C] call dword ptr ds:[843BBD0]; System.Number.NumberToStringFormat(System.Text.ValueStringBuilder ByRef, NumberBuffer ByRef, System.ReadOnlySpan`1, System.Globalization.NumberFormatInfo) M01_L29: lea ecx,[ebp-4C] call dword ptr ds:[0AAA9120]; System.Text.ValueStringBuilder.ToString() cmp dword ptr [ebp-14],72166E62 je short M01_L30 call CORINFO_HELP_FAIL_FAST M01_L30: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M01_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 674 ``` ### 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)