किसी कॉम्पोनेंट की बिजली की खपत का पता लगाने के लिए, डिवाइस के चालू होने पर और बंद होने पर, डिवाइस से खींचे गए करंट की तुलना करें. डिवाइस पर, नाममात्र वोल्टेज पर खींचे गए औसत करंट को मापने के लिए, किसी बाहरी पावर मॉनिटर का इस्तेमाल करें. जैसे, बेंच पावर सप्लाई या बैटरी की निगरानी करने वाले खास टूल (जैसे, Monsoon Solution Inc. पावर मॉनिटर और पावर टूल सॉफ़्टवेयर).
मैन्युफ़ैक्चरर, अक्सर किसी कॉम्पोनेंट के खर्च किए गए करंट की जानकारी देते हैं. अगर यह जानकारी, डिवाइस की बैटरी से ली जाने वाली करंट की सटीक जानकारी देती है, तो इसका इस्तेमाल करें. हालांकि, डिवाइस की बिजली की खपत की प्रोफ़ाइल में, मैन्युफ़ैक्चरर की दी गई वैल्यू का इस्तेमाल करने से पहले उनकी पुष्टि करें.
ऊर्जा की खपत को कंट्रोल करना
मेज़रमेंट करते समय, पक्का करें कि डिवाइस किसी बाहरी चार्ज सोर्स से कनेक्ट न हो. जैसे, Android Debug Bridge (adb) चलाते समय इस्तेमाल किए जाने वाले डेवलपमेंट होस्ट से यूएसबी कनेक्शन. जांचा जा रहा डिवाइस, होस्ट से करंट ले सकता है. इससे बैटरी की मेज़रमेंट कम हो सकती है. यूएसबी ऑन-द-गो (OTG) कनेक्शन का इस्तेमाल न करें, क्योंकि OTG डिवाइस, टेस्ट किए जा रहे डिवाइस से करंट ले सकता है.
जिस कॉम्पोनेंट को मेज़र किया जा रहा है उसे छोड़कर, सिस्टम को एक तय लेवल पर पावर का इस्तेमाल करते हुए चलाया जाना चाहिए. इससे, अन्य कॉम्पोनेंट में हुए बदलावों की वजह से गलत मेज़रमेंट से बचा जा सकता है. सिस्टम की ऐसी गतिविधियां जिनसे बैटरी की खपत के मेज़रमेंट में अनचाहे बदलाव हो सकते हैं:
- मोबाइल, वाई-फ़ाई, और ब्लूटूथ से डेटा पाने, भेजने या स्कैन करने की गतिविधि. सेल रेडियो पावर को मेज़र न करने पर, डिवाइस को हवाई जहाज़ मोड पर सेट करें और ज़रूरत के हिसाब से वाई-फ़ाई या ब्लूटूथ चालू करें.
- स्क्रीन चालू/बंद. स्क्रीन चालू होने पर दिखाए गए रंगों से, स्क्रीन की कुछ टेक्नोलॉजी पर बिजली की खपत पर असर पड़ सकता है. स्क्रीन पर न दिखने वाले कॉम्पोनेंट की वैल्यू मेज़र करते समय, स्क्रीन बंद करें.
- सिस्टम को निलंबित/फिर से चालू करना. स्क्रीन बंद होने पर, सिस्टम निलंबित हो सकता है. इससे डिवाइस के कुछ हिस्सों की पावर कम हो जाती है या वे बंद हो जाते हैं. इससे, जिस कॉम्पोनेंट की बिजली खपत का आकलन किया जा रहा है उस पर असर पड़ सकता है. साथ ही, बिजली की रीडिंग में काफ़ी अंतर हो सकता है, क्योंकि सिस्टम समय-समय पर अलार्म भेजना फिर से शुरू कर देता है. ज़्यादा जानकारी के लिए, सिस्टम के निलंबन को कंट्रोल करना लेख पढ़ें.
- सीपीयू की स्पीड में बदलाव होना और कम-पावर शेड्यूलर के आइडल स्टेटस में जाना/आना.
सामान्य कामकाज के दौरान, सिस्टम सीपीयू की स्पीड, ऑनलाइन सीपीयू कोर की संख्या, और सिस्टम के अन्य कोर स्टेटस में लगातार बदलाव करता रहता है. जैसे, सीपीयू और मेमोरी से जुड़ी पावर रेल की वोल्टेज और मेमोरी बस की स्पीड. जांच के दौरान, इन बदलावों से बैटरी लाइफ़ के मेज़रमेंट पर असर पड़ता है:
- सीपीयू की स्पीड को कम करने से, मेमोरी बसों और सिस्टम के अन्य मुख्य कॉम्पोनेंट की क्लॉक और वोल्टेज स्केलिंग कम हो सकती है.
- गतिविधि शेड्यूल करने से, सीपीयू के कम-पावर वाले आइडल स्टेटस में बिताए जाने वाले समय के प्रतिशत पर असर पड़ सकता है. जांच के दौरान इन बदलावों को रोकने के बारे में जानने के लिए, सीपीयू की स्पीड कंट्रोल करना लेख पढ़ें.
उदाहरण के लिए, Joe Droid को किसी डिवाइस के लिए screen.on
वैल्यू का हिसाब लगाना है. वह डिवाइस पर हवाई जहाज़ मोड चालू करता है, डिवाइस को मौजूदा स्थिति में चलाता है, सीपीयू की स्पीड को एक जैसा रखता है, और सिस्टम को निलंबित होने से रोकने के लिए, आंशिक वेकलॉक का इस्तेमाल करता है. इसके बाद, जो डिवाइस की स्क्रीन बंद करके, माप (200 mA) लेता है. इसके बाद, जो डिवाइस की स्क्रीन को कम से कम स्क्रीन ब्राइटनेस पर चालू करता है और फिर से मेज़रमेंट करता है. इस बार, उसे 300 एमए का डेटा मिलता है. screen.on
वैल्यू 100 mA (300 - 200) है.
ध्यान दें: जिन कॉम्पोनेंट के चालू होने पर, बिजली की खपत की फ़्लैट वेवफ़ॉर्म नहीं होती (जैसे, मोबाइल नेटवर्क या वाई-फ़ाई), उनके लिए बिजली की खपत को मॉनिटर करने वाले टूल का इस्तेमाल करके, समय के साथ औसत बिजली की खपत का आकलन करें.
डिवाइस की बैटरी के बजाय, किसी बाहरी पावर सोर्स का इस्तेमाल करने पर, सिस्टम में समस्याएं आ सकती हैं.ऐसा, बैटरी थर्मिस्टर या इंटिग्रेटेड फ़्यूल गेज पिन के कनेक्ट न होने की वजह से हो सकता है. जैसे, बैटरी के तापमान या बैटरी की बची हुई क्षमता की अमान्य रीडिंग से, कर्नेल या Android सिस्टम बंद हो सकता है. नकली बैटरी, थर्मिस्टर या फ़्यूल गेज पिन पर सिग्नल दे सकती हैं. ये सिग्नल, सामान्य सिस्टम के तापमान और चार्ज की स्थिति की रीडिंग की नकल करते हैं. साथ ही, ये बाहरी पावर सप्लाई से कनेक्ट करने के लिए आसान लीड भी दे सकती हैं. इसके अलावा, सिस्टम में बदलाव करके, बैटरी के अमान्य डेटा को अनदेखा किया जा सकता है.
कंट्रोल सिस्टम निलंबित करना
इस सेक्शन में बताया गया है कि अगर आपको सिस्टम के निलंबित होने की स्थिति से, अन्य मेज़रमेंट में रुकावट नहीं करनी है, तो उसे कैसे रोका जा सकता है. साथ ही, अगर आपको सिस्टम के निलंबित होने की स्थिति से जुड़ी पावर खपत को मेज़र करना है, तो उसे कैसे मेज़र किया जा सकता है.
सिस्टम को निलंबित होने से रोकना
सिस्टम के निलंबित होने पर, पावर मेज़रमेंट में अनचाहा बदलाव हो सकता है. साथ ही, सिस्टम के कॉम्पोनेंट को कम पावर मोड में रखा जा सकता है, जो सिस्टम के चालू होने पर पावर के इस्तेमाल को मेज़र करने के लिए सही नहीं है. स्क्रीन बंद होने पर, सिस्टम को निलंबित होने से रोकने के लिए, कुछ समय के लिए आंशिक तौर पर वेकलॉक का इस्तेमाल करें. यूएसबी केबल का इस्तेमाल करके, डिवाइस को डेवलपमेंट होस्ट से कनेक्ट करें. इसके बाद, यह कमांड दें:
adb shell "echo temporary > /sys/power/wake_lock"
wake_lock
मोड में, स्क्रीन बंद होने पर सिस्टम निलंबित नहीं होता.
(ऊर्जा खपत को मेज़र करने से पहले, डिवाइस से यूएसबी केबल को डिसकनेक्ट करना न भूलें.)
वेकलॉक हटाने के लिए:
adb shell "echo temporary > /sys/power/wake_unlock"
मेज़रमेंट सिस्टम निलंबित करना
सिस्टम के निलंबित होने की स्थिति के दौरान, खर्च होने वाली बिजली को मेज़र करने के लिए, पावर प्रोफ़ाइल में cpu.idle
की वैल्यू मेज़र करें. मेज़रमेंट शुरू करने से पहले:
- ऊपर बताए गए तरीके से, मौजूदा वेकलॉक हटाएं.
- सेल्युलर रेडियो की एक साथ होने वाली गतिविधि से बचने के लिए, डिवाइस को हवाई जहाज़ मोड में रखें. यह रेडियो, सिस्टम के निलंबित होने पर कंट्रोल किए जाने वाले SoC के हिस्सों से अलग प्रोसेसर पर चल सकता है.
- पक्का करें कि सिस्टम, निलंबित स्थिति में हो. इसके लिए:
- यह पक्का करना कि मौजूदा रीडिंग एक तय वैल्यू पर सेट हो गई हैं. रीडिंग, SoC के निलंबित होने की स्थिति में बिजली की खपत के लिए तय की गई सीमा के साथ-साथ, सिस्टम के उन कॉम्पोनेंट की बिजली की खपत के लिए तय की गई सीमा के अंदर होनी चाहिए जो चालू रहते हैं. जैसे, यूएसबी फ़िज़िकल लेयर (PHY).
- सिस्टम कंसोल के आउटपुट की जांच करना.
- सिस्टम की स्थिति के बाहरी संकेत देखना. जैसे, सस्पेंड मोड में न होने पर एलईडी बंद होना.
सीपीयू की स्पीड कंट्रोल करना
चालू सीपीयू को ऑनलाइन या ऑफ़लाइन किया जा सकता है. साथ ही, उनकी क्लॉक स्पीड और उनसे जुड़ी वोल्टेज में बदलाव किया जा सकता है. इससे, मेमोरी बस की स्पीड और सिस्टम के अन्य कोर की पावर स्टेटस पर भी असर पड़ सकता है. साथ ही, कर्नेल के आइडल लूप में कम पावर वाले आइडल स्टेटस में जाया जा सकता है. पावर प्रोफ़ाइल के लिए, सीपीयू की अलग-अलग बिजली की स्थितियों को मेज़र करते समय, अन्य पैरामीटर को मेज़र करते समय बिजली की खपत में अंतर से बचें. पावर प्रोफ़ाइल में यह माना जाता है कि सभी सीपीयू की स्पीड और पावर की विशेषताएं एक जैसी हैं.
सीपीयू की पावर का आकलन करते समय या अन्य मेज़रमेंट करने के लिए सीपीयू की पावर को एक जैसा रखते समय, ऑनलाइन किए गए सीपीयू की संख्या को एक जैसा रखें. जैसे, एक सीपीयू ऑनलाइन और बाकी सभी ऑफ़लाइन/हॉटप्लग किए गए हों. एक को छोड़कर सभी सीपीयू को शेड्यूल किए गए आइडल मोड में रखने से, बेहतर नतीजे मिल सकते हैं. adb shell stop
की मदद से Android फ़्रेमवर्क को रोकने से, सिस्टम की शेड्यूलिंग गतिविधि कम हो सकती है.
आपको पावर प्रोफ़ाइल
cpu.speeds
एंट्री में, अपने डिवाइस के लिए उपलब्ध सीपीयू स्पीड की जानकारी देनी होगी. सीपीयू की उपलब्ध स्पीड की सूची पाने के लिए, यह कमांड चलाएं:
adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
ये स्पीड, वैल्यू cpu.active
में मौजूद संबंधित पावर मेज़रमेंट से मेल खाती हैं.
जिन प्लैटफ़ॉर्म पर ऑनलाइन किए गए कोर की संख्या से, बिजली की खपत पर काफ़ी असर पड़ता है उनके लिए, आपको प्लैटफ़ॉर्म के cpufreq ड्राइवर या गवर्नर में बदलाव करना पड़ सकता है. ज़्यादातर प्लैटफ़ॉर्म पर, यूज़रस्पेस cpufreq गवर्नर का इस्तेमाल करके सीपीयू की स्पीड को कंट्रोल किया जा सकता है. साथ ही, स्पीड सेट करने के लिए sysfs इंटरफ़ेस का इस्तेमाल किया जा सकता है. उदाहरण के लिए, सिर्फ़ एक सीपीयू वाले सिस्टम या एक ही cpufreq नीति का इस्तेमाल करने वाले सभी सीपीयू पर 200 मेगाहर्ट्ज़ की स्पीड सेट करने के लिए, सिस्टम कंसोल या adb शेल का इस्तेमाल करके ये निर्देश चलाएं:
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
ध्यान दें: प्लैटफ़ॉर्म पर cpufreq लागू करने के तरीके के आधार पर, सटीक निर्देश अलग-अलग होते हैं.
ये निर्देश यह पक्का करते हैं कि नई स्पीड, तय की गई सीमा से ज़्यादा न हो. इसके बाद, नई स्पीड सेट की जाती है और पुष्टि करने के लिए, सीपीयू की असल स्पीड प्रिंट की जाती है. अगर प्रोसेस शुरू करने से पहले, कम से कम स्पीड 2,00,000 से ज़्यादा है, तो आपको पहली दो लाइनों का क्रम बदलना पड़ सकता है. इसके अलावा, ज़्यादा से ज़्यादा स्पीड सेट करने से पहले, कम से कम स्पीड को कम करने के लिए, पहली लाइन को फिर से चलाएं.
अलग-अलग स्पीड पर चल रहे सीपीयू की खपत को मेज़र करने के लिए, सिस्टम कंसोल का इस्तेमाल करके सीपीयू को सीपीयू-बाउंड लूप में डालें. इसके लिए, यह कमांड इस्तेमाल करें:
# while true; do true; done
लूप के चलने के दौरान मेज़रमेंट करें.
कुछ डिवाइसों में, सीपीयू की ज़्यादा से ज़्यादा स्पीड को सीमित किया जा सकता है. ऐसा, डिवाइस के बहुत ज़्यादा गर्म होने की वजह से होता है. जैसे, सीपीयू को लंबे समय तक ज़्यादा स्पीड पर चलाने के बाद. मेज़रमेंट करते समय, सिस्टम कंसोल के आउटपुट का इस्तेमाल करके या मेज़रमेंट के बाद, कर्नेल लॉग की जांच करके, इस तरह की सीमित जानकारी पर नज़र रखें.
cpu.awake
वैल्यू के लिए, उस समय खर्च होने वाली बिजली को मेज़र करें, जब सिस्टम, स्लीप मोड में न हो और कोई टास्क न कर रहा हो. सीपीयू, कम-पावर वाले शेड्यूलर आइडल लूप में होना चाहिए
. ऐसा हो सकता है कि वह ARM Wait For Event निर्देश को लागू कर रहा हो या SoC के हिसाब से कम-पावर वाली किसी ऐसी स्थिति में हो जिसमें आइडल मोड में इस्तेमाल के लिए, फ़ास्ट-एग्ज़िट लेटेंसी हो.
cpu.active
वैल्यू के लिए, सिस्टम के निलंबित मोड में न होने और टास्क न चलाने पर, बिजली की खपत को मेज़र करें. एक सीपीयू (आम तौर पर प्राइमरी सीपीयू) को टास्क चलाना चाहिए, जबकि अन्य सभी सीपीयू को आइडल मोड में होना चाहिए.
स्क्रीन की पावर का आकलन करना
स्क्रीन चालू होने पर बिजली की खपत का आकलन करते समय, पक्का करें कि स्क्रीन चालू होने पर आम तौर पर चालू रहने वाले अन्य डिवाइस भी चालू हों. उदाहरण के लिए, अगर स्क्रीन चालू होने पर टचस्क्रीन और डिसप्ले की बैकलाइट आम तौर पर चालू रहती है, तो यह पक्का करें कि आपने इन डिवाइसों को चालू करके ही मेज़रमेंट किया हो. इससे, आपको स्क्रीन के चालू होने पर होने वाले बिजली के खर्च का सटीक उदाहरण मिलेगा.
डिसप्ले की कुछ टेक्नोलॉजी में, दिखाए गए रंगों के हिसाब से बिजली की खपत अलग-अलग होती है. इसलिए, बिजली की खपत का आकलन करने पर, स्क्रीन पर दिखने वाले कॉन्टेंट के हिसाब से, बिजली की खपत में काफ़ी अंतर हो सकता है. मेज़र करते समय, पक्का करें कि स्क्रीन पर ऐसा कॉन्टेंट दिख रहा हो जिसमें रीयलिस्टिक स्क्रीन की ज़रूरी विशेषताएं हों. स्क्रीन को पूरी तरह से काला या पूरी तरह से सफ़ेद न रखें. पूरी तरह से काली स्क्रीन पर कुछ टेक्नोलॉजी के लिए सबसे कम बिजली खर्च होती है. आम तौर पर, कैलेंडर ऐप्लिकेशन में शेड्यूल का ऐसा व्यू चुना जाता है जिसमें सफ़ेद बैकग्राउंड और सफ़ेद से अलग रंग के एलिमेंट शामिल हों.
डिसप्ले/बैकलाइट की कम और ज़्यादा रोशनी पर, स्क्रीन की खपत को मेज़र करें. स्क्रीन की रोशनी कम से कम रखने के लिए:
- Android यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करें (इसका सुझाव नहीं दिया जाता). Settings > Display Brightness के स्लाइडर को, डिसप्ले की चमक को कम से कम पर सेट करें. हालांकि, Android यूज़र इंटरफ़ेस (यूआई) की मदद से, स्क्रीन की रोशनी को पैनल या बैकलाइट की रोशनी के कम से कम 10-20% पर सेट किया जा सकता है. साथ ही, स्क्रीन की रोशनी को इतना कम नहीं सेट किया जा सकता कि उसे देखने के लिए ज़्यादा मेहनत करनी पड़े.
- sysfs फ़ाइल का इस्तेमाल करें (इसका सुझाव दिया जाता है). अगर उपलब्ध हो, तो पैनल की रोशनी को कंट्रोल करने के लिए sysfs फ़ाइल का इस्तेमाल करें. इसे हार्डवेयर की मदद से, कम से कम रोशनी पर सेट किया जा सकता है.
इसके अलावा, अगर प्लैटफ़ॉर्म sysfs फ़ाइल, एलसीडी पैनल, बैकलाइट, और टचस्क्रीन को चालू और बंद करने की सुविधा देती है, तो स्क्रीन चालू और बंद करके मेज़रमेंट करने के लिए फ़ाइल का इस्तेमाल करें. अगर ऐसा नहीं है, तो सिस्टम के निलंबित न होने के लिए, आंशिक वेकलॉक सेट करें. इसके बाद, पावर बटन का इस्तेमाल करके स्क्रीन को चालू और बंद करें.
वाई-फ़ाई की पावर का आकलन करना
वाई-फ़ाई की स्पीड का आकलन, कम ट्रैफ़िक वाले नेटवर्क पर करें. मेज़र की जा रही गतिविधि से जुड़े ब्रॉडकास्ट ट्रैफ़िक के बजाय, ज़्यादा ब्रॉडकास्ट ट्रैफ़िक को प्रोसेस करने से बचें.
wifi.on
वैल्यू, वाई-फ़ाई के चालू होने पर खर्च होने वाली बिजली को मेज़र करती है. हालांकि, यह वैल्यू तब नहीं दिखती, जब वाई-फ़ाई से कोई डेटा ट्रांसफ़र या रिसीव नहीं किया जा रहा हो. आम तौर पर, इसे वाई-फ़ाई चालू होने और बंद होने पर, सिस्टम के निलंबित (स्लीप) होने की स्थिति में मौजूदा ड्रॉ के बीच के डेल्टा के तौर पर मेज़र किया जाता है.
wifi.scan
वैल्यू, ऐक्सेस पॉइंट के लिए वाई-फ़ाई स्कैन के दौरान खर्च की गई पावर का आकलन करती है. ऐप्लिकेशन, WifiManager क्लास के
startScan()
एपीआई का इस्तेमाल करके, वाई-फ़ाई स्कैन को ट्रिगर कर सकते हैं. इसके अलावा, सेटिंग > वाई-फ़ाई खोला जा सकता है. इससे हर कुछ सेकंड में ऐक्सेस पॉइंट की स्कैनिंग की जाती है. इस दौरान, डिवाइस की बैटरी खपत में ज़्यादा उछाल आता है. हालांकि, आपको इन मेज़रमेंट से स्क्रीन की बैटरी खपत को घटाना होगा.
ध्यान दें: नेटवर्क से मिलने वाले और भेजे जाने वाले ट्रैफ़िक को जनरेट करने के लिए, कंट्रोल किए गए सेटअप (जैसे कि iperf) का इस्तेमाल करें.