Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Perf] Windows/x86: 28 Improvements on 9/9/2022 1:01:45 PM #8513

Closed
performanceautofiler bot opened this issue Sep 13, 2022 · 2 comments
Closed

[Perf] Windows/x86: 28 Improvements on 9/9/2022 1:01:45 PM #8513

performanceautofiler bot opened this issue Sep 13, 2022 · 2 comments

Comments

@performanceautofiler
Copy link

performanceautofiler bot commented Sep 13, 2022

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
Diff Diff

Improvements in System.Text.Tests.Perf_Encoding

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
GetChars - Duration of single invocation 29.64 ns 25.18 ns 0.85 0.02 False
GetString - Duration of single invocation 30.66 ns 26.74 ns 0.87 0.02 False
GetString - Duration of single invocation 115.39 ns 89.18 ns 0.77 0.02 False
GetChars - Duration of single invocation 142.36 ns 115.60 ns 0.81 0.01 False
GetString - Duration of single invocation 31.58 ns 27.48 ns 0.87 0.07 False
GetChars - Duration of single invocation 114.36 ns 87.30 ns 0.76 0.02 False
GetString - Duration of single invocation 131.29 ns 104.39 ns 0.80 0.02 False

graph
graph
graph
graph
graph
graph
graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Text.Tests.Perf_Encoding*'

Payloads

Baseline
Compare

Histogram

System.Text.Tests.Perf_Encoding.GetChars(size: 16, encName: "ascii")


Description of detection logic

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 25.17680674988183 < 28.21814470971666.
IsChangePoint: Marked as a change because one of 8/21/2022 7:03:28 PM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 72.41512761828051 (T) = (0 -25.29701743040735) / Math.Sqrt((0.28830448292091454 / (299)) + (0.06608055800561133 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.16623856316339775 = (30.340834095646684 - 25.29701743040735) / 30.340834095646684 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Tests.Perf_Encoding.GetChars()
       push      ebp
       mov       ebp,esp
       sub       esp,8
       xor       eax,eax
       mov       [ebp-8],eax
       mov       [ebp-4],ecx
       mov       ecx,[ebp-4]
       mov       ecx,[ecx+8]
       mov       [ebp-8],ecx
       mov       ecx,[ebp-8]
       mov       edx,[ebp-4]
       mov       edx,[edx+10]
       mov       eax,[ebp-8]
       mov       eax,[eax]
       mov       eax,[eax+38]
       call      dword ptr [eax+8]
       mov       esp,ebp
       pop       ebp
       ret
       add       [edx+edi*2+0B49],dh
       add       [eax],al
       test      al,7A
       dec       ecx
       or        ebp,[esi+edx-74AAF4B6]
       in        al,dx
       push      eax
       mov       [ebp-4],ecx
       push      dword ptr [ebp+0C]
       (bad)
; Total bytes of code 75

System.Text.Tests.Perf_Encoding.GetString(size: 16, encName: "utf-8")


Description of detection logic

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 26.739288992597654 < 29.15435933867865.
IsChangePoint: Marked as a change because one of 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 71.775928968367 (T) = (0 -26.912634502955864) / Math.Sqrt((0.19897013428435656 / (299)) + (0.05759799965878534 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.145154085892344 = (31.48243918443364 - 26.912634502955864) / 31.48243918443364 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Tests.Perf_Encoding.GetString()
       push      ebp
       mov       ebp,esp
       sub       esp,8
       xor       eax,eax
       mov       [ebp-8],eax
       mov       [ebp-4],ecx
       mov       ecx,[ebp-4]
       mov       ecx,[ecx+8]
       mov       [ebp-8],ecx
       mov       ecx,[ebp-8]
       mov       edx,[ebp-4]
       mov       edx,[edx+10]
       mov       eax,[ebp-8]
       mov       eax,[eax]
       mov       eax,[eax+3C]
       call      dword ptr [eax+14]
       mov       esp,ebp
       pop       ebp
       ret
       add       al,dl
       jns       short 0AFE042C
       or        al,[eax]
       add       [eax],al
       add       ah,al
       jns       short 0AFE0434
       or        ah,ah
       adc       bh,bl
       or        dl,[ebp-75]
       in        al,dx
       push      eax
       mov       [ebp-4],ecx
       push      dword ptr [ebp+0C]
       (bad)
; Total bytes of code 75

System.Text.Tests.Perf_Encoding.GetString(size: 512, encName: "ascii")


Description of detection logic

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 89.18464312363851 < 110.22428985386085.
IsChangePoint: Marked as a change because one of 8/25/2022 6:55:57 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 102.19174704275004 (T) = (0 -88.62236918550641) / Math.Sqrt((22.966060779248956 / (299)) + (0.7088945045942359 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.28416074983304596 = (123.8020535543939 - 88.62236918550641) / 123.8020535543939 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Tests.Perf_Encoding.GetString()
       push      ebp
       mov       ebp,esp
       sub       esp,8
       xor       eax,eax
       mov       [ebp-8],eax
       mov       [ebp-4],ecx
       mov       ecx,[ebp-4]
       mov       ecx,[ecx+8]
       mov       [ebp-8],ecx
       mov       ecx,[ebp-8]
       mov       edx,[ebp-4]
       mov       edx,[edx+10]
       mov       eax,[ebp-8]
       mov       eax,[eax]
       mov       eax,[eax+3C]
       call      dword ptr [eax+14]
       mov       esp,ebp
       pop       ebp
       ret
       add       [eax+7A],bh
       jbe       short 0B79043F
       add       [eax],al
       add       [eax],al
       insb
       jp        short BenchmarkDotNet.Autogenerated.Runnable_2+<>c.<.ctor>b__3_2()
       or        ebp,[esi+edx-74AAF489]
       in        al,dx
       push      eax
       mov       [ebp-4],ecx
       push      dword ptr [ebp+0C]
       (bad)
; Total bytes of code 75
; BenchmarkDotNet.Autogenerated.Runnable_2+<>c.<.ctor>b__3_2()
       push      ebp
       mov       ebp,esp
       push      eax
       mov       [ebp-4],ecx
       mov       esp,ebp
       pop       ebp
       ret
       add       [eax],al
       add       [eax],al
       add       ah,ch
       jp        short BenchmarkDotNet.Autogenerated.Runnable_2.Dummy3()
       or        eax,[eax]
       add       [eax],al
       add       al,ah
       jp        short BenchmarkDotNet.Autogenerated.Runnable_2.Dummy3()
       or        edx,[eax+550AD0C4]
       mov       ebp,esp
       push      eax
       mov       [ebp-4],ecx
; Total bytes of code 39

System.Text.Tests.Perf_Encoding.GetChars(size: 512, encName: "utf-8")


Description of detection logic

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 115.59988913412217 < 135.5317087414925.
IsChangePoint: Marked as a change because one of 8/25/2022 6:55:57 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 105.89755800344382 (T) = (0 -114.65250569237993) / Math.Sqrt((29.69988473330213 / (299)) + (0.3856641851650302 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.24393385757101463 = (151.6434862749443 - 114.65250569237993) / 151.6434862749443 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Tests.Perf_Encoding.GetChars()
       push      ebp
       mov       ebp,esp
       sub       esp,8
       xor       eax,eax
       mov       [ebp-8],eax
       mov       [ebp-4],ecx
       mov       ecx,[ebp-4]
       mov       ecx,[ecx+8]
       mov       [ebp-8],ecx
       mov       ecx,[ebp-8]
       mov       edx,[ebp-4]
       mov       edx,[edx+10]
       mov       eax,[ebp-8]
       mov       eax,[eax]
       mov       eax,[eax+38]
       call      dword ptr [eax+8]
       mov       esp,ebp
       pop       ebp
       ret
       add       [edx+edi*2],cl
       cmpsb
       or        al,[eax]
       add       [eax],al
       add       [eax],al
       jp        short BenchmarkDotNet.Autogenerated.Runnable_3.WorkloadActionNoUnroll(Int64)
       or        ah,ah
       adc       ch,[eax-1374AAF6]
       push      eax
       mov       [ebp-4],ecx
       push      dword ptr [ebp+0C]
       (bad)
; Total bytes of code 75
; BenchmarkDotNet.Autogenerated.Runnable_3.WorkloadActionNoUnroll(Int64)
       push      ebp
M01_L00:
       mov       ebp,esp
       push      edi
       push      esi
       push      ebx
       push      eax
       mov       esi,ecx
       xor       edi,edi
       xor       ebx,ebx
       cmp       dword ptr [ebp+8],1
       mov       ecx,[ebp+0C]
       sbb       ecx,0
       jl        short M01_L02
M01_L01:
       mov       eax,[esi+34]
       mov       [ebp-10],eax
       mov       edx,[esi+30]
       mov       ecx,[edx+4]
       call      dword ptr [edx+0C]
       mov       edx,[ebp-10]
       lea       edx,[edx+20]
       call      CORINFO_HELP_ASSIGN_REF_EAX
       add       edi,1
       adc       ebx,0
       cmp       edi,[ebp+8]
       mov       eax,ebx
       sbb       eax,[ebp+0C]
       jl        short M01_L01
M01_L02:
       pop       ecx
       pop       ebx
       pop       esi
       pop       edi
       pop       ebp
       ret       8
       add       [eax],al
       add       [eax],al
       add       ah,ah
       jns       short BenchmarkDotNet.Engines.EngineEventSource.WorkloadJittingStart(Int64)
       or        al,[eax]
       add       [eax],al
       add       al,bl
       jns       short M01_L00
       or        dl,[eax]
       (bad)
       or        dl,[ebp-75]
       in        al,dx
; Total bytes of code 99

System.Text.Tests.Perf_Encoding.GetString(size: 16, encName: "ascii")


Description of detection logic

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 27.482136931320575 < 30.129533277813604.
IsChangePoint: Marked as a change because one of 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 77.84484946092802 (T) = (0 -27.455733477260218) / Math.Sqrt((0.2980543318056651 / (299)) + (0.04202557753117214 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.14309579633841915 = (32.04061009380154 - 27.455733477260218) / 32.04061009380154 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Tests.Perf_Encoding.GetString()
       push      ebp
       mov       ebp,esp
       sub       esp,8
       xor       eax,eax
       mov       [ebp-8],eax
       mov       [ebp-4],ecx
       mov       ecx,[ebp-4]
       mov       ecx,[ecx+8]
       mov       [ebp-8],ecx
       mov       ecx,[ebp-8]
       mov       edx,[ebp-4]
       mov       edx,[edx+10]
       mov       eax,[ebp-8]
       mov       eax,[eax]
       mov       eax,[eax+3C]
       call      dword ptr [eax+14]
       mov       esp,ebp
       pop       ebp
       ret
       add       [eax+7A],bh
       popfd
       or        al,[eax]
       add       [eax],al
       add       [edx+edi*2-63],ch
       or        ch,[esi+edx-74AAF562]
       in        al,dx
       push      eax
       mov       [ebp-4],ecx
       push      dword ptr [ebp+0C]
       (bad)
; Total bytes of code 75

System.Text.Tests.Perf_Encoding.GetChars(size: 512, encName: "ascii")


Description of detection logic

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 87.29582268688904 < 108.14741226051109.
IsChangePoint: Marked as a change because one of 8/25/2022 6:55:57 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 98.5382902188942 (T) = (0 -87.1758384875744) / Math.Sqrt((34.75091505881639 / (299)) + (0.2934718900808057 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.2922754748750731 = (123.17764241981892 - 87.1758384875744) / 123.17764241981892 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Tests.Perf_Encoding.GetChars()
       push      ebp
       mov       ebp,esp
       sub       esp,8
       xor       eax,eax
       mov       [ebp-8],eax
       mov       [ebp-4],ecx
       mov       ecx,[ebp-4]
       mov       ecx,[ecx+8]
       mov       [ebp-8],ecx
       mov       ecx,[ebp-8]
       mov       edx,[ebp-4]
       mov       edx,[edx+10]
       mov       eax,[ebp-8]
       mov       eax,[eax]
       mov       eax,[eax+38]
       call      dword ptr [eax+8]
       mov       esp,ebp
       pop       ebp
       ret
       add       [edx+edi*2+0AA0],dh
       add       [eax],al
       test      al,7A
       mov       al,ds:[0A116AC0A]
       or        dl,[ebp-75]
       in        al,dx
       push      eax
       mov       [ebp-4],ecx
       push      dword ptr [ebp+0C]
       (bad)
; Total bytes of code 75

System.Text.Tests.Perf_Encoding.GetString(size: 512, encName: "utf-8")


Description of detection logic

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 104.38782246310731 < 125.0050031144263.
IsChangePoint: Marked as a change because one of 8/25/2022 6:55:57 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 59.709549068076065 (T) = (0 -105.78012015317145) / Math.Sqrt((22.20753880082627 / (299)) + (3.9667713713265473 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.2384260031431366 = (138.89670680687993 - 105.78012015317145) / 138.89670680687993 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Tests.Perf_Encoding.GetString()
       push      ebp
       mov       ebp,esp
       sub       esp,8
       xor       eax,eax
       mov       [ebp-8],eax
       mov       [ebp-4],ecx
       mov       ecx,[ebp-4]
       mov       ecx,[ecx+8]
       mov       [ebp-8],ecx
       mov       ecx,[ebp-8]
       mov       edx,[ebp-4]
       mov       edx,[edx+10]
       mov       eax,[ebp-8]
       mov       eax,[eax]
       mov       eax,[eax+3C]
       call      dword ptr [eax+14]
       mov       esp,ebp
       pop       ebp
       ret
       add       al,dl
       jns       short BenchmarkDotNet.Engines.EngineEventSource.WorkloadJittingStop(Int64)
       or        eax,[eax]
       add       [eax],al
       add       ah,al
       jns       short BenchmarkDotNet.Engines.EngineEventSource.WorkloadJittingStop(Int64)
       or        esp,esp
       adc       ch,[ebx+ecx]
       push      ebp
       mov       ebp,esp
       push      eax
       mov       [ebp-4],ecx
       push      dword ptr [ebp+0C]
       (bad)
; Total bytes of code 75
; BenchmarkDotNet.Engines.EngineEventSource.WorkloadJittingStop(Int64)
       push      ebp
       mov       ebp,esp
       push      eax
       mov       [ebp-4],ecx
       push      dword ptr [ebp+0C]
       push      dword ptr [ebp+8]
       mov       ecx,[ebp-4]
       mov       edx,6
       call      dword ptr [System.Diagnostics.Tracing.EventSource.WriteEvent(Int32, Int64)]
       mov       esp,ebp
       pop       ebp
       ret       8
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],al
       jp        short BenchmarkDotNet.Engines.Engine.get_IterationCleanupAction()
       or        eax,[eax]
       add       [eax],al
       add       ah,dh
       jns       short BenchmarkDotNet.Engines.Engine.get_IterationCleanupAction()
       or        ebp,esp
       les       eax,[esi-1374AAF6]
; Total bytes of code 59

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

### Run Information
Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
Diff Diff

Improvements in PerfLabTests.CastingPerf2.CastingPerf

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
IFooObjIsIFoo - Duration of single invocation 562.90 μs 469.73 μs 0.83 0.02 False
IFooObjIsDescendantOfIFoo - Duration of single invocation 568.37 μs 469.24 μs 0.83 0.02 False

graph
graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'PerfLabTests.CastingPerf2.CastingPerf*'

Payloads

Baseline
Compare

Histogram

PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFoo


Description of detection logic

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 469.73406249999994 < 534.8100442135989.
IsChangePoint: Marked as a change because one of 8/18/2022 3:00:51 AM, 8/20/2022 7:42:33 PM, 8/27/2022 12:34:40 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 10.326191820469234 (T) = (0 -471311.25629758794) / Math.Sqrt((1842639315.5568614 / (299)) + (8893607.356109101 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.053614003496788736 = (498011.65490511217 - 471311.25629758794) / 498011.65490511217 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFoo()
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       xor       esi,esi
       mov       edi,ds:[0A2B0634]
       test      edi,edi
       jle       short M00_L01
M00_L00:
       mov       edx,ds:[6844FFC]
       mov       ecx,offset MT_PerfLabTests.CastingPerf2.IFoo
       call      dword ptr [System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)]
       mov       edx,684504C
       call      CORINFO_HELP_ASSIGN_REF_EAX
       inc       esi
       cmp       esi,edi
       jl        short M00_L00
M00_L01:
       pop       esi
       pop       edi
       pop       ebp
       ret
       add       [eax],al
       add       ah,al
       js        short BenchmarkDotNet.Autogenerated.Runnable_0.WorkloadActionNoUnroll(Int64)
       or        al,[eax]
       add       [eax],al
       add       [eax+440A8278],bh
       or        al,83
       or        dl,[ebp-75]
       in        al,dx
       push      eax
       mov       [ebp-4],ecx
       (bad)
; Total bytes of code 81
; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       push      ebp
       mov       ebp,esp
       push      esi
       test      edx,edx
       je        short M01_L01
       mov       eax,[edx]
       movzx     esi,word ptr [eax+0E]
       test      esi,esi
       je        short M01_L04
       mov       eax,[eax+24]
       cmp       esi,4
       jl        short M01_L03
M01_L00:
       cmp       [eax],ecx
       je        short M01_L01
       cmp       [eax+4],ecx
       je        short M01_L01
       cmp       [eax+8],ecx
       je        short M01_L01
       cmp       [eax+0C],ecx
       jne       short M01_L02
M01_L01:
       mov       eax,edx
       pop       esi
       pop       ebp
       ret
M01_L02:
       add       eax,10
       add       esi,0FFFFFFFC
       cmp       esi,4
       jge       short M01_L00
       test      esi,esi
       je        short M01_L04
M01_L03:
       cmp       [eax],ecx
       je        short M01_L01
       add       eax,4
       dec       esi
       test      esi,esi
       jg        short M01_L03
M01_L04:
       call      dword ptr ds:[6BC2D60C]
       pop       esi
       pop       ebp
       ret
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       push      ebp
       mov       ebp,esp
       test      edx,edx
       je        short M01_L05
       cmp       [edx],ecx
       jne       short M01_L06
M01_L05:
       mov       eax,edx
       pop       ebp
       ret
M01_L06:
       (bad)
; Total bytes of code 115
; BenchmarkDotNet.Autogenerated.Runnable_0.WorkloadActionNoUnroll(Int64)
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       push      ebx
       mov       esi,ecx
       xor       edi,edi
       xor       ebx,ebx
       cmp       dword ptr [ebp+8],1
       mov       ecx,[ebp+0C]
       sbb       ecx,0
       jl        short M02_L01
M02_L00:
       mov       eax,[esi+18]
       mov       ecx,[eax+4]
       call      dword ptr [eax+0C]
       add       edi,1
       adc       ebx,0
       cmp       edi,[ebp+8]
       mov       eax,ebx
       sbb       eax,[ebp+0C]
       jl        short M02_L00
M02_L01:
       pop       ebx
       pop       esi
       pop       edi
       pop       ebp
       ret       8
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],al
       pushfd
; Total bytes of code 81

PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo


Description of detection logic

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 469.2437106092437 < 535.1052396405678.
IsChangePoint: Marked as a change because one of 8/18/2022 3:00:51 AM, 8/20/2022 7:42:33 PM, 8/27/2022 12:34:40 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 10.143084332023776 (T) = (0 -471387.463491269) / Math.Sqrt((1811084806.5406659 / (299)) + (10825022.72435425 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.05273550024390154 = (497630.2433086448 - 471387.463491269) / 497630.2433086448 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo()
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       xor       esi,esi
       mov       edi,ds:[0ADE0634]
       test      edi,edi
       jle       short M00_L01
M00_L00:
       mov       edx,ds:[7444FFC]
       mov       ecx,offset MT_PerfLabTests.CastingPerf2.IFoo
       call      dword ptr [System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)]
       mov       edx,744504C
       call      CORINFO_HELP_ASSIGN_REF_EAX
       inc       esi
       cmp       esi,edi
       jl        short M00_L00
M00_L01:
       pop       esi
       pop       edi
       pop       ebp
       ret
       add       [eax],al
       add       ah,al
       js        short BenchmarkDotNet.Engines.EngineEventSource.WorkloadJittingStop(Int64)
       or        eax,[eax]
       add       [eax],al
       add       [eax+440B3578],bh
       or        al,36
       or        edx,[ebp-75]
       in        al,dx
       push      eax
       mov       [ebp-4],ecx
       (bad)
; Total bytes of code 81
; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       push      ebp
       mov       ebp,esp
       push      esi
       test      edx,edx
       je        short M01_L01
       mov       eax,[edx]
       movzx     esi,word ptr [eax+0E]
       test      esi,esi
       je        short M01_L04
       mov       eax,[eax+24]
       cmp       esi,4
       jl        short M01_L03
M01_L00:
       cmp       [eax],ecx
       je        short M01_L01
       cmp       [eax+4],ecx
       je        short M01_L01
       cmp       [eax+8],ecx
       je        short M01_L01
       cmp       [eax+0C],ecx
       jne       short M01_L02
M01_L01:
       mov       eax,edx
       pop       esi
       pop       ebp
       ret
M01_L02:
       add       eax,10
       add       esi,0FFFFFFFC
       cmp       esi,4
       jge       short M01_L00
       test      esi,esi
       je        short M01_L04
M01_L03:
       cmp       [eax],ecx
       je        short M01_L01
       add       eax,4
       dec       esi
       test      esi,esi
       jg        short M01_L03
M01_L04:
       call      dword ptr ds:[6B56D60C]
       pop       esi
       pop       ebp
       ret
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       push      ebp
       mov       ebp,esp
       test      edx,edx
       je        short M01_L05
       cmp       [edx],ecx
       jne       short M01_L06
M01_L05:
       mov       eax,edx
       pop       ebp
       ret
M01_L06:
       (bad)
; Total bytes of code 115
; BenchmarkDotNet.Engines.EngineEventSource.WorkloadJittingStop(Int64)
       push      ebp
       mov       ebp,esp
       push      eax
       mov       [ebp-4],ecx
       push      dword ptr [ebp+0C]
       push      dword ptr [ebp+8]
       mov       ecx,[ebp-4]
       mov       edx,6
       call      dword ptr [System.Diagnostics.Tracing.EventSource.WriteEvent(Int32, Int64)]
       mov       esp,ebp
       pop       ebp
       ret       8
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       ah,dh
       js        short BenchmarkDotNet.Engines.Engine.get_IterationCleanupAction()
       or        eax,[eax]
       add       [eax],al
       add       al,ch
       js        short BenchmarkDotNet.Autogenerated.Runnable_0+<>c.<.ctor>b__3_2()
       or        eax,[esp+eax*8-74AAF571]
       in        al,dx
; Total bytes of code 59

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromReader - Duration of single invocation 20.86 μs 19.54 μs 0.94 0.03 False
DeserializeFromStream - Duration of single invocation 17.95 μs 16.86 μs 0.94 0.03 False
DeserializeFromUtf8Bytes - Duration of single invocation 15.92 μs 14.53 μs 0.91 0.00 False
DeserializeFromString - Duration of single invocation 15.97 μs 14.65 μs 0.92 0.01 False

graph
graph
graph
graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;HashSet&lt;String&gt;&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>.DeserializeFromReader


Description of detection logic

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 19.544435566779903 < 19.842202359068626.
IsChangePoint: Marked as a change because one of 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 35.79107801316471 (T) = (0 -19650.625554769955) / Math.Sqrt((204456.86364773908 / (215)) + (22137.598165457603 / (17))) is greater than 1.9703317732749426 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (215) + (17) - 2, .975) and 0.07957626582080997 = (21349.54241732355 - 19650.625554769955) / 21349.54241732355 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;HashSet&lt;String&gt;&gt;.DeserializeFromStream

```log

Description of detection logic

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.8597445910764 < 17.08929428472657.
IsChangePoint: Marked as a change because one of 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 35.319809538846165 (T) = (0 -16814.753675879416) / Math.Sqrt((202282.26869004418 / (299)) + (17981.811998428624 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.08043929032568549 = (18285.63736899414 - 16814.753675879416) / 18285.63736899414 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;HashSet&lt;String&gt;&gt;.DeserializeFromUtf8Bytes

```log

Description of detection logic

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.529361799816344 < 15.255912188069905.
IsChangePoint: Marked as a change because one of 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 54.61339410433749 (T) = (0 -14520.705986116542) / Math.Sqrt((46266.65257097353 / (299)) + (8644.126316129225 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.08830559454816783 = (15927.16364089142 - 14520.705986116542) / 15927.16364089142 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;HashSet&lt;String&gt;&gt;.DeserializeFromString

```log

Description of detection logic

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.653536142676769 < 15.204378475281242.
IsChangePoint: Marked as a change because one of 8/25/2022 6:55:57 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 40.12570587719006 (T) = (0 -14729.345756035756) / Math.Sqrt((48961.310308159744 / (299)) + (18664.029304838245 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.08822536705669945 = (16154.590426022209 - 14729.345756035756) / 16154.590426022209 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<Dictionary<String, String>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromString - Duration of single invocation 28.85 μs 25.70 μs 0.89 0.01 False
DeserializeFromReader - Duration of single invocation 38.32 μs 35.10 μs 0.92 0.08 False
DeserializeFromUtf8Bytes - Duration of single invocation 27.62 μs 26.12 μs 0.95 0.01 False
DeserializeFromStream - Duration of single invocation 30.93 μs 27.64 μs 0.89 0.09 False

graph
graph
graph
graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<Dictionary<String, String>>.DeserializeFromString


Description of detection logic

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 25.701613984674324 < 27.359910421126905.
IsChangePoint: Marked as a change because one of 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 53.43555031716327 (T) = (0 -25797.468782145446) / Math.Sqrt((244975.35743444753 / (299)) + (37574.33788456246 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.10234215780331221 = (28738.643578287712 - 25797.468782145446) / 28738.643578287712 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;.DeserializeFromReader

```log

Description of detection logic

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.09514879701004 < 36.33303728584526.
IsChangePoint: Marked as a change because one of 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 24.73087368893593 (T) = (0 -35747.181496560035) / Math.Sqrt((773022.4674966701 / (213)) + (181873.1908273398 / (17))) is greater than 1.9704231946743616 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (213) + (17) - 2, .975) and 0.07647729324228397 = (38707.42022365696 - 35747.181496560035) / 38707.42022365696 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;.DeserializeFromUtf8Bytes

```log

Description of detection logic

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 26.121503199777404 < 26.481464651717882.
IsChangePoint: Marked as a change because one of 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 39.72201444594239 (T) = (0 -25717.074806492863) / Math.Sqrt((156456.4548443012 / (299)) + (51258.0312617758 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.08414753203286346 = (28079.931764092453 - 25717.074806492863) / 28079.931764092453 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;.DeserializeFromStream

```log

Description of detection logic

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 27.635626978867535 < 29.298299311072014.
IsChangePoint: Marked as a change because one of 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 27.980955407932708 (T) = (0 -28028.05995122102) / Math.Sqrt((407458.27041419863 / (299)) + (195104.32918561585 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.10162500271788495 = (31198.61977015754 - 28028.05995122102) / 31198.61977015754 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Sep 13, 2022

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
Diff Diff

Improvements in Benchstone.BenchF.NewtR

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Test - Duration of single invocation 83.63 ms 76.04 ms 0.91 0.03 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'Benchstone.BenchF.NewtR*'

Payloads

Baseline
Compare

Histogram

Benchstone.BenchF.NewtR.Test


Description of detection logic

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 76.04351666666668 < 79.38537691506411.
IsChangePoint: Marked as a change because one of 7/14/2022 4:09:15 PM, 7/28/2022 3:42:13 AM, 8/2/2022 9:59:24 PM, 8/4/2022 6:25:19 PM, 8/16/2022 10:54:40 PM, 8/20/2022 7:42:33 PM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 27.24262173228644 (T) = (0 -75924992.11269124) / Math.Sqrt((12061289041382.717 / (299)) + (8542735464.417715 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.0676100656033091 = (81430514.54305865 - 75924992.11269124) / 81430514.54305865 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+20],0B
       jne       short M00_L00
       mov       ecx,[ebp-4]
       call      dword ptr ds:[0AC1F9D8]
       mov       esp,ebp
       pop       ebp
       ret
M00_L00:
       xor       eax,eax
       mov       esp,ebp
       pop       ebp
       ret
       add       [eax],al
       add       [eax],al
       add       [eax],bl
       ret
       insd
       or        esp,esp
       ret       0B6D
       add       bl,al
       insd
       or        esi,[eax]
       (bad)
       mov       ebp,esp
       sub       esp,34
       (bad)
; Total bytes of code 63

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

### Run Information
Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
Diff Diff

Improvements in Microsoft.Extensions.Primitives.StringSegmentBenchmark

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Indexer - Duration of single invocation 15.66 ns 9.97 ns 0.64 0.08 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'Microsoft.Extensions.Primitives.StringSegmentBenchmark*'

Payloads

Baseline
Compare

Histogram

Microsoft.Extensions.Primitives.StringSegmentBenchmark.Indexer


Description of detection logic

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 9.965795545409598 < 14.930087112352986.
IsChangePoint: Marked as a change because one of 7/12/2022 11:02:26 PM, 7/14/2022 4:09:15 PM, 7/23/2022 7:50:44 AM, 7/24/2022 8:36:55 PM, 8/5/2022 10:47:59 PM, 8/12/2022 1:21:32 PM, 8/16/2022 10:54:40 PM, 8/18/2022 3:00:51 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 46.45596420012647 (T) = (0 -9.78685514366982) / Math.Sqrt((3.5335501795473223 / (299)) + (0.008021222511875155 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.34478758016722255 = (14.936919459139084 - 9.78685514366982) / 14.936919459139084 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; Microsoft.Extensions.Primitives.StringSegmentBenchmark.Indexer()
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       push      ebx
       add       ecx,0C
       mov       eax,[ecx]
       mov       edx,[ecx+4]
       mov       ecx,[ecx+8]
       xor       esi,esi
       xor       edi,edi
       test      ecx,ecx
       jle       short M00_L01
       nop
       nop
       nop
       nop
       nop
       nop
       nop
M00_L00:
       cmp       edi,ecx
       jae       short M00_L02
       lea       ebx,[edx+edi]
       cmp       ebx,[eax+4]
       jae       short M00_L03
       movzx     ebx,word ptr [eax+ebx*2+8]
       xor       esi,ebx
       movzx     esi,si
       inc       edi
       cmp       edi,ecx
       jl        short M00_L00
M00_L01:
       mov       eax,esi
       pop       ebx
       pop       esi
       pop       edi
       pop       ebp
       ret
M00_L02:
       mov       ecx,6
       call      dword ptr ds:[0AF4FC78]
       int       3
M00_L03:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
       add       [eax],al
       add       [eax],al
       adc       [ecx+0AF5],dl
       add       [eax],al
       add       al,91
       cmc
       or        dh,[edi+ecx-0A]
       or        dl,[ebp-75]
       in        al,dx
       push      eax
       (bad)
; Total bytes of code 110

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Sep 13, 2022

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
Diff Diff

Improvements in System.Memory.Span<Char>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
SequenceEqual - Duration of single invocation 25.80 ns 23.15 ns 0.90 0.28 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Memory.Span&lt;Char&gt;*'

Payloads

Baseline
Compare

Histogram

System.Memory.Span<Char>.SequenceEqual(Size: 512)


Description of detection logic

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 23.154668512338276 < 24.529688323553025.
IsChangePoint: Marked as a change because one of 7/18/2022 2:17:16 AM, 8/5/2022 12:58:40 PM, 9/1/2022 8:04:48 PM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 4.434921475854149 (T) = (0 -23.181192248590147) / Math.Sqrt((2.811314986707839 / (299)) + (1.3752693200014152 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.05436495232621752 = (24.513888635594444 - 23.181192248590147) / 24.513888635594444 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

### Run Information
Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
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
IList - Duration of single invocation 3.85 μs 3.54 μs 0.92 0.02 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Collections.IndexerSet&lt;String&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.IndexerSet<String>.IList(Size: 512)


Description of detection logic

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.543706772606886 < 3.6585814154134133.
IsChangePoint: Marked as a change because one of 7/23/2022 7:50:44 AM, 8/11/2022 4:03:37 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 18.183611569920423 (T) = (0 -3557.766887268219) / Math.Sqrt((26227.947850962253 / (299)) + (423.27068125794443 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.051447730153869074 = (3750.7336183438165 - 3557.766887268219) / 3750.7336183438165 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
Diff Diff

Improvements in System.ComponentModel.Tests.Perf_TypeDescriptorTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
GetConverter - Duration of single invocation 152.92 ns 137.52 ns 0.90 0.01 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.ComponentModel.Tests.Perf_TypeDescriptorTests*'

Payloads

Baseline
Compare

Histogram

System.ComponentModel.Tests.Perf_TypeDescriptorTests.GetConverter(typeToConvert: typeof(System.ComponentModel.Tests.ClassIDerived))


Description of detection logic

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 137.5240515138368 < 145.07645461907845.
IsChangePoint: Marked as a change because one of 7/22/2022 1:09:02 AM, 8/27/2022 12:34:40 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 20.400806549428 (T) = (0 -138.0324849181333) / Math.Sqrt((26.219913926022517 / (299)) + (0.7999894427121826 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.05146187075956592 = (145.5212823428261 - 138.0324849181333) / 145.5212823428261 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.ComponentModel.Tests.Perf_TypeDescriptorTests.GetConverter(System.Type)
       push      ebp
       mov       ebp,esp
       sub       esp,8
       mov       [ebp-4],ecx
       mov       [ebp-8],edx
       mov       ecx,[ebp-8]
       call      dword ptr [System.ComponentModel.TypeDescriptor.GetConverter(System.Type)]
       mov       esp,ebp
       pop       ebp
       ret
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [ebx+ebp*8],ah
       xchg      ecx,[edx]
       add       [eax],al
       add       [eax],al
       adc       al,0EB
       xchg      ecx,[edx]
       cld
       dec       ebp
       mov       [edx],cs
       push      ebp
       mov       ebp,esp
       (bad)
; Total bytes of code 53
; System.ComponentModel.TypeDescriptor.GetConverter(System.Type)
       push      ebp
       mov       ebp,esp
       sub       esp,10
       xor       eax,eax
       mov       [ebp-10],eax
       mov       [ebp-0C],eax
       mov       [ebp-8],eax
       mov       [ebp-4],ecx
       push      dword ptr ds:[6A9533C]
       lea       ecx,[ebp-10]
       mov       edx,[ebp-4]
       call      dword ptr [System.ComponentModel.TypeDescriptor.GetDescriptor(System.Type, System.String)]
       lea       ecx,[ebp-10]
       call      dword ptr [System.ComponentModel.TypeDescriptor+DefaultTypeDescriptor.GetConverter()]
       mov       esp,ebp
       pop       ebp
       ret
       add       [eax],al
       add       [eax],al
       add       [esp+ebp*8],al
       xchg      ecx,[edx]
       add       [eax],al
       add       [eax],al
       hlt
       jmp       short BenchmarkDotNet.Autogenerated.Runnable_0.WorkloadActionNoUnroll(Int64)
       or        cl,[esi+ecx*2-74AAF574]
       in        al,dx
       sub       esp,0C
       (bad)
; Total bytes of code 79

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
Diff Diff

Improvements in System.Text.Json.Tests.Perf_Get

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
GetString - Duration of single invocation 5.05 μs 4.36 μs 0.86 0.06 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Text.Json.Tests.Perf_Get*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Tests.Perf_Get.GetString


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 4.361620189171559 < 4.546644351076677.
IsChangePoint: Marked as a change because one of 8/15/2022 8:47:44 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 21.840053702973805 (T) = (0 -4414.943217609929) / Math.Sqrt((9294.715325805673 / (299)) + (5222.174596831261 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.0833957555514811 = (4816.629689802723 - 4414.943217609929) / 4816.629689802723 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Tests.Perf_Get.GetString()
       push      ebp
       mov       ebp,esp
       push      esi
       sub       esp,0B8
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [ebp-0BC],xmm4
       vmovdqu   xmmword ptr [ebp-0AC],xmm4
       mov       eax,0FFFFFF70
M00_L00:
       vmovdqu   xmmword ptr [ebp+eax-0C],xmm4
       vmovdqu   xmmword ptr [ebp+eax+4],xmm4
       vmovdqu   xmmword ptr [ebp+eax+14],xmm4
       add       eax,30
       jne       short M00_L00
       mov       [ebp-0C],eax
       mov       [ebp-8],eax
       mov       ecx,0B200000
       mov       edx,234
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       mov       ecx,ds:[7805348]
       test      ecx,ecx
       je        near ptr M00_L02
       lea       edx,[ecx+8]
       mov       eax,[ecx+4]
M00_L01:
       xor       ecx,ecx
       xor       esi,esi
       mov       [ebp-0BC],ecx
       mov       [ebp-0B8],esi
       mov       [ebp-0B4],ecx
       mov       [ebp-0B0],esi
       mov       byte ptr [ebp-0AC],0
       mov       byte ptr [ebp-0AB],0
       mov       byte ptr [ebp-0AA],0
       mov       byte ptr [ebp-0A9],0
       mov       byte ptr [ebp-0A8],0
       mov       byte ptr [ebp-0A7],0
       mov       [ebp-0A4],ecx
       mov       [ebp-0A0],ecx
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [ebp-9C],xmm0
       push      eax
       push      edx
       push      dword ptr [ebp-90]
       push      dword ptr [ebp-94]
       push      dword ptr [ebp-98]
       push      dword ptr [ebp-9C]
       push      dword ptr [ebp-0A0]
       push      dword ptr [ebp-0A4]
       push      dword ptr [ebp-0A8]
       push      dword ptr [ebp-0AC]
       push      dword ptr [ebp-0B0]
       push      dword ptr [ebp-0B4]
       push      dword ptr [ebp-0B8]
       push      dword ptr [ebp-0BC]
       lea       ecx,[ebp-8C]
       mov       edx,1
       call      dword ptr [System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)]
       cmp       byte ptr [ebp-61],0
       jne       short M00_L03
       lea       ecx,[ebp-8C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.ReadSingleSegment()]
       jmp       short M00_L04
M00_L02:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M00_L01
M00_L03:
       lea       ecx,[ebp-8C]
       call      dword ptr ds:[0B7A11B0]
M00_L04:
       movzx     ecx,al
       test      ecx,ecx
       jne       short M00_L05
       cmp       byte ptr [ebp-68],0
       je        short M00_L05
       cmp       byte ptr [ebp-64],0
       je        short M00_L07
M00_L05:
       xor       esi,esi
M00_L06:
       lea       ecx,[ebp-8C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.GetString()]
       inc       esi
       cmp       esi,64
       jl        short M00_L06
       lea       esp,[ebp-4]
       pop       esi
       pop       ebp
       ret
M00_L07:
       xor       ecx,ecx
       push      0
       push      0
       push      ecx
       lea       ecx,[ebp-8C]
       mov       edx,20
       call      dword ptr ds:[0B7A3360]
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
       int       3
; Total bytes of code 405
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       sub       esp,28
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [ebp-2C],xmm4
       xor       eax,eax
       mov       [ebp-1C],eax
       mov       [ebp-18],eax
       mov       [ebp-14],eax
       mov       [ebp-0C],ecx
       mov       [ebp-10],edx
       mov       edi,[ebp-0C]
       add       edi,30
       lea       esi,[ebp+38]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsd
       mov       ecx,[ebp-0C]
       mov       edx,[ebp-10]
       mov       [ecx+24],dl
       mov       ecx,[ebp-0C]
       mov       byte ptr [ecx+25],0
       mov       ecx,[ebp-0C]
       mov       [ebp-1C],ecx
       mov       ecx,[ebp-1C]
       mov       edx,[ebp+8]
       mov       [ecx],edx
       mov       ecx,[ebp+0C]
       mov       edx,[ebp-1C]
       mov       [edx+4],ecx
       mov       ecx,[ebp-0C]
       add       ecx,8
       mov       [ebp-20],ecx
       mov       ecx,[ebp-20]
       mov       edx,[ebp+10]
       mov       [ecx],edx
       mov       ecx,[ebp+14]
       mov       edx,[ebp-20]
       mov       [edx+4],ecx
       mov       ecx,[ebp-0C]
       movzx     edx,byte ptr [ebp+18]
       mov       [ecx+26],dl
       mov       ecx,[ebp-0C]
       movzx     edx,byte ptr [ebp+19]
       mov       [ecx+27],dl
       mov       ecx,[ebp-0C]
       movzx     edx,byte ptr [ebp+1A]
       call      dword ptr [System.Text.Json.Utf8JsonReader.set_ValueIsEscaped(Boolean)]
       mov       ecx,[ebp-0C]
       movzx     eax,byte ptr [ebp+1B]
       mov       [ecx+2C],al
       mov       ecx,[ebp-0C]
       movzx     eax,byte ptr [ebp+1C]
       mov       [ecx+28],al
       mov       ecx,[ebp-0C]
       movzx     eax,byte ptr [ebp+1D]
       mov       [ecx+29],al
       mov       ecx,[ebp-0C]
       mov       eax,[ebp+20]
       mov       [ecx+38],eax
       mov       eax,[ebp+24]
       mov       [ecx+3C],eax
       mov       ecx,[ebp-0C]
       cmp       [ecx],cl
       mov       ecx,[ebp-0C]
       add       ecx,38
       call      dword ptr [System.Text.Json.JsonReaderOptions.get_MaxDepth()]
       test      eax,eax
       jne       short M01_L00
       mov       ecx,[ebp-0C]
       cmp       [ecx],cl
       mov       ecx,[ebp-0C]
       add       ecx,38
       mov       edx,40
       call      dword ptr [System.Text.Json.JsonReaderOptions.set_MaxDepth(Int32)]
M01_L00:
       mov       edi,[ebp-0C]
       add       edi,40
       lea       esi,[ebp+28]
       movsd
       movsd
       call      CORINFO_HELP_ASSIGN_BYREF
       movsd
       mov       ecx,[ebp-0C]
       xor       eax,eax
       mov       [ecx+20],eax
       xor       eax,eax
       mov       [ebp-24],eax
       mov       ecx,[ebp-24]
       sar       ecx,1F
       push      ecx
       push      dword ptr [ebp-24]
       mov       ecx,[ebp-0C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.set_TokenStartIndex(Int64)]
       xor       ecx,ecx
       mov       [ebp-28],ecx
       mov       ecx,[ebp-28]
       mov       eax,[ebp-28]
       sar       eax,1F
       mov       [ebp-30],eax
       mov       eax,[ebp-0C]
       add       eax,10
       mov       [ebp-2C],eax
       mov       eax,[ebp-2C]
       mov       [eax],ecx
       mov       ecx,[ebp-30]
       mov       eax,[ebp-2C]
       mov       [eax+4],ecx
       mov       ecx,[ebp-0C]
       movzx     ecx,byte ptr [ecx+24]
       mov       eax,[ebp-0C]
       mov       [eax+2A],cl
       mov       ecx,[ebp-0C]
       mov       byte ptr [ecx+2B],0
       lea       ecx,[ebp-18]
       call      dword ptr [System.ReadOnlySpan`1[[System.Byte, System.Private.CoreLib]].get_Empty()]
       push      dword ptr [ebp-14]
       push      dword ptr [ebp-18]
       mov       ecx,[ebp-0C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.set_ValueSpan(System.ReadOnlySpan`1<Byte>)]
       mov       ecx,[ebp-0C]
       xor       edx,edx
       mov       [ecx+58],edx
       mov       [ecx+5C],edx
       mov       ecx,[ebp-0C]
       xor       edx,edx
       mov       [ecx+50],edx
       mov       [ecx+54],edx
       mov       ecx,[ebp-0C]
       vxorps    xmm0,xmm0,xmm0
       vmovq     qword ptr [ecx+60],xmm0
       vmovq     qword ptr [ecx+68],xmm0
       mov       ecx,[ebp-0C]
       xor       edx,edx
       call      dword ptr [System.Text.Json.Utf8JsonReader.set_HasValueSequence(Boolean)]
       mov       ecx,0B6FE978
       xor       edx,edx
       call      CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
       mov       ecx,ds:[7801FFC]
       add       ecx,4
       push      dword ptr [ecx+0C]
       push      dword ptr [ecx+8]
       push      dword ptr [ecx+4]
       push      dword ptr [ecx]
       mov       ecx,[ebp-0C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.set_ValueSequence(System.Buffers.ReadOnlySequence`1<Byte>)]
       lea       esp,[ebp-8]
       pop       esi
       pop       edi
       pop       ebp
       ret       38
       int       3
       int       3
       int       3
       int       3
       int       3
       add       [eax],al
       add       [eax],al
       fcomp     qword ptr [eax]
       jmp       short M01_L01
       add       [eax],al
       add       [eax],al
       aam       18
       jmp       short System.Text.Json.Utf8JsonReader.set_ValueIsEscaped(Boolean)
M01_L01:
       (bad)
; Total bytes of code 494
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       push      ebx
       sub       esp,0C
       mov       esi,ecx
       xor       ebx,ebx
       xor       ecx,ecx
       mov       [esi+70],ecx
       mov       [esi+74],ecx
       mov       byte ptr [esi+2E],0
       mov       ecx,[esi+20]
       mov       eax,ecx
       sar       eax,1F
       cmp       ecx,[esi+34]
       sbb       eax,0
       jl        short M02_L02
       cmp       byte ptr [esi+27],0
       je        near ptr M02_L15
       cmp       byte ptr [esi+24],0
       je        near ptr M02_L15
       cmp       byte ptr [esi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [esi+2A]
       test      ecx,ecx
       je        near ptr M02_L15
M02_L00:
       cmp       dword ptr [esi+4C],0
       jne       near ptr M02_L17
       cmp       byte ptr [esi+3C],2
       jne       short M02_L01
       movzx     ecx,byte ptr [esi+28]
       cmp       ecx,6
       je        near ptr M02_L15
M02_L01:
       movzx     ecx,byte ptr [esi+28]
       cmp       ecx,4
       je        near ptr M02_L15
       cmp       ecx,2
       jne       near ptr M02_L18
       jmp       near ptr M02_L15
M02_L02:
       mov       ecx,[esi+20]
       lea       eax,[esi+30]
       cmp       ecx,[eax+4]
       jae       near ptr M02_L22
       mov       eax,[eax]
       movzx     edx,byte ptr [eax+ecx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       ecx,esi
       call      dword ptr ds:[0B75FE28]
       mov       ecx,[esi+20]
       mov       edx,ecx
       mov       eax,edx
       sar       eax,1F
       cmp       edx,[esi+34]
       sbb       eax,0
       jl        short M02_L05
       cmp       byte ptr [esi+27],0
       je        near ptr M02_L15
       cmp       byte ptr [esi+24],0
       je        near ptr M02_L15
       cmp       byte ptr [esi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [esi+2A]
       test      ecx,ecx
       je        near ptr M02_L15
M02_L03:
       cmp       dword ptr [esi+4C],0
       jne       near ptr M02_L19
       cmp       byte ptr [esi+3C],2
       jne       short M02_L04
       movzx     ecx,byte ptr [esi+28]
       cmp       ecx,6
       je        near ptr M02_L15
M02_L04:
       movzx     ecx,byte ptr [esi+28]
       cmp       ecx,4
       je        near ptr M02_L15
       cmp       ecx,2
       jne       near ptr M02_L20
       jmp       near ptr M02_L15
M02_L05:
       lea       edx,[esi+30]
       cmp       ecx,[edx+4]
       jae       near ptr M02_L22
       mov       edx,[edx]
       movzx     edx,byte ptr [edx+ecx]
M02_L06:
       mov       ecx,[esi+20]
       mov       eax,ecx
       sar       eax,1F
       lea       ebx,[esi+18]
       mov       [ebx],ecx
       mov       [ebx+4],eax
       movzx     ebx,byte ptr [esi+28]
       test      ebx,ebx
       je        near ptr M02_L16
       cmp       edx,2F
       jne       short M02_L07
       mov       ecx,esi
       call      dword ptr ds:[0B75FFA8]
       mov       ebx,eax
       jmp       near ptr M02_L15
M02_L07:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L08
       mov       ecx,esi
       call      dword ptr ds:[0B75FD68]
       jmp       near ptr M02_L14
M02_L08:
       cmp       edx,22
       jne       near ptr M02_L21
       mov       ebx,[esi+20]
       lea       ecx,[esi+8]
       mov       edi,[ecx]
       mov       eax,[ecx+4]
       mov       [ebp-10],eax
       mov       ecx,esi
       mov       edx,[ecx]
       mov       ecx,[ecx+4]
       mov       [ebp-14],edx
       mov       [ebp-18],ecx
       mov       ecx,esi
       call      dword ptr ds:[0B75FEB8]
       test      eax,eax
       jne       short M02_L09
       mov       [esi+20],ebx
       mov       byte ptr [esi+28],1
       lea       ecx,[esi+8]
       mov       [ecx],edi
       mov       edi,[ebp-10]
       mov       [ecx+4],edi
       mov       edi,[ebp-14]
       mov       [esi],edi
       mov       edi,[ebp-18]
       mov       [esi+4],edi
       mov       ebx,eax
       jmp       short M02_L15
M02_L09:
       mov       ebx,eax
       jmp       short M02_L15
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       ecx,esi
       call      dword ptr ds:[0B75FD98]
       jmp       short M02_L14
M02_L11:
       mov       ecx,esi
       call      dword ptr [System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)]
       mov       ebx,eax
       jmp       short M02_L15
M02_L12:
       cmp       ebx,5
       jne       short M02_L13
       mov       ecx,esi
       call      dword ptr [System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)]
       mov       ebx,eax
       jmp       short M02_L15
M02_L13:
       mov       ecx,esi
       call      dword ptr ds:[0B75FFA8]
       mov       ebx,eax
       jmp       short M02_L15
M02_L14:
       mov       ebx,1
M02_L15:
       mov       eax,ebx
       lea       esp,[ebp-0C]
       pop       ebx
       pop       esi
       pop       edi
       pop       ebp
       ret
M02_L16:
       mov       ecx,esi
       call      dword ptr [System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)]
       mov       ebx,eax
       jmp       short M02_L15
M02_L17:
       xor       edi,edi
       push      0
       push      0
       push      edi
       mov       ecx,esi
       mov       edx,19
       call      dword ptr ds:[0B7A3360]
       int       3
M02_L18:
       xor       edi,edi
       push      0
       push      0
       push      edi
       mov       ecx,esi
       mov       edx,16
       call      dword ptr ds:[0B7A3360]
       int       3
M02_L19:
       xor       edi,edi
       push      0
       push      0
       push      edi
       mov       ecx,esi
       mov       edx,19
       call      dword ptr ds:[0B7A3360]
       int       3
M02_L20:
       xor       edi,edi
       push      0
       push      0
       push      edi
       mov       ecx,esi
       mov       edx,16
       call      dword ptr ds:[0B7A3360]
       int       3
M02_L21:
       xor       ecx,ecx
       push      edx
       push      0
       push      ecx
       mov       ecx,esi
       mov       edx,0C
       call      dword ptr ds:[0B7A3360]
       int       3
M02_L22:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [edi+ebx],ah
       jmp       short M02_L23
       add       [eax],al
       add       [eax],al
       add       al,1F
       jmp       short System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
M02_L23:
       jo        short System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       jbe       short System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       push      ebp
       mov       ebp,esp
; Total bytes of code 683
; System.Text.Json.Utf8JsonReader.GetString()
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       sub       esp,28
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [ebp-30],xmm4
       vmovdqu   xmmword ptr [ebp-20],xmm4
       xor       eax,eax
       mov       [ebp-10],eax
       mov       [ebp-0C],ecx
       mov       ecx,[ebp-0C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.get_TokenType()]
       cmp       eax,0B
       jne       short M03_L00
       xor       eax,eax
       lea       esp,[ebp-8]
       pop       esi
       pop       edi
       pop       ebp
       ret
M03_L00:
       mov       ecx,[ebp-0C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.get_TokenType()]
       cmp       eax,7
       je        short M03_L01
       mov       ecx,[ebp-0C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.get_TokenType()]
       cmp       eax,5
       je        short M03_L01
       mov       ecx,[ebp-0C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.get_TokenType()]
       mov       ecx,eax
       call      dword ptr ds:[0B7A3288]
M03_L01:
       mov       ecx,[ebp-0C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.get_HasValueSequence()]
       test      eax,eax
       jne       short M03_L02
       lea       edx,[ebp-2C]
       mov       ecx,[ebp-0C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.get_ValueSpan()]
       jmp       short M03_L03
M03_L02:
       lea       edx,[ebp-24]
       mov       ecx,[ebp-0C]
       call      dword ptr ds:[0B75FB58]
       lea       ecx,[ebp-24]
       call      dword ptr ds:[0B7A3FA8]
       mov       [ebp-30],eax
       mov       edx,[ebp-30]
       lea       ecx,[ebp-2C]
       call      dword ptr ds:[8CC1A20]
M03_L03:
       lea       edi,[ebp-14]
       lea       esi,[ebp-2C]
       movsd
       movsd
       mov       ecx,[ebp-0C]
       call      dword ptr [System.Text.Json.Utf8JsonReader.get_ValueIsEscaped()]
       test      eax,eax
       je        short M03_L04
       push      dword ptr [ebp-10]
       push      dword ptr [ebp-14]
       call      dword ptr ds:[0B7A5150]
       lea       esp,[ebp-8]
       pop       esi
       pop       edi
       pop       ebp
       ret
M03_L04:
       push      dword ptr [ebp-10]
       push      dword ptr [ebp-14]
       call      dword ptr [System.Text.Json.JsonReaderHelper.TranscodeHelper(System.ReadOnlySpan`1<Byte>)]
       lea       esp,[ebp-8]
       pop       esi
       pop       edi
       pop       ebp
       ret
       int       3
       int       3
       int       3
       add       al,dl
       sub       al,0EB
       or        [eax],al
       add       [eax],al
       add       al,cl
       sub       al,0EB
       or        [eax+60],al
       jbe       short System.Text.Json.Utf8JsonReader.get_TokenType()
       push      ebp
       mov       ebp,esp
       push      eax
       (bad)
; Total bytes of code 245

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
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
StaticDelegate - Duration of single invocation 313.14 μs 281.81 μs 0.90 0.02 False
GenericClassGenericStaticField - Duration of single invocation 62.37 μs 31.20 μs 0.50 0.04 False

graph
graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'PerfLabTests.LowLevelPerf*'

Payloads

Baseline
Compare

Histogram

PerfLabTests.LowLevelPerf.StaticDelegate


Description of detection logic

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 281.8141980229592 < 297.469269150641.
IsChangePoint: Marked as a change because one of 7/28/2022 6:38:38 AM, 8/5/2022 10:47:59 PM, 8/12/2022 1:21:32 PM, 8/18/2022 3:00:51 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 23.74879600122558 (T) = (0 -281211.3702668567) / Math.Sqrt((216344933.65609652 / (299)) + (373750.7131379854 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.06796399799457703 = (301717.28308969387 - 281211.3702668567) / 301717.28308969387 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; PerfLabTests.LowLevelPerf.StaticDelegate()
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       mov       esi,ds:[7024F28]
       xor       edi,edi
       cmp       dword ptr ds:[0A9E05D0],0
       jle       short M00_L01
M00_L00:
       mov       ecx,[esi+4]
       call      dword ptr [esi+0C]
       inc       edi
       cmp       edi,ds:[0A9E05D0]
       jl        short M00_L00
M00_L01:
       pop       esi
       pop       edi
       pop       ebp
M00_L02:
       ret
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       [eax],cl
       jne       short M00_L02
       or        al,[eax]
       add       [eax],al
       add       [eax],al
       jne       short 0AF80330
       or        bh,[edx]
       int1
       or        dl,[ebp-75]
       in        al,dx
       push      eax
       (bad)
; Total bytes of code 69

PerfLabTests.LowLevelPerf.GenericClassGenericStaticField


Description of detection logic

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.199811914632274 < 59.25343991000285.
IsChangePoint: Marked as a change because one of 7/14/2022 4:09:15 PM, 7/28/2022 6:38:38 AM, 8/20/2022 7:42:33 PM, 8/27/2022 12:34:40 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 25.20628866692499 (T) = (0 -31245.21529230752) / Math.Sqrt((211676602.4017923 / (299)) + (5787.810289759952 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.4043856709822848 = (52458.80391063963 - 31245.21529230752) / 52458.80391063963 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; PerfLabTests.LowLevelPerf.GenericClassGenericStaticField()
       push      ebp
       mov       ebp,esp
       push      esi
       xor       esi,esi
       mov       ecx,0AC90000
       mov       edx,83
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       mov       eax,ds:[0AC905D0]
       test      eax,eax
       jle       short M00_L01
M00_L00:
       mov       dword ptr ds:[0B1F39F0],1
       inc       esi
       cmp       esi,eax
       jl        short M00_L00
M00_L01:
       pop       esi
       pop       ebp
       ret
       adc       [eax+0B],dh
       add       [eax],al
       add       [eax],al
       or        [eax+0B],dh
       dec       eax
       or        al,0C9
       or        dl,[ebp-75]
       in        al,dx
       mov       dword ptr ds:[0AC905D0],186A0
; Total bytes of code 77

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
Diff Diff

Improvements in System.Text.Perf_Utf8Encoding

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
GetString - Duration of single invocation 42.53 μs 39.51 μs 0.93 0.06 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Text.Perf_Utf8Encoding*'

Payloads

Baseline
Compare

Histogram

System.Text.Perf_Utf8Encoding.GetString(Input: EnglishAllAscii)


Description of detection logic

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.50824507389162 < 40.21219728864987.
IsChangePoint: Marked as a change because one of 8/25/2022 6:55:57 AM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 45.55250548778749 (T) = (0 -39412.61851217553) / Math.Sqrt((4451550.524386058 / (299)) + (72090.0319695212 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.1378215380677311 = (45712.831220401924 - 39412.61851217553) / 45712.831220401924 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Perf_Utf8Encoding.GetString()
       push      ebp
       mov       ebp,esp
       sub       esp,8
       xor       eax,eax
       mov       [ebp-8],eax
       mov       [ebp-4],ecx
       mov       ecx,[ebp-4]
       mov       ecx,[ecx+14]
       mov       [ebp-8],ecx
       mov       ecx,[ebp-8]
       mov       edx,[ebp-4]
       mov       edx,[edx+10]
       mov       eax,[ebp-8]
       mov       eax,[eax]
       mov       eax,[eax+3C]
       call      dword ptr [eax+14]
       mov       esp,ebp
       pop       ebp
       ret
       add       ah,bh
       add       dword ptr [eax+0B],8081F000
       or        eax,esp
       sub       [ecx-1374AAF5],al
       push      eax
       mov       [ebp-4],ecx
       push      dword ptr [ebp+0C]
       (bad)
; Total bytes of code 75

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
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
Or - Duration of single invocation 73.30 μs 69.36 μs 0.95 0.04 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'IfStatements.IfStatements*'

Payloads

Baseline
Compare

Histogram

IfStatements.IfStatements.Or


Description of detection logic

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 69.36348717948718 < 69.66825217967984.
IsChangePoint: Marked as a change because one of 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 16.50252371204199 (T) = (0 -69474.53041933438) / Math.Sqrt((2902909.403803662 / (51)) + (16163.648068158818 / (17))) is greater than 1.9965644189515825 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (51) + (17) - 2, .975) and 0.054053084870817274 = (73444.42833755277 - 69474.53041933438) / 73444.42833755277 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; IfStatements.IfStatements.Or()
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       xor       esi,esi
M00_L00:
       mov       ecx,ds:[7644E98]
       mov       edx,ecx
       mov       eax,[edx+4]
       cmp       esi,eax
       jae       short M00_L01
       mov       edx,[edx+esi*4+8]
       lea       edi,[esi+1]
       cmp       edi,eax
       jae       short M00_L01
       mov       eax,[ecx+esi*4+0C]
       mov       ecx,edx
       mov       edx,eax
       call      dword ptr [IfStatements.IfStatements.OrInner(Int32, Int32)]
       inc       esi
       cmp       esi,2710
       jl        short M00_L00
       pop       esi
       pop       edi
       pop       ebp
       ret
M00_L01:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
       add       [eax],al
       add       [eax],al
       add       [eax],al
       xchg      esp,eax
       jb        short IfStatements.IfStatements.OrInner(Int32, Int32)
       or        eax,[eax]
       add       [eax],al
       add       [eax+140B5072],dl
       dec       al
       or        dl,[ebp-75]
       in        al,dx
       (bad)
; Total bytes of code 92
; IfStatements.IfStatements.OrInner(Int32, Int32)
       push      ebp
       mov       ebp,esp
       sub       esp,8
       mov       [ebp-4],ecx
       mov       [ebp-8],edx
       mov       ecx,[ebp-4]
       mov       edx,[ebp-4]
       shr       edx,1F
       add       edx,[ebp-4]
       and       edx,0FFFFFFFE
       sub       ecx,edx
       test      ecx,ecx
       je        short M01_L00
       mov       ecx,[ebp-8]
       mov       edx,[ebp-8]
       shr       edx,1F
       add       edx,[ebp-8]
       and       edx,0FFFFFFFE
       sub       ecx,edx
       test      ecx,ecx
       jne       short M01_L01
M01_L00:
       mov       dword ptr [ebp-4],5
M01_L01:
       push      0
       push      0
       mov       ecx,[ebp-4]
       mov       edx,[ebp-8]
       call      dword ptr [IfStatements.IfStatements.Consume(Int32, Int32, Int32, Int32)]
       mov       esp,ebp
       pop       ebp
       ret
       add       [eax],al
       add       [eax],al
       add       [eax],al
       add       ah,cl
       jb        short BenchmarkDotNet.Engines.EngineEventSource.WorkloadJittingStop(Int64)
       or        eax,[eax]
       add       [eax],al
       add       ah,al
       jb        short BenchmarkDotNet.Engines.EngineEventSource.WorkloadJittingStop(Int64)
       or        esi,[ebp+edi*8-38]
       or        dl,[ebp-75]
       in        al,dx
       (bad)
; Total bytes of code 109

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline bc183b8208b7a2b3310715ad2181d6a4720a159c
Compare 071fe7ce868a63113143b949c3c4185f9e5578cf
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
LeadingZeroCount_ulong - Duration of single invocation 1.23 μs 947.78 ns 0.77 0.03 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Numerics.Tests.Perf_BitOperations*'

Payloads

Baseline
Compare

Histogram

System.Numerics.Tests.Perf_BitOperations.LeadingZeroCount_ulong


Description of detection logic

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 947.7841112050113 < 1.1685491027997719.
IsChangePoint: Marked as a change because one of 7/14/2022 4:09:15 PM, 7/28/2022 3:42:13 AM, 8/2/2022 9:59:24 PM, 8/4/2022 6:25:19 PM, 8/16/2022 10:54:40 PM, 8/20/2022 7:42:33 PM, 9/9/2022 3:12:19 AM, 9/13/2022 2:30:06 AM falls between 9/4/2022 8:45:57 AM and 9/13/2022 2:30:06 AM.
IsImprovementStdDev: Marked as improvement because 26.899851806425378 (T) = (0 -948.7629911692816) / Math.Sqrt((16511.57376082234 / (299)) + (3.1568221017387375 / (17))) is greater than 1.9675476980854363 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (17) - 2, .975) and 0.17426840736795515 = (1148.9968406623154 - 948.7629911692816) / 1148.9968406623154 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.LeadingZeroCount_ulong()
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       push      ebx
       xor       esi,esi
       mov       ecx,0A290000
       mov       edx,1B3
       call      CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
       mov       eax,ds:[6AD5274]
       xor       edx,edx
       mov       ecx,[eax+4]
       test      ecx,ecx
       jle       short M00_L02
M00_L00:
       lea       edi,[eax+edx*8+8]
       mov       ebx,[edi]
       mov       edi,[edi+4]
       test      edi,edi
       je        short M00_L03
       xor       ebx,ebx
       lzcnt     ebx,edi
M00_L01:
       add       esi,ebx
       inc       edx
       cmp       ecx,edx
       jg        short M00_L00
M00_L02:
       mov       eax,esi
       pop       ebx
       pop       esi
       pop       edi
       pop       ebp
       ret
M00_L03:
       lzcnt     ebx,ebx
       add       ebx,20
       jmp       short M00_L01
       add       [esp+edx*4+0A80],ch
       add       [eax],al
       movsb
       xchg      esp,eax
       or        byte ptr [edx],0D4
       std
       test      dword ptr [ecx],0B9EC8B55
       (bad)
; Total bytes of code 102

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants