Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[Perf] Changes at 3/10/2021 12:58:37 AM #4275

Open
performanceautofiler bot opened this issue Mar 10, 2021 · 3 comments
Open

[Perf] Changes at 3/10/2021 12:58:37 AM #4275

performanceautofiler bot opened this issue Mar 10, 2021 · 3 comments

Comments

@performanceautofiler
Copy link

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline e0bbfa0f555cf5b9d8b8749e1a91a78924c9d927
Compare 11ff8a576aaccbf291ce8e3e9ba0bd0b04913d37

Improvemnts in System.MathBenchmarks.Single

Benchmark Baseline Test Test/Base Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Tan 31.72 μs 29.54 μs 0.93 Trace Trace

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f netcoreapp5.0 --filter 'System.MathBenchmarks.Single*'

.

Payloads

Baseline
Compare

Histogram

System.MathBenchmarks.Single.Tan

[28146.225 ; 29200.483) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[29200.483 ; 30252.952) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[30252.952 ; 31103.532) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[31103.532 ; 32231.402) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[32231.402 ; 32952.326) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@
[32952.326 ; 34170.369) | @@@@@@@@
[34170.369 ; 35848.130) | @

Baseline Jit Disasm

; System.MathBenchmarks.Single.Tan()
       jmp       near ptr System.MathBenchmarks.Single.TanTest()
; Total bytes of code 5
; System.MathBenchmarks.Single.TanTest()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,50
       vzeroupper
       vmovaps   [rsp+40],xmm6
       vmovaps   [rsp+30],xmm7
       vmovaps   [rsp+20],xmm8
       vxorps    xmm6,xmm6,xmm6
       vmovss    xmm7,dword ptr [7FFAC7FF5DD0]
       xor       esi,esi
       vmovss    xmm8,dword ptr [7FFAC7FF5DD4]
       nop       dword ptr [rax+rax]
M01_L00:
       vaddss    xmm7,xmm7,xmm8
       vmovaps   xmm0,xmm7
       call      System.MathF.Tan(Single)
       vaddss    xmm6,xmm0,xmm6
       inc       esi
       cmp       esi,1388
       jl        short M01_L00
       vmovss    xmm0,dword ptr [7FFAC7FF5DD8]
       vsubss    xmm0,xmm0,xmm6
       vandps    xmm0,xmm0,[7FFAC7FF5DE0]
       vucomiss  xmm0,dword ptr [7FFAC7FF5DF0]
       ja        short M01_L01
       vmovaps   xmm6,[rsp+40]
       vmovaps   xmm7,[rsp+30]
       vmovaps   xmm8,[rsp+20]
       add       rsp,50
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M01_L01:
       mov       rcx,offset MT_System.Single
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       vmovss    xmm0,dword ptr [7FFAC7FF5DD8]
       vmovss    dword ptr [rsi+8],xmm0
       mov       rcx,offset MT_System.Single
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       vmovss    dword ptr [rdi+8],xmm6
       mov       rcx,offset MT_System.Exception
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       mov       ecx,5C7F
       mov       rdx,7FFAC7F46130
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       mov       rdx,rsi
       mov       r8,rdi
       call      System.String.Format(System.String, System.Object, System.Object)
       mov       rsi,rax
       mov       rcx,rbx
       call      System.Exception..ctor()
       lea       rcx,[rbx+10]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       rcx,rbx
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 286

Compare Jit Disasm

; System.MathBenchmarks.Single.Tan()
       jmp       near ptr System.MathBenchmarks.Single.TanTest()
; Total bytes of code 5
; System.MathBenchmarks.Single.TanTest()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,50
       vzeroupper
       vmovaps   [rsp+40],xmm6
       vmovaps   [rsp+30],xmm7
       vmovaps   [rsp+20],xmm8
       vxorps    xmm6,xmm6,xmm6
       vmovss    xmm7,dword ptr [7FFAE3F85DD0]
       xor       esi,esi
       vmovss    xmm8,dword ptr [7FFAE3F85DD4]
       nop       dword ptr [rax+rax]
M01_L00:
       vaddss    xmm7,xmm7,xmm8
       vmovaps   xmm0,xmm7
       call      System.MathF.Tan(Single)
       vaddss    xmm6,xmm0,xmm6
       inc       esi
       cmp       esi,1388
       jl        short M01_L00
       vmovss    xmm0,dword ptr [7FFAE3F85DD8]
       vsubss    xmm0,xmm0,xmm6
       vandps    xmm0,xmm0,[7FFAE3F85DE0]
       vucomiss  xmm0,dword ptr [7FFAE3F85DF0]
       ja        short M01_L01
       vmovaps   xmm6,[rsp+40]
       vmovaps   xmm7,[rsp+30]
       vmovaps   xmm8,[rsp+20]
       add       rsp,50
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M01_L01:
       mov       rcx,offset MT_System.Single
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       vmovss    xmm0,dword ptr [7FFAE3F85DD8]
       vmovss    dword ptr [rsi+8],xmm0
       mov       rcx,offset MT_System.Single
       call      CORINFO_HELP_NEWSFAST
       mov       rdi,rax
       vmovss    dword ptr [rdi+8],xmm6
       mov       rcx,offset MT_System.Exception
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       mov       ecx,5CEF
       mov       rdx,7FFAE3EC6AA0
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       mov       rdx,rsi
       mov       r8,rdi
       call      System.String.Format(System.String, System.Object, System.Object)
       mov       rsi,rax
       mov       rcx,rbx
       call      System.Exception..ctor()
       lea       rcx,[rbx+10]
       mov       rdx,rsi
       call      CORINFO_HELP_ASSIGN_REF
       mov       rcx,rbx
       call      CORINFO_HELP_THROW
       int       3
; Total bytes of code 286

Docs

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

### Run Information
Architecture x64
OS Windows 10.0.18362
Baseline e0bbfa0f555cf5b9d8b8749e1a91a78924c9d927
Compare 11ff8a576aaccbf291ce8e3e9ba0bd0b04913d37

Improvemnts in System.Collections.Tests.Add_Remove_SteadyState<Int32>

Benchmark Baseline Test Test/Base Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ConcurrentBag 51.35 ns 46.30 ns 0.90

graph
Historical Data in Reporting System

Repro

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

.

Payloads

Baseline
Compare

Histogram

System.Collections.Tests.Add_Remove_SteadyState.ConcurrentBag(Count: 512)

[44.557 ; 45.524) | @@
[45.524 ; 46.899) | @@@
[46.899 ; 47.866) | 
[47.866 ; 48.833) | 
[48.833 ; 50.445) | @@@@
[50.445 ; 52.616) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[52.616 ; 54.679) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[54.679 ; 56.059) | @@@@@@@@@@@@@@@@@@@@@@
[56.059 ; 57.791) | @@@@@@@
[57.791 ; 60.070) | @@@@@@@
[60.070 ; 61.622) | @
[61.622 ; 62.867) | @
[62.867 ; 64.801) | 
[64.801 ; 66.208) | 
[66.208 ; 67.546) | @
[67.546 ; 69.479) | 
[69.479 ; 71.412) | 
[71.412 ; 74.407) | @@

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline e0bbfa0f555cf5b9d8b8749e1a91a78924c9d927
Compare 11ff8a576aaccbf291ce8e3e9ba0bd0b04913d37

Improvemnts in System.Tests.Perf_Decimal

Benchmark Baseline Test Test/Base Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
TryParse 100.99 ns 93.22 ns 0.92 Trace Trace

graph
Historical Data in Reporting System

Repro

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

.

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_Decimal.TryParse(value: "123456.789")

[90.037 ;  92.437) | @@@@@@@@@@@@@@@@@@@@@
[92.437 ;  94.750) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[94.750 ;  98.184) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[98.184 ; 103.544) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Baseline Jit Disasm

; System.Tests.Perf_Decimal.TryParse(System.String)
       sub       rsp,48
       vzeroupper
       xor       eax,eax
       mov       [rsp+28],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       [rsp+40],rax
       test      rdx,rdx
       jne       short M00_L00
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+38],xmm0
       xor       eax,eax
       jmp       short M00_L01
M00_L00:
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
       lea       rcx,[rsp+28]
       mov       [rcx],rax
       mov       [rcx+8],edx
       call      System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       r8,rax
       lea       rcx,[rsp+28]
       lea       r9,[rsp+38]
       mov       edx,6F
       call      System.Number.TryParseDecimal(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, System.Decimal ByRef)
       test      eax,eax
       sete      al
       movzx     eax,al
M00_L01:
       add       rsp,48
       ret
; Total bytes of code 107
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       push      rsi
       sub       rsp,20
       call      System.Globalization.CultureInfo.get_CurrentCulture()
       mov       rsi,rax
       cmp       byte ptr [rsi+61],0
       jne       short M01_L00
       mov       rax,[rsi+18]
       test      rax,rax
       je        short M01_L00
       add       rsp,20
       pop       rsi
       ret
M01_L00:
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       call      CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE
       mov       rdx,rax
       mov       rcx,rsi
       mov       rax,[rsi]
       mov       rax,[rax+50]
       call      qword ptr [rax]
       mov       r8,rax
       test      r8,r8
       je        short M01_L01
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [r8],rcx
       je        short M01_L01
       mov       rdx,rax
       call      CORINFO_HELP_CHKCASTCLASS_SPECIAL
       mov       r8,rax
M01_L01:
       mov       rax,r8
       add       rsp,20
       pop       rsi
       ret
; Total bytes of code 107
; System.Number.TryParseDecimal(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, System.Decimal ByRef)
       push      rsi
       sub       rsp,70
       vzeroupper
       xor       eax,eax
       mov       [rsp+48],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+50],xmm4
       mov       [rsp+60],rax
       mov       rax,0C3F44C9C1F5A
       mov       [rsp+68],rax
       mov       rsi,r9
       mov       r9,r8
       lea       r8,[rsp+28]
       mov       byte ptr [rsp+52],2
       lea       rax,[rsp+58]
       mov       [rax],r8
       mov       dword ptr [rax+8],1F
       lea       r8,[rsp+58]
       cmp       dword ptr [r8+8],0
       jbe       near ptr M02_L05
       mov       r8,[r8]
       mov       byte ptr [r8],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsi],xmm0
       lea       r8,[rsp+48]
       call      System.Number.TryStringToNumber(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo)
       test      eax,eax
       jne       short M02_L01
       mov       eax,1
       mov       rcx,0C3F44C9C1F5A
       cmp       [rsp+68],rcx
       je        short M02_L00
       call      CORINFO_HELP_FAIL_FAST
M02_L00:
       nop
       add       rsp,70
       pop       rsi
       ret
M02_L01:
       lea       rcx,[rsp+48]
       mov       rdx,rsi
       call      System.Number.TryNumberToDecimal(NumberBuffer ByRef, System.Decimal ByRef)
       test      eax,eax
       jne       short M02_L03
       mov       eax,2
       mov       rcx,0C3F44C9C1F5A
       cmp       [rsp+68],rcx
       je        short M02_L02
       call      CORINFO_HELP_FAIL_FAST
M02_L02:
       nop
       add       rsp,70
       pop       rsi
       ret
M02_L03:
       xor       eax,eax
       mov       rcx,0C3F44C9C1F5A
       cmp       [rsp+68],rcx
       je        short M02_L04
       call      CORINFO_HELP_FAIL_FAST
M02_L04:
       nop
       add       rsp,70
       pop       rsi
       ret
M02_L05:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 243

Compare Jit Disasm

; System.Tests.Perf_Decimal.TryParse(System.String)
       sub       rsp,48
       vzeroupper
       xor       eax,eax
       mov       [rsp+28],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       mov       [rsp+40],rax
       test      rdx,rdx
       jne       short M00_L00
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+38],xmm0
       xor       eax,eax
       jmp       short M00_L01
M00_L00:
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
       lea       rcx,[rsp+28]
       mov       [rcx],rax
       mov       [rcx+8],edx
       call      System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       r8,rax
       lea       rcx,[rsp+28]
       lea       r9,[rsp+38]
       mov       edx,6F
       call      System.Number.TryParseDecimal(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, System.Decimal ByRef)
       test      eax,eax
       sete      al
       movzx     eax,al
M00_L01:
       add       rsp,48
       ret
; Total bytes of code 107
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       push      rsi
       sub       rsp,20
       call      System.Globalization.CultureInfo.get_CurrentCulture()
       mov       rsi,rax
       cmp       byte ptr [rsi+61],0
       jne       short M01_L00
       mov       rax,[rsi+18]
       test      rax,rax
       je        short M01_L00
       add       rsp,20
       pop       rsi
       ret
M01_L00:
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       call      CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE
       mov       rdx,rax
       mov       rcx,rsi
       mov       rax,[rsi]
       mov       rax,[rax+50]
       call      qword ptr [rax]
       mov       rdx,rax
       mov       rax,rdx
       test      rax,rax
       je        short M01_L01
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [rax],rcx
       jne       short M01_L02
M01_L01:
       add       rsp,20
       pop       rsi
       ret
M01_L02:
       call      CORINFO_HELP_CHKCASTCLASS_SPECIAL
       int       3
; Total bytes of code 102
; System.Number.TryParseDecimal(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, System.Decimal ByRef)
       push      rsi
       sub       rsp,70
       vzeroupper
       xor       eax,eax
       mov       [rsp+48],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+50],xmm4
       mov       [rsp+60],rax
       mov       rax,1A113E75E1A8
       mov       [rsp+68],rax
       mov       rsi,r9
       mov       r9,r8
       lea       r8,[rsp+28]
       mov       byte ptr [rsp+52],2
       lea       rax,[rsp+58]
       mov       [rax],r8
       mov       dword ptr [rax+8],1F
       lea       r8,[rsp+58]
       cmp       dword ptr [r8+8],0
       jbe       near ptr M02_L05
       mov       r8,[r8]
       mov       byte ptr [r8],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsi],xmm0
       lea       r8,[rsp+48]
       call      System.Number.TryStringToNumber(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo)
       test      eax,eax
       jne       short M02_L01
       mov       eax,1
       mov       rcx,1A113E75E1A8
       cmp       [rsp+68],rcx
       je        short M02_L00
       call      CORINFO_HELP_FAIL_FAST
M02_L00:
       nop
       add       rsp,70
       pop       rsi
       ret
M02_L01:
       lea       rcx,[rsp+48]
       mov       rdx,rsi
       call      System.Number.TryNumberToDecimal(NumberBuffer ByRef, System.Decimal ByRef)
       test      eax,eax
       jne       short M02_L03
       mov       eax,2
       mov       rcx,1A113E75E1A8
       cmp       [rsp+68],rcx
       je        short M02_L02
       call      CORINFO_HELP_FAIL_FAST
M02_L02:
       nop
       add       rsp,70
       pop       rsi
       ret
M02_L03:
       xor       eax,eax
       mov       rcx,1A113E75E1A8
       cmp       [rsp+68],rcx
       je        short M02_L04
       call      CORINFO_HELP_FAIL_FAST
M02_L04:
       nop
       add       rsp,70
       pop       rsi
       ret
M02_L05:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 243

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline e0bbfa0f555cf5b9d8b8749e1a91a78924c9d927
Compare 11ff8a576aaccbf291ce8e3e9ba0bd0b04913d37

Improvemnts in System.Collections.CreateAddAndClear<Int32>

Benchmark Baseline Test Test/Base Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ConcurrentBag 14.98 μs 12.73 μs 0.85

graph
Historical Data in Reporting System

Repro

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

.

Payloads

Baseline
Compare

Histogram

System.Collections.CreateAddAndClear.ConcurrentBag(Size: 512)

[12647.359 ; 13129.268) | @@@@
[13129.268 ; 13647.153) | @
[13647.153 ; 13987.684) | 
[13987.684 ; 14328.215) | 
[14328.215 ; 14673.560) | 
[14673.560 ; 15140.155) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[15140.155 ; 15627.681) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[15627.681 ; 16169.091) | @@@@@@@@@@
[16169.091 ; 16498.822) | @@@@@
[16498.822 ; 16847.605) | @@@
[16847.605 ; 17307.315) | @@@
[17307.315 ; 17789.077) | 
[17789.077 ; 18148.453) | @
[18148.453 ; 18686.397) | @

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline e0bbfa0f555cf5b9d8b8749e1a91a78924c9d927
Compare 11ff8a576aaccbf291ce8e3e9ba0bd0b04913d37

Improvemnts in System.Collections.Tests.Add_Remove_SteadyState<String>

Benchmark Baseline Test Test/Base Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ConcurrentBag 56.27 ns 46.30 ns 0.82

graph
Historical Data in Reporting System

Repro

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

.

Payloads

Baseline
Compare

Histogram

System.Collections.Tests.Add_Remove_SteadyState.ConcurrentBag(Count: 512)

[45.858 ; 47.673) | @@@
[47.673 ; 49.105) | 
[49.105 ; 51.109) | @
[51.109 ; 52.360) | @
[52.360 ; 54.050) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[54.050 ; 55.817) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[55.817 ; 57.922) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[57.922 ; 59.428) | @@@@@@@@@@@@@@@
[59.428 ; 60.957) | @@@@@@
[60.957 ; 63.050) | @@@
[63.050 ; 64.832) | 
[64.832 ; 66.614) | 
[66.614 ; 68.395) | 
[68.395 ; 69.759) | 
[69.759 ; 71.168) | @
[71.168 ; 72.950) | 
[72.950 ; 74.731) | 
[74.731 ; 76.513) | 
[76.513 ; 78.294) | 
[78.294 ; 80.607) | @

Docs

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

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline e0bbfa0f555cf5b9d8b8749e1a91a78924c9d927
Compare 11ff8a576aaccbf291ce8e3e9ba0bd0b04913d37

Improvemnts in System.Threading.Tasks.Tests.Perf_AsyncMethods

Benchmark Baseline Test Test/Base Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
EmptyAsyncMethodInvocation 15.90 ns 14.12 ns 0.89 Trace Trace

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f netcoreapp5.0 --filter 'System.Threading.Tasks.Tests.Perf_AsyncMethods*'

.

Payloads

Baseline
Compare

Histogram

System.Threading.Tasks.Tests.Perf_AsyncMethods.EmptyAsyncMethodInvocation

[13.818 ; 14.227) | @@@@@
[14.227 ; 14.571) | 
[14.571 ; 14.916) | 
[14.916 ; 15.286) | 
[15.286 ; 15.889) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[15.889 ; 16.381) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[16.381 ; 16.974) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[16.974 ; 17.491) | @@@@@@@@
[17.491 ; 17.986) | @@

Baseline Jit Disasm

; System.Threading.Tasks.Tests.Perf_AsyncMethods.EmptyAsyncMethodInvocation()
       sub       rsp,38
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       xor       eax,eax
       mov       [rsp+30],rax
       xor       ecx,ecx
       mov       [rsp+28],rcx
       mov       dword ptr [rsp+20],0FFFFFFFF
       lea       rcx,[rsp+20]
       call      System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Tasks.Tests.Perf_AsyncMethods+<EmptyAsyncMethodInvocation>d__0, MicroBenchmarks]](<EmptyAsyncMethodInvocation>d__0 ByRef)
       mov       rax,[rsp+28]
       test      rax,rax
       jne       short M00_L00
       lea       rcx,[rsp+28]
       call      System.Runtime.CompilerServices.AsyncTaskMethodBuilder.InitializeTaskAsPromise()
M00_L00:
       nop
       add       rsp,38
       ret
; Total bytes of code 72
; System.Threading.Tasks.Task.GetAwaiter()
       mov       rax,rcx
       ret
; Total bytes of code 4
; System.Runtime.CompilerServices.TaskAwaiter.GetResult()
       mov       rcx,[rcx]
       mov       eax,[rcx+34]
       and       eax,11000000
       cmp       eax,1000000
       je        short M02_L00
       jmp       near ptr System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
M02_L00:
       ret
; Total bytes of code 24
; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Tasks.Tests.Perf_AsyncMethods+<EmptyAsyncMethodInvocation>d__0, MicroBenchmarks]](<EmptyAsyncMethodInvocation>d__0 ByRef)
       push      rbp
       push      rsi
       sub       rsp,48
       lea       rbp,[rsp+50]
       mov       [rbp+0FFD0],rsp
       mov       rsi,rcx
       cmp       [rsi],esi
       mov       rcx,7FF80A420020
       mov       edx,27E
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       rax,[rax+18]
       test      rax,rax
       jne       short M03_L00
       call      System.Threading.Thread.InitializeCurrentThread()
M03_L00:
       mov       [rbp+0FFF0],rax
       mov       rcx,[rax+8]
       mov       [rbp+0FFE8],rcx
       mov       rcx,[rax+10]
       mov       [rbp+0FFE0],rcx
       mov       rcx,rsi
       call      System.Threading.Tasks.Tests.Perf_AsyncMethods+<EmptyAsyncMethodInvocation>d__0.MoveNext()
       nop
       mov       rdx,[rbp+0FFE0]
       mov       rsi,[rbp+0FFF0]
       mov       rcx,[rbp+0FFE0]
       mov       rax,[rbp+0FFF0]
       cmp       rcx,[rax+10]
       je        short M03_L01
       lea       rcx,[rsi+10]
       call      CORINFO_HELP_ASSIGN_REF
M03_L01:
       mov       rdx,[rbp+0FFE8]
       mov       r8,[rsi+8]
       cmp       [rbp+0FFE8],r8
       je        short M03_L02
       mov       rcx,rsi
       call      System.Threading.ExecutionContext.RestoreChangedContextToThread(System.Threading.Thread, System.Threading.ExecutionContext, System.Threading.ExecutionContext)
M03_L02:
       nop
       lea       rsp,[rbp+0FFF8]
       pop       rsi
       pop       rbp
       ret
       push      rbp
       push      rsi
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+50]
       mov       rdx,[rbp+0FFE0]
       mov       rsi,[rbp+0FFF0]
       mov       rcx,[rbp+0FFE0]
       mov       rax,[rbp+0FFF0]
       cmp       rcx,[rax+10]
       je        short M03_L03
       lea       rcx,[rsi+10]
       call      CORINFO_HELP_ASSIGN_REF
M03_L03:
       mov       rdx,[rbp+0FFE8]
       mov       r8,[rsi+8]
       cmp       [rbp+0FFE8],r8
       je        short M03_L04
       mov       rcx,rsi
       call      System.Threading.ExecutionContext.RestoreChangedContextToThread(System.Threading.Thread, System.Threading.ExecutionContext, System.Threading.ExecutionContext)
M03_L04:
       nop
       add       rsp,28
       pop       rsi
       pop       rbp
       ret
; Total bytes of code 224

Compare Jit Disasm

; System.Threading.Tasks.Tests.Perf_AsyncMethods.EmptyAsyncMethodInvocation()
       sub       rsp,38
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       xor       eax,eax
       mov       [rsp+30],rax
       xor       ecx,ecx
       mov       [rsp+28],rcx
       mov       dword ptr [rsp+20],0FFFFFFFF
       lea       rcx,[rsp+20]
       call      System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Tasks.Tests.Perf_AsyncMethods+<EmptyAsyncMethodInvocation>d__0, MicroBenchmarks]](<EmptyAsyncMethodInvocation>d__0 ByRef)
       mov       rax,[rsp+28]
       test      rax,rax
       jne       short M00_L00
       lea       rcx,[rsp+28]
       call      System.Runtime.CompilerServices.AsyncTaskMethodBuilder.InitializeTaskAsPromise()
M00_L00:
       nop
       add       rsp,38
       ret
; Total bytes of code 72
; System.Threading.Tasks.Task.GetAwaiter()
       mov       rax,rcx
       ret
; Total bytes of code 4
; System.Runtime.CompilerServices.TaskAwaiter.GetResult()
       mov       rcx,[rcx]
       mov       eax,[rcx+34]
       and       eax,11000000
       cmp       eax,1000000
       je        short M02_L00
       jmp       near ptr System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
M02_L00:
       ret
; Total bytes of code 24
; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.Threading.Tasks.Tests.Perf_AsyncMethods+<EmptyAsyncMethodInvocation>d__0, MicroBenchmarks]](<EmptyAsyncMethodInvocation>d__0 ByRef)
       push      rbp
       push      rsi
       sub       rsp,48
       lea       rbp,[rsp+50]
       mov       [rbp+0FFD0],rsp
       mov       rsi,rcx
       cmp       [rsi],esi
       mov       rcx,7FF9D7B00020
       mov       edx,27F
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       rax,[rax+18]
       test      rax,rax
       jne       short M03_L00
       call      System.Threading.Thread.InitializeCurrentThread()
M03_L00:
       mov       [rbp+0FFF0],rax
       mov       rdx,[rax+8]
       mov       [rbp+0FFE8],rdx
       mov       rax,[rax+10]
       mov       [rbp+0FFE0],rax
       mov       rcx,rsi
       call      System.Threading.Tasks.Tests.Perf_AsyncMethods+<EmptyAsyncMethodInvocation>d__0.MoveNext()
       nop
       mov       rax,[rbp+0FFE0]
       mov       rcx,[rbp+0FFF0]
       cmp       rax,[rcx+10]
       je        short M03_L01
       lea       rcx,[rcx+10]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
       mov       rcx,[rbp+0FFF0]
M03_L01:
       mov       r8,[rcx+8]
       mov       rdx,[rbp+0FFE8]
       cmp       rdx,r8
       je        short M03_L02
       call      System.Threading.ExecutionContext.RestoreChangedContextToThread(System.Threading.Thread, System.Threading.ExecutionContext, System.Threading.ExecutionContext)
M03_L02:
       nop
       lea       rsp,[rbp+0FFF8]
       pop       rsi
       pop       rbp
       ret
       push      rbp
       push      rsi
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+50]
       mov       rdx,[rbp+0FFE0]
       mov       rcx,[rbp+0FFF0]
       cmp       rdx,[rcx+10]
       je        short M03_L03
       lea       rcx,[rcx+10]
       call      CORINFO_HELP_ASSIGN_REF
       mov       rcx,[rbp+0FFF0]
M03_L03:
       mov       r8,[rcx+8]
       mov       rdx,[rbp+0FFE8]
       cmp       rdx,r8
       je        short M03_L04
       call      System.Threading.ExecutionContext.RestoreChangedContextToThread(System.Threading.Thread, System.Threading.ExecutionContext, System.Threading.ExecutionContext)
M03_L04:
       nop
       add       rsp,28
       pop       rsi
       pop       rbp
       ret
; Total bytes of code 211

Docs

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

@kunalspathak
Copy link
Collaborator

dotnet/runtime#47307

@kunalspathak
Copy link
Collaborator

FYI - @JulieLeeMSFT

@JulieLeeMSFT
Copy link

Great improvement.

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

No branches or pull requests

2 participants