-
Notifications
You must be signed in to change notification settings - Fork 3
Description
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 |
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.DependencyInjection.GetServiceIEnumerable*'Payloads
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 179Compare 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 179Docs
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 |
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.DependencyInjection.GetService*'Payloads
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 97Compare 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 97Microsoft.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 179Compare 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 179Microsoft.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 |
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IndexerSet<String>*'Payloads
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 |
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf2.CastingPerf*'Payloads
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 97Compare 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 97PerfLabTests.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 |
Repro
General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md
Payloads
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.Concurrent.IsEmpty<Int32>*'Payloads
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





_1.png)




_1.png)