تم اختبار مكتبات شبكات .NET 6 ذات المستوى المنخفض لأداء مقبس UDP
يعد NBN معيارًا لمكتبات الشبكات ذات المستوى المنخفض التي تستخدم UDP ويمكن استخدامه مع Unity وتطبيقات الخادم المستقلة .Net Core. يركز المعيار على الكمون والأداء وقابلية التوسع.
أوبونتو فس
$> 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
أوبونتو سطح المكتب / سطح مكتب ويندوز
بالنسبة إلى إعدادي سطح المكتب، يتم تشغيل الاختبارات المعيارية على نظام مُعاد تشغيله مع 5 دقائق من وقت الخمول قبل بدء الاختبار. يتم تشغيلها بامتيازات المسؤول ويتم إنهاء جميع العمليات الأخرى غير الضرورية قبل تشغيل المعايير. بالنسبة لـ Ubuntu VPS، يتم تشغيل المعايير من خلال التكامل المستمر على إعداد خادم مستقل نموذجي مع تشغيل العمليات الأخرى أيضًا. بعد تشغيل المعايير، يتم عرض قائمة بجميع العمليات الجارية لجعلها أكثر قابلية للتكرار. لإعادة إنتاج المعايير، قم بتشغيل sudo sh linux-benchmark.sh
أو win-benchmark.bat
. إذا كنت تريد التنفيذ مباشرة من البرنامج المترجم، فقم بتشغيل ./NetworkBenchmarkDotNet -b Essential
.
يمكن تنزيل البيانات الأولية والملفات الإضافية من قسم الإصدار.
يتم تشغيل المعيار مع 500 عميل، حيث يرسل كل منهم رسالة بينج بونج 1 إلى الخادم مع إرسال غير موثوق به . يعمل المعيار حتى يتم إرسال إجمالي 500000 رسالة إلى الخادم وإعادتها إلى العملاء. حجم الرسالة 32 بايت .
يهدف هذا الاختبار إلى الحصول على فكرة عن متوسط وقت الرحلة ذهابًا وإيابًا (الأقل هو الأفضل).
يتم تشغيل المعيار مع 500 عميل، حيث يرسل كل منهم رسالة بينج بونج 1 إلى الخادم مع نقل موثوق . يعمل المعيار حتى يتم إرسال إجمالي 500000 رسالة إلى الخادم وإعادتها إلى العملاء. حجم الرسالة 32 بايت .
يهدف هذا الاختبار إلى الحصول على فكرة عن متوسط وقت الرحلة ذهابًا وإيابًا (الأقل هو الأفضل).
يتم تشغيل المعيار مع 500 عميل، حيث يرسل كل منهم 10 رسائل بينج بونج مع الخادم مع نقل غير موثوق . يعمل المعيار حتى يتم إرسال إجمالي 500000 رسالة إلى الخادم وإعادتها إلى العملاء. حجم الرسالة 32 بايت .
هذا الاختبار مخصص لأداء الإرسال المتعدد/دمج الرسائل (الأعلى هو الأفضل).
يقوم بتشغيل المعيار مع عميل واحد ، والذي يرسل 10 رسائل بينج بونج لكل منهما مع الخادم. يعمل المعيار حتى يتم إرسال إجمالي 100000 رسالة إلى الخادم وإعادتها إلى العملاء. حجم الرسالة 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معهد ماساتشوستس للتكنولوجيا