Skip to content

[Perf] Windows/x64: 41 Improvements on 2/9/2023 4:10:34 PM #12986

@performanceautofiler

Description

@performanceautofiler

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 3ff80e90e828bac0370c1930c9950c9650ae61b9
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Scoped - Duration of single invocation 57.15 ns 52.61 ns 0.92 0.19 False 526.139899141428 512.7997869872003 0.9746453135829528) Trace Trace

graph
Test Report

Repro

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

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable*'

Payloads

Baseline
Compare

Histogram

Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable.Scoped


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 52.606187482373144 < 54.35935317409639.
IsChangePoint: Marked as a change because one of 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 16.60421872080435 (T) = (0 -53.1979112016808) / Math.Sqrt((2.907363344328133 / (299)) + (1.7996988957777353 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.08793790297452281 = (58.32707156143864 - 53.1979112016808) / 58.32707156143864 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable.Scoped()
       sub       rsp,28
       mov       rcx,[rcx+8]
       test      rcx,rcx
       je        short M00_L00
       mov       r11,7FFCDC580678
       mov       rdx,18B7997A1D8
       call      qword ptr [r11]
       mov       rdx,rax
       mov       rcx,offset MT_System.Collections.Generic.IEnumerable`1[[Microsoft.Extensions.DependencyInjection.ServiceProviderEngineBenchmark+A, MicroBenchmarks]]
       call      qword ptr [7FFCDC72D858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
       nop
       add       rsp,28
       ret
M00_L00:
       mov       ecx,2F1
       mov       rdx,7FFCDCC2AC10
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFCDCC3BED0]
       int       3
; Total bytes of code 91
; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
       push      rdi
       push      rsi
       sub       rsp,28
       test      rdx,rdx
       je        near ptr M01_L03
       mov       rax,[rdx]
       cmp       rax,rcx
       je        near ptr M01_L03
       mov       r8,14AE5000BA0
       mov       r8,[r8]
       cmp       [r8],r8b
       add       r8,10
       rorx      r9,rax,20
       xor       r9,rcx
       mov       r10,9E3779B97F4A7C15
       imul      r9,r10
       mov       r10d,[r8]
       shrx      r9,r9,r10
       xor       r10d,r10d
M01_L00:
       lea       r11d,[r9+1]
       movsxd    r11,r11d
       lea       r11,[r11+r11*2]
       lea       r11,[r8+r11*8]
       mov       esi,[r11]
       mov       rdi,[r11+8]
       and       esi,0FFFFFFFE
       cmp       rdi,rax
       jne       short M01_L01
       mov       rdi,rcx
       xor       rdi,[r11+10]
       cmp       rdi,1
       jbe       short M01_L02
M01_L01:
       test      esi,esi
       je        short M01_L04
       inc       r10d
       add       r9d,r10d
       and       r9d,[r8+4]
       cmp       r10d,8
       jl        short M01_L00
       jmp       short M01_L04
M01_L02:
       cmp       esi,[r11]
       jne       short M01_L04
       cmp       edi,1
       jne       short M01_L04
M01_L03:
       mov       rax,rdx
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M01_L04:
       call      System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object)
       nop
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 179

Compare Jit Disasm

; Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable.Scoped()
       sub       rsp,28
       mov       rcx,[rcx+8]
       test      rcx,rcx
       je        short M00_L00
       mov       r11,7FF8669A0680
       mov       rdx,211DD61B7F8
       call      qword ptr [r11]
       mov       rdx,rax
       mov       rcx,offset MT_System.Collections.Generic.IEnumerable`1[[Microsoft.Extensions.DependencyInjection.ServiceProviderEngineBenchmark+A, MicroBenchmarks]]
       call      qword ptr [7FF866B4D858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
       nop
       add       rsp,28
       ret
M00_L00:
       mov       ecx,2F1
       mov       rdx,7FF86704BE10
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF86705BED0]
       int       3
; Total bytes of code 91
; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
       push      rdi
       push      rsi
       sub       rsp,28
       test      rdx,rdx
       je        near ptr M01_L03
       mov       rax,[rdx]
       cmp       rax,rcx
       je        near ptr M01_L03
       mov       r8,1D148C00BA8
       mov       r8,[r8]
       cmp       [r8],r8b
       add       r8,10
       rorx      r9,rax,20
       xor       r9,rcx
       mov       r10,9E3779B97F4A7C15
       imul      r9,r10
       mov       r10d,[r8]
       shrx      r9,r9,r10
       xor       r10d,r10d
M01_L00:
       lea       r11d,[r9+1]
       movsxd    r11,r11d
       lea       r11,[r11+r11*2]
       lea       r11,[r8+r11*8]
       mov       esi,[r11]
       mov       rdi,[r11+8]
       and       esi,0FFFFFFFE
       cmp       rdi,rax
       jne       short M01_L01
       mov       rdi,rcx
       xor       rdi,[r11+10]
       cmp       rdi,1
       jbe       short M01_L02
M01_L01:
       test      esi,esi
       je        short M01_L04
       inc       r10d
       add       r9d,r10d
       and       r9d,[r8+4]
       cmp       r10d,8
       jl        short M01_L00
       jmp       short M01_L04
M01_L02:
       cmp       esi,[r11]
       jne       short M01_L04
       cmp       edi,1
       jne       short M01_L04
M01_L03:
       mov       rax,rdx
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M01_L04:
       call      System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object)
       nop
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 179

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 3ff80e90e828bac0370c1930c9950c9650ae61b9
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in Microsoft.Extensions.DependencyInjection.GetService

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ServiceScope - Duration of single invocation 54.64 ns 47.13 ns 0.86 0.25 False Trace Trace
EmptyEnumerable - Duration of single invocation 27.01 ns 24.11 ns 0.89 0.23 False Trace Trace
ServiceScopeProvider - Duration of single invocation 25.99 ns 23.46 ns 0.90 0.06 False
Transient - Duration of single invocation 31.33 ns 26.45 ns 0.84 0.22 False

graph
graph
graph
graph
Test Report

Repro

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

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.DependencyInjection.GetService*'

Payloads

Baseline
Compare

Histogram

Microsoft.Extensions.DependencyInjection.GetService.ServiceScope


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 47.1332375677146 < 48.6127887132489.
IsChangePoint: Marked as a change because one of 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 13.637535656216233 (T) = (0 -47.397147380668656) / Math.Sqrt((3.6725320873556293 / (299)) + (0.8472054239333758 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.061918944627840644 = (50.525641797408504 - 47.397147380668656) / 50.525641797408504 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; Microsoft.Extensions.DependencyInjection.GetService.ServiceScope()
       sub       rsp,28
       mov       rcx,[rcx+28]
       test      rcx,rcx
       je        short M00_L00
       mov       rdx,27C201798E0
       call      qword ptr [7FFA14753528]; Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(System.IServiceProvider, System.Type)
       mov       rdx,rax
       mov       rcx,offset MT_Microsoft.Extensions.DependencyInjection.IServiceScopeFactory
       call      qword ptr [7FFA141BD888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       mov       rcx,rax
       mov       r11,7FFA140105D0
       cmp       [rcx],ecx
       add       rsp,28
       jmp       qword ptr [r11]
M00_L00:
       mov       ecx,2F1
       mov       rdx,7FFA14588E18
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFA14753618]
       int       3
; Total bytes of code 100
; Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(System.IServiceProvider, System.Type)
       push      rdi
       push      rsi
       sub       rsp,28
       mov       rsi,rcx
       mov       rdi,rdx
       test      rsi,rsi
       je        short M01_L01
       test      rdi,rdi
       je        short M01_L02
       mov       rdx,rsi
       mov       rcx,offset MT_Microsoft.Extensions.DependencyInjection.ISupportRequiredService
       call      qword ptr [7FFA141BD810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object)
       test      rax,rax
       je        short M01_L00
       mov       rcx,rax
       mov       rdx,rdi
       mov       r11,7FFA140105E8
       add       rsp,28
       pop       rsi
       pop       rdi
       jmp       qword ptr [r11]
M01_L00:
       mov       rcx,rsi
       mov       rdx,rdi
       mov       r11,7FFA140105E0
       call      qword ptr [r11]
       test      rax,rax
       je        short M01_L03
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M01_L01:
       mov       ecx,2F1
       mov       rdx,7FFA14588E18
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFA14753618]
       int       3
M01_L02:
       mov       ecx,3AB
       mov       rdx,7FFA14588E18
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFA14753618]
       int       3
M01_L03:
       mov       rcx,offset MT_System.InvalidOperationException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       call      qword ptr [7FFA14753798]
       mov       rcx,rax
       mov       rdx,rdi
       call      qword ptr [7FFA14753678]
       mov       rdx,rax
       mov       rcx,rsi
       call      qword ptr [7FFA143111C8]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 219
; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       test      rdx,rdx
       je        short M02_L01
       mov       rax,[rdx]
       movzx     r8d,word ptr [rax+0E]
       test      r8,r8
       je        short M02_L04
       mov       rax,[rax+38]
       cmp       r8,4
       jl        short M02_L03
M02_L00:
       cmp       [rax],rcx
       je        short M02_L01
       cmp       [rax+8],rcx
       je        short M02_L01
       cmp       [rax+10],rcx
       je        short M02_L01
       cmp       [rax+18],rcx
       jne       short M02_L02
M02_L01:
       mov       rax,rdx
       ret
M02_L02:
       add       rax,20
       add       r8,0FFFFFFFFFFFFFFFC
       cmp       r8,4
       jge       short M02_L00
       test      r8,r8
       je        short M02_L04
M02_L03:
       cmp       [rax],rcx
       je        short M02_L01
       add       rax,8
       dec       r8
       test      r8,r8
       jg        short M02_L03
M02_L04:
       jmp       qword ptr [7FFA141BD870]
; Total bytes of code 97

Compare Jit Disasm

; Microsoft.Extensions.DependencyInjection.GetService.ServiceScope()
       sub       rsp,28
       mov       rcx,[rcx+28]
       test      rcx,rcx
       je        short M00_L00
       mov       rdx,2541687AE08
       call      qword ptr [7FF919173EE8]; Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(System.IServiceProvider, System.Type)
       mov       rdx,rax
       mov       rcx,offset MT_Microsoft.Extensions.DependencyInjection.IServiceScopeFactory
       call      qword ptr [7FF918BDD888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       mov       rcx,rax
       mov       r11,7FF918A305D8
       cmp       [rcx],ecx
       add       rsp,28
       jmp       qword ptr [r11]
M00_L00:
       mov       ecx,2F1
       mov       rdx,7FF918FA9328
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF919173FD8]
       int       3
; Total bytes of code 100
; Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(System.IServiceProvider, System.Type)
       push      rdi
       push      rsi
       sub       rsp,28
       mov       rsi,rcx
       mov       rdi,rdx
       test      rsi,rsi
       je        short M01_L01
       test      rdi,rdi
       je        short M01_L02
       mov       rdx,rsi
       mov       rcx,offset MT_Microsoft.Extensions.DependencyInjection.ISupportRequiredService
       call      qword ptr [7FF918BDD810]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(Void*, System.Object)
       test      rax,rax
       je        short M01_L00
       mov       rcx,rax
       mov       rdx,rdi
       mov       r11,7FF918A305F0
       add       rsp,28
       pop       rsi
       pop       rdi
       jmp       qword ptr [r11]
M01_L00:
       mov       rcx,rsi
       mov       rdx,rdi
       mov       r11,7FF918A305E8
       call      qword ptr [r11]
       test      rax,rax
       je        short M01_L03
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M01_L01:
       mov       ecx,2F1
       mov       rdx,7FF918FA9328
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF919173FD8]
       int       3
M01_L02:
       mov       ecx,3AB
       mov       rdx,7FF918FA9328
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF919173FD8]
       int       3
M01_L03:
       mov       rcx,offset MT_System.InvalidOperationException
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       call      qword ptr [7FF919175168]
       mov       rcx,rax
       mov       rdx,rdi
       call      qword ptr [7FF919175048]
       mov       rdx,rax
       mov       rcx,rsi
       call      qword ptr [7FF918D311C8]
       mov       rcx,rsi
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 219
; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       test      rdx,rdx
       je        short M02_L01
       mov       rax,[rdx]
       movzx     r8d,word ptr [rax+0E]
       test      r8,r8
       je        short M02_L04
       mov       rax,[rax+38]
       cmp       r8,4
       jl        short M02_L03
M02_L00:
       cmp       [rax],rcx
       je        short M02_L01
       cmp       [rax+8],rcx
       je        short M02_L01
       cmp       [rax+10],rcx
       je        short M02_L01
       cmp       [rax+18],rcx
       jne       short M02_L02
M02_L01:
       mov       rax,rdx
       ret
M02_L02:
       add       rax,20
       add       r8,0FFFFFFFFFFFFFFFC
       cmp       r8,4
       jge       short M02_L00
       test      r8,r8
       je        short M02_L04
M02_L03:
       cmp       [rax],rcx
       je        short M02_L01
       add       rax,8
       dec       r8
       test      r8,r8
       jg        short M02_L03
M02_L04:
       jmp       qword ptr [7FF918BDD870]
; Total bytes of code 97

Microsoft.Extensions.DependencyInjection.GetService.EmptyEnumerable


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 24.10781360641537 < 25.063845523067883.
IsChangePoint: Marked as a change because one of 1/12/2023 4:43:01 PM, 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 29.88902044864413 (T) = (0 -22.80649585541591) / Math.Sqrt((1.4028093314339316 / (299)) + (0.3394533826328905 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.15914437058045205 = (27.122962679288346 - 22.80649585541591) / 27.122962679288346 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; Microsoft.Extensions.DependencyInjection.GetService.EmptyEnumerable()
       sub       rsp,28
       mov       rcx,[rcx+30]
       test      rcx,rcx
       je        short M00_L00
       mov       r11,7FFC0BE005D8
       mov       rdx,28F6233A0F0
       call      qword ptr [r11]
       mov       rdx,rax
       mov       rcx,offset MT_System.Collections.Generic.IEnumerable`1[[Microsoft.Extensions.DependencyInjection.ServiceProviderEngineBenchmark+A, MicroBenchmarks]]
       call      qword ptr [7FFC0BFAD858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
       nop
       add       rsp,28
       ret
M00_L00:
       mov       ecx,2F1
       mov       rdx,7FFC0C4AAD68
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFC0C543630]
       int       3
; Total bytes of code 91
; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
       push      rdi
       push      rsi
       sub       rsp,28
       test      rdx,rdx
       je        near ptr M01_L03
       mov       rax,[rdx]
       cmp       rax,rcx
       je        near ptr M01_L03
       mov       r8,24ECD800BA0
       mov       r8,[r8]
       cmp       [r8],r8b
       add       r8,10
       rorx      r9,rax,20
       xor       r9,rcx
       mov       r10,9E3779B97F4A7C15
       imul      r9,r10
       mov       r10d,[r8]
       shrx      r9,r9,r10
       xor       r10d,r10d
M01_L00:
       lea       r11d,[r9+1]
       movsxd    r11,r11d
       lea       r11,[r11+r11*2]
       lea       r11,[r8+r11*8]
       mov       esi,[r11]
       mov       rdi,[r11+8]
       and       esi,0FFFFFFFE
       cmp       rdi,rax
       jne       short M01_L01
       mov       rdi,rcx
       xor       rdi,[r11+10]
       cmp       rdi,1
       jbe       short M01_L02
M01_L01:
       test      esi,esi
       je        short M01_L04
       inc       r10d
       add       r9d,r10d
       and       r9d,[r8+4]
       cmp       r10d,8
       jl        short M01_L00
       jmp       short M01_L04
M01_L02:
       cmp       esi,[r11]
       jne       short M01_L04
       cmp       edi,1
       jne       short M01_L04
M01_L03:
       mov       rax,rdx
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M01_L04:
       call      System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object)
       nop
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 179

Compare Jit Disasm

; Microsoft.Extensions.DependencyInjection.GetService.EmptyEnumerable()
       sub       rsp,28
       mov       rcx,[rcx+30]
       test      rcx,rcx
       je        short M00_L00
       mov       r11,7FFA626705E0
       mov       rdx,2CC78D4B6E8
       call      qword ptr [r11]
       mov       rdx,rax
       mov       rcx,offset MT_System.Collections.Generic.IEnumerable`1[[Microsoft.Extensions.DependencyInjection.ServiceProviderEngineBenchmark+A, MicroBenchmarks]]
       call      qword ptr [7FFA6281D858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
       nop
       add       rsp,28
       ret
M00_L00:
       mov       ecx,2F1
       mov       rdx,7FFA62D1BF68
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFA62DB5018]
       int       3
; Total bytes of code 91
; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
       push      rdi
       push      rsi
       sub       rsp,28
       test      rdx,rdx
       je        near ptr M01_L03
       mov       rax,[rdx]
       cmp       rax,rcx
       je        near ptr M01_L03
       mov       r8,28BE4400BA8
       mov       r8,[r8]
       cmp       [r8],r8b
       add       r8,10
       rorx      r9,rax,20
       xor       r9,rcx
       mov       r10,9E3779B97F4A7C15
       imul      r9,r10
       mov       r10d,[r8]
       shrx      r9,r9,r10
       xor       r10d,r10d
M01_L00:
       lea       r11d,[r9+1]
       movsxd    r11,r11d
       lea       r11,[r11+r11*2]
       lea       r11,[r8+r11*8]
       mov       esi,[r11]
       mov       rdi,[r11+8]
       and       esi,0FFFFFFFE
       cmp       rdi,rax
       jne       short M01_L01
       mov       rdi,rcx
       xor       rdi,[r11+10]
       cmp       rdi,1
       jbe       short M01_L02
M01_L01:
       test      esi,esi
       je        short M01_L04
       inc       r10d
       add       r9d,r10d
       and       r9d,[r8+4]
       cmp       r10d,8
       jl        short M01_L00
       jmp       short M01_L04
M01_L02:
       cmp       esi,[r11]
       jne       short M01_L04
       cmp       edi,1
       jne       short M01_L04
M01_L03:
       mov       rax,rdx
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M01_L04:
       call      System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object)
       nop
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 179

Microsoft.Extensions.DependencyInjection.GetService.ServiceScopeProvider


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.45958755154614 < 24.965723471467506.
IsChangePoint: Marked as a change because one of 1/18/2023 3:20:52 PM, 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 49.19486884424391 (T) = (0 -23.64775213861588) / Math.Sqrt((0.6837507449936806 / (299)) + (0.045488412302767484 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.12189803066478062 = (26.930530808988816 - 23.64775213861588) / 26.930530808988816 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### Microsoft.Extensions.DependencyInjection.GetService.Transient

```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.449912101919754 < 29.015318056812948.
IsChangePoint: Marked as a change because one of 12/14/2022 5:20:21 PM, 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 20.78921749173307 (T) = (0 -26.21381753102009) / Math.Sqrt((1.2266295136410263 / (299)) + (0.5403342785094624 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.12047621846584748 = (29.804557968057843 - 26.21381753102009) / 29.804557968057843 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 x64
OS Windows 10.0.18362
Baseline 3ff80e90e828bac0370c1930c9950c9650ae61b9
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

Improvements in System.Collections.IndexerSet<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ConcurrentDictionary - Duration of single invocation 35.80 μs 27.20 μs 0.76 0.03 False

graph
Test Report

Repro

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

Payloads

Baseline
Compare

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

Payloads

Baseline
Compare

Histogram

System.Collections.IndexerSet<String>.ConcurrentDictionary(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 27.202815918249854 < 34.0686926641861.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 130.77212831153855 (T) = (0 -27489.83911120044) / Math.Sqrt((746570.0344707388 / (299)) + (43170.86181952096 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.24298496239226547 = (36313.46505093464 - 27489.83911120044) / 36313.46505093464 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 x64
OS Windows 10.0.18362
Baseline 3ff80e90e828bac0370c1930c9950c9650ae61b9
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
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 768.93 μs 663.57 μs 0.86 0.03 False Trace Trace
FooObjIsFoo - Duration of single invocation 810.74 μs 753.71 μs 0.93 0.02 False
IFooObjIsDescendantOfIFoo - Duration of single invocation 790.81 μs 662.55 μs 0.84 0.03 False
IFooObjIsIFooInterAlia - Duration of single invocation 553.15 μs 506.90 μs 0.92 0.01 False

graph
graph
graph
graph
Test Report

Repro

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

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter '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 663.5667410714287 < 742.8926504485851.
IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 12/14/2022 5:20:21 PM, 12/28/2022 5:13:50 PM, 1/18/2023 3:20:52 PM, 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 31.348620294205418 (T) = (0 -664659.1897150252) / Math.Sqrt((1579603001.0093668 / (299)) + (2388457.561717275 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.09874821656302663 = (737484.4654179887 - 664659.1897150252) / 737484.4654179887 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      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       xor       esi,esi
       mov       edi,[7FF8D1E029BC]
       test      edi,edi
       jle       short M00_L01
       mov       rdx,26160C064E0
       mov       rbx,[rdx]
       mov       rdx,rbx
       mov       rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
       call      qword ptr [7FF8D1A3D888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       mov       rbp,26160C06580
M00_L00:
       mov       rdx,rbx
       mov       rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
       call      qword ptr [7FF8D1A3D888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       mov       rdx,rax
       mov       rcx,rbp
       call      CORINFO_HELP_ASSIGN_REF
       inc       esi
       cmp       esi,edi
       jl        short M00_L00
M00_L01:
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 107
; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       test      rdx,rdx
       je        short M01_L01
       mov       rax,[rdx]
       movzx     r8d,word ptr [rax+0E]
       test      r8,r8
       je        short M01_L04
       mov       rax,[rax+38]
       cmp       r8,4
       jl        short M01_L03
M01_L00:
       cmp       [rax],rcx
       je        short M01_L01
       cmp       [rax+8],rcx
       je        short M01_L01
       cmp       [rax+10],rcx
       je        short M01_L01
       cmp       [rax+18],rcx
       jne       short M01_L02
M01_L01:
       mov       rax,rdx
       ret
M01_L02:
       add       rax,20
       add       r8,0FFFFFFFFFFFFFFFC
       cmp       r8,4
       jge       short M01_L00
       test      r8,r8
       je        short M01_L04
M01_L03:
       cmp       [rax],rcx
       je        short M01_L01
       add       rax,8
       dec       r8
       test      r8,r8
       jg        short M01_L03
M01_L04:
       jmp       qword ptr [7FF8D1A3D870]
; Total bytes of code 97

Compare Jit Disasm

; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFoo()
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       xor       esi,esi
       mov       edi,[7FF8D25A29BC]
       test      edi,edi
       jle       short M00_L01
       mov       rdx,1E827C064E0
       mov       rbx,[rdx]
       mov       rdx,rbx
       mov       rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
       call      qword ptr [7FF8D21DD888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       mov       rbp,1E827C06580
M00_L00:
       mov       rdx,rbx
       mov       rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
       call      qword ptr [7FF8D21DD888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       mov       rdx,rax
       mov       rcx,rbp
       call      CORINFO_HELP_ASSIGN_REF
       inc       esi
       cmp       esi,edi
       jl        short M00_L00
M00_L01:
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 107
; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
       test      rdx,rdx
       je        short M01_L01
       mov       rax,[rdx]
       movzx     r8d,word ptr [rax+0E]
       test      r8,r8
       je        short M01_L04
       mov       rax,[rax+38]
       cmp       r8,4
       jl        short M01_L03
M01_L00:
       cmp       [rax],rcx
       je        short M01_L01
       cmp       [rax+8],rcx
       je        short M01_L01
       cmp       [rax+10],rcx
       je        short M01_L01
       cmp       [rax+18],rcx
       jne       short M01_L02
M01_L01:
       mov       rax,rdx
       ret
M01_L02:
       add       rax,20
       add       r8,0FFFFFFFFFFFFFFFC
       cmp       r8,4
       jge       short M01_L00
       test      r8,r8
       je        short M01_L04
M01_L03:
       cmp       [rax],rcx
       je        short M01_L01
       add       rax,8
       dec       r8
       test      r8,r8
       jg        short M01_L03
M01_L04:
       jmp       qword ptr [7FF8D21DD870]
; Total bytes of code 97

PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo


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 753.7072355769232 < 770.2188338770604.
IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 12/14/2022 5:20:21 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 12/28/2022 5:13:50 PM, 1/18/2023 3:20:52 PM, 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 27.44551611949537 (T) = (0 -757035.9641964234) / Math.Sqrt((2086532406.6752172 / (299)) + (14612679.40512005 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.09126590882607735 = (833066.5389899346 - 757035.9641964234) / 833066.5389899346 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo

```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 662.5502435064934 < 732.923607207557.
IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 12/14/2022 5:20:21 PM, 12/28/2022 5:13:50 PM, 1/18/2023 3:20:52 PM, 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 31.208504656630296 (T) = (0 -665172.9350628201) / Math.Sqrt((1567591458.7511985 / (299)) + (3436951.1998691494 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.09836182573428018 = (737738.2125646207 - 665172.9350628201) / 737738.2125646207 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsIFooInterAlia

```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 506.9049596774194 < 525.9660872844827.
IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 1/13/2023 4:37:08 PM, 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 24.857694084600638 (T) = (0 -507308.7091397266) / Math.Sqrt((366806617.6643079 / (299)) + (9059869.577346586 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.0593518457453794 = (539318.2422621382 - 507308.7091397266) / 539318.2422621382 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 x64
OS Windows 10.0.18362
Baseline 3ff80e90e828bac0370c1930c9950c9650ae61b9
Compare 2b701237cf3169b63d6f61efd2e611c34d2622e2
Diff Diff

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

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Dictionary - Duration of single invocation 235.67 ns 214.47 ns 0.91 0.05 False

graph
Test Report

Repro

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

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.Concurrent.IsEmpty&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.Concurrent.IsEmpty<Int32>.Dictionary(Size: 0)


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 214.46681016525483 < 224.61531635417944.
IsChangePoint: Marked as a change because one of 2/9/2023 12:40:40 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 31.619451227342765 (T) = (0 -216.00749949290062) / Math.Sqrt((12.78911682471256 / (299)) + (9.633059541341062 / (21))) is greater than 1.967451947860886 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (21) - 2, .975) and 0.0939249253473334 = (238.3991189424393 - 216.00749949290062) / 238.3991189424393 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