इस पेज पर, Wattson के साथ इस्तेमाल करने के लिए Perfetto ट्रेस इकट्ठा करने के बारे में पूरी जानकारी दी गई है. साथ ही, Perfetto यूज़र इंटरफ़ेस (यूआई) में पावर डेटा का विश्लेषण करने के बारे में भी बताया गया है.
Perfetto ट्रेस इकट्ठा करने के कई तरीके हैं. हालांकि, इस पेज पर दिए गए तरीकों में, Wattson के साथ काम करने वाला ट्रेस जनरेट करने के लिए, खास ज़रूरी शर्तें और वर्कफ़्लो शामिल हैं.
लेख पढ़ेंबिल्ड के लिए ज़रूरी शर्तें
यह पुष्टि करने के लिए कि Wattson के पास सही तरीके से काम करने के लिए ज़रूरी मेटाडेटा है, आपको हाल ही के बिल्ड पर चल रहे डिवाइस से ट्रेस इकट्ठा करने होंगे. सीपीयू और जीपीयू की परफ़ॉर्मेंस का अनुमान लगाने के लिए, ज़रूरी बिल्ड वर्शन डिवाइस के हिसाब से अलग-अलग होते हैं.
डिवाइस | बिल्ड के लिए ज़रूरी शर्तें: सीपीयू का अनुमान | बिल्ड के लिए ज़रूरी शर्तें: जीपीयू का अनुमान |
---|---|---|
Pixel Watch 2 | बिल्ड से जुड़ी कोई ज़रूरी शर्त नहीं है | उपलब्ध नहीं है |
Pixel Watch 3 | 25Q2 | उपलब्ध नहीं है |
Pixel 6 | बिल्ड से जुड़ी कोई ज़रूरी शर्त नहीं है | 25Q2 |
Pixel 9 | 25Q2 | उपलब्ध नहीं है |
कमांड लाइन से Perfetto ट्रेस इकट्ठा करना
इस सेक्शन में, Wattson के साथ इस्तेमाल करने के लिए, Perfetto ट्रेस इकट्ठा करने का एक उदाहरण वर्कफ़्लो दिया गया है. यहां दिए गए सभी निर्देश, Android Debug Bridge (adb) होस्ट से जारी किए जाने चाहिए.
डिवाइस पर 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" } } }
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
(ज़रूरी नहीं) Wattson विंडो की शुरुआत सेट करें. यह Perfetto ट्रेस में एम्बेड किया गया एक मार्कर है, जो रिकॉर्ड की शुरुआत को दिखाता है. यह मार्कर, Wattson के मेज़रमेंट को ज़्यादा सटीक बनाता है.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
अपनी पसंद का वर्कलोड चलाएं.
(वैकल्पिक)
ftrace/print
ट्रेस इवेंट चालू करके, Wattson विंडो के खत्म होने का समय सेट करें:# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
ट्रेस बफ़र को फ़्लश करें और 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 चेकबॉक्स चुनें. इससे डिवाइस की फ़्रीक्वेंसी का डेटा इकट्ठा करने की सुविधा चालू हो जाएगी:
दूसरी इमेज. डिवाइस की फ़्रीक्वेंसी चालू करें.
Wattson यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करना
Perfetto की मदद से, Wattson के पावर अनुमानों का विश्लेषण करें. इसके लिए, समय की सीमा चुनें, ताकि हर रेल के हिसाब से आंकड़े देखे जा सकें. इसके अलावा, थ्रेड, प्रोसेस या पैकेज लेवल पर बिजली की खपत का पता लगाने के लिए, खास ट्रेस कॉन्फ़िगरेशन चालू करें.
हर रेल के हिसाब से ब्रेकडाउन देखना
Perfetto में Wattson से इंटरैक्ट करने के लिए:
Perfetto में कोई ट्रेस खोलें.
अगर आपके डिवाइस पर Wattson काम करता है, तो Wattson के ट्रेस अपने-आप दिखते हैं:
तीसरी इमेज. Perfetto में Wattson ट्रेस देखें.
Wattson पर क्लिक करके, हर वर्चुअल रेल का ब्रेकडाउन बड़ा करके देखें:
सभी रेल ग्राफ़ को एक ही वैल्यू के हिसाब से अपने-आप स्केल किया जाता है, ताकि रेल के बीच का अनुपात दिखाया जा सके.
आंकड़े, उपयोगकर्ता के चुने गए (या मार्क किए गए) किसी भी इलाके के लिए जनरेट किए जाते हैं.
किसी भी कॉलम के नाम पर क्लिक करके, आंकड़ों की टेबल को क्रम से लगाया जा सकता है.
अनुमानित कुल वैल्यू, कॉलम के टाइटल के ठीक नीचे दिखती हैं.
चौथी इमेज. ट्रेन के अनुमान.
थ्रेड, प्रोसेस या पैकेज के हिसाब से ट्रेस एट्रिब्यूशन देखना
अगर आपने शेड्यूलर ट्रेस चालू किए हैं और आपको Perfetto में थ्रेड स्लाइस दिख रहे हैं, तो आपको थ्रेड-लेवल या प्रोसेस-लेवल पर पावर या एनर्जी एट्रिब्यूशन भी मिल सकता है:
- Perfetto में, थ्रेड स्लाइस का कोई क्षेत्र चुनें.
- थ्रेड, प्रोसेस या पैकेज के लिए ब्रेकडाउन देखें.
हर रेल के हिसाब से ट्रैक के आंकड़ों की तरह ही, किसी कॉलम के हिसाब से क्रम से लगाने के लिए, उस कॉलम के नाम पर क्लिक करें.
थ्रेड-लेवल के ब्रेकडाउन का विश्लेषण करना
पावर का अनुमान लगाने की बुनियादी ज़रूरी शर्तों के अलावा, आपको थ्रेड के हिसाब से पावर एट्रिब्यूशन के लिए, 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
}
}
थ्रेड-लेवल और प्रोसेस-लेवल के एट्रिब्यूशन की तरह ही, थ्रेड स्लाइस की रेंज चुनने पर, पैकेज-लेवल के ब्रेकडाउन की समीक्षा करें.
सातवीं इमेज. थ्रेड के लेवल पर जानकारी.
अक्सर पूछे जाने वाले सवाल
यहां 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"
}
}
}