Xperfview: ما الفرق بين أخذ عينات وحدة المعالجة المركزية واستخدام وحدة المعالجة المركزية؟

StackOverflow https://stackoverflow.com/questions/3567093

  •  01-10-2019
  •  | 
  •  

سؤال

يتعلق هذا السؤال بـ XPERF و XPERFVIEW ، المرافق التي تشكل جزءًا من مجموعة أدوات أداء Windows (بدورها جزء من Windows SDK 7.1).

مقارنة بين مخططين ، "أخذ عينات من وحدة المعالجة المركزية بواسطة الخيط" و "استخدام وحدة المعالجة المركزية بواسطة الخيط" ، هناك العديد من الاختلافات التي لا أفهمها. سأستخدم Audiodg.exe كمثال.

  1. في سحب المواضيع ، لا يوجد سوى مؤشر ترابط واحد لـ Audiodg على مخطط أخذ عينات وحدة المعالجة المركزية ؛ يعرض مخطط استخدام وحدة المعالجة المركزية العديد من مؤشرات الترابط السمعية.

  2. كلا الرسوم البيانية لها محور ص. عادةً ما يكون استخدام ٪ لخيط معين أقل على مخطط أخذ عينات وحدة المعالجة المركزية مقارنة بمخطط استخدام وحدة المعالجة المركزية.

  3. يوضح جدول ملخص أخذ عينات وحدة المعالجة المركزية الوزن والوزن ٪ لكل وحدة/عملية. إذا قمت بتحميل الرموز ، فيمكنني الحفر بعمق في عملية Audiodg. يعرض جدول ملخص جدولة وحدة المعالجة المركزية (تم إطلاقه من الرسم البياني لاستخدام وحدة المعالجة المركزية) استخدام وحدة المعالجة المركزية واستخدام ٪ وحدة المعالجة المركزية - الوزن غير متوفر. (على العكس من ذلك ، لا يتوفر استخدام وحدة المعالجة المركزية على جدول ملخص أخذ عينات وحدة المعالجة المركزية.) لا يمكنني الحفر في عمق Audiodg - أرى فقط الخيط الرئيسي وبعض مؤشرات ترابط NTDLL.DLL.

  4. تختلف أرقام أي عملية في استخدام ٪ وحدة المعالجة المركزية وأعمدة الوزن ٪ دائمًا. في بعض الأحيان تختلف بأكثر من 75 ٪.

إذن أسئلتي ... ما هو المقياس الموثوق لاستخدام وحدة المعالجة المركزية هنا؟ أليست أرقام استخدام وحدة المعالجة المركزية مستمدة من عينات وحدة المعالجة المركزية؟ ألا ينبغي أن تتعلق الأرقام بطريقة ما؟

هل كانت مفيدة؟

المحلول

Xperf يجعل هذا مربكًا بعض الشيء ، هذا هو فهمي لما يحدث:

  • بيانات عينة وحدة المعالجة المركزية ، ممكّن مع علامة kernel ملف تعريف. يتم جمع بيانات عينة وحدة المعالجة المركزية في بعض الفاصل الزمني العادي ، ويسجل معلومات حول ما كانت عليه وحدة المعالجة المركزية في ذلك الوقت (على سبيل المثال العملية ومعرف الخيط و callstack في وقت العينة.)
  • بيانات تبديل السياق ، ممكّن باستخدام علامة cswitch kernel. يسجل هذا البيانات حول كل مفتاح سياق يحدث (على سبيل المثال الذي تم تبديله إلى/خارج و CallStacks.)

أخذ عينات من وحدة المعالجة المركزية حسب الموضوع يوضح عدد أحداث الملف الشخصي الذي تم تسجيله لكل مؤشر ترابط ، تم تجميعه على مدار فترة زمنية طوال فترة التتبع. على سبيل المثال ، إذا كانت Audiodg تنفذ 10 ٪ من الوقت لمدة ثانيتين ، فإننا نتوقع أن نرى حوالي 10 "٪ استخدام" خلال ذلك الوقت. ومع ذلك ، نظرًا لأن هذا يعتمد على أخذ العينات ، فمن المحتمل أنه في كل حدث عينة ، حدث أن يتم تنفيذ مؤشرات الترابط من عملية أخرى-وبعبارة أخرى ، تم "تفويتها" 10 ٪ من خلال أحداث العينة.

استخدام وحدة المعالجة المركزية بواسطة الموضوع يتم حسابها باستخدام بيانات مفتاح السياق. "الاستخدام" هو مقدار الوقت الذي يتم فيه تبديل السياق ثم الخروج لاحقًا (وبالطبع ، يتم تجميع هذه البيانات على بعض الفاصل الزمني الصغير).

هناك فوائد لكل بيانات:

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

للإجابة على سؤالك ، يكون مخطط استخدام وحدة المعالجة المركزية "أكثر دقة" لفهم مقدار الوقت الذي يتم فيه تنفيذ كل مؤشر ترابط. ومع ذلك ، لا تستبعد استخدام بيانات أخذ العينات لأنه يمكن أن يكون أكثر فائدة لفهم أين كانت مؤشرات الترابط الخاصة بك تقضي وقتها بالفعل! بالنسبة لبيانات أخذ عينات وحدة المعالجة المركزية ، يكون جدول الملخص أكثر قيمة لأنه سيظهر لك المداخن. بالنسبة لبيانات استخدام وحدة المعالجة المركزية ، ربما يكون الرسم البياني أكثر فائدة من جدول الملخص.

امل ان يساعد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top