ट्रेस इकट्ठा करना और उन्हें देखना

इस पेज पर, Wattson के साथ इस्तेमाल करने के लिए Perfetto ट्रेस इकट्ठा करने के बारे में पूरी जानकारी दी गई है. साथ ही, Perfetto यूज़र इंटरफ़ेस (यूआई) में, पावर से जुड़े डेटा का विश्लेषण करने के बारे में भी बताया गया है.

Perfetto ट्रेस इकट्ठा करने के कई तरीके हैं. हालांकि, इस पेज पर दिए गए तरीकों में, Wattson के साथ काम करने वाला ट्रेस जनरेट करने के लिए, खास ज़रूरी शर्तें और वर्कफ़्लो शामिल हैं.

बिल्ड करने के लिए ज़रूरी शर्तें

यह पुष्टि करने के लिए कि Wattson के पास सही तरीके से काम करने के लिए ज़रूरी मेटाडेटा है, आपको हाल ही के बिल्ड पर चल रहे डिवाइस से ट्रेस इकट्ठा करने होंगे. सीपीयू और जीपीयू की परफ़ॉर्मेंस का अनुमान लगाने के लिए, ज़रूरी बिल्ड वर्शन हर डिवाइस के हिसाब से अलग-अलग होते हैं.

डिवाइस बिल्ड के लिए ज़रूरी शर्तें: सीपीयू का अनुमान बिल्ड की ज़रूरी शर्तें: जीपीयू का अनुमान
Pixel Watch 2 बिल्ड से जुड़ी कोई ज़रूरी शर्त नहीं है अनुमति नहीं है
Pixel Watch 3 25Q2 अनुमति नहीं है
Pixel 6 बिल्ड से जुड़ी कोई ज़रूरी शर्त नहीं है 25Q2
Pixel 9 25Q2 अनुमति नहीं है
Pixel 10 25Q2 अनुमति नहीं है
Galaxy XR (SXR2230P) बिल्ड से जुड़ी कोई ज़रूरी शर्त नहीं है अनुमति नहीं है

कमांड लाइन से Perfetto ट्रेस इकट्ठा करना

इस सेक्शन में, Wattson के साथ इस्तेमाल करने के लिए Perfetto ट्रेस इकट्ठा करने का एक उदाहरण वर्कफ़्लो दिया गया है. यहां दिए गए सभी निर्देश, 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. L3 कैश मेमोरी के लिए, ऊर्जा के इस्तेमाल का अनुमान लगाने की सुविधा चालू करने के लिए, 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 UI का इस्तेमाल करके ट्रेस इकट्ठा करने के लिए, आपको Wattson के लिए कुछ सेटिंग चालू करनी होंगी. Perfetto के यूज़र इंटरफ़ेस में नया ट्रेस रिकॉर्ड करते समय, शेड्यूलिंग की जानकारी और सीपीयू की फ़्रीक्वेंसी और आइडल स्टेट टॉगल चालू करें:

शेड्यूल करने से जुड़ी जानकारी और सीपीयू की फ़्रीक्वेंसी और आइडल स्टेट टॉगल

पहली इमेज. शेड्यूलिंग की जानकारी और सीपीयू की फ़्रीक्वेंसी और निष्क्रिय स्थितियों को टॉगल करने की सुविधा.

Pixel 9 डिवाइसों के लिए, Ftrace सेटिंग में जाकर, devfreq चेकबॉक्स चुनें. इससे डिवाइस की फ़्रीक्वेंसी का डेटा इकट्ठा करने की सुविधा चालू हो जाएगी:

डिवाइस की फ़्रीक्वेंसी चालू करना

दूसरी इमेज. डिवाइस की फ़्रीक्वेंसी चालू करें.

हर रेल के हिसाब से ब्रेकडाउन देखना

Perfetto की मदद से, Wattson के पावर अनुमानों का विश्लेषण करें. इसके लिए, समयसीमा चुनें, ताकि आपको हर रेल के हिसाब से आंकड़े दिखें. इसके अलावा, थ्रेड, प्रोसेस या पैकेज लेवल पर बिजली की खपत का पता लगाने के लिए, ट्रेस के खास कॉन्फ़िगरेशन चालू करें.

Perfetto में Wattson से इंटरैक्ट करने के लिए:

  1. Perfetto में कोई ट्रेस खोलें.

    अगर आपके डिवाइस पर Wattson काम करता है, तो Wattson के ट्रेस अपने-आप दिखते हैं:

    Perfetto में Wattson ट्रेस देखना

    तीसरी इमेज. Perfetto में Wattson ट्रेस देखें.

  2. Wattson पर क्लिक करके, हर वर्चुअल रेल का ब्रेकडाउन बड़ा करके देखें:

    • सभी रेल ग्राफ़ को एक ही वैल्यू के हिसाब से अपने-आप स्केल किया जाता है, ताकि रेल के बीच का अनुपात दिखाया जा सके.

    • आंकड़े, उपयोगकर्ता के चुने गए (या मार्क किए गए) किसी भी इलाके के लिए जनरेट किए जाते हैं.

    • किसी भी कॉलम के नाम पर क्लिक करके, आंकड़ों की टेबल को क्रम से लगाया जा सकता है.

    • अनुमानित कुल वैल्यू, कॉलम के टाइटल के ठीक नीचे दिखती हैं.

    रेल से यात्रा करने वालों की संख्या के अनुमान

    चौथी इमेज. रेल के अनुमान.

थ्रेड, प्रोसेस या पैकेज के हिसाब से ट्रेस एट्रिब्यूशन देखना

अगर आपने शेड्यूलर ट्रेस चालू किए हैं और आपको Perfetto में थ्रेड स्लाइस दिख रहे हैं, तो आपको थ्रेड-लेवल या प्रोसेस-लेवल पर पावर या एनर्जी एट्रिब्यूशन भी मिल सकता है:

  1. Perfetto में, थ्रेड स्लाइस का कोई क्षेत्र चुनें.
  2. थ्रेड, प्रोसेस या पैकेज के लिए ब्रेकडाउन देखें.

हर रेल के हिसाब से ट्रैक के आंकड़ों की तरह ही, किसी कॉलम के हिसाब से क्रम से लगाने के लिए, उस कॉलम के नाम पर क्लिक किया जा सकता है.

थ्रेड-लेवल के ब्रेकडाउन का विश्लेषण करना

पावर का अनुमान लगाने की बुनियादी ज़रूरी शर्तों के अलावा, आपको थ्रेड के हिसाब से पावर एट्रिब्यूशन के लिए, wattson.cfg में linux.ftrace सेक्शन में यह कॉन्फ़िगरेशन जोड़ना होगा:

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

थ्रेड के लेवल पर ब्रेकडाउन

पांचवीं इमेज. थ्रेड के लेवल पर ब्रेकडाउन.

प्रोसेस के लेवल पर ब्रेकडाउन

प्रोसेस-लेवल एट्रिब्यूशन के लिए, Perfetto ट्रेस में इकट्ठा किए गए डेटा पर process_states चालू होना चाहिए. अपनी wattson.cfg कॉन्फ़िगरेशन फ़ाइल में, यहां दिया गया डेटा सोर्स चालू करें:

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

प्रोसेस के हिसाब से ब्रेकडाउन

छठी इमेज. प्रोसेस के हिसाब से ब्रेकडाउन.

पैकेज के हिसाब से ब्रेकडाउन

पैकेज-लेवल एट्रिब्यूशन के लिए, Perfetto ट्रेस में इकट्ठा किए गए डेटा पर android.packages_list चालू होना चाहिए. अपनी wattson.cfg कॉन्फ़िगरेशन फ़ाइल में, यह डेटा सोर्स चालू करें:

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

थ्रेड-लेवल और प्रोसेस-लेवल के एट्रिब्यूशन की तरह ही, थ्रेड स्लाइस की रेंज चुनने पर, पैकेज-लेवल के ब्रेकडाउन की समीक्षा करें.

थ्रेड-लेवल के हिसाब से ब्रेकडाउन

सातवीं इमेज. थ्रेड के लेवल पर जानकारी.

जीपीयू की पावर का अनुमान

जीपीयू पावर का अनुमान लगाने की सुविधा, Pixel 6, 6 Pro, और 6a पर काम करती है. जीपीयू की परफ़ॉर्मेंस का अनुमान लगाने की सुविधा चालू करने के लिए, अपनी wattson.cfg कॉन्फ़िगरेशन फ़ाइल में यह डेटा सोर्स चालू करें:

data_sources: {
  config {
    name: "linux.ftrace"
    ftrace_config {
      ftrace_events: "mali/gpu_power_state"
      ftrace_events: "power/gpu_frequency"

      # [Optional] Enable GPU Work Period (not used by Wattson, but useful for debugging)
      ftrace_events: "power/gpu_work_period"
    }
  }
}

चुने गए किसी भी विकल्प के लिए, Wattson से मिले जीपीयू पावर के अनुमान, Perfetto UI में Wattson के अनुमान टैब पर दिखते हैं.

जीपीयू की पावर का अनुमान

आठवीं इमेज. जीपीयू की परफ़ॉर्मेंस का अनुमान.

अक्सर पूछे जाने वाले सवाल

यहां Wattson के बारे में अक्सर पूछे जाने वाले कुछ सवाल दिए गए हैं.

क्या Wattson से मिलने वाले आउटपुट को, लैब में पावर मेज़रमेंट करने वाले हार्डवेयर के आउटपुट से मैच करना ज़रूरी है?

ज़्यादातर वर्कलोड के लिए, Wattson का अनुमान, लैब के पावर हार्डवेयर के मेज़रमेंट से मेल खाता है. हालांकि, ऐसा हमेशा नहीं होता है और Wattson का मकसद भी ऐसा नहीं है.

Wattson को इसलिए बनाया गया है, ताकि बिजली की खपत में हुए सुधारों की पुष्टि की जा सके या बिजली की खपत में हुई गिरावट का पता लगाया जा सके. ऐसा, पर्यावरण से जुड़े फ़ैक्टर (तापमान), चिप लीकेज में यूनिट-टू-यूनिट अंतर (एक ही SoC में हर यूनिट के हिसाब से अलग-अलग लीकेज हो सकता है) या लैब में बिजली की खपत मापने वाले हार्डवेयर के बीच कैलिब्रेशन के अंतर से होने वाले शोर के बिना किया जा सके.

सीपीयू टाइम या सीपीयू साइकल देखने के बजाय, Wattson का इस्तेमाल करना ज़्यादा फ़ायदेमंद क्यों है?

सीपीयू टाइम और साइकल, सीपीयू फ़्रीक्वेंसी और सीपीयू टाइप (छोटे, मध्यम, बड़े) के बीच बिजली या ऊर्जा की खपत में अंतर को ध्यान में नहीं रखते.

सीपीयू की फ़्रीक्वेंसी दोगुनी होने का मतलब यह नहीं है कि सीपीयू की परफ़ॉर्मेंस या पावर भी दोगुनी हो जाएगी.

क्या हार्डवेयर के मुकाबले Wattson से सटीक नतीजे मिलते हैं?

हमने Wattson की तुलना, लैब में बिजली की खपत मापने वाले हार्डवेयर से की है. इसके लिए, अलग-अलग टीमों ने कई इस्तेमाल के उदाहरण दिए थे. Wattson में औसत गड़बड़ी 1% पॉइंट है और स्टैंडर्ड डेविएशन 1.5% पॉइंट है. यह कोरिलेशन लेवल, 10 सेकंड से लेकर 4 घंटे तक चलने वाले टेस्ट के लिए एक जैसा रहता है. इसलिए, समय के साथ गड़बड़ी बढ़ने या गड़बड़ी छिपने की कोई समस्या नहीं होती.

Pixel 6 के कर्नल कॉन्फ़िगरेशन एक्सपेरिमेंट

यहां Pixel 6 का इस्तेमाल करके, Wattson के सामान्य ब्रेकडाउन के कुछ शुरुआती एक्सपेरिमेंट दिए गए हैं:

Wattson.cfg

इस सेक्शन में, Perfetto पर Wattson को चालू करने के लिए सामान्य कॉन्फ़िगरेशन दिया गया है:

  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"
          }
      }
  }