Pustaka Jaringan .NET 6 Tingkat Rendah yang diukur untuk kinerja soket UDP
NBN adalah tolok ukur untuk perpustakaan jaringan tingkat rendah menggunakan UDP dan dapat digunakan dengan Unity dan untuk aplikasi server mandiri .Net Core. Tolok ukurnya berfokus pada latensi, kinerja, dan skalabilitas.
VPS Ubuntu
$> hostnamectl
Chassis: vm
Virtualization: kvm
Operating System: Ubuntu 22.04.2 LTS
Kernel: Linux 5.15.0-48-generic
Architecture: x86-64
Hardware Vendor: netcup
Hardware Model: KVM Server
Desktop Ubuntu/Desktop Windows
Untuk dua pengaturan desktop, benchmark dijalankan pada sistem yang dimulai ulang dengan waktu idle 5 menit sebelum memulai benchmark. Mereka dijalankan dengan hak istimewa admin dan semua proses lain yang tidak perlu dihentikan sebelum menjalankan benchmark. Untuk VPS Ubuntu, tolok ukur dijalankan melalui integrasi berkelanjutan pada pengaturan server indie biasa dengan proses lain yang juga berjalan. Setelah tolok ukur dijalankan, daftar semua proses yang berjalan agar lebih dapat direproduksi. Untuk mereproduksi benchmark, jalankan sudo sh linux-benchmark.sh
atau win-benchmark.bat
. Jika Anda ingin menjalankan langsung dari program yang dikompilasi, jalankan ./NetworkBenchmarkDotNet -b Essential
.
Data mentah dan file tambahan dapat diunduh dari bagian rilis.
Menjalankan benchmark dengan 500 klien, yang masing-masing melakukan pingpong 1 pesan ke server dengan transmisi yang tidak dapat diandalkan . Tolok ukur ini berjalan hingga total 500.000 pesan dikirim ke server dan kembali ke klien. Ukuran pesan adalah 32 byte .
Tes ini untuk mendapatkan gambaran tentang waktu pulang pergi rata-rata (lebih rendah lebih baik).
Menjalankan benchmark dengan 500 klien, yang masing-masing melakukan pingpong 1 pesan ke server dengan transmisi yang andal . Tolok ukur ini berjalan hingga total 500.000 pesan dikirim ke server dan kembali ke klien. Ukuran pesan adalah 32 byte .
Tes ini untuk mendapatkan gambaran tentang waktu pulang pergi rata-rata (lebih rendah lebih baik).
Menjalankan benchmark dengan 500 klien, yang masing-masing melakukan pingpong 10 pesan ke server dengan transmisi yang tidak dapat diandalkan . Tolok ukur ini berjalan hingga total 500.000 pesan dikirim ke server dan kembali ke klien. Ukuran pesan adalah 32 byte .
Tes ini untuk kinerja multiplexing/penggabungan pesan (lebih tinggi lebih baik).
Menjalankan benchmark dengan 1 klien, yang masing-masing melakukan pingpong 10 pesan ke server. Tolok ukur ini berjalan hingga total 100.000 pesan dikirim ke server dan kembali ke klien. Ukuran pesan adalah 128 byte .
Tes ini mengumpulkan informasi tentang sampah yang dihasilkan dan waktu CPU saat menjalankan benchmark. Hasil tersebut dapat dianalisis dengan PerfView di Windows.
Ini adalah perbandingan antara semua pengujian dengan throughput pesannya (semakin tinggi semakin baik).
.nettrace
.Thread.Sleep
di Windows menciptakan penundaan yang nyata. Untuk saat ini, ini dikecualikan dari tolok ukur yang telah ditentukan, hingga eksekusi dan pembersihannya ditingkatkan.Pastikan Anda telah menginstal .Net 6 SDK.
Kemudian buka saja file solusi dengan Visual Studio/Rider/Visual Studio Code dan buatlah. Perhatikan bahwa hasil benchmark bisa sangat berbeda pada sistem operasi dan perangkat keras yang berbeda.
Secara umum ada dua jenis tolok ukur yang berbeda: Tolok ukur khusus dan tolok ukur yang telah ditentukan sebelumnya. Tolok ukur khusus dan ditentukan melalui opsi baris perintah. Tolok Ukur yang telah ditentukan sebelumnya ditetapkan dalam kode dan dijalankan melalui BenchmarkDotNet. Tolok ukur ini digunakan untuk statistik yang disajikan di sini dan lebih akurat serta dapat direproduksi lebih baik dibandingkan tolok ukur Kustom. Namun, penyelesaiannya juga membutuhkan waktu lebih lama. Anda juga dapat menjalankan klien dan server pada mesin yang berbeda untuk menguji perpustakaan melalui jaringan lokal atau jarak jauh (lihat tolok ukur jarak jauh).
Anda dapat menjalankan tolok ukur khusus melalui baris perintah. Penggunaan dapat menguji beberapa pengaturan dan kombinasinya dengan cara yang mudah dan cepat. Pengujian hanya akan dijalankan satu kali dan tidak seakurat menjalankan benchmark yang telah ditentukan. Contoh untuk menjalankan benchmark mungkin adalah ./NetworkBenchmarkDotNet --library ENet --transmission Unreliable --clients 100 --duration 10
./NetworkBenchmarkDotNet --help
) Usage:
NetworkBenchmarkDotNet [options]
Options:
-b, --benchmark Run predefined benchmarks [default:
<All|Custom|Essential|Performance|Qui Custom]
ck|Sampling>
-m, --execution-mode Control what parts to run [default:
<Client|Complete|Server> Complete]
-t, --test <Manual|PingPong> Test type [default: PingPong]
--transmission <Reliable|Unreliable> Transmission type [default:
Unreliable]
-l, --library Library target [default: ENet]
<ENet|Kcp2k|LiteNetLib|NetCoreServer>
-d, --duration <duration> Test duration in seconds (-1 for
manual stopping) [default: 10]
--address <address> IP Address, can be ipv4 (e.g.
127.0.0.1) or ipv6 (e.g. ::1)
[default: ::1]
--port <port> Socket Port [default: 3330]
--clients <clients> # Simultaneous clients [default: 500]
--parallel-messages #Parallel messages per client
<parallel-messages> [default: 1]
--message-byte-size Message byte size sent by clients
<message-byte-size> [default: 32]
--message-payload <Ones|Random|Zeros> Message load sent by clients
[default: Random]
--verbose Verbose output of test steps and
errors [default: True]
--client-tick-rate <client-tick-rate> Client ticks per second if supported
[default: 60]
--server-tick-rate <server-tick-rate> Server ticks per second if supported
[default: 60]
--use-native-sockets Use native Sockets (LiteNetLib only)
[default: True]
--version Show version information
-?, -h, --help Show help and usage information
Tolok ukur yang telah ditentukan memerlukan waktu untuk dijalankan, namun menghasilkan angka yang dapat direproduksi. Cara termudah untuk menjalankan benchmark yang telah ditentukan adalah dengan menjalankan win-benchmark.bat
di windows atau sh linux-benchmark.sh
di windows.
Untuk menguji perpustakaan dari jarak jauh, Anda dapat menggunakan parameter --execution-mode Server
dan --execution-mode Client
. Penyiapan ini mengharuskan server terlebih dahulu memulai dengan perpustakaan yang benar (dan mungkin durasi eksekusi tidak terbatas) di server target Anda, dan kemudian proses klien. Berikut ini contohnya:
Server: ./NetworkBenchmarkDotNet --library ENet --transmission Reliable --execution-mode Server --address YOUR_ADDRESS -d -1
Klien: ./NetworkBenchmarkDotNet --library ENet --transmission Reliable --execution-mode Client --address YOUR_ADDRESS --clients 100 -d 10
Jika Anda mengubah alamat di QuickBenchmark.cs
, Anda juga dapat menjalankan benchmark jarak jauh yang lebih canggih dengan cara ini.
Pustaka favorit Anda tidak ada, atau Anda merasa tolok ukurnya tidak menguji semua hal yang relevan? Mari kita kembangkan tolok ukurnya bersama-sama! Hubungi saya melalui E-mail untuk mendiskusikan ide Anda, atau buka terbitan, atau buat pull request secara langsung. Ada beberapa aturan agar benchmark tidak terlalu berantakan.
Perpustakaan baru yang Anda usulkan ...
YourLibraryBenchmark.cs
yang mengimplementasikan ANetworkBenchmarkINetworkBenchmark.CreateNetworkBenchmark()
-l
(atau BenchmarkSetup.Library
) untuk menguji perpustakaan Anda dan apakah semuanya berfungsi seperti yang diharapkan.[Params(NetworkLibrary.Kcp2k)]
di QuickBenchmark.cs
ke perpustakaan Anda dan jalankan ./NetworkBenchmarkDotNet -b Quick
untuk melihat, apakah perpustakaan Anda berfungsi dengan CCU tinggi dan mengulang tolok ukur dengan BenchmarkDotNetMIT