Skip to content

.NET 8.0.10 vs 9.0.0 RC2 GC Server Performance Regression in Sep (CSV Parser) Benchmark (due to DATAS default) #109047

Closed
@nietras

Description

In https://github.com/nietras/Sep (a fast highly optimized CSV parser) I have been comparing performance comparison-bench.ps1 between .NET 8 and .NET 9 RC2 and have observed what appears to be consistent and significant performance regression when using ServerGarbageCollection (true). The benchmark in question is also discussed in https://www.joelverhagen.com/blog/2020/12/fastest-net-csv-parsers

Benchmarks can be run by cloning the Sep repo, checking out branch net9.0 and running the command in the comparison-bench.ps1 perhaps adding --filter *GcServer*Sep* or similar. Details for benchmark, machine are given below via BenchmarkDotNet.

As can be seen this shows regression in a scenario of many medium size object allocations ranging from 500ms/429ms = 1.17x (single thread) to 174ms/102ms = 1.69x (multi-threaded) regression.

I know there have been changes to the GC my question is whether this regression is expected? And just wanted to flag it if it has any interest.

BenchmarkDotNet v0.14.0, Windows 10 (10.0.19044.3086/21H2/November2021Update)
AMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores
.NET SDK 9.0.100-rc.2.24474.11
  [Host]     : .NET 8.0.10 (8.0.1024.46610), X64 RyuJIT AVX2
  Job-YVJTZC : .NET 8.0.10 (8.0.1024.46610), X64 RyuJIT AVX2
  Job-ZDJCYM : .NET 9.0.0 (9.0.24.47305), X64 RyuJIT AVX2

Server=True  InvocationCount=Default  IterationTime=350ms  
MaxIterationCount=15  MinIterationCount=5  WarmupCount=6  
Quotes=False  Reader=String  

Method Runtime Scope Rows Mean Ratio MB MB/s ns/row Allocated Alloc Ratio
Sep______ .NET 8.0 Asset 50000 21.402 ms 1.00 29 1363.5 428.0 14133102 B 1.00
Sep_MT___ .NET 8.0 Asset 50000 5.576 ms 0.26 29 5233.7 111.5 14308501 B 1.01
Sep______ .NET 9.0 Asset 50000 24.444 ms 1.14 29 1193.8 488.9 14133077 B 1.00
Sep_MT___ .NET 9.0 Asset 50000 8.965 ms 0.42 29 3255.0 179.3 14310332 B 1.01
Sep______ .NET 8.0 Asset 1000000 429.654 ms 1.00 583 1358.7 429.7 273063216 B 1.00
Sep_MT___ .NET 8.0 Asset 1000000 102.979 ms 0.24 583 5668.9 103.0 274049328 B 1.00
Sep______ .NET 9.0 Asset 1000000 500.250 ms 1.16 583 1167.0 500.3 273062592 B 1.00
Sep_MT___ .NET 9.0 Asset 1000000 174.802 ms 0.41 583 3339.7 174.8 273973628 B 1.00

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions