جمع عمليات التتبُّع وعرضها

تقدّم هذه الصفحة تعليمات مفصّلة حول جمع عمليات تتبُّع Perfetto لاستخدامها مع Wattson، وحول تحليل بيانات الطاقة الناتجة في واجهة مستخدم Perfetto.

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

الحد الأدنى لمتطلبات الإصدار

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

جهاز الحدّ الأدنى لمتطلبات الإصدار: تقدير وحدة المعالجة المركزية الحدّ الأدنى لمتطلبات الإصدار: تقدير وحدة معالجة الرسومات
Pixel Watch 2 ما مِن حدّ أدنى مطلوب لعدد الإصدارات غير متاح
Pixel Watch 3 25Q2 غير متاح
Pixel 6 ما مِن حدّ أدنى مطلوب لعدد الإصدارات 25Q2
Pixel 9 25Q2 غير متاح

جمع بيانات تتبُّع Perfetto من سطر الأوامر

يعرض هذا القسم مثالاً على سير عمل لجمع عمليات تتبُّع Perfetto لاستخدامها مع Wattson. يجب تنفيذ جميع الأوامر المدرَجة في الخطوات التالية من مضيف Android Debug Bridge (adb).

  1. اضبط عملية التتبُّع وابدأها من خلال إنشاء ملف إعداد Perfetto على الجهاز. يمكن العثور على مثال على الضبط في wattson.cfg في شجرة المصدر.

    يجب أن تتضمّن إعداداتك أحداث التتبُّع التالية:

    # Polls CPU freq/idle state at the start of trace
    data_sources: {
       config {
          name: "linux.sys_stats"
          sys_stats_config {
             # Large period so polling doesn't happen continuously
             # Intent is just to poll once upfront
             cpufreq_period_ms: 100000000
             cpuidle_period_ms: 100000000
          }
       }
    }
    data_sources: {
       config {
          name: "linux.ftrace"
          ftrace_config {
             ftrace_events: "devfreq/devfreq_frequency"
             ftrace_events: "cpuhp/cpuhp_enter"
             ftrace_events: "cpuhp/cpuhp_exit"
             ftrace_events: "cpuhp/cpuhp_multi_enter"
             ftrace_events: "power/cpu_frequency"
             ftrace_events: "power/cpu_idle"
             ftrace_events: "power/suspend_resume"
          }
       }
    }
    
  2. لتفعيل تقديرات استخدام الطاقة في ذاكرة التخزين المؤقت من المستوى 3، فعِّل الحدث fttrace/print:

    adb shell perfetto --txt -c /data/misc/perfetto-configs/wattson.cfg --background-wait -o /data/misc/perfetto-traces/trace
    
    # Optional
    adb shell simpleperf stat -a -e arm_dsu_0/l3d_cache/,arm_dsu_0/bus_access/ --interval 10
    
  3. (اختياري) اضبط بداية نافذة Wattson، وهي علامة مضمّنة في تتبُّع Perfetto تشير إلى بداية التسجيل. تضيف هذه العلامة دقة إضافية إلى قياسات Wattson.

    # Optional
    adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
    
  4. نفِّذ عبء العمل الذي يهمّك.

  5. (اختياري) فعِّل حدث التتبُّع ftrace/print لضبط نهاية فترة Wattson:

    # Optional
    adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
    
  6. محو مخازن بيانات التتبُّع واسترداد ملف تتبُّع Perfetto:

    adb shell killall -w perfetto
    adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
    

جمع بيانات تتبُّع Perfetto باستخدام واجهة مستخدم Perfetto

لجمع بيانات التتبُّع باستخدام واجهة مستخدم Perfetto، يجب تفعيل إعدادات معيّنة في Wattson. عند تسجيل عملية تتبُّع جديدة في واجهة مستخدم Perfetto، فعِّل خيارَي تفاصيل الجدولة وتردد وحدة المعالجة المركزية وحالات عدم النشاط:

تفاصيل الجدولة ومفاتيح تبديل معدّل تكرار وحدة المعالجة المركزية وحالات عدم النشاط

الشكل 1. تفاصيل الجدول الزمني ومفاتيح تبديل معدّل تكرار وحدة المعالجة المركزية وحالات عدم النشاط

بالنسبة إلى أجهزة Pixel 9، ضَع علامة في مربّع الاختيار devfreq ضمن إعدادات Ftrace لتفعيل ميزة جمع بيانات تردد الجهاز:

تفعيل ميزة "عدد مرات الظهور على الجهاز"

الشكل 2. فعِّل معدّل تكرار استخدام الجهاز.

استخدام واجهة مستخدم Wattson

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

عرض تفاصيل كل سكة حديد

للتفاعل مع Wattson في Perfetto، اتّبِع الخطوات التالية:

  1. افتح عملية تتبُّع في Perfetto.

    إذا كان جهازك متوافقًا مع Wattson، سيتم تلقائيًا إدراج عمليات تتبُّع Wattson على النحو التالي:

    عرض عمليات تتبُّع Wattson في Perfetto

    الشكل 3. عرض عمليات تتبُّع Wattson في Perfetto

  2. انقر على Wattson لتوسيع وعرض تفاصيل كل سكة حديد افتراضية:

    • يتم تلقائيًا تغيير مقياس جميع الرسوم البيانية الخاصة باللوحات إلى القيمة نفسها لعرض النسبة بين اللوحات.

    • يتم إنشاء الإحصاءات لأي منطقة يختارها المستخدم (أو يحدّدها).

    • يمكن ترتيب جدول الإحصاءات من خلال النقر على أي اسم عمود.

    • يتم عرض إجمالي التقديرات أسفل عناوين الأعمدة مباشرةً.

    تقديرات السكك الحديدية

    الشكل 4. تقديرات القطارات

عرض عمليات الإحالة إلى المصدر لكل سلسلة محادثات أو عملية أو حزمة

إذا فعّلت عمليات تتبُّع المجدول وكان بإمكانك الاطّلاع على شرائح سلاسل المحادثات في Perfetto، يمكنك أيضًا الحصول على معلومات عن استهلاك الطاقة أو الكهرباء على مستوى سلسلة المحادثات أو العملية:

  1. في Perfetto، اختَر منطقة من شرائح سلاسل المحادثات.
  2. عرض تفاصيل سلسلة المحادثات أو العملية أو الحزمة

كما هو الحال مع إحصاءات المسار الفردي، يمكنك النقر على أي من أسماء الأعمدة لترتيبها حسب هذا العمود.

تحليل التصنيف التفصيلي على مستوى سلسلة المحادثات

بالإضافة إلى الحد الأدنى من المتطلبات لتقدير استهلاك الطاقة الأساسي، عليك إضافة الإعداد التالي إلى القسم linux.ftrace في wattson.cfg لتحديد مصدر استهلاك الطاقة على مستوى كل سلسلة محادثات:

data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "sched/sched_switch"
        }
    }
}

التقسيمات التفصيلية على مستوى سلسلة المحادثات

الشكل 5. تقسيمات على مستوى سلسلة المحادثات

التقسيم على مستوى العملية

تتطلّب الإحالة المستندة إلى العمليات تفعيل process_states على البيانات التي يتم جمعها في تتبُّع Perfetto. فعِّل مصدر البيانات التالي في ملف إعدادات wattson.cfg:

data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}

حسب تفاصيل العملية

الشكل 6. حسب تقسيم العملية

تفاصيل على مستوى الحزمة

تتطلّب الإحالة المستندة إلى الحزمة تفعيل android.packages_list على البيانات التي يتم جمعها في تتبُّع Perfetto. فعِّل مصدر البيانات التالي في ملف إعدادات wattson.cfg:

data_sources {
  config {
    name: "android.packages_list"
    target_buffer: 1
  }
}

على غرار تحديد المصدر على مستوى سلسلة المحادثات وعلى مستوى العملية، عند اختيار نطاق من شرائح سلسلة المحادثات، راجِع التقسيم على مستوى الحزمة.

تقسيم على مستوى سلسلة المحادثات

الشكل 7. تفاصيل على مستوى سلسلة المحادثات

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

في ما يلي بعض الأسئلة الشائعة حول Wattson.

هل من المتوقّع أن تتطابق قراءات Wattson مع قراءات أجهزة قياس الطاقة في المختبر؟

بالنسبة إلى معظم أحمال العمل، يتطابق تقدير Wattson مع قياسات أجهزة الطاقة في المختبر. ومع ذلك، لا يكون هذا هو الحال دائمًا، وليس هذا هو الهدف من Wattson.

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

كيف تكون أداة Wattson أكثر فائدة من النظر إلى وقت وحدة المعالجة المركزية أو دورات وحدة المعالجة المركزية؟

لا يوضّح وقت وحدة المعالجة المركزية ودوراتها الفرق في استهلاك الطاقة بين ترددات وحدة المعالجة المركزية وأنواعها (صغيرة ومتوسطة وكبيرة).

لا يؤدي مضاعفة سرعة وحدة المعالجة المركزية دائمًا إلى مضاعفة طاقتها أو أدائها.

هل Wattson دقيق عند مقارنته بالحلول المستندة إلى الأجهزة؟

قارنّا بين Wattson وأجهزة قياس الطاقة في المختبرات في عدة حالات استخدام قدّمتها عدة فرق. يبلغ متوسط الخطأ في Wattson ‏1%، ويبلغ الانحراف المعياري ‏1.5%. ويتم الحفاظ على مستوى التطابق هذا في جميع الاختبارات التي تتراوح مدتها بين 10 ثوانٍ و4 ساعات. وبالتالي، لا يحدث أي تراكم للأخطاء أو إخفاء لها بمرور الوقت.

تجارب إعدادات نواة Pixel 6

في ما يلي بعض التجارب الأساسية لتقسيمات Wattson النموذجية باستخدام هاتف Pixel 6:

Wattson.cfg

يوضّح هذا القسم عملية الإعداد النموذجية لتفعيل Wattson على Perfetto:

  write_into_file: true
  flush_period_ms: 30000
  file_write_period_ms: 30000

  buffers: {
      size_kb: 2048
      fill_policy: RING_BUFFER
  }
  buffers: {
      size_kb: 200000
      fill_policy: RING_BUFFER
  }

  # Needed for process level power attribution
  data_sources: {
      config {
          name: "linux.process_stats"
          target_buffer: 0
          process_stats_config {
              scan_all_processes_on_start: true
          }
      }
  }

  # Needed for package level power attribution
  data_sources: {
      config {
          name: "android.packages_list"
          target_buffer: 0
      }
  }

  # Needed for determining CPU freq/idle initial state
  data_sources: {
      config {
          name: "linux.sys_stats"
          sys_stats_config {
              cpufreq_period_ms: 100000000
              cpuidle_period_ms: 100000000
          }
      }
  }

  # Needed for estimating power and thread level power attribution
  data_sources: {
      config {
          name: "linux.ftrace"
          target_buffer: 1
          ftrace_config {
              # Minimum data sources for estimating power
              ftrace_events: "power/cpu_frequency"
              ftrace_events: "power/cpu_idle"
              ftrace_events: "power/suspend_resume"
              ftrace_events: "cpuhp/cpuhp_enter"
              ftrace_events: "cpuhp/cpuhp_exit"
              ftrace_events: "cpuhp/cpuhp_multi_enter"
              ftrace_events: "devfreq/devfreq_frequency"

              # Needed for Wattson start/stop markers
              ftrace_events: "ftrace/print"

              # Needed for thread level power attribution
              ftrace_events: "sched/sched_switch"

              # Needed for process level power attribution
              ftrace_events: "sched/sched_process_free"
              ftrace_events: "task/task_newtask"
              ftrace_events: "task/task_rename"
          }
      }
  }