針對 UDP 套接字效能進行基準測試的低階 .NET 6 網路庫
NBN 是使用 UDP 的低階網路庫的基準,可與 Unity 和 .Net Core 獨立伺服器應用程式一起使用。此基準測試重點在於延遲、效能和可擴展性。
烏班圖VPS
$> 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
Ubuntu 桌面 / Windows 桌面
對於兩個桌面設置,基準測試在重新啟動的系統上運行,在開始基準測試之前有 5 分鐘的空閒時間。它們以管理員權限運行,並且在運行基準測試之前所有不必要的其他進程都會被終止。對於 Ubuntu VPS,基準測試是透過在典型的獨立伺服器設定上持續整合並運行其他進程來運行的。執行基準測試後,會列出所有正在執行的進程,以使其更具可重複性。若要重現基準測試,請執行sudo sh linux-benchmark.sh
或win-benchmark.bat
。如果您想直接從編譯後的程式執行,請執行./NetworkBenchmarkDotNet -b Essential
。
原始資料和附加檔案可以從發布部分下載。
使用500 個客戶端執行基準測試,每個客戶端與伺服器 pingpong 1 個訊息,且傳輸不可靠。此基準測試將持續運行,直到總共500,000 則訊息發送至伺服器並返回至客戶端。訊息大小為32 位元組。
此測試用於了解平均往返時間(越短越好)。
使用500 個客戶端執行基準測試,每個客戶端與伺服器 pingpong 1 個訊息,並可靠傳輸。此基準測試將持續運行,直到總共500,000 則訊息發送至伺服器並返回至客戶端。訊息大小為32 位元組。
此測試用於了解平均往返時間(越短越好)。
使用500 個客戶端執行基準測試,每個客戶端與伺服器 pingpong 10 個訊息,且傳輸不可靠。此基準測試將持續運行,直到總共500,000 則訊息發送至伺服器並返回至客戶端。訊息大小為32 位元組。
此測試針對複用/訊息合併效能(越高越好)。
使用1 個客戶端執行基準測試,每個客戶端與伺服器互動10 個訊息。此基準測試將持續運行,直到總共100,000 則訊息發送至伺服器並返回至客戶端。訊息大小為128 位元組。
此測試收集有關執行基準測試時產生的垃圾和 CPU 時間的資訊。這些結果可以使用 Windows 上的 PerfView 進行分析。
這是所有測試與其訊息吞吐量之間的比較(越高越好)。
.nettrace
檔案。Thread.Sleep
會產生明顯的延遲。目前,它被排除在預先定義的基準測試之外,直到其執行和清理得到改進。確保您已安裝 .Net 6 SDK。
然後只需使用 Visual Studio/Rider/Visual Studio Code 打開解決方案檔案並建置它。請注意,對於不同的作業系統和硬件,基準測試的結果可能會非常不同。
一般來說,有兩種不同類型的基準:自訂基準和預訂基準。自訂基準並透過命令列選項進行定義。預先定義基準在程式碼中設定並透過 BenchmarkDotNet 執行。它們用於此處提供的統計數據,並且比自訂基準更準確且可重複性更好。然而,它們也需要更長的時間才能完成。您也可以在不同的電腦上執行用戶端和伺服器,以透過本機網路或遠端測試庫(請參閱遠端基準測試)。
您可以透過命令列執行自訂基準測試。使用者可以以簡單快速的方式測試多個設定及其組合。這些測試只會運行一次,而且不如執行預先定義的基準測試那麼準確。執行基準測試的範例可能是./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
預先定義的基準測試需要一些時間來運行,但會產生可重現的數字。執行預先定義基準測試最簡單的方法是在 Windows 上執行win-benchmark.bat
或在 Windows 上執行sh linux-benchmark.sh
。
要遠端測試庫,可以分別使用參數--execution-mode Server
和--execution-mode Client
。此設定需要先在目標伺服器上啟動具有正確庫(並且可能是不確定的執行持續時間)的伺服器,然後啟動客戶端進程。這是一個例子:
伺服器: ./NetworkBenchmarkDotNet --library ENet --transmission Reliable --execution-mode Server --address YOUR_ADDRESS -d -1
客戶端: ./NetworkBenchmarkDotNet --library ENet --transmission Reliable --execution-mode Client --address YOUR_ADDRESS --clients 100 -d 10
如果您更改QuickBenchmark.cs
中的位址,您也可以透過這種方式執行更複雜的遠端基準測試。
您最喜歡的庫丟失了,或者您覺得基準測試沒有測試所有相關的內容?讓我們一起發展基準!您可以透過電子郵件聯絡我討論您的想法,或提出問題,或直接提出拉取請求。為了不讓基準測試過於混亂,有一些規則。
您提議的新圖書館...
YourLibraryBenchmark.cs
的腳本,該腳本實作 ANetworkBenchmarkINetworkBenchmark.CreateNetworkBenchmark()
-l
參數(或BenchmarkSetup.Library
)來測試您的庫以及一切是否按預期工作。QuickBenchmark.cs
中的[Params(NetworkLibrary.Kcp2k)]
更改為您的庫並運行./NetworkBenchmarkDotNet -b Quick
查看您的庫是否適用於高 CCU 並使用 BenchmarkDotNet 進行循環基準測試麻省理工學院