ไลบรารีระบบเครือข่าย .NET 6 ระดับต่ำได้รับการเปรียบเทียบประสิทธิภาพสำหรับประสิทธิภาพของซ็อกเก็ต UDP
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
อูบุนตูเดสก์ท็อป / เดสก์ท็อป 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 ราย โดยแต่ละ ข้อความ 10 ข้อความ กับเซิร์ฟเวอร์ที่มีการส่งข้อมูล ที่ไม่น่าเชื่อถือ การวัดประสิทธิภาพจะทำงานจนกว่าจะมีการส่งข้อความทั้งหมด 500,000 ข้อความไปยังเซิร์ฟเวอร์และกลับไปยังไคลเอนต์ ขนาดข้อความคือ 32 ไบต์
การทดสอบนี้มีไว้สำหรับประสิทธิภาพการรวมมัลติเพล็กซ์ / ข้อความ (ยิ่งสูงยิ่งดี)
รันการวัดประสิทธิภาพด้วยไคลเอนต์ 1 เครื่อง โดยแต่ละข้อความมี 10 ข้อความ กับเซิร์ฟเวอร์ การวัดประสิทธิภาพจะทำงานจนกว่าจะมีการส่งข้อความทั้งหมด 100,000 ข้อความไปยังเซิร์ฟเวอร์และกลับไปยังไคลเอนต์ ขนาดข้อความคือ 128 ไบต์
การทดสอบนี้จะรวบรวมข้อมูลเกี่ยวกับขยะที่สร้างขึ้นและเวลาของ CPU ในขณะที่รันการวัดประสิทธิภาพ ผลลัพธ์เหล่านั้นสามารถวิเคราะห์ได้ด้วย PerfView บน Windows
นี่คือการเปรียบเทียบระหว่างการทดสอบทั้งหมดกับปริมาณการรับส่งข้อความ (ยิ่งสูงยิ่งดี)
.nettrace
Thread.Sleep
บน Windows ทำให้เกิดความล่าช้าอย่างเห็นได้ชัด ในตอนนี้จะไม่รวมเกณฑ์มาตรฐานที่กำหนดไว้ล่วงหน้า จนกว่าการดำเนินการและการล้างข้อมูลจะได้รับการปรับปรุงตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง .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
การวัดประสิทธิภาพที่กำหนดไว้ล่วงหน้าจะใช้เวลาพอสมควร แต่จะสร้างตัวเลขที่สามารถทำซ้ำได้ วิธีที่ง่ายที่สุดในการรันการวัดประสิทธิภาพที่กำหนดไว้ล่วงหน้าคือการรัน win-benchmark.bat
บน windows หรือ sh linux-benchmark.sh
บน windows
หากต้องการทดสอบไลบรารีจากระยะไกล คุณสามารถใช้พารามิเตอร์ --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
) เพื่อทดสอบไลบรารีของคุณและดูว่าทุกอย่างทำงานตามที่คาดไว้หรือไม่[Params(NetworkLibrary.Kcp2k)]
ใน QuickBenchmark.cs
เป็นไลบรารีของคุณและรัน ./NetworkBenchmarkDotNet -b Quick
เพื่อดูว่าไลบรารีของคุณใช้งานได้กับ CCU สูงและการวัดประสิทธิภาพแบบวนซ้ำด้วย BenchmarkDotNet หรือไม่เอ็มไอที