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

इस पेज पर, 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 डीबग ब्रिज (एडीबी) होस्ट से जारी किया जाना चाहिए.

  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. (ज़रूरी नहीं) Wattson विंडो का अंत सेट करने के लिए, ftrace/print ट्रेस इवेंट को चालू करें:

    # 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 यूज़र इंटरफ़ेस (यूआई) में नया ट्रेस रिकॉर्ड करते समय, शेड्यूल की जानकारी और सीपीयू की फ़्रीक्वेंसी और आइडल स्टेट टॉगल चालू करें:

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

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

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

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

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

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

प्रोसेस-लेवल के एट्रिब्यूशन के लिए, process_states चालू होना ज़रूरी है Perfetto ट्रेस में इकट्ठा किए गए डेटा पर. अपनी 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 यूज़र इंटरफ़ेस (यूआई) में Wattson के अनुमान टैब पर दिखते हैं.

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

आठवीं इमेज. जीपीयू के पावर का अनुमान.

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

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

क्या Wattson से मिलने वाले अनुमान, लैब में पावर मेज़रमेंट के हार्डवेयर के आउटपुट से मेल खाते हैं?

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

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

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

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

सीपीयू की फ़्रीक्वेंसी को दोगुना करने से, सीपीयू की पावर या परफ़ॉर्मेंस हमेशा दोगुनी नहीं होती.

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

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

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