إطار عمل بسيط لاختبار خوادم HTTP ، مستوحى من Simple Web Benchmark ( يوجد رسم بياني للعديد من اللغات الأخرى ) ، ولكنه يركز على أطر عمل ومكتبات dlang .
يقيس RPS الذي يمكن تحقيقه (الطلبات في الثانية) في نص عادي.
تم جمع الاختبارات أو تعديلها من أماكن مختلفة (بما في ذلك TechEmpower ).
يستخدم حاوية عامل إرساء لإنشاء الخدمات واستضافتها ويمكن تشغيله محليًا أو استخدام اختبار تحميل من مضيف بعيد.
مولد الحمل هو الافتراضي WRK وطلب إحصاءات من الخزان، ولكن مهلا يؤيد أيضا (مجرد استخدام مفتاح --tool).
يمكن إجراء الاختبارات بدون عامل تشغيل ، ما عليك سوى تثبيت برامج التحويل البرمجي للغات المختبرة ومولد التمهيد wrk / hey (ولكن تم اختباره فقط على نظام التشغيل Linux).
ملاحظة لاختبارات io_uring:
- تتطلب الاختبارات على الأقل نواة Linux 5.7.
- قد تكون هناك أيضًا مشكلات في حدود الذاكرة المقفلة التي يحددها المستخدم (ulimit -l) عند التشغيل مع مستخدم عادي.
- لوحظ بعض تراجع الأداء منذ Kernel 5.7.16 . انظر أيضًا البق رقم 189 ، رقم 8 .
الاختبارات
تنقسم الاختبارات إلى نوعين:
- SingleCore - يتم تشغيل الخدمات في وضع مركز واحد لقياس الأداء بدون سلاسل / عمليات متعددة (افتراضي).
- multiCore - تبدأ الخدمات في استخدام جميع نوى المعالج المضيف
باستخدام
تجميع الحاوية للإطلاق
- بناء - بناء حاوية
- make shell - start container
ملاحظة: يتم تعيين حاكم الأداء على وضع الأداء باستخدام هذا الأمر.
اختبارات التشغيل
غبي للاختبار ، ما عليك سوى تشغيل أمر واحد من (في غلاف الحاوية):
make all # runs all tests
make single # runs tests limited to single CPU core usage
make multi # runs tests limited to multiple CPU cores usage
_suite/runner.d CLI-.
- _suite/runner.d list — -
- _suite/runner.d bench —
- _suite/runner.d responses —
- _suite/runner.d versions — Markdown
_suite/runner.d -h CLI .
:
_suite/runner.d bench --type singleCore dlang rust # dlang rust
:
- , , .
- - _suite/runner.d bench --type singleCore -r foo@192.168.0.3 --host 192.168.0.2 dlang
-r --remote , ssh. --host , CLI IP , , .
ssh , ssh ( ).
(hey) .
, , .
/
, .
- (.. ..)
- HTTP-
, , , , , .
C
. HTTP-, eventloop .
epoll io_uring. raw.
dlang
. http :
- process — , .
- threads — threadpool
- hybrid — Linux , .
singeCore, ( ) eventloop, (.. CGI) .
- raw — , , ( , ,… — )
TBD — / io_uring, epoll Linux-.
, , . , — , during/raw
, vibe-d. epoll linux (iocp kqueue windows MacOS).
, http , , .
- callbacks — .
- fibers —
- hunt-http — (HTTP-, )
- hunt-pico — , picohttpparser ( , , ...) — , Techempower
, .
Weka.
.
: druntime, . . , .
code.dlang.org, , syscalls glibc epoll eventloop , .
nodejs http-parser ( , pico) .
, eventcore .
- , TCPConnection , .
, http .
- dlang, .
dotnet
, ( , , ...). .. , .
golang
fasthttp .
HTTP , .
rust
Actix :
- actix-web —
- actix-raw —
Single core results ()
: AMD Ryzen 7 3700X 8-Core, kernel 5.8.10
: Intel® Core(TM) i5-5300U CPU @ 2.30GHz, kernel 5.8.9
: 1Gbps through cheap gigabit switch
: for i in 8 64 128 256; do _suite/runner.d bench --type singleCore --tool wrk -b 2 -d 120 -c $i -r tomas@10.0.0.2; done
| go | go1.15.1 |
| ldc2 | 1.23.0 |
| rust | 1.48.0-nightly |
| dotnet | 5.0.100-rc.1.20452.10 |
من مترجم . يمكن عرض النسخ الكاملة للجداول مع النتائج في الأصل . ولكن من الواضح أن كل شيء غير مختلط هناك ، لذلك قمت بعمل المزيد من الرسوم البيانية المرئية لعدد الطلبات التي تمت معالجتها في دقيقتين (مطلوب ، rps بالتناسب) لفئتين - أطر عمل كاملة بدون تعديلات والباقي ، بما في ذلك المكتبات الأساسية. نتيجتان - لـ 8 عمال و 256 لإظهار قابلية التوسع.

ونعم ، اختبارات TechEmpower ، التي تمزج بين الإصدارات المعدلة مع تلك المعتادة ، إلى حد كبير منمق في الأماكن.