كيفيّة مقارنة سرعة إصدارات برنامج على Windows مقارنة صحيحة

· آخر تحديث: · · Windows, Benchmark, Performance, Profiling, إدارة الطاقة

سجل التعديلات (3 تحديثات، آخر تحديث 3 Sep، 2026)

سجل بالتغييرات التي أُجريت على هذا المقال. وحيثما حُفظت نسخة سابقة، تبقى متاحة للقراءة عبر رابط دائم يحمل معرّف DOI.

أُضيفت روابط الاستشارة الموجودة في الأصل الياباني (consultation_services). ولم يتغيّر نصّ المقالة نفسه. قراءة النسخة السابقة لهذا التحديث (DOI: 10.5281/zenodo.22240844)
أُعيدَت الترجمة العربية كترجمة كاملة عن النص الياباني الأصلي، وأُضيفَت خريطة المعرفة.
أعيدت الترجمة كترجمة كاملة عن النص الياباني الأصلي. كانت النسخة العربية السابقة مختصراً يسقط أبواباً وجداول ورسوم Mermaid وتعليقات الأشكال وFAQ. أُعيدت هذه العناصر وفق الأصل الياباني، والادّعاءات التقنية مطابقة للنسخة اليابانية.
النشر الأول
الاستشهاد بهذا المقال(DOI: 10.5281/zenodo.21621380)

هذا المقال محفوظ على Zenodo. يرد أدناه معرّف DOI الذي يشير دائمًا إلى أحدث نسخة، ومعرّف DOI المثبَّت على النسخة التي تقرؤها.

小村 豪 (2026). كيفيّة مقارنة سرعة إصدارات برنامج على Windows مقارنة صحيحة. شركة كومورا سوفت ذ.م.م.. https://doi.org/10.5281/zenodo.21621380 https://comcomponent.com/ar/blog/2026/03/16/002-windows-benchmark-comparing-program-versions/

DOI (أحدث نسخة)
10.5281/zenodo.21621380
DOI (هذه النسخة)
10.5281/zenodo.22279795

تريد مقارنة الإصدارين A و B لبرنامج على Windows. أسوأ ما يمكن فعله عندئذ تشغيل كلّ منهما مرّة على نفس الجهاز والقول «يبدو أنّ B أسرع بنسبة 8%».

قد تكون تلك الـ 8% فرق شيفرة فعلاً. لكن في الواقع، أن تكون Power mode (وضع الطاقة) أو Power plan (خطّة الطاقة) أو الحرارة أو تحديث الخلفيّة أو فهرس البحث أو مسح الفيروسات أو الارتباط أو ترتيب التنفيذ أو حالة الذاكرة المؤقّتة هو حديث شائع في قياس Windows. يصير عملاً هادئاً تُصفَّى فيه الشروط واحداً واحداً.

حقيقة «يبدو أسرع بنسبة 8%»مخطّط يبيّن أنّ الفرق الظاهر من تشغيل مرّة واحدة قد يكون فرق شيفرة، لكن كثيراً ما تكون حقيقته الطاقة أو الحرارة أو الخلفيّة أو الذاكرة المؤقّتة، فيلزم عمل تصفية الشروط واحداً واحداً.قد يكونالحقيقة الشائعةالمقارنة بتشغيل مرّة لكلّيظهر «يبدو أسرع بنسبة 8%»فرق شيفرة فعلاًطاقة وحرارة وضوضاء وذاكرة مؤقّتةتصفية الشروط واحداً واحداً

الشكل 1: فرق المرّة الواحدة ليس حتماً فرق شيفرة، ولا يُقطَع به إلا بعد تصفية الشروط.

يلخّص هذا المقال كيفيّة مقارنة سرعة تنفيذ إصدارات مختلفة من برنامج على Windows بأقرب شكل ممكن إلى فرق الشيفرة. الهدف أساساً Windows 11، لكنّ معظم powercfg و start ونحوهما يُستخدم بالمثل على Windows 10.

مصطلحات تُمسَك مسبقاً

في المتن مصطلحات تظهر بالإنجليزيّة كما هي. نلخّصها مسبقاً كي لا تتعثّر عند أوّل ورود.

المصطلح المعنى
ETW Event Tracing for Windows. أساس تتبّع مضمَّن قياسيّاً في Windows. يمكن تسجيل الأحداث التي يخرجها نظام التشغيل والتعريفات والتطبيقات معاً
WPR / WPA Windows Performance Recorder و Windows Performance Analyzer. أداة تسجيل تتبّع ETW وأداة فتحه وتحليله، وكلتاهما ضمن Windows ADK
clean boot إجراء إقلاع بأدنى تكوين بإيقاف الخدمات وتطبيقات بدء التشغيل غير التابعة لـ Microsoft. يُستخدم لتقليل ضوضاء التطبيقات المقيمة
PGO Profile-Guided Optimization. آليّة تستخدم إحصاءات التفرّع والاستدعاء المجموعة من تشغيل سابق في أحكام تحسين البناء التالي. تتغيّر شروط البناء فتصير بند تأكيد لتوافق أهداف المقارنة
p95 / p99 المئين. القيمة عند موضع 95% / 99% من الأسفل حين تُرتَّب كلّ التشغيلات من الأسرع. «مرّة من 20 أبطأ من هذا» توافق p95
NUMA Non-Uniform Memory Access. تكوين ليست فيه المسافة إلى الذاكرة موحّدة من منظور CPU. سرعة الوصول إلى الذاكرة تتغيّر حسب العقدة التي يُنفَّذ عليها
إيقاف الأنوية (core parking) آليّة إدارة طاقة تُنيم المعالجات المنطقيّة غير المستخدمة عند انخفاض الحمل

الخلاصة أوّلاً

حيلة رفع قابليّة إعادة الإنتاج، إن لُخِّصت، ستّ.

  1. قرّر أوّلاً «ماذا تريد أن تقارن» البيئة التي ينبغي مواءمتها تتغيّر حسب هل تريد رؤية فرق الشيفرة أم تجربة المستخدم الفعليّة.

  2. سجّل Power mode (وضع الطاقة) و Power plan (خطّة الطاقة) كشيئين منفصلين على Windows إن عومل هذا باستخفاف مالت المقارنة إلى مقارنة سياسة توفير طاقة نظام التشغيل.

  3. افصل المرّة الأولى الباردة عن الحالة المستقرّة بعد الإحماء «الأولى وحدها سريعة» أو «النصف الثاني وحده بطيء» أمر غير نادر.

  4. بدّل مثل A→B→A→B إن شغّلتَ A كلّه أوّلاً ثمّ B، أصبتَ انحياز الحرارة وحالة الخلفيّة.

  5. انظر لا إلى المتوسّط وحده بل إلى الوسيط والتشتّت قيمة شاذّة واحدة تكفي لإمالة الصورة كلّها كثيراً. المتوسّط أضعف ممّا يُظَنّ.

  6. إن صغر الفرق فاحفر السبب بـ ETW / WPR إن نوقش بالإحساس وحده بقي الادّعاءان بلا سند على خطّين متوازيين.

في المخطّط، يشير الخطّ المتّصل إلى علاقة قائمة دائماً، ويشير الخطّ المتقطّع إلى علاقة مشروطة (شروط قيامها مذكورة في شرح كلّ علاقة في الصفحة التفصيليّة). القائمة الكاملة للعلاقات (المجموع 25، مع الأدلّة ودرجة اليقين) وتعريفات المفاهيم الرئيسة مجمّعة في صفحة تفاصيل خريطة المعرفة (باليابانية). البيانات: JSON-LD / Turtle

قرّر أوّلاً ماذا تريد أن تقارن

«مقارنة السرعة» لفظ واحد، لكنّها نوعان فعلاً.

1. مقارنة تريد رؤية فرق الشيفرة

مقارنة تريد معرفة هل صار التنفيذ نفسه أسرع بتغيير خوارزميّة أو بنية بيانات أو تحسين مترجم أو تحديث runtime.

هنا تقلّل ضوضاء البيئة قدر الإمكان. جلسة مخصّصة للقياس، وتثبيت Power mode (وضع الطاقة)، وإيقاف الإشعارات، وكبح فهرس البحث والمزامنة، وحتّى clean boot إن لزم.

2. مقارنة تريد رؤية تجربة المستخدم الفعليّة

مقارنة تريد معرفة السرعة التي يحسّ بها المستخدم على Windows اليوميّ بعد التوزيع.

هنا لا ينبغي محو الضوضاء الموجودة في الواقع كلّها. المقارنة في «بيئة يوميّة شبيهة» تشمل مزامنة OneDrive و Defender والإشعارات وإعداد الطاقة العاديّ تعطي نتيجة أقرب إلى الواقع.

خلط الاثنين يلوي النتيجة. وارد كالعادة أن يحدث «أسرع بنسبة 12% في المختبر، وضمن الخطأ في الواقع» أو «سريع في الواقع، ولا فرق في زمن CPU».

لا تخلط نوعَي المقارنةمخطّط يبيّن أنّ مقارنة تريد رؤية فرق الشيفرة ينبغي أن تقلّل ضوضاء البيئة قدر الإمكان، وأنّ مقارنة تريد رؤية تجربة المستخدم الفعليّة ينبغي أن تقيس في بيئة يوميّة تُبقي ضوضاء الواقع، وأنّ خلط الاثنين يلوي النتيجة.فرق الشيفرةتجربة المستخدم الفعليّةإن خُلطاماذا تريد أن تقارنبيئة مختبر قُلِّلت ضوضاؤهابيئة يوميّة أُبقيت ضوضاؤهاتلتوي النتيجة

الشكل 2: البيئة التي ينبغي مواءمتها تنعكس حسب الغرض، فقرّر أوّلاً أيّ المقارنتين.

الأسباب الرئيسيّة لتذبذب النتيجة على Windows

أوّلاً نسرّد باستخفاف ما يذبذب النتيجة.

الطبقة عامل التذبذب أمثلة نموذجيّة
العتاد CPU / GPU، الذاكرة، SSD، التبريد رقّة الحاسوب المحمول، وجود منصّة تبريد
البرنامج الثابت BIOS / UEFI، تحكّم OEM سياسة توفير الطاقة، تحكّم المروحة
نظام التشغيل بناء Windows، التعريفات، حالة التحديث يتغيّر السلوك بعد التحديث حتّى على نفس الحاسوب
الطاقة AC / DC، Power mode (وضع الطاقة)، Power plan (خطّة الطاقة) العمل على البطاريّة عالم آخر
الحرارة حرارة الغرفة، المروحة، الحمل السابق توربو في المرّة الأولى فقط، وتباطؤ في النصف الثاني
الخلفيّة Update، Defender، المزامنة، الإشعارات مسح أو مزامنة أثناء التنفيذ
الجدولة الأولويّة، الارتباط، NUMA توزيع CPU يتغيّر حسب الجهاز
البيانات / الذاكرة المؤقّتة ذاكرة نظام التشغيل المؤقّتة، ذاكرة التطبيق المؤقّتة الأولى وحدها بطيئة، وما بعدها وحدها سريعة
شروط البناء Debug / Release، PGO، وجود السجلّ تقارن أصلاً شيئين مختلفين

الخلاصة: حتّى «نفس جهاز Windows»، إن لم تتوافق الشروط فالتجربة أخرى.

إن لم تتوافق الشروط فالتجربة أخرىمخطّط يبيّن أنّ القياس على نفس جهاز Windows، إن لم تتوافق شروط متعدّدة الطبقات من العتاد إلى الطاقة والحرارة والخلفيّة وشروط البناء، تجربة أخرى فعليّاً، وأنّ المقارنة لا تقوم إلا بعد تثبيت الشروط وتسجيلها.الشروط غير متوافقةتثبيت شروط متعدّدة الطبقات وتسجيلهاالقياس على نفس جهاز Windowsتجربة أخرى فعليّاًتصير مقارنة لأوّل مرّة

الشكل 3: حتّى إن كان الجهاز نفسه، لا تقوم المقارنة إن لم تتوافق الشروط عبر الطبقات.

افصل التفكير في Power mode (وضع الطاقة) عن Power plan (خطّة الطاقة)

هذه نقطة مهمّة جدّاً.

على Windows يوجد Power mode (وضع الطاقة) في تطبيق الإعدادات، و Power plan (خطّة الطاقة) التقليديّ (خطّة الطاقة الظاهرة في powercfg). تشابه المظهر يسهّل خلطهما، لكن المعاملة المستخفّة تجعل شروط المقارنة غامضة وتُفقَد قابليّة إعادة إنتاج النتيجة.

في تطبيق إعدادات Windows يمكن اختيار Power mode من Settings > System > Power & battery. وثائق Microsoft تقول إنّه يمكن تبديل Best power efficiency و Balanced و Best performance لكلّ من Plugged in / On Battery. ثمّ إن تغيّر Power mode أثّر أيضاً في إعدادات الطاقة خلفه وفي سلوك PPM (Processor Power Management). أي أنّ اختلاف هذا وحده قد يغيّر سياسة إيقاف الأنوية وتحجيم الأداء.

من جهة أخرى، Power plan خطط طاقة تقليديّة مثل Balanced و High performance. يمكن تأكيدها بـ powercfg /list أو powercfg /getactivescheme.

ما يعقّد الأمر هنا وجود طبقة فوقيّة لـ Power mode (وضع الطاقة) و Power plan (خطّة الطاقة) كليهما على Windows. إن رُسمت العلاقة صارت كالتالي.

الطبقة السفلى: Power plan - خطّة الطاقةBalancedHigh performancecustom planالطبقة العليا: Power mode - طبقة فوقيّةBest power efficiencyBalancedBest performanceتطبيق الإعداداتPower mode في Power and batteryالتبديل بـ powercfg /setactiveإعداد الطاقة الذي يفعل فعله فعلاًPPM ومجموعات الرسوم الفرعيّةتغذية AC أم بطاريّةالحدّ الأعلى للتردّد / إيقاف الأنوية / تحجيم الأداء

الشكل 4: طبقتا Power mode (طبقة فوقيّة) و Power plan مع AC/DC تجتمع لتقرير إعداد الطاقة الذي يفعل فعله فعلاً.

النظر إلى الطبقة العليا وحدها أو السفلى وحدها لا يقرّر السلوك الفعليّ. لذلك سجّل مع نتيجة القياس على الأقلّ:

  • AC أم بطاريّة
  • ما هو Power mode
  • ما هو Active power plan

نتيجة قياس بلا هذه الثلاث لا يمكن استعادة شروطها عند مراجعتها لاحقاً.

ثلاث تُسجَّل في الحدّ الأدنىمخطّط يبيّن أنّه إن لم تُسجَّل مع النتيجة ثلاث: AC أم بطاريّة، وما هو Power mode، وما هو Active power plan، تعذّرت استعادة الشروط عند المراجعة لاحقاً.AC أم بطاريّةتُسجَّل مع النتيجةPower modeActive power planيمكن استعادة الشروط لاحقاً

الشكل 5: ثلاث محيط الطاقة حدّ أدنى من التسجيل: إن لم تُكتَب صارت النتيجة غير قابلة لإعادة الإنتاج.

شروط الطاقة التي ينبغي تثبيتها أوّلاً

  1. الحاسوب المحمول يُقارَن حتماً مع اتّصال AC تشغيل البطاريّة يسهّل دخول قيود غير مقصودة.

  2. ثبّت Power mode لغرض القياس جرّب أوّلاً Best performance.

  3. سجّل Active power plan أبقِ القيمة الحاليّة بـ powercfg.

powercfg /list
powercfg /getactivescheme

خرج powercfg /list يظهر في وثائق Microsoft بالشكل التالي. تُلحَق * بنهاية سطر الخطّة النشطة. في بيئة يابانيّة تظهر العناوين وأسماء الخطط باليابانيّة.

Existing Power Schemes (* Active)
-----------------------------------
Power Scheme GUID: {guidPlan1}  (Balanced) *
Power Scheme GUID: {guidPlan2}  (Power saver)

انسخ GUID الظاهر هنا كما هو إلى حقل power_plan في ملفّ النتيجة. النقطة إبقاؤه GUID لا اسماً. فقد تكون خطّة أخرى منسوخة أو مخصّصة تحمل نفس اسم «متوازن».

  1. بدّل إلى High performance إن لزم
# Balanced
powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e

# High performance
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

هل يمكن تبديل Power mode بأمر؟

هذا موضع يسهل التعثّر فيه. في قائمة خيارات سطر الأوامر المنشورة لـ powercfg لا يوجد خيار يعيد اختيار Power mode (الطبقة الفوقيّة) نفسه. الإجراء النظاميّ للتبديل من Settings > System > Power & battery في تطبيق الإعدادات.

من جهة أخرى، powercfg يدعم قراءة قيم إعداد مخطّط الطبقة الفوقيّة وكتابتها. الوثائق تقول ما يلي.

  • تمرير اسم مستعار للطبقة الفوقيّة ومجموعة فرعيّة إلى powercfg /q يقرأ إعداد جهة الطبقة الفوقيّة
  • powercfg /setacvalueindex و /setdcvalueindex يُستخدمان أيضاً مع مخطّط الطبقة الفوقيّة
  • إن لم يُحدَّد مخطّط، يصير الهدف الطبقة الفوقيّة النشطة حالياً (أو خطّة الطاقة الحاليّة إن لم توجد طبقة فوقيّة)
  • قائمة الأسماء المستعارة تُؤكَّد بـ powercfg /aliases

أي أنّ ما يمكن بالأوامر هو «قراءة محتوى الطبقة الفوقيّة الفاعلة الآن وتعديله»، لا تغيير «أيّ طبقة فوقيّة تُختار». كإجراء إعادة إنتاج للقياس، الواقعيّ تثبيت Power mode يدوياً في تطبيق الإعدادات وكتابة قيمته مع النتيجة. صرّح في دليل الإجراءات بأنّ «Power mode = Best performance» وأكّد على الشاشة في كلّ تنفيذ.

ما يستطيعه powercfg وما لا يستطيعهمخطّط يبيّن أنّ powercfg يدعم قراءة قيم إعداد الطبقة الفوقيّة الفاعلة الآن وكتابتها، لكن لا خيار يغيّر أيّ طبقة فوقيّة تُختار، لذا الواقعيّ تثبيت Power mode يدوياً في تطبيق الإعدادات وإبقاء القيمة.يستطيعلا يستطيعpowercfgقراءة محتوى الطبقة الفوقيّة وتعديلهتغيير أيّ طبقة فوقيّة تُختارتثبيت يدويّ في تطبيق الإعدادات وتسجيل

الشكل 6: اختيار الطبقة الفوقيّة لا يُغيَّر بأمر، فثبّته يدوياً وسجّله.

«High performance لا يظهر» أمر وارد

هذا أيضاً موضع تعثّر. وثائق Microsoft تقول إنّ الأجهزة الداعمة لـ Modern Standby لا يُسمَح فيها إلا بـ Balanced أو خطط مشتقّة من Balanced. لذلك ليس «High performance غير موجود، أهذا عطل؟» بل يحتمل أن يكون كذلك بحكم تصميم ذلك الطراز.

كذلك توجّه Microsoft: «إن تعذّر تغيير Power mode فقد تكون خطّة مخصّصة مختارة، فجرّب اختيار Balanced أوّلاً». إن لم تتحرّك واجهة Power mode فالأسرع الشكّ هنا.

كيف تُرى حالة غياب High performanceمخطّط يبيّن أنّ الأجهزة الداعمة لـ Modern Standby لا يُسمَح فيها إلا بـ Balanced أو خطط مشتقّة منه فغياب High performance تصميم، وأنّ تعذّر تغيير واجهة Power mode يدعو أوّلاً إلى الشكّ في اختيار خطّة مخصّصة.High performance غير موجودإن دعم Modern Standby فهذا وفق التصميمواجهة Power mode لا تتحرّكاشكك في إمكان خطّة مخصّصةجرّب اختيار Balanced أوّلاً

الشكل 7: غياب الخطّة أو جمود الواجهة ليسا حتماً عطلاً؛ انظر أوّلاً إلى تصميم الطراز واختيار الخطّة.

أخمد ضوضاء الخلفيّة

Windows، حتّى حين تريد القياس بهدوء، يشغّل في الخلف تحديثاً أو إنشاء فهرس أو مسحاً. أوّلاً قلّل ذلك الكمّ.

أوّلاً أعد التشغيل وانتظر حتّى يهدأ

بعد تغيير الإعداد أعد التشغيل مرّة، ولا تشغّل فور تسجيل الدخول، بل انتظر دقائق. فور الإقلاع ما زال التحديث والفهرس والمزامنة و Defender والمقيمات المتنوّعة هائجة.

أعد التشغيل وانتظر حتّى يهدأمخطّط يبيّن الإجراء: بعد تغيير الإعداد أعد التشغيل مرّة، وفور الإقلاع يعمل التحديث والفهرس والمزامنة و Defender وغيرها، لذا لا تشغّل فور تسجيل الدخول بل انتظر دقائق ثمّ ابدأ القياس.تغيير الإعدادإعادة تشغيل مرّةبعد تسجيل الدخول انتظر دقائقثمّ ابدأ القياسفور الإقلاع ما زال المقيم هائجاً

الشكل 8: بدء القياس بعد أن يهدأ نشاط الخلف بعد إعادة التشغيل.

للمقارنة الصارمة استخدم clean boot

Microsoft توجّه إلى إجراء يمكن به أدنى تكوين لبدء التشغيل عبر clean boot. الأسلوب إيقاف الخدمات غير التابعة لـ Microsoft في msconfig، وتعطيل Startup apps في Task Manager.

هذا قويّ في تقليل الضوضاء. لكنّه يبتعد عن بيئة الاستخدام اليوميّ، فيناسب «مقارنة مختبر لرؤية فرق الشيفرة».

أكتم الإشعارات

لافتات إشعارات Windows تبدو خفيفة وتعيق على غير توقّع. لا الإعاقة البصريّة وحدها، بل قد تغيّر توقيت التنفيذ والتركيز ونشاط التطبيقات في الخلف.

فعّل Do not disturb يدوياً، أو على الأقلّ اقطع الإشعارات أثناء القياس.

اكبح فهرس البحث والمزامنة

إن كان هدف القياس من نوع قراءة كمّ كبير من الملفّات، أو كتابة كمّ كبير من النواتج، أو إعادة بناء شجرة المصدر مرّات، أصاب فهرس البحث ومزامنة السحابة بهدوء.

  • أخرج مجلّد القياس من أهداف البحث
  • أوقف مزامنة OneDrive / Dropbox / Google Drive ونحوها
  • أغلق المتصفّح و Teams و Discord و Slack

هذا المحيط بلا بريق، لكن حين ينفع ينفع كثيراً.

ضوضاء تصيب قياساً يلمس ملفّات كثيرةمخطّط يبيّن أنّ قياس نوع يقرأ ويكتب كمّاً كبيراً من الملفّات يصيبه فهرس البحث ومزامنة السحابة والتطبيقات المقيمة، فتقلّل الضوضاء باستبعاد أو إيقاف.فهرس البحثيصيب قياساً يلمس ملفّات كثيرةمزامنة السحابةتطبيقات مقيمةتقليل الضوضاء باستبعاد وإيقاف

الشكل 9: كلّما كثر قراءة الملفّات وكتابتها في القياس، نفع إيقاف الفهرس والمزامنة.

مقارنة لا توحّد الحرارة تقارن الحرارة في الغالب

CPU و GPU يتغيّر تردّد عملهما بين البرودة وبعد الإحماء. أي أنّ نفس الشيفرة تتغيّر شروطها في كلّ تنفيذ. الحواسيب المحمولة والحواسيب المصغّرة الرقيقة وأجهزة سطح المكتب الصغيرة بارزة خصوصاً.

آليّة تغيّر الشروط بالحرارةمخطّط يبيّن أنّ CPU و GPU يتغيّر تردّد عملهما بين البرودة وبعد الإحماء فتتغيّر شروط نفس الشيفرة في كلّ تنفيذ، وأنّ مقارنة لا توحّد الحرارة تقارن الحرارة في الغالب.تنفيذ في حالة باردةبعد الإحماء يتغيّر التردّدتتغيّر الشروط في كلّ تنفيذمقارنة بلا توحيد تقارن الحرارة

الشكل 10: التردّد يتحرّك بالحرارة، فإن لم تُوحَّد شروط الحرارة قارنتَ التبريد لا الشيفرة.

قواعد ينبغي الالتزام بها

  • وحّد حرارة الغرفة قدر الإمكان
  • ثبّت وضع الحاسوب المحمول
  • ثبّت تكوين محوّل AC والمنصّة والشاشة الخارجيّة
  • لا تعمل عملاً ثقيلاً قبل القياس
  • قِس المرّة الأولى والحالة المستقرّة منفصلتين

اجعل ترتيب التنفيذ متناوباً

تجنّب 10 مرّات لـ A ثمّ 10 مرّات لـ B. يركب انحياز الحرارة والذاكرة المؤقّتة ونشاط الخلفيّة.

الموصى به واحد ممّا يلي.

  • A B A B A B ...
  • A B B A A B B A ...
  • ولّد ترتيباً عشوائيّاً مسبقاً ونفّذ بذلك الترتيب
ترتيب التنفيذ يغيّر كيفيّة ركوب الانحيازمخطّط يبيّن أنّ تشغيل A كلّه أوّلاً ثمّ تشغيل B يركب انحياز الحرارة والذاكرة المؤقّتة ونشاط الخلفيّة على طرف واحد، لذا يُبدَّل أو يُنفَّذ بترتيب عشوائيّ لتوزيع الانحياز على الطرفين.A كلّه ثمّ B كلّهيركب الانحياز على طرف واحدتبديل A B A B أو ترتيب عشوائيّيتوزّع الانحياز على الطرفينيمكن نزع أثر الترتيب من الفرق

الشكل 11: تجميع الترتيب يقارن الانحياز معه، فنفّذ متناوباً أو عشوائيّاً.

ما تقيسه يغيّر معنى «أسرع»

حشر «أسرع» في رقم واحد يُحدث حادثاً في الغالب. المؤشّرات النموذجيّة التي ينبغي النظر إليها على Windows ثلاث.

1. Wall-clock time (الزمن الحقيقيّ)

الوقت الذي ينتظره المستخدم. الأقرب إلى الإحساس من طرف إلى طرف، فأوّل قيمة تُنظَر هي هذه.

على Windows يمكن استخدام QueryPerformanceCounter (QPC) للحصول على وقت عالي الدقّة. في الشيفرة المُدارة الأساس استخدام عائلة Stopwatch. التطلّع إلى الملّي ثانية بـ DateTime.Now غير محصَّن قليلاً كما ينبغي.

2. CPU time (زمن المستخدم + النواة)

الزمن الذي استخدمت فيه العمليّة CPU فعلاً، يمكن الحصول عليه بـ GetProcessTimes.

هذا مريح لـ رؤية كفاءة الحساب. مثلاً إن صار wall-clock أسرع ولم يتغيّر CPU time، يحتمل أن تكون الذاكرة المؤقّتة أو I/O أو زمن الانتظار أو الجدولة هي التي تفعل.

3. Cycle count (عدد دورات CPU)

بـ QueryProcessCycleTime يمكن أخذ عدد دورات CPU للعمليّة كلّها.

هذا أيضاً مؤشّر لرؤية عمل CPU، لكنّه يُظهر وجهاً آخر غير wall-clock. مريح خصوصاً حين تريد رؤية «زمن الانتظار سواء، لكن هل خفّ جزء الحساب».

اختلاف الوجه الذي تراه المؤشّرات الثلاثةمخطّط يبيّن أنّ wall-clock time وقت انتظار المستخدم، و CPU time الزمن الذي استخدمت فيه العمليّة CPU فعلاً، و cycle count عدد دورات CPU، وجوه مختلفة، وأنّ محتوى السرعة لا يُقرأ إلا بالجمع.رؤية محتوى «أسرع»wall-clock: وقت الانتظارCPU time: زمن CPU المستخدمcycle: ثقل جزء الحسابتخمين السبب بالجمع

الشكل 12: لا تحشر في رقم واحد؛ اقرأ معنى السرعة بجمع المؤشّرات الثلاثة.

priority و affinity و NUMA آخر الوسائل

هذا المحيط قد ينفع. لكن لمسه من البداية لأنّه ينفع يسهّل صنع ظاهرة أخرى.

قِس أوّلاً كالعادة

إن ظهر فرق في الحالة الافتراضيّة فذلك الفرق نفسه ذو قيمة. إدخال /high أو /affinity فجأة يعني إدخال «شروط لا تحدث على Windows الفعليّ».

priority و affinity آخر الوسائلمخطّط يبيّن أنّ القياس أوّلاً في الحالة الافتراضيّة، فإن ظهر فرق فذلك الفرق نفسه ذو قيمة، وأنّ تثبيت الأولويّة أو الارتباط فجأة يُدخل شروطاً لا تحدث على Windows الفعليّ، لذا إن استُخدم فبأخرة بعد توضيح الغرض.إن لزم فقرّر الغرضالقياس أوّلاً في الحالة الافتراضيّةإن ظهر فرق فذلك الفرق ذو قيمة/high أو /affinity فجأةإدخال شروط لا تحدث في الواقعالتثبيت كآخر وسيلة

الشكل 13: الأولويّة والارتباط تُستخدمان بغرض بعد إنجاز القياس في الافتراضيّ.

إن استخدمتَ فوضّح الغرض

  • /high: تريد تقليل إعاقة العمليّات الأخرى
  • /affinity: تريد تثبيت توزيع CPU للمقارنة
  • تحكّم NUMA: تريد مواءمة محليّة الذاكرة أيضاً على جهاز كبير

أمر start في Windows يمكنه الإقلاع مع priority class أو affinity mask.

start "" /high /wait myapp.exe --bench case1.json
start "" /affinity F /high /wait myapp.exe --bench case1.json

لكن توقّف عن /realtime

/realtime يمكن استخدامه، لكن الأولى عدم استخدامه. يميل إلى صنع حادث آخر لا إلى إزالة الضوضاء.

إجراء قياس موصى به

نلخّص إجراءً سهل التشغيل الفعليّ بناءً على ما سبق.

إجراء مقارنة أقرب إلى المختبر

  1. ثبّت هدف المقارنة
    • commit hash / build number
    • compiler / runtime version
    • Debug / Release
    • وجود السجلّ و assert والتتبّع
  2. ثبّت شروط الجهاز
    • Windows build
    • BIOS / UEFI version
    • driver version
    • اتّصال AC
    • حرارة الغرفة وطريقة الوضع
  3. ثبّت شروط الطاقة
    • قرّر Power mode
    • سجّل Active power plan
  4. أعد التشغيل
  5. انتظر دقائق قبل القياس
  6. clean boot إن لزم
  7. أدخل إحماء (warm-up)
  8. بدّل A / B
  9. أمّن العدد
  10. أبقِ الوسيط والحدّ الأدنى والحدّ الأقصى و p95
  11. احفظ البيانات الخامّ
  12. إن صغر الفرق فخذ ETW / WPR

كم مرّة تشغّل

نحدّد أيضاً مؤشّراً لـ «تأمين العدد» في 9. التالي ليس حلاً إحصائيّاً صارماً بل موضع هبوط في العمل.

ما تريد رؤيته مؤشّر عدد التنفيذات لكلّ إصدار
النظر إلى الوسيط فقط وتأكيد فرق كبير (عُشر فأكثر) 10 مرّات
ادّعاء فرق بضعة بالمئة. تريد رؤية التشتّت أيضاً 30 مرّة
تريد قراءة حتّى p95 30 مرّة فما فوق. عند 20 مرّة يصير p95 القيمة نفسها لعنصر أو عنصرين في الأعلى، فيتأثّر مباشرة بالقيمة الشاذّة

الوقت اللازم يُقدَّر بـ زمن التنفيذ الواحد × العدد × عدد الإصدارات + الإحماء. معالجة 30 ثانية مرّة، 30 مرّة لكلّ من A / B، حساب حوالي 35 دقيقة مع الإحماء. إن لم يكن هذا واقعيّاً فأقوم من تقليص العدد قطع هدف القياس أصغر (عزل المرحلة الثقيلة وحدها).

إن تردّدت أين تتوقّف، فأوضح أسلوب زيادة العدد مع النظر إلى مسار الوسيط، والتوقّف حيث لا يتحرّك الوسيط رغم الزيادة.

أين تتوقّف في العددمخطّط يبيّن طريقة عمليّة لتقرير عدد التنفيذات: زيادة العدد مع النظر إلى مسار الوسيط، والتوقّف حيث لا يتحرّك الوسيط رغم الزيادة.ما زال يتحرّكلا يتحرّك رغم الزيادةزيادة العدد والتشغيلالنظر إلى مسار الوسيطالتوقّف هناك

الشكل 14: حتّى إن تعذّر تثبيت العدد مسبقاً، يمكن اتّخاذ نقطة استقرار الوسيط موضع توقّف.

بنود يفيد إبقاؤها لاحقاً

في CSV أو JSON القياس، إبقاؤها على الأقلّ التالية قويّ.

timestamp,version,scenario,elapsed_ms,user_ms,kernel_ms,cycles,power_mode,power_plan,ac_or_dc,room_temp_c,notes

إن أمكن فالتالي أيضاً مريح.

cpu_package_temp_start_c,cpu_package_temp_end_c,affinity_mask,priority_class,windows_build,driver_version

في القياس، إمكان التفسير لاحقاً أهمّ أحياناً من القياس نفسه.

انظر لا إلى المتوسّط وحده بل إلى الوسيط والتوزيع

المتوسّط مريح، لكنّه ينكسر بسهولة في قياس Windows. مرّة واحدة دخل Defender، أو ظهر إشعار، أو ضربت عمليّة أخرى SSD، فيُسحَب المتوسّط.

المتوسّط يُسحَب بقيمة شاذّةمخطّط يبيّن أنّ دخولاً واحداً لمسح Defender أو إشعار أو I/O من عمليّة أخرى يكفي لسحب المتوسّط، لذا يُنظَر بالتوزيع بجعل الوسيط محوراً مع جمع p95 و p99 و min/max.ضوضاء تدخل مرّة واحدةيُسحَب المتوسّطجعل الوسيط محوراًالنظر أيضاً إلى p95 / p99 و min / maxتصير قراءة أقوى أمام القيمة الشاذّة

الشكل 15: المتوسّط ينكسر بضوضاء مرّة واحدة، فاقرأ بجمع الوسيط والتوزيع.

الموصى به هذا الجمع.

  • الوسيط: انظر إلى هذا أوّلاً
  • p95 / p99: انظر هل ساء الذيل
  • min / max: انظر كيفيّة الشذوذ
  • مربّع شارب أو مخطّط انتشار: ينفع حين يصغر الفرق

كيف تقرأ حين يظهر فرق

تفسير النتيجة يسهل بالجمع.

wall-clock وحده أسرع

قد يكون تحسين I/O أو زمن انتظار أو ذاكرة مؤقّتة أو جدولة.

CPU time و cycle كلاهما انخفض

يحتمل بقوّة أن يكون التنفيذ نفسه أخفّ.

المرّة الأولى وحدها بطيئة / سريعة

فرق cold / warm. اشكك في الإقلاع والتهيئة وتوليد الذاكرة المؤقّتة و JIT.

يزداد البطء كلّما تكرّر التشغيل

اشكك في الحرارة والخنق وضغط الذاكرة ونشاط الخلفيّة.

قراءة السبب من نمط الفرقمخطّط يبيّن قراءة: إن كان wall-clock وحده أسرع فانتظار أو I/O، وإن انخفض CPU time و cycle أيضاً فالتنفيذ أخفّ، وإن اختلفت الأولى وحدها ففرق cold و warm، وإن بطؤ في النصف الثاني فحرارة أو نشاط خلف.الزمن الحقيقيّ فقطانخفض زمن CPU أيضاًالأولى فقطبطيء في النصف الثانيالنظر إلى كيفيّة ظهور الفرقانتظار و I/Oالتنفيذ أخفّcold / warmحرارة ونشاط خلف

الشكل 16: نمط كيفيّة ظهور الفرق، أكثر من الفرق نفسه، يعطي حدساً للسبب.

احفر حتّى «لماذا أسرع» بـ ETW / WPR

حين يصغر الفرق أو يتعذّر قراءة السبب، الطريق الملكيّ التقدّم إلى أدوات عائلة ETW (Event Tracing for Windows) في Windows.

Windows Performance Recorder (WPR) من Microsoft أداة تسجيل قائمة على ETW، وهي ضمن Windows ADK. يمكن أخذ CPU و I/O و context switch و أخطاء الصفحات معاً.

في الحدّ الأدنى تقريباً كالتالي.

wpr -start CPU -filemode

REM ここでベンチを実行する

wpr -stop trace.etl

بعد الفتح في WPA، الرسوم التي تُنظَر أوّلاً محدّدة تقريباً.

ما تريد رؤيته الرسم الذي تفتحه كيفيّة القراءة
في أيّ دالّة يُستخدم CPU CPU Usage (Sampled) رتّب بـ Weight وقارن المكدّس بين A و B. لأنّه عيّنات، معالجة قصيرة مثل DPC / ISR يصعب ظهورها
لماذا ينتظر CPU Usage (Precise) انظر زمن Ready وزمن الانتظار وسبب تبديل السياق. فرق انتظار lock أو I/O يظهر هنا
هل الاختناق من التعريف DPC/ISR انظر الزمن حسب الوحدة. إن كبر هذا فليس فرق جهة التطبيق أصلاً
هل القرص يفعل Disk Usage انظر عدد I/O وحجمه وزمن الخدمة

عند المقارنة الأساس أخذ تتبّع واحد لكلّ من A و B بنفس السيناريو، والنظر إلى نفس الرسم جنباً إلى جنب. بنسخة واحدة لا يمكن الحكم «أهذا بطيء».

عند الوصول إلى هذه المرحلة، لا «B أسرع بنسبة 3%» بل يمكن الحديث بسبب: «في B انخفض انتظار lock فانخفض ready time» «في A زاد فتح الملفّات فصار الإقلاع البارد بطيئاً».

من فرق أرقام فقط إلى فرق بسببمخطّط يبيّن أنّه حين يصغر الفرق أو يتعذّر قراءة السبب، أخذ تتبّع واحد لكلّ من A و B بنفس السيناريو بـ WPR ومقارنة نفس الرسم جنباً إلى جنب في WPA يجعل الحديث ممكناً بسبب لا بنسبة مئوية أسرع.الفرق صغير أو السبب غير مقروءأخذ تتبّع A و B بـ WPRالنظر إلى نفس الرسم جنباً إلى جنب في WPAيصير الحديث ممكناً بسبببنسخة واحدة لا يُحكَم أهو بطيء

الشكل 17: إن حُفر حتّى ETW، تحوّل «أسرع بنسبة كم» إلى «لماذا أسرع».

قائمة تحقّق ملخّصة في صفحة واحدة

أخيراً نضعها بشكل يمكن لصقه كما هو في دليل الإجراءات.

ثبّت

  • ثبّت هدف المقارنة (commit hash / build number / Debug أم Release / شروط البناء مثل PGO / وجود السجلّ و assert)
  • الحاسوب المحمول باتّصال AC
  • ثبّت Power mode في تطبيق الإعدادات
  • أكّدتَ Active power plan بـ powercfg /getactivescheme
  • أوقفتَ الإشعارات. أوقفتَ فهرس البحث ومزامنة السحابة
  • جعلتَ clean boot إن لزم
  • أعدتَ التشغيل وبدأتَ بعد انتظار دقائق

نفّذ

  • أدخلتَ إحماء
  • قِستَ cold (الأولى) و warm (المستقرّ) منفصلتين
  • بدّلتَ A / B أو شغّلتَ بترتيب عشوائيّ
  • قرّرتَ العدد وشغّلتَ (المؤشّر الجدول أعلاه)

سجّل

  • أبقيتَ بيانات خامّاً سطراً لكلّ تنفيذ (elapsed_ms / user_ms / kernel_ms / cycles)
  • أبقيتَ AC أم DC، و Power mode (وضع الطاقة)، و GUID لـ Power plan (خطّة الطاقة)، و Windows build، و driver version
  • أبقيتَ حرارة الغرفة وحالة الوضع
  • كتبتَ أيضاً الشروط التي لم تُثبَّت

فسّر

  • نظرتَ إلى الوسيط. لم تحكم بالمتوسّط وحده
  • نظرتَ إلى الذيل بـ p95 / p99
  • أكّدتَ القيمة الشاذّة بـ min / max
  • خمّنتَ السبب بجمع wall-clock / CPU time / cycle
  • حفرتَ حتّى ETW / WPR حين صغر الفرق

الخلاصة

عند مقارنة برامج بإصدارات مختلفة على Windows، ما ينفع فعلاً ليس حيلاً لامعة. المهمّ أساليب هادئة لكنّها تنفع قابليّة إعادة الإنتاج كهذه.

  • ثبّت AC / Power mode (وضع الطاقة) / Power plan (خطّة الطاقة) وسجّلها
  • افصل cold و warm
  • بدّل A / B
  • انظر إلى الوسيط والتوزيع
  • clean boot إن لزم
  • إن صغر الفرق فاحفر السبب بـ ETW / WPR

وأهمّ شيء كتابة ما ثبّتَّ وما لم تثبّت مع النتيجة. القياس مقارنة سرعة وفي الوقت نفسه تسجيل لشروط التجربة.

تقرير تسريع بلا شروط مكتوبة لا يستطيع غيره التحقّق من إمكان إخراج نفس النتيجة. يبقى الرقم وحده ولا تبقى وسيلة إعادة الإنتاج. بالمقابل إن كُتبت الشروط كما ينبغي، فحتّى إن صغر الفرق لتلك النتيجة قيمة حقيقيّة.

تسجيل الشروط يحسم قيمة النتيجةمخطّط يبيّن أنّ تقرير تسريع بلا شروط مكتوبة يبقى الرقم وحده ولا تبقى وسيلة إعادة الإنتاج، وأنّ كتابة الشروط كما ينبغي تعطي قيمة حتّى إن صغر الفرق، فالقياس تسجيل لشروط التجربة أيضاً.تقرير لا يكتب الشروطيبقى الرقم وحدهلا يستطيع غيره التحقّقتقرير كتب الشروطتبقى وسيلة إعادة الإنتاجقيمة حتّى إن صغر الفرق

الشكل 18: قيمة القياس تسكن لا في الرقم بل في تسجيل ما ثُبِّت وما لم يُثبَّت.

روابط مرجعية

أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.

ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.

الأسئلة الشائعة

أسئلة شائعة حول موضوع هذه المقالة.

ما الأسباب الرئيسيّة لتذبذب نتائج القياس على Windows؟
ثمّة عوامل متعدّدة الطبقات: Power mode (وضع الطاقة) و Power plan (خطّة الطاقة)، والحرارة، وتحديثات الخلفيّة، وفهرس البحث، ومسح الفيروسات، والأولويّة والارتباط، وترتيب التنفيذ، وحالة الذاكرة المؤقّتة. حتّى على نفس جهاز Windows، إن لم تتوافق هذه الشروط صار الأمر تجربة أخرى فعليّاً. على الحواسيب المحمولة خصوصاً يتغيّر السلوك كثيراً بين الاتّصال بـ AC والعمل على البطاريّة، لذا قارن حتماً مع اتّصال AC وسجّل الشروط.
ما الفرق بين Power mode (وضع الطاقة) و Power plan (خطّة الطاقة)؟
Power mode تبديل Best power efficiency و Balanced و Best performance الذي تختاره في Power & battery في تطبيق الإعدادات، ويؤثّر في إعدادات الطاقة خلفه وفي سلوك PPM (Processor Power Management). Power plan خطط طاقة تقليديّة مثل Balanced و High performance يمكن تأكيدها بـ powercfg. لأنّ الاثنين موجودان على Windows، يلزم تسجيل ثلاث على الأقلّ مع نتيجة القياس: AC أم بطاريّة، و Power mode، و Active power plan.
إن لم تظهر خطّة الطاقة High performance، أهذا عطل؟
غالباً ليس عطلاً. وثائق Microsoft تقول إنّ الأجهزة الداعمة لـ Modern Standby لا يُسمَح فيها إلا بـ Balanced أو خطط مشتقّة من Balanced. أي أنّ غياب High performance بحكم تصميم ذلك الطراز أمر وارد. وإن تعذّر تغيير واجهة Power mode فقد تكون خطّة مخصّصة (custom power plan) مختارة، فالأسرع تجربة اختيار Balanced أوّلاً.
بأيّ ترتيب ينبغي تنفيذ مقارنة سرعة الإصدارين A و B؟
تجنّب تشغيل A كلّه أوّلاً ثمّ تشغيل B. لأنّ انحياز الحرارة والذاكرة المؤقّتة ونشاط الخلفيّة يركب على طرف واحد. بدّل A B A B أو نفّذ بترتيب عشوائيّ مولَّد مسبقاً. وافصل أيضاً المرّة الأولى الباردة عن الحالة المستقرّة بعد الإحماء، وانظر لا إلى المتوسّط وحده بل إلى الوسيط و p95 والحدّ الأدنى والحدّ الأقصى، فتمنع قيمة شاذّة من سحب النتيجة.

الملف الشخصي للمؤلف

صفحة الملف الشخصي لمؤلف المقالة.

غو كومورا

مؤسّس شركة كومورا سوفت ذ.م.م.

يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.

العودة إلى المدونة