Skip to content

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

@performanceautofiler

Description

@performanceautofiler

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*'
Details

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*'
Details

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;*'
Details

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;*'
Details

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions