Releases: JohannesDeml/NetworkBenchmarkDotNet
1.1.0
1.1.0 - .NET 6
- Update networking libraries
- Update Operating Systems
- Update .NET to 6.013 on Ubuntu and 6.0.15 on Windows
Changes
- Upgrade NetCoreServer to v6.7.0
- Upgrade LietNetLib to 1.0.1
- Upgrade KCP to 1.34
- Upgrade BenchmarkDotNet to 0.13.5
Results
Hardware
-
Ubuntu VPS
- Virtual private server with dedicated CPU's running - Hardware
- Ubuntu 22.04.2 LTS x86-64 Kernel 5.15.0-48-generic
-
Ubuntu Desktop / Windows Desktop
- Desktop PC from 2020 - Hardware
- Windows 11 Pro x86-64 Build 22621,1485 (22H2)
- Ubuntu 22.04.2 LTS x86-64 Kernel 5.19.0-38-generic
Software
- .NET 6.0.13 on Ubuntu, 6.0.15 on Windows
- BenchmarkDotNet 0.13.5
1.0.1
1.0.1 - Update to the latest version 📊
- Update all libraries that have updates
- Update Operating Systems
- Update .NET to 5.0.11
Changes
- Upgrade NetCoreServer to v5.1.0
- Upgrade LietNetLib to 0.9.5.2
- Upgrade KCP to 1.12
- Upgrade BenchmarkDotNet to 0.13.1
- Use parameter sorting for columns and replace client colum with attribute generation
Results
Hardware
-
Ubuntu VPS
- Virtual private server with dedicated CPU's running - Hardware
- Ubuntu 20.04.3 LTS x86-64 Kernel 5.14.0-051400-generic
-
Ubuntu Desktop / Windows Desktop
- Desktop PC from 2020 - Hardware
- Windows 10 Pro x86-64 Build 19043.1266 (21H1/May2021Update)
- Ubuntu 20.04.3 LTS x86-64 Kernel 5.11.0-37-generic
Software
- .NET 5.0.11 (5.0.1121.47308)
- BenchmarkDotNet 0.13.1
1.0.0
1.0.0 - Hardware, Charts, .NET 5 📊
- Add Manual mode to test libraries (e.g. for packet sniffing to get an idea how the libraries act in different scenarios)
- Add snapshot of process list after the benchmarks are run - helps with reproducability
- Run benchmark with three setups, those will be kept for the future, see more at Setups
- Run benchmarks with a clear procedure
- Generate charts for the results to make the results better readable
Changes
- Remove .NET Core 3.1 compatibility, .NET 5 is the only target now
- Change garbage to sampling benchmark, since it gives more information than just garbage
- Change use pinned object heap (POH) were applicable
- Upgrade ENet to v.2.4.7
- Upgrade NetCoreServer to v5.0.15
Hardware Setups
One VPS as a indie server setup, and a desktop PC with windows and Ubuntu to compare OSes with the same used hardware.
-
Ubuntu VPS
- Virtual private server with dedicated CPU's running - Hardware
- Ubuntu 20.04.2 LTS x86-64 Kernel 5.4.0-72-generic
-
Ubuntu Desktop / Windows Desktop
- Desktop PC from 2020 - Hardware
- Windows 10 Pro 20H2 x86-64 Build 19042.844
- Ubuntu 20.04.2 LTS x86-64 Kernel 5.8.0-50-generic
Results
0.9.0
0.9.0 - Reliable Benchmark & Remote Benchmarks 🔗
- Add benchmark PingPongReliable for using reliable transmission (if supported by the library)
- Add support for indefinite duration by using a negative duration value
- Add execution-mode config to support remote benchmarking by splitting the server and client
- Improve error handling
- Code and folder refactoring - the naming and folder structure are final now
Changes
- Change benchmark naming: Performance 1 -> PingPongUnreliable
- Change benchmark naming: Performance 2 -> PingPongBatchedUnreliable
Ubuntu 20.04
To reproduce the benchmarks, run ./NetworkBenchmarkDotNet -b Essential
.
Hardware Details
BenchmarkDotNet=v0.12.1, OS=ubuntu 20.04
Intel Core i5-3570K CPU 3.40GHz (Ivy Bridge), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=5.0.103
[Host] : .NET Core 5.0.3 (CoreCLR 5.0.321.7203, CoreFX 5.0.321.7203), X64 RyuJIT
Job-YNISTP : .NET Core 5.0.3 (CoreCLR 5.0.321.7203, CoreFX 5.0.321.7203), X64 RyuJIT
Platform=X64 Runtime=.NET Core 5.0 Concurrent=True
Force=True Server=True InvocationCount=1
IterationCount=10 LaunchCount=1 UnrollFactor=1
WarmupCount=1 Version=0.9.0 OS=Linux 5.8.0-43-generic #49~20.04.1-Ubuntu SMP Fri Feb 5 09:57:56 UTC 2021
DateTime=02/18/2021 16:18:27
Method | Library | Transmission | Clients | Throughput | Mean | Error | StdDev |
---|---|---|---|---|---|---|---|
PingPongReliable | ENet | Reliable | 500 | 90,333 msg/s | 5.535 s | 0.0311 s | 0.0205 s |
PingPongUnreliable | ENet | Unreliable | 500 | 185,112 msg/s | 2,701.1 ms | 21.57 ms | 12.83 ms |
PingPongBatchedUnreliable | ENet | Unreliable | 500 | 1,129,598 msg/s | 442.6 ms | 4.83 ms | 2.87 ms |
PingPongUnreliable | NetCoreServer | Unreliable | 500 | 96,514 msg/s | 5,180.6 ms | 64.21 ms | 42.47 ms |
PingPongBatchedUnreliable | NetCoreServer | Unreliable | 500 | 97,245 msg/s | 5,141.6 ms | 55.11 ms | 36.45 ms |
PingPongReliable | LiteNetLib | Reliable | 500 | 82,804 msg/s | 6.038 s | 0.0671 s | 0.0444 s |
PingPongUnreliable | LiteNetLib | Unreliable | 500 | 91,222 msg/s | 5,481.2 ms | 51.56 ms | 34.11 ms |
PingPongBatchedUnreliable | LiteNetLib | Unreliable | 500 | 251,421 msg/s | 1,988.7 ms | 56.09 ms | 33.38 ms |
Windows 10
To reproduce the benchmarks, run ./NetworkBenchmarkDotNet -b Essential
.
Hardware Details (Note that this machine has a lot more performance than the linux machine)
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
AMD Ryzen 7 3700X, 1 CPU, 16 logical and 8 physical cores
.NET Core SDK=5.0.103
[Host] : .NET Core 5.0.3 (CoreCLR 5.0.321.7212, CoreFX 5.0.321.7212), X64 RyuJIT
Job-ODIPRB : .NET Core 5.0.3 (CoreCLR 5.0.321.7212, CoreFX 5.0.321.7212), X64 RyuJIT
Platform=X64 Runtime=.NET Core 5.0 Concurrent=True
Force=True Server=True InvocationCount=1
IterationCount=10 LaunchCount=1 UnrollFactor=1
WarmupCount=1 Version=0.9.0 OS=Microsoft Windows 10.0.19042
DateTime=02/18/2021 16:18:02
Method | Library | Transmission | Clients | Throughput | Mean | Error | StdDev |
---|---|---|---|---|---|---|---|
PingPongReliable | ENet | Reliable | 500 | 51,718 msg/s | 9.668 s | 0.1468 s | 0.0768 s |
PingPongUnreliable | ENet | Unreliable | 500 | 93,960 msg/s | 5,321.4 ms | 1,040.97 ms | 688.54 ms |
PingPongBatchedUnreliable | ENet | Unreliable | 500 | 687,775 msg/s | 727.0 ms | 84.13 ms | 55.65 ms |
PingPongUnreliable | NetCoreServer | Unreliable | 500 | 72,975 msg/s | 6,851.6 ms | 41.01 ms | 27.12 ms |
PingPongBatchedUnreliable | NetCoreServer | Unreliable | 500 | 78,644 msg/s | 6,357.8 ms | 42.78 ms | 25.46 ms |
PingPongReliable | LiteNetLib | Reliable | 500 | 88,463 msg/s | 5.652 s | 0.0231 s | 0.0138 s |
PingPongUnreliable | LiteNetLib | Unreliable | 500 | 90,985 msg/s | 5,495.4 ms | 30.93 ms | 20.46 ms |
PingPongBatchedUnreliable | LiteNetLib | Unreliable | 500 | 771,852 msg/s | 647.8 ms | 13.48 ms | 8.92 ms |
0.8.2
0.8.2 - Reliable Messages & Quick Benchmarks 🏃♂️
- Add Transmission option for testing reliable messages
- Change InDepth benchmark to Quick benchmark. Runs with a lot less overhead and is a nice intermediate between Custom Benchmarks and the Essential benchmarks. Helps to get a grip for a Library fast with more reliable numbers than you get with a custom benchmark
- Refactor: Use local variables for the benchmark running and listening loops
- Refactor: Add
AClient
,AServer
andANetworkBenchmark
for merging common functionality and avoid copy paste mistakes - ENet: Use unsequenced PacketFlag and Unthrottled for unreliable UDP
- Accessibility: Make
win-benchmark.bat
easier to use and add documentation
Ubuntu 20.04
To reproduce the benchmarks, run ./NetworkBenchmarkDotNet -b Essential
.
Detailed Benchmark Hardware
BenchmarkDotNet=v0.12.1, OS=ubuntu 20.04
Intel Core i5-3570K CPU 3.40GHz (Ivy Bridge), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=5.0.103
[Host] : .NET Core 5.0.3 (CoreCLR 5.0.321.7203, CoreFX 5.0.321.7203), X64 RyuJIT
Job-CAYZXA : .NET Core 5.0.3 (CoreCLR 5.0.321.7203, CoreFX 5.0.321.7203), X64 RyuJIT
Platform=X64 Runtime=.NET Core 5.0 Concurrent=True
Force=True Server=True InvocationCount=1
IterationCount=20 LaunchCount=1 UnrollFactor=1
WarmupCount=1 Version=0.8.2 OS=Linux 5.8.0-43-generic #49~20.04.1-Ubuntu SMP Fri Feb 5 09:57:56 UTC 2021
DateTime=02/17/2021 16:22:28
Method | Library | Clients | Throughput | Mean | Error | StdDev |
---|---|---|---|---|---|---|
Performance1 | ENet | 500 | 184,330 msg/s | 2,712.5 ms | 13.29 ms | 14.77 ms |
Performance2 | ENet | 500 | 1,127,749 msg/s | 443.4 ms | 1.91 ms | 1.96 ms |
Performance1 | NetCoreServer | 500 | 110,626 msg/s | 4,519.7 ms | 20.66 ms | 21.21 ms |
Performance2 | NetCoreServer | 500 | 95,698 msg/s | 5,224.8 ms | 15.82 ms | 16.93 ms |
Performance1 | LiteNetLib | 500 | 93,768 msg/s | 5,332.3 ms | 22.10 ms | 24.57 ms |
Performance2 | LiteNetLib | 500 | 259,604 msg/s | 1,926.0 ms | 35.52 ms | 40.90 ms |
Performance1 | Kcp2k | 500 | 24,551 msg/s | 20,365.5 ms | 290.54 ms | 334.59 ms |
Performance2 | Kcp2k | 500 | 124,884 msg/s | 4,003.7 ms | 133.17 ms | 153.36 ms |
Windows 10
To reproduce the benchmarks, run ./NetworkBenchmarkDotNet -b Essential
.
Detailed Benchmark Hardware (Note that this machine has a lot more performance than the linux machine)
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
AMD Ryzen 7 3700X, 1 CPU, 16 logical and 8 physical cores
.NET Core SDK=5.0.100
[Host] : .NET Core 5.0.0 (CoreCLR 5.0.20.51904, CoreFX 5.0.20.51904), X64 RyuJIT
Job-KWKBOV : .NET Core 5.0.0 (CoreCLR 5.0.20.51904, CoreFX 5.0.20.51904), X64 RyuJIT
Platform=X64 Runtime=.NET Core 5.0 Concurrent=True
Force=True Server=True InvocationCount=1
IterationCount=20 LaunchCount=1 UnrollFactor=1
WarmupCount=1 Version=0.8.2 OS=Microsoft Windows 10.0.19042
DateTime=02/17/2021 16:23:23
Method | Library | Clients | Throughput | Mean | Error | StdDev |
---|---|---|---|---|---|---|
Performance1 | ENet | 500 | 103,408 msg/s | 4,835.2 ms | 273.39 ms | 314.84 ms |
Performance2 | ENet | 500 | 713,546 msg/s | 700.7 ms | 40.59 ms | 46.75 ms |
Performance1 | NetCoreServer | 500 | 72,938 msg/s | 6,855.1 ms | 36.20 ms | 40.24 ms |
Performance2 | NetCoreServer | 500 | 70,188 msg/s | 7,123.8 ms | 11.23 ms | 12.02 ms |
Performance1 | LiteNetLib | 500 | 101,078 msg/s | 4,946.7 ms | 27.74 ms | 28.48 ms |
Performance2 | LiteNetLib | 500 | 874,633 msg/s | 571.7 ms | 8.18 ms | 9.42 ms |
Performance1 | Kcp2k | 500 | 15,536 msg/s | 32,183.3 ms | 484.33 ms | 538.33 ms |
Performance2 | Kcp2k | 500 | 67,639 msg/s | 7,392.2 ms | 231.14 ms | 266.18 ms |
Ubuntu 20.04 Live USB stick
To reproduce the benchmarks, run ./NetworkBenchmarkDotNet -b Essential
.
Detailed Benchmark Hardware This is the windows machine as a little bonus test. Not sure how reliable a USB-Stick booted test is in the end.
BenchmarkDotNet=v0.12.1, OS=ubuntu 20.04
AMD Ryzen 7 3700X, 1 CPU, 16 logical and 8 physical cores
.NET Core SDK=5.0.103
[Host] : .NET Core 5.0.3 (CoreCLR 5.0.321.7203, CoreFX 5.0.321.7203), X64 RyuJIT
Job-ZVTATC : .NET Core 5.0.3 (CoreCLR 5.0.321.7203, CoreFX 5.0.321.7203), X64 RyuJIT
Platform=X64 Runtime=.NET Core 5.0 Concurrent=True
Force=True Server=True InvocationCount=1
IterationCount=20 LaunchCount=1 UnrollFactor=1
WarmupCount=1 Version=0.8.2 OS=Linux 5.8.0-43-generic #49~20.04.1-Ubuntu SMP Fri Feb 5 09:57:56 UTC 2021
DateTime=02/17/2021 18:19:23
Method | Library | Clients | Throughput | Mean | Error | StdDev |
---|---|---|---|---|---|---|
Performance1 | ENet | 500 | 288,441 msg/s | 1,733.5 ms | 10.28 ms | 11.84 ms |
Performance2 | ENet | 500 | 1,541,399 msg/s | 324.4 ms | 4.66 ms | 5.36 ms |
Performance1 | NetCoreServer | 500 | 124,652 msg/s | 4,011.2 ms | 15.85 ms | 18.25 ms |
Performance2 | NetCoreServer | 500 | 127,353 msg/s | 3,926.1 ms | 27.53 ms | 31.70 ms |
Performance1 | LiteNetLib | 500 | 218,786 msg/s | 2,285.3 ms | 19.62 ms | 20.99 ms |
Performance2 | LiteNetLib | 500 | 279,585 msg/s | 1,788.4 ms | 47.12 ms | 54.27 ms |
Performance1 | Kcp2k | 500 | 22,340 msg/s | 22,380.9 ms | 38.98 ms | 43.33 ms |
Performance2 | Kcp2k | 500 | 195,655 msg/s | 2,555.5 ms | 63.15 ms | 72.72 ms |
0.8.1
0.8.1 - Big Cleanup 🧹
- Refactor code to make it more maintainable
- Merge duplicated code to static utility methods
- Update ENet-CSharp to 2.4.6
Ubuntu 20.04
To reproduce the benchmarks, run ./NetworkBenchmarkDotNet -b Essential
.
Detailed Benchmark Hardware
BenchmarkDotNet=v0.12.1, OS=ubuntu 20.04
Intel Core i5-3570K CPU 3.40GHz (Ivy Bridge), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=5.0.103
[Host] : .NET Core 5.0.3 (CoreCLR 5.0.321.7203, CoreFX 5.0.321.7203), X64 RyuJIT
Job-IJBNLS : .NET Core 5.0.3 (CoreCLR 5.0.321.7203, CoreFX 5.0.321.7203), X64 RyuJIT
Platform=X64 Runtime=.NET Core 5.0 Concurrent=True
Force=True Server=True InvocationCount=1
IterationCount=20 LaunchCount=1 UnrollFactor=1
WarmupCount=1 Version=0.8.1 OS=Linux 5.8.0-41-generic #46~20.04.1-Ubuntu SMP Mon Jan 18 17:52:23 UTC 2021
DateTime=02/16/2021 11:49:25
Method | Library | Clients | Throughput | Mean | Error | StdDev |
---|---|---|---|---|---|---|
Performance1 | ENet | 500 | 185,238 msg/s | 2,699.2 ms | 15.25 ms | 15.66 ms |
Performance2 | ENet | 500 | 1,123,648 msg/s | 445.0 ms | 2.71 ms | 2.90 ms |
Performance1 | NetCoreServer | 500 | 102,402 msg/s | 4,882.7 ms | 18.56 ms | 21.38 ms |
Performance2 | NetCoreServer | 500 | 107,236 msg/s | 4,662.6 ms | 22.80 ms | 26.26 ms |
Performance1 | LiteNetLib | 500 | 81,932 msg/s | 6,102.6 ms | 43.66 ms | 50.27 ms |
Performance2 | LiteNetLib | 500 | 307,560 msg/s | 1,625.7 ms | 9.74 ms | 10.83 ms |
Performance1 | Kcp2k | 500 | 65,381 msg/s | 7,647.5 ms | 873.18 ms | 970.53 ms |
Performance2 | Kcp2k | 500 | 51,884 msg/s | 9,636.8 ms | 1,815.34 ms | 2,090.55 ms |
Windows 10
To reproduce the benchmarks, run ./NetworkBenchmarkDotNet -b Essential
.
Detailed Benchmark Hardware (Note that this machine has a lot more performance than the linux machine)
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
AMD Ryzen 7 3700X, 1 CPU, 16 logical and 8 physical cores
.NET Core SDK=5.0.100
[Host] : .NET Core 5.0.0 (CoreCLR 5.0.20.51904, CoreFX 5.0.20.51904), X64 RyuJIT
Job-DLLJEE : .NET Core 5.0.0 (CoreCLR 5.0.20.51904, CoreFX 5.0.20.51904), X64 RyuJIT
Platform=X64 Runtime=.NET Core 5.0 Concurrent=True
Force=True Server=True InvocationCount=1
IterationCount=20 LaunchCount=1 UnrollFactor=1
WarmupCount=1 Version=0.8.1 OS=Microsoft Windows 10.0.19042
DateTime=02/16/2021 11:49:06
Method | Library | Clients | Throughput | Mean | Error | StdDev |
---|---|---|---|---|---|---|
Performance1 | ENet | 500 | 96,028 msg/s | 5,206.8 ms | 272.20 ms | 313.46 ms |
Performance2 | ENet | 500 | 696,194 msg/s | 718.2 ms | 42.12 ms | 48.51 ms |
Performance1 | NetCoreServer | 500 | 71,063 msg/s | 7,036.0 ms | 37.55 ms | 43.24 ms |
Performance2 | NetCoreServer | 500 | 69,418 msg/s | 7,202.7 ms | 18.91 ms | 21.02 ms |
Performance1 | LiteNetLib | 500 | 93,363 msg/s | 5,355.5 ms | 30.85 ms | 34.29 ms |
Performance2 | LiteNetLib | 500 | 848,954 msg/s | 589.0 ms | 7.45 ms | 8.28 ms |
Performance1 | Kcp2k | 500 | 37,782 msg/s | 13,233.7 ms | 420.19 ms | 483.89 ms |
Performance2 | Kcp2k | 500 | 120,659 msg/s | 4,143.9 ms | 34.13 ms | 39.30 ms |
0.8.0
0.8.0 - .NET 5 and KCP 👨🔬
- Change benchmarks to use .NET 5 (Everything is still .NET 3.1 Core compatible)
- Add a benchmark for Kcp2k, since this library will probably get more relevant in the future and is UDP based - Note that the results of KCP will probably increase with some tweaks.
- Change performance benchmarks to use 500 Clients and instead have 20 iterations
- Change from .NET Core 3.1.10 to 3.1.22, last release in master branch with .NET Core 3.x
- Include windows results again. Since the last Windows update, the benchmarks run a lot faster than before (even though they are still hardly comparable to Linux) and are worth noting to give a feeling of how the different libraries compare on different operating systems.
Ubuntu 20.04
To reproduce the benchmarks, run ./NetworkBenchmarkDotNet -b Essential
.
Detailed Benchmark Hardware
BenchmarkDotNet=v0.12.1, OS=ubuntu 20.04
Intel Core i5-3570K CPU 3.40GHz (Ivy Bridge), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=5.0.103
[Host] : .NET Core 5.0.3 (CoreCLR 5.0.321.7203, CoreFX 5.0.321.7203), X64 RyuJIT
Job-ZWOJJS : .NET Core 5.0.3 (CoreCLR 5.0.321.7203, CoreFX 5.0.321.7203), X64 RyuJIT
Platform=X64 Runtime=.NET Core 5.0 Concurrent=True
Force=True Server=True InvocationCount=1
IterationCount=20 LaunchCount=1 UnrollFactor=1
WarmupCount=1 Version=0.8.0 OS=Linux 5.8.0-41-generic #46~20.04.1-Ubuntu SMP Mon Jan 18 17:52:23 UTC 2021
DateTime=02/15/2021 18:08:30
Method | Library | Clients | Throughput | Mean | Error | StdDev |
---|---|---|---|---|---|---|
Performance1 | ENet | 500 | 185,261 msg/s | 2,698.9 ms | 14.11 ms | 16.25 ms |
Performance2 | ENet | 500 | 1,137,405 msg/s | 439.6 ms | 3.69 ms | 4.25 ms |
Performance1 | NetCoreServer | 500 | 106,107 msg/s | 4,712.2 ms | 24.73 ms | 27.48 ms |
Performance2 | NetCoreServer | 500 | 108,097 msg/s | 4,625.5 ms | 15.29 ms | 17.61 ms |
Performance1 | LiteNetLib | 500 | 81,420 msg/s | 6,141.0 ms | 51.56 ms | 59.38 ms |
Performance2 | LiteNetLib | 500 | 298,159 msg/s | 1,677.0 ms | 15.40 ms | 17.11 ms |
Performance1 | Kcp2k | 500 | 47,227 msg/s | 10,587.1 ms | 3,304.33 ms | 3,672.76 ms |
Performance2 | Kcp2k | 500 | 50,075 msg/s | 9,985.0 ms | 2,525.07 ms | 2,806.61 ms |
Windows 10
To reproduce the benchmarks, run ./NetworkBenchmarkDotNet -b Essential
.
Detailed Benchmark Hardware (Note that this machine has a lot more performance than the linux machine)
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
AMD Ryzen 7 3700X, 1 CPU, 16 logical and 8 physical cores
.NET Core SDK=5.0.100
[Host] : .NET Core 5.0.0 (CoreCLR 5.0.20.51904, CoreFX 5.0.20.51904), X64 RyuJIT
Job-VQNPIH : .NET Core 5.0.0 (CoreCLR 5.0.20.51904, CoreFX 5.0.20.51904), X64 RyuJIT
Platform=X64 Runtime=.NET Core 5.0 Concurrent=True
Force=True Server=True InvocationCount=1
IterationCount=20 LaunchCount=1 UnrollFactor=1
WarmupCount=1 Version=0.8.0 OS=Microsoft Windows 10.0.19042
DateTime=02/15/2021 18:06:38
Method | Library | Clients | Throughput | Mean | Error | StdDev | Median |
---|---|---|---|---|---|---|---|
Performance1 | ENet | 500 | 101,278 msg/s | 4,936.9 ms | 374.38 ms | 431.14 ms | 5,014.2 ms |
Performance2 | ENet | 500 | 710,820 msg/s | 703.4 ms | 39.89 ms | 45.94 ms | 689.7 ms |
Performance1 | NetCoreServer | 500 | 66,635 msg/s | 7,503.6 ms | 730.83 ms | 841.63 ms | 6,947.8 ms |
Performance2 | NetCoreServer | 500 | 68,048 msg/s | 7,347.8 ms | 17.61 ms | 16.47 ms | 7,349.3 ms |
Performance1 | LiteNetLib | 500 | 89,309 msg/s | 5,598.5 ms | 37.54 ms | 43.24 ms | 5,594.9 ms |
Performance2 | LiteNetLib | 500 | 786,067 msg/s | 636.1 ms | 7.30 ms | 8.41 ms | 639.5 ms |
Performance1 | Kcp2k | 500 | 37,012 msg/s | 13,509.2 ms | 529.46 ms | 609.73 ms | 13,901.7 ms |
Performance2 | Kcp2k | 500 | 117,231 msg/s | 4,265.1 ms | 46.64 ms | 53.71 ms | 4,264.8 ms |
0.5.1
0.5.1 - Introduction of NetData 📉
- Even though the same machine is used, performance decreases quite a bit (7%-21%) when using netdata on the machine. This is a release to show that difference and give a possible way to recalculate future benchmarks using netdata.
- Name Change from NetCoreNetworkBenchmark to NetworkBenchmarkDotNet, since .NET Core becomes .NET.
- Update of LiteNetLib to 0.9.4 (And removal of submodule from repository, since it is not necessary anymore)
- Change from .NET Core 3.1.9 to 3.1.10, last release in master branch with .NET Core 3.x
With NetData
Results v0.5.1 with Background Tasks: NetDat
BenchmarkDotNet=v0.12.1, OS=ubuntu 20.04
Intel Core i5-3570K CPU 3.40GHz (Ivy Bridge), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=3.1.404
[Host] : .NET Core 3.1.10 (CoreCLR 4.700.20.51601, CoreFX 4.700.20.51901), X64 RyuJIT
Job-CXRHAN : .NET Core 3.1.10 (CoreCLR 4.700.20.51601, CoreFX 4.700.20.51901), X64 RyuJIT
Concurrent=False Server=True InvocationCount=1
IterationCount=10 LaunchCount=1 UnrollFactor=1
WarmupCount=1
Benchmark | ENet | LiteNetLib | NetCoreServer |
---|---|---|---|
Performance | |||
Performance1 | 167,841 msg/s (5.958 s) | 68,129 msg/s (14.678 s) | 90,612 msg/s (11.036 s) |
Performance2 | 993,048 msg/s (1.007 s) | 267,379 msg/s (3.740 s) | 91,215 msg/s (10.963 s) |
Garbage | |||
Alloc | 0.512 MB | 81.968 MB | 161.892 MB |
GC Pauses | 107.5 ms (max 19.6 ms) | 106.6 ms (max 2.7 ms) | 86.8 ms (max 10.6 ms) |
Without NetData
Results v0.5.1 with Background Tasks: None
BenchmarkDotNet=v0.12.1, OS=ubuntu 20.04
Intel Core i5-3570K CPU 3.40GHz (Ivy Bridge), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=5.0.100
[Host] : .NET Core 3.1.10 (CoreCLR 4.700.20.51601, CoreFX 4.700.20.51901), X64 RyuJIT
Job-GXZRRI : .NET Core 3.1.10 (CoreCLR 4.700.20.51601, CoreFX 4.700.20.51901), X64 RyuJIT
Concurrent=False Server=True InvocationCount=1
IterationCount=10 LaunchCount=1 UnrollFactor=1
WarmupCount=1
Benchmark | ENet | LiteNetLib | NetCoreServer |
---|---|---|---|
Performance | |||
Performance1 | 189,721 msg/s (5.271 s) | 78,859 msg/s (12.681 s) | 110,378 msg/s (9.060 s) |
Performance2 | 1,061,684 msg/s (0.942 s) | 289,218 msg/s (3.458 s) | 111,165 msg/s (8.996 s) |
Garbage | |||
Alloc | 0.512 MB | 82.648 MB | 162.256 MB |
GC Pauses | 84.9 ms (max 2.0 ms) | 102.5 ms (max 3.0 ms) | 68.6 ms (max 2.5 ms) |
Comparison
Method | Library | Mean time increase |
---|---|---|
Performance1 | ENet | 13,04% |
Performance2 | ENet | 6,91% |
Performance1 | NetCoreServer | 21,81% |
Performance2 | NetCoreServer | 21,87% |
Performance1 | LiteNetLib | 15,75% |
Performance2 | LiteNetLib | 8,17% |
0.5.0
0.5.0 - Garbage Benchmark 🚮
- Add Garbage Benchmark to collect information about allocations and GC times
- Add option to define which benchmarks to run
- Improve results summary to show the most relevant information for others
- Add more data from the benchmarks to the results
- Remove Benchmark folder to not clutter the repo too much (Results are in releases)
Results v0.5.0, BenchmarkDotNet v0.12.1, OS ubuntu 20.04
Intel Core i5-3570K CPU 3.40GHz (Ivy Bridge), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=3.1.403
[Host] : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT
Benchmark | ENet | LiteNetLib | NetCoreServer |
---|---|---|---|
Performance | |||
Performance1 | 192,034 msg/s (5,207.4 ms) | 78,447 msg/s (12,747.5 ms) | 109,813 msg/s (9,106.4 ms) |
Performance2 | 1,075,153 msg/s (930.1 ms) | 286,566 msg/s (3,489.6 ms) | 114,481 msg/s (8,735.1 ms) |
Garbage | |||
Alloc | 0.512 MB | 81.161 MB | 161.978 MB |
GC Pauses | 83.4 ms (max 8.4 ms) | 101.1 ms (max 2.9 ms) | 74.5 ms (max 2.5 ms) |
0.4.0
0.4.0 - Commandline revamp 🧛
- Change commandline from NDesk.Options (Deprecated) to System.Commanline
- Change in input args
- Supports commandline compleions
- Cleanup of option naming
- Change for Benchmark 2: Use 1000 instead of 100 clients. This way the two benchmarks are easier to compare.
BenchmarkDotNet=v0.12.1, OS=ubuntu 20.04
Intel Core i5-3570K CPU 3.40GHz (Ivy Bridge), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=3.1.403
[Host] : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT
Job-QYXZWQ : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT
Concurrent=False Server=True InvocationCount=1
IterationCount=10 LaunchCount=1 UnrollFactor=1
WarmupCount=1
Method | Library | Mean | Error | StdDev |
---|---|---|---|---|
Benchmark1 | ENet | 5,375.7 ms | 174.01 ms | 115.10 ms |
Benchmark2 | ENet | 921.5 ms | 29.62 ms | 19.59 ms |
Benchmark1 | NetCoreServer | 8,326.7 ms | 192.85 ms | 127.56 ms |
Benchmark2 | NetCoreServer | 8,943.6 ms | 63.25 ms | 37.64 ms |
Benchmark1 | LiteNetLib | 12,763.4 ms | 437.03 ms | 289.07 ms |
Benchmark2 | LiteNetLib | 3,556.3 ms | 57.70 ms | 34.34 ms |