قياسات الإنتاجية
-
30-09-2019 - |
سؤال
لقد كتبت بسيطة أداة اختبار التحميل لاختبار أداء وحدات جافا.إحدى المشاكل التي واجهتها هي خوارزمية قياسات الإنتاجية.يتم تنفيذ الاختبارات في عدة سلاسل رسائل (يقوم العميل بتكوين عدد المرات التي يجب تكرار الاختبار فيها)، ويتم تسجيل وقت التنفيذ.لذلك، عند الانتهاء من الاختبارات لدينا التاريخ التالي:
4 test executions
2 threads
36ms overall time
- idle
* test execution
5ms 9ms 4ms 13ms
T1 |-*****-*********-****-*************-|
3ms 6ms 7ms 11ms
T2 |-***-******-*******-***********-----|
<-----------------36ms--------------->
في الوقت الحالي أحسب الإنتاجية (في الثانية) بالطريقة التالية: 1000 / overallTime * threadCount
.
ولكن هناك مشكلة.ماذا لو أكمل أحد المواضيع اختباراته بسرعة أكبر (لأي سبب كان):
3ms 3ms 3ms 3ms
T1 |-***-***-***-***----------------|
3ms 6ms 7ms 11ms
T2 |-***-******-*******-***********-|
<--------------32ms-------------->
في هذه الحالة، تكون الإنتاجية الفعلية أفضل بكثير بسبب الإنتاجية المقاسة يحدها الخيط البطيء.لذا، سؤالي هو كيف يمكنني قياس إنتاجية تنفيذ التعليمات البرمجية في بيئة متعددة مؤشرات الترابط.
المحلول
ماذا عن throughput[t] = numberOfTests[t] / overallTime[t]
بشكل منفصل لكل موضوع t
, ، ثم احسب متوسط الكل throughput
?
ثم يمكنك أيضًا حساب أشياء مثل النطاق والانحراف المعياري للحصول على صورة أفضل.شخصيا أنا معجب جدا مؤامرات الصندوق.ولكن مجرد الأرقام نفسها ستكون مثيرة للاهتمام.
نصائح أخرى
أعلم أن الوقت متأخر بعض الشيء ، لكن لديّ منشوران مدونة مرتبطان بسؤالك. الأول يصف كيف تقيس الإنتاجية (ووقت الاستجابة). الثاني يصف طريقة لإنتاجية الرسم البياني.