Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रणाली >> Android

एंड्रॉइड के लो पावर ब्लूटूथ मोड के अंदर: कैसे आपका CPU आपके डिवाइस को कुशल रखता है

अगर आपका फोन एक व्यक्ति होता, तो शायद वह उस अति-उपलब्धि वाले दोस्त की तरह होता जो स्थिर नहीं बैठ सकता। वह जो जोर देता है कि वे आराम कर रहे हैं जबकि गुप्त रूप से काम निपटा रहे हैं, संदेशों का जवाब दे रहे हैं, और एक ही समय में मौसम की जांच कर रहे हैं।

आपके एंड्रॉइड डिवाइस के अंदर, हर पल कुछ बहुत समान हो रहा है। एक सेकंड प्रोसेसर ब्लूटूथ पर आपकी प्लेलिस्ट स्ट्रीम कर रहा है, अगले ही पल यह नोटिफिकेशन प्रोसेस कर रहा है, आपकी लोकेशन ट्रैक कर रहा है, या बैकग्राउंड में डेटा सिंक कर रहा है। किसी तरह यह सब आपके जीन्स के माध्यम से पिघले बिना या दोपहर के भोजन से पहले चार्जर की भीख मांगे बिना प्रबंधित करता है।

इस सुपरह्यूमन स्टैमिना का रहस्य सिलिकॉन के अंदर एक छोटे से अभयारण्य में निहित है जिसे लो पावर आइलैंड के रूप में जाना जाता है, जिसे अक्सर LPI के रूप में संक्षिप्त किया जाता है। इसे अपने प्रोसेसर के लिए एक मेडिटेशन कॉर्नर के रूप में सोचें। जब करने के लिए कुछ भी जरूरी नहीं होता, तो चिप के हिस्से चुपचाप इस स्थान में आराम करने के लिए पीछे हट जाते हैं, जबकि कुछ आवश्यक घटक दुनिया पर नजर रखने के लिए जागते रहते हैं।

अपने CPU को एक व्यस्त कॉफी शॉप के रूप में कल्पना करें। मुख्य बरिस्ता हाई-परफॉर्मेंस कोर हैं, जो गेम या वीडियो एडिटर जैसे मांग वाले ऐप्स के लिए फैंसी एस्प्रेसो ड्रिंक तैयार करने के लिए इधर-उधर भागते हैं। छोटे एफिशिएंसी कोर नोटिफिकेशन या बैकग्राउंड टास्क जैसे हल्के ऑर्डर संभालते हैं। अब क्लोजिंग आवर्स के बाद कोने में गुनगुनाती एक अकेली ड्रिप कॉफी मशीन की कल्पना करें। यह बिना ज्यादा ऊर्जा का उपयोग किए आवश्यक चीजों को चालू रखती है। वह विनम्र मशीन आपका लो पावर आइलैंड है।

जब एंड्रॉइड को पता चलता है कि कोई स्क्रीन को नहीं छू रहा है, कोई भारी गणना प्रगति पर नहीं है, और कोई महत्वपूर्ण वेक लॉक सक्रिय नहीं हैं, तो यह डिवाइस को इस कोमल आधी-नींद में जाने देता है। सिस्टम पूरी तरह से बेहोश नहीं है क्योंकि किसी को अभी भी अलार्म, नेटवर्क गतिविधि, या ब्लूटूथ पैकेट के लिए सुनने की आवश्यकता है। यह एक बिल्ली की तरह है जो एक कान से आवाज के लिए सतर्क रहती है।

यह डिज़ाइन आधुनिक उपकरणों को प्रतिक्रियाशील रहते हुए बिजली बचाने की अनुमति देता है। पुराने सिस्टम में, सोने का मतलब सब कुछ बंद करना और फिर एक घटना के लिए दर्दनाक रूप से जागना होता था। यह कॉफी शॉप की बिजली को हर बार बंद करने जैसा होगा जब कोई ग्राहक नहीं थे, फिर अगला ऑर्डर आने पर मशीनों के गर्म होने का इंतजार करना। लो पावर आइलैंड केवल आवश्यक चीजों को जीवित रखकर उस बर्बादी से बचाता है।

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

इस लेख में, हम उस नायक पर से पर्दा उठाने जा रहे हैं। आप देखेंगे कि LPI कैसे काम करता है, न केवल CPU के लिए एक नींद भरे नुक्कड़ के रूप में बल्कि Android की आर्किटेक्चर में बुनी गई एक पूर्ण विकसित पावर-मैनेजमेंट रणनीति के रूप में। हम यह भी पता लगाएंगे कि ब्लूटूथ बड़े कोर को जगाए बिना आइलैंड के अंदर चुपचाप कैसे बातचीत करता रहता है, कैसे पावर HAL और कर्नेल हर झपकी और जागने के चक्र को व्यवस्थित करते हैं, और कैसे फर्मवेयर एक अथक नाइट गार्ड की भूमिका निभाता है।

आपको वास्तविक AOSP स्निपेट्स, वास्तविक कर्नेल लॉग्स, और ब्लूटूथ कोड लिखने पर व्यावहारिक सलाह मिलेगी जो द्वीप के साथ सहयोग करता है बजाय इसमें जोर से घुसने के।

अंत तक, आप समझ जाएंगे कि आपका फोन उतने समय तक क्यों चलता है, और सिलिकॉन का यह छिपा हुआ कोना शांत सटीकता के साथ सब कुछ चालू कैसे रखता है।

विषय सूची

  • Android ब्लूटूथ में लो पावर आइलैंड (LPI) क्या है?
  • मौन ऑर्केस्ट्रा: LPI पावर HAL और कर्नेल के साथ कैसे काम करता है
  • ब्लूटूथ में लो पावर आइलैंड को डीबग और सत्यापित करना
  • ब्लूटूथ को स्मार्ट तरीके से झपकी लेना सिखाना
  • निष्कर्ष: आपके फोन के अंदर शांत प्रतिभा

ब्लूटूथ एक सामाजिक तितली है। यहां तक कि जब स्क्रीन अंधेरा होती है, तो यह आपके ईयरबड्स, स्मार्टवॉच, या कार स्टीरियो से फुसफुसाता रहता है, डेटा के पैकेट का आदान-प्रदान करता है जो जीवन को सहज महसूस कराता है। समस्या यह है कि निरंतर बातचीत ऊर्जा की खपत करती है। हर कुछ सेकंड में पूरे फोन को जगाना केवल कुछ बाइट्स भेजने के लिए स्टेडियम के फ्लडलाइट्स को चालू करने जैसा होगा ताकि आप अपनी चाबियां ढूंढ सकें।

यह वह जगह है जहां लो पावर आइलैंड फिर से नायक बन जाता है। आधुनिक एंड्रॉइड फोन के अंदर, ब्लूटूथ संचार एक समर्पित ब्लूटूथ कंट्रोलर द्वारा नियंत्रित किया जाता है, जो मुख्य CPU के समान सिस्टम-ऑन-चिप के भीतर एक छोटा माइक्रोप्रोसेसर है। इस कंट्रोलर की अपनी मेमोरी और अपना पावर डोमेन है। यह बड़े CPU कोर के आराम करते समय आंशिक रूप से जागृत रह सकता है, मुख्य प्रोसेसर से लगभग बिना किसी मदद के कनेक्शन बनाए रखता है और रेडियो ट्रैफिक को संभालता है।

जब एंड्रॉइड का पावर मैनेजर तय करता है कि सिस्टम सो सकता है, तो यह ब्लूटूथ HAL और वेंडर ड्राइवर के माध्यम से संकेत भेजता है ताकि कंट्रोलर को पता चल सके कि होस्ट साइड कम-पावर स्टेट में प्रवेश कर रहा है। कंट्रोलर तब अपने दम पर हल्के कार्यों को संभालता है, जैसे कनेक्शन को जीवित रखना, स्निफ इंटरवल शेड्यूल करना, और एन्क्रिप्शन हैंडशेक को संभालना। परिणाम एक सहज अनुभव है जहां आपके ईयरबड्स पेयर और प्रतिक्रियाशील रहते हैं जबकि आपका बाकी फोन चुपचाप बिजली बचाता है।

AOSP की ब्लूटूथ सेवा के अंदर एक सरलीकृत झलक इस सहयोग को क्रिया में दिखाती है:

// From system/bt/service/btif/src/btif_core.cc void btif_pm_enter_low_power_mode() { LOG_INFO("%s: entering low power mode", __func__); // Notify controller to enter sleep mode BTA_dm_pm_btm_status_evt(BTA_DM_PM_BTM_STATUS_IDLE); // Suspend host stack threads btif_thread_suspend(); } void btif_pm_exit_low_power_mode() { LOG_INFO("%s: exiting low power mode", __func__); // Resume host stack threads btif_thread_resume(); // Notify controller that the host is active again BTA_dm_pm_btm_status_evt(BTA_DM_PM_BTM_STATUS_ACTIVE); } 

ये फ़ंक्शन Android और कंट्रोलर के बीच बहुत बड़े वार्तालाप का एक छोटा सा टुकड़ा दर्शाते हैं। होस्ट स्टैक चुपचाप रुक जाता है जबकि कंट्रोलर निगरानी रखता है। कई चिप वेंडर प्लेटफॉर्म पर, इस स्थिति को कंट्रोलर स्लीप या स्नूज़ मोड कहा जाता है। ब्लूटूथ कंट्रोलर केवल तब होस्ट को जगा सकता है जब कुछ सार्थक होता है, जैसे इनकमिंग कॉल या आपके हेडसेट से बटन दबाना।

यह एक नाइट सिक्योरिटी गार्ड की तरह काम करता है जो सभी के घर जाने के बाद एक इमारत में गश्त करता है। लाइट्स बंद रहती हैं, हवा शांत रहती है, लेकिन कोई हमेशा सतर्क रहता है। अगर कुछ होता है, तो गार्ड घंटी बजाता है, और बाकी क्रू जाग जाता है। इस तरह आपके फोन का ब्लूटूथ डिस्प्ले अंधेरा होने और CPU कोर लो पावर आइलैंड के अंदर आराम करने पर भी काम करता रहता है।

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

मौन ऑर्केस्ट्रा: लो पावर आइलैंड एंड्रॉइड पावर HAL और कर्नेल के साथ कैसे काम करता है

यदि आप अपने फोन के सोते समय एंड्रॉइड के हुड के नीचे झांक सकते हैं, तो आप कुछ ऐसा देखेंगे जो एक पूरी तरह से टाइम्ड ऑर्केस्ट्रा की तरह दिखता है। हर वाद्ययंत्र जानता है कि कब धीरे से बजाना है, कब आराम करना है, और कब बिना बीट मिस किए वापस आना है।

लो पावर आइलैंड इस शो में एक एकल कलाकार नहीं है। यह कोमल रिदम सेक्शन की तरह है, जिसे अदृश्य कंडक्टरों के एक समूह द्वारा समन्वित किया जाता है जो पावर HAL, कर्नेल, और फर्मवेयर के अंदर रहते हैं।

आइए पावर HAL, या हार्डवेयर एब्स्ट्रैक्शन लेयर से शुरू करते हैं। एंड्रॉइड में, पावर HAL सिस्टम फ्रेमवर्क और निम्न-स्तरीय कर्नेल ड्राइवर्स के बीच मध्यस्थ के रूप में कार्य करता है। जब भी एंड्रॉइड तय करता है कि यह बिजली की खपत कम कर सकता है, तो यह HAL इंटरफेस के माध्यम से इस निर्णय को संप्रेषित करता है। पावर HAL चिपसेट वेंडर के कार्यान्वयन के साथ बात करता है ताकि यह तय किया जा सके कि हार्डवेयर के कौन से हिस्से सुरक्षित रूप से सो सकते हैं। यह न केवल CPU क्लस्टर बल्कि GPU, डिस्प्ले पाइपलाइन, और ब्लूटूथ और वाई-फाई जैसे पेरिफेरल कंट्रोलर को भी नियंत्रित करता है।

सरल अर्थों में, एंड्रॉइड का पावर मैनेजर कुछ ऐसा कहता है, "अरे HAL, हम अभी निष्क्रिय हैं, क्या हम थोड़ी झपकी ले सकते हैं?" पावर HAL फिर कर्नेल और हार्डवेयर के साथ जांच करता है कि कौन सोने का जोखिम उठा सकता है। यदि ब्लूटूथ कंट्रोलर पुष्टि करता है कि यह चल रहे संचार को अकेले संभाल सकता है, तो पावर HAL कर्नेल को मेन प्रोसेसर के कुछ हिस्सों को बंद करना शुरू करने का संकेत देता है।

कर्नेल, बदले में, अपने पावर डोमेन और क्लॉक गेटिंग सिस्टम के माध्यम से इस संक्रमण का प्रबंधन करता है। चिप में प्रत्येक हार्डवेयर ब्लॉक एक विशिष्ट पावर डोमेन से संबंधित है। कर्नेल जानता है कि किन डोमेन को पूरी तरह से बंद किया जा सकता है और किन्हें आंशिक रूप से सक्रिय रहना चाहिए।

ब्लूटूथ कंट्रोलर आमतौर पर एक डोमेन से संबंधित होता है जो रिटेंशन मोड का समर्थन करता है, जिसका अर्थ है कि इसकी कुछ मेमोरी और लॉजिक केवल स्थिति को बनाए रखने के लिए पर्याप्त रूप से संचालित रहते हैं।

जब डिवाइस LPI मोड में प्रवेश करना शुरू करता है तो कर्नेल लॉग में एक विशिष्ट प्रवाह कुछ इस तरह दिखता है:

PM: suspend entry (deep) controller-bluetooth 0001:00:00.0: entering controller sleep PM: suspend devices complete PM: suspend exit controller-bluetooth 0001:10:00.0: waking host 

इस छोटे से आदान-प्रदान में, आप देख सकते हैं कि एंड्रॉइड का पावर मैनेजर पूरे स्लीप-वेक प्रोसेस को कैसे व्यवस्थित करता है। ब्लूटूथ ड्राइवर रिपोर्ट करता है कि यह कंट्रोलर स्लीप में प्रवेश कर रहा है, कर्नेल पुष्टि करता है कि सभी डिवाइस सस्पेंड हो गए हैं, और फिर जब एक इंटरप्ट होता है तो सब कुछ वापस जगा देता है।

हार्डवेयर स्तर पर, यह व्यवहार SoC निर्माता द्वारा परिभाषित वोल्टेज आइलैंड्स और क्लॉक डोमेन पर निर्भर करता है। "आइलैंड" शब्द यहां रूपक नहीं है - यह सचमुच चिप पर एक विद्युतीय रूप से अलग क्षेत्र का प्रतिनिधित्व करता है जिसे स्वतंत्र रूप से संचालित किया जा सकता है। जब कर्नेल मेन CPU को सुलाता है, तो उस आइलैंड को बिजली कम या बंद कर दी जाती है, जबकि ब्लूटूथ कंट्रोलर वाला दूसरा आइलैंड एक छोटे स्वतंत्र ऑसिलेटर का उपयोग करके काम करना जारी रखता है।

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

जब कोई ऐसी घटना होती है जिसके लिए उच्च-स्तरीय ध्यान देने की आवश्यकता होती है, जैसे उपयोगकर्ता अपने हेडसेट पर एक बटन दबाता है, तो कंट्रोलर UART या शेयर्ड मेमोरी ट्रांसपोर्ट पर एक होस्ट वेक सिग्नल उठाता है। कर्नेल इस इंटरप्ट को प्राप्त करता है, CPU क्लॉक को पुनर्स्थापित करता है, और एंड्रॉइड के पावर मैनेजर को फिर से शुरू करता है। होस्ट स्टैक पुनः सक्रिय होता है, इवेंट को प्रोसेस करता है, और एक बार फिर निष्क्रिय होने पर नियंत्रण को वापस सौंप देता है।

पावर HAL, कर्नेल, और फर्मवेयर के बीच यह नृत्य जटिल लग सकता है, लेकिन यह एंड्रॉइड के अंदर सबसे सुंदर डिजाइनों में से एक है। प्रत्येक परत अपनी भूमिका सटीक रूप से निभाती है। पावर HAL नीतियों पर बातचीत करता है, कर्नेल उन्हें लागू करता है, और फर्मवेयर उन्हें पृष्ठभूमि में चुपचाप निष्पादित करता है। साथ में, वे सुनिश्चित करते हैं कि आपका फोन घंटों के आराम के बाद भी तुरंत जागा हुआ महसूस हो।

अगली बार जब आपके ईयरबड्स आपकी जेब में सो रहे फोन के बाद बिना देरी के पुनः कनेक्ट हों, तो जान लें कि सॉफ्टवेयर और सिलिकॉन की एक पूरी श्रृंखला ने इसे संभव बनाने के लिए निर्दोष रूप से सहयोग किया। लो पावर आइलैंड केवल बिजली नहीं बचा रहा था - यह आपकी उंगलियों के नीचे एक मौन ऑर्केस्ट्रा का संचालन कर रहा था।

ब्लूटूथ में लो पावर आइलैंड को डीबग और सत्यापित करना

यदि आपने कभी सोती हुई बिल्ली को अपने कान मरोड़ते देखा है और सोचा है कि क्या यह सपना देख रही है, तो Android पर लो पावर आइलैंड को डीबग करना बहुत कुछ ऐसा ही दिखता है। डिवाइस स्थिर दिखाई दे सकता है, लेकिन लॉग के अंदर गहराई में, हर कुछ सेकंड में जीवन की छोटी लहरें दिखाई देती हैं। इंजीनियर्स इस शांत अराजकता को पसंद करते हैं क्योंकि यह उन्हें बताता है कि सिस्टम आराम और तत्परता के बीच पूरी तरह से संतुलन बना रहा है।

जब ब्लूटूथ अपने कम पावर चरण में प्रवेश करता है, तो Android सुरागों का एक ब्रेडक्रंब ट्रेल छोड़ देता है। आप उन्हें logcat और कर्नेल dmesg आउटपुट दोनों में देख सकते हैं। ये लॉग पुष्टि करने में मदद करते हैं कि ब्लूटूथ कंट्रोलर वास्तव में अपने कम पावर स्टेट में प्रवेश कर रहा है जबकि होस्ट CPU शांत के द्वीप पर पीछे हट जाता है।

इस प्रक्रिया में झांकने का एक सरल तरीका है:

adb logcat -b all | grep -i "btif_pm" 

आप ऐसा कुछ देख सकते हैं:

08-05 12:23:44.732 1712 1725 I bt_btif_pm: entering low power mode 08-05 12:23:44.733 1712 1725 I bt_btif_pm: controller idle, suspending host threads 08-05 12:23:46.008 1712 1725 I bt_btif_pm: exiting low power mode 

प्रत्येक पंक्ति कहानी का एक हिस्सा बताती है। पहला संदेश पुष्टि करता है कि एंड्रॉइड के ब्लूटूथ स्टैक ने कम पावर स्टेट में प्रवेश करने का अनुरोध किया है। दूसरा दिखाता है कि होस्ट-साइड थ्रेड्स रुक गए हैं, और अंतिम संदेश दिखाता है कि कंट्रोलर ने होस्ट को फिर से जगा दिया है।

यह देखने के लिए कि नीचे क्या हो रहा है, आप कर्नेल लॉग देख सकते हैं:

adb shell dmesg | grep -i bluetooth 

आपको ऐसी प्रविष्टियां मिल सकती हैं:

[ 1423.347102] controller-bluetooth 0001:00:00.0: entering controller sleep [ 1423.347117] PM: suspend entry (deep) [ 1425.105993] controller-bluetooth 0001:00:00.0: host wake received [ 1425.106005] PM: resume complete 

ये पंक्तियां पुष्टि करती हैं कि ब्लूटूथ ड्राइवर और पावर मैनेजमेंट सिस्टम सही ढंग से सहयोग कर रहे हैं। कंट्रोलर सो गया, कर्नेल ने CPU क्लस्टर को सस्पेंड कर दिया, और जब ब्लूटूथ कंट्रोलर से वेक सिग्नल आया तो सब कुछ वापस जाग गया।

यदि आप कभी भी होस्ट को बहुत बार जागते हुए देखते हैं, तो आमतौर पर इसका मतलब है कि कुछ घटक स्लीप सीमाओं का सम्मान नहीं कर रहा है। सामान्य दोषियों में गलत व्यवहार करने वाले वेक लॉक, लगातार स्कैनिंग का अनुरोध करने वाले शोर वाले ऐप्स, या टाइमर जो कभी समाप्त नहीं होते शामिल हैं। ऐसे मामलों में, एंड्रॉइड का पावरस्टैट्स HAL और बैटरीस्टैट्स फ्रेमवर्क यह ट्रैक करने में मदद कर सकते हैं कि कौन गहरी नींद को रोक रहा है।

आप निम्न का उपयोग करके समग्र कम-पावर आंकड़ों की जांच कर सकते हैं:

adb shell dumpsys batterystats | grep "bluetooth" 

यह बताता है कि ब्लूटूथ सबसिस्टम कम पावर मोड में सिस्टम की तुलना में कितने समय तक सक्रिय रहा। आदर्श रूप से, संख्याओं को दिखाना चाहिए कि ब्लूटूथ संक्षिप्त वेक अवधि को छोड़कर ज्यादातर निष्क्रिय रहता है।

सिस्टम ब्रिंग-अप पर काम करने वाले इंजीनियर अक्सर systrace, ftrace, या perfetto जैसे विशेष ट्रेसिंग टूल का उपयोग पावर ट्रांजिशन को विज़ुअलाइज़ करने के लिए करते हैं। एक पावर ट्रेस एक लय दिखाता है: स्लीप का प्रतिनिधित्व करने वाली एक लंबी सपाट रेखा, जब कंट्रोलर किसी सार्थक घटना के लिए होस्ट को जगाता है तो गतिविधि के तेज स्पाइक्स द्वारा बाधित। यदि वे स्पाइक्स बहुत बार होते हैं, तो आप जानते हैं कि सिस्टम लो पावर आइलैंड में कुशलतापूर्वक प्रवेश नहीं कर रहा है।

यहां एक विशिष्ट Perfetto ट्रेस स्निपेट से एक अंश है:

bluetooth_host_state: IDLE → SUSPENDED bluetooth_controller_state: ACTIVE → SLEEP kernel_cpu_cluster_0: ACTIVE → RETENTION kernel_cpu_cluster_1: ACTIVE → POWER_OFF 

यह सरल अनुक्रम एक शक्तिशाली कहानी बताता है। होस्ट स्टैक सस्पेंड हो गया, कंट्रोलर सो गया, और CPU क्लस्टर ने शालीनता से पावर डाउन किया। जब अगली घटना होती है, तो संक्रमण उलट जाते हैं, और डिवाइस लगभग तुरंत जाग जाता है।

पर्दे के पीछे, वेंडर फर्मवेयर इस जादू को सहज बनाने में महत्वपूर्ण भूमिका निभाता है। ब्लूटूथ कंट्रोलर फर्मवेयर टाइमिंग स्लॉट, स्निफ इंटरवल, और लिंक-लेयर एन्क्रिप्शन कुंजियों को बनाए रखता है, सभी कुछ मिलीवाट बिजली पर चलते हुए। यह आश्चर्यजनक रूप से कुशल है। एक सामान्य कंट्रोलर एक सक्रिय ACL कनेक्शन को एक मिलीवाट से कम बिजली खपत के साथ बनाए रख सकता है, तब भी जब मेन CPU कोर पूरी तरह से संचालित बंद हों।

इस सिस्टम को डीबग करना बर्डवॉचिंग जैसा लगता है। आपको धैर्यवान, शांत और चौकस रहना होगा। अधिकांश समय, लॉग में कुछ भी नाटकीय नहीं होता। लेकिन जब आप अंततः एक परफेक्ट स्लीप-वेक साइकिल पकड़ते हैं, तो यह प्रकृति को सद्भाव में देखने जैसा लगता है। यह ब्लूटूथ के साथ काम कर रहे एंड्रॉइड के लो पावर आइलैंड की सुंदरता है।

तो जब आपके ईयरबड्स आधे सेकंड में पुनः कनेक्ट होते हैं या आपका स्मार्टवॉच डेटा चुपचाप सिंक करता है जबकि आपका फोन टेबल पर आराम करता है, तो पर्दे के पीछे इस शांत ऑर्केस्ट्रा को याद रखें। यह ब्रूट पावर नहीं बल्कि स्मार्ट पावर मैनेजमेंट है जो अनुभव को सहज महसूस कराता है। लो पावर आइलैंड अदृश्य शिल्पकार है जो आपके एंड्रॉइड ब्लूटूथ को इसकी शांत सटीकता देता है, एक नींद भरे पैकेट के समय बैटरी बचाता है।

ब्लूटूथ को स्मार्ट तरीके से झपकी लेना सिखाना

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

लो पावर आइलैंड के लिए ऑप्टिमाइज़ करने का लक्ष्य आपके ब्लूटूथ लॉजिक को कम काम करना नहीं है। यह इसे बुद्धिमानी से काम करना है, ताकि कंट्रोलर छोटे बैकग्राउंड एक्सचेंज को संभाले जबकि मेन CPU शांति से सोता है। एंड्रॉइड का ब्लूटूथ स्टैक और वेंडर ड्राइवर पहले से ही अधिकांश भारी भार उठाते हैं, लेकिन डेवलपर ऊर्जा-सचेत कोड लिखकर बड़ा अंतर ला सकते हैं जो उन सीमाओं का सम्मान करता है।

पहला नियम सरल है: जिम्मेदारी से स्कैन करें। निरंतर स्कैनिंग ब्लूटूथ पावर प्रोफाइल में नंबर-वन खलनायक है। प्रत्येक स्कैन रेडियो, कंट्रोलर, और अक्सर होस्ट प्रोसेसर को जगाता है। यदि आपका ऐप स्पष्ट स्टॉप कंडीशन के बिना लगातार BluetoothLeScanner.startScan() कॉल करता है, तो आप प्रभावी रूप से हर कुछ सेकंड में लो पावर आइलैंड में एक फ्लैशलाइट चमका रहे हैं।

इसके बजाय, अपने स्कैन को बैच करें और फ़िल्टर का उपयोग करें। सिस्टम का ScanSettings.SCAN_MODE_LOW_POWER मोड विशेष रूप से स्कैनिंग की अनुमति देने के लिए डिज़ाइन किया गया है जो LPI ट्रांजिशन के साथ सहयोग करता है।

यहां AOSP का एक उदाहरण है जो दिखाता है कि आप पावर-फ्रेंडली तरीके से स्कैन कैसे ट्रिगर कर सकते हैं:

ScanSettings settings = new ScanSettings.Builder() .setScanMode(ScanSettings.SCAN_MODE_LOW_POWER) .setReportDelay(5000) // batch results every 5 seconds .build(); bluetoothLeScanner.startScan(filters, settings, scanCallback); 

परिणामों को बैच करके और हार्डवेयर को आंतरिक रूप से स्कैनिंग संभालने देकर, आप होस्ट वेकअप को नाटकीय रूप से कम करते हैं। ब्लूटूथ कंट्रोलर अपने दम पर विज्ञापन एकत्र कर सकता है, हर कुछ सेकंड में केवल एक बार CPU को परिणाम देने के लिए जगा सकता है।

दूसरा नियम है स्टैक को सोने दें। कई डेवलपर अनजाने में वेक लॉक पकड़कर या अनावश्यक कॉलबैक चलाकर ब्लूटूथ थ्रेड्स को ब्लॉक करते हैं। एंड्रॉइड ब्लूटूथ स्टैक आंतरिक सिंक्रनाइज़ेशन को मैसेज लूप के माध्यम से बनाए रखता है जो निष्क्रिय अवधि के दौरान सुरक्षित रूप से रुक सकते हैं।

BluetoothGattCallback.onCharacteristicChanged() जैसे कॉलबैक में लंबे समय तक चलने वाले ऑपरेशन से बचें। इसके बजाय, काम को बैकग्राउंड एक्जीक्यूटर्स पर ऑफलोड करें जो एंड्रॉइड के डोज़ और ऐप स्टैंडबाय नीतियों का सम्मान करते हैं।

एक अन्य ऑप्टिमाइज़ेशन कनेक्शन इंटरवल और लेटेंसी का बुद्धिमानी से उपयोग करने में निहित है। BLE कनेक्शन आपको कॉन्फिगर करने की अनुमति देते हैं कि डिवाइस कितनी बार पैकेट का आदान-प्रदान करते हैं। एक छोटा इंटरवल प्रतिक्रियाशीलता में सुधार करता है लेकिन ऊर्जा जलाता है। एक लंबा इंटरवल कंट्रोलर को घटनाओं के बीच आराम करने के अधिक अवसर देता है। यदि आपका उपयोग केस अनुमति देता है, तो कनेक्शन इनिशियलाइज़ करते समय उच्च कनेक्शन इंटरवल और पेरिफेरल लेटेंसी मान चुनें।

// Example: Requesting a higher connection interval in GATT bluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_LOW_POWER); 

हुड के तहत, यह ब्लूटूथ कंट्रोलर को अपने स्निफ इंटरवल को लंबा करने के लिए कहता है, जिससे लिंक के दोनों सिरों को कम पावर मोड में अधिक समय बिताने की अनुमति मिलती है। परिणाम पृष्ठभूमि अपडेट या सेंसर रीड के लिए उपयोगकर्ता अनुभव पर लगभग कोई दृश्य प्रभाव नहीं होने के साथ लंबी बैटरी लाइफ है।

सिस्टम स्तर पर, प्लेटफॉर्म व्यवहार को ट्यून करने वाले इंजीनियर पावर HAL और कर्नेल कॉन्फिगरेशन में पैरामीटर्स को भी समायोजित कर सकते हैं। /sys/power डायरेक्टरी में CPU रिटेंशन और कंट्रोलर वेक थ्रेशोल्ड के लिए ट्यूनेबल्स होते हैं। Perfetto, systrace, और btsnooz.py जैसे टूल ब्लूटूथ पावर इवेंट को विज़ुअलाइज़ कर सकते हैं, यह सत्यापित करने में मदद करते हैं कि स्लीप साइकिल अपेक्षा के अनुरूप हो रहे हैं।

उदाहरण के लिए, एक ट्रेस जो प्रति सेकंड बहुत अधिक वेकअप दिखाता है वह इस तरह दिख सकता है:

bluetooth_host_state: SUSPENDED → ACTIVE reason: controller wake (LL control packet) interval: 150 ms 

यदि आप थोड़े समय में दर्जनों ऐसे वेकअप देखते हैं, तो यह अत्यधिक आक्रामक कनेक्शन इंटरवल या पेरिफेरल से लगातार GATT नोटिफिकेशन का संकेत दे सकता है। उन पैरामीटर्स को समायोजित करने से वेक इंटरवल मिलीसेकंड के बजाय सेकंड तक नीचे आ सकता है, जिससे पावर एफिशिएंसी में भारी सुधार होता है।

तीसरा और शायद सबसे महत्वपूर्ण नियम है जाने कब देना है। जब आपका ऐप ब्लूटूथ ऑपरेशन समाप्त करता है, तो हमेशा GATT कनेक्शन बंद करें, स्कैनिंग बंद करें, और संदर्भ जारी करें। कई डेवलपर यह चरण भूल जाते हैं, जिससे पृष्ठभूमि में चुपचाप घोस्ट कनेक्शन या स्कैन चलते रहते हैं। प्रत्येक सर्दियों में खुली खिड़की छोड़ने जैसा है: हीटर को अधिक मेहनत करनी पड़ती है, और बैटरी लाइफ प्रभावित होती है।

अंत में, याद रखें कि हर ब्लूटूथ इवेंट होस्ट वेकअप का हकदार नहीं होता। आधुनिक कंट्रोलर एन्क्रिप्शन रिफ्रेश, सुपरविजन टाइमआउट, और विज्ञापन फ़िल्टरिंग को पूरी तरह से अपने दम पर संभाल सकते हैं। हार्डवेयर पर भरोसा करें। एंड्रॉइड का लो पावर आइलैंड और ब्लूटूथ स्टैक बुद्धिमानी से प्रतिनिधि करने के लिए डिज़ाइन किए गए हैं। आपका ऐप जितना कम हस्तक्षेप करता है, नृत्य उतना ही सहज हो जाता है।

लो पावर आइलैंड के लिए ऑप्टिमाइज़ करना फीचर्स को अक्षम करने के बारे में नहीं है। यह परतों के बीच सद्भाव बनाने के बारे में है। एंड्रॉइड फ्रेमवर्क, कर्नेल, और कंट्रोलर फर्मवेयर पहले से ही एक ऑर्केस्ट्रा में अनुभवी संगीतकारों की तरह संवाद करते हैं। आपका कोड उस समूह में एक और वाद्ययंत्र है। हल्के से बजाएं, मौन के लिए जगह छोड़ें, और बाकी सिस्टम को सांस लेने दें।

जब आप इसे सही करते हैं, तो आपके उपयोगकर्ता कभी कुछ नोटिस नहीं करेंगे। उनके ईयरबड्स तुरंत पुनः कनेक्ट होंगे, उनके फिटनेस ट्रैकर चुपचाप सिंक होंगे, और उनके फोन हर दिन कुछ अतिरिक्त घंटे चलेंगे। पर्दे के पीछे, वह स्लीप और वेक की शांत लय जारी रहती है, एंड्रॉइड ब्लूटूथ में लो पावर आइलैंड द्वारा लाए गए सुंदर संतुलन द्वारा संचालित।

निष्कर्ष: आपके फोन के अंदर शांत प्रतिभा

यदि आपका फोन एक संगीतकार होता, तो लो पावर आइलैंड इसका मौन मेट्रोनोम होता, समय रखता, लय धारण करता, और सुनिश्चित करता कि धुन कभी बीट न मिस करे। यह ध्यान नहीं मांगता या अपने काम का दावा नहीं करता। यह बस पृष्ठभूमि में मौजूद होता है, उन तरीकों से बिजली बचाता है जो ज्यादातर लोग कभी नहीं समझते।

इस यात्रा के दौरान, हमने देखा है कि लो पावर आइलैंड हार्डवेयर और सॉफ्टवेयर के बीच मिलन बिंदु के रूप में कैसे कार्य करता है, जहां मौन रणनीति बन जाती है। हम इस विचार से शुरू हुए कि आपका CPU, एक बेचैन दोस्त की तरह, सांस लेने के लिए एक जगह की जरूरत है। फिर हमने देखा कि कैसे ब्लूटूथ, सभी रेडियो में सबसे सामाजिक, फुसफुसाना सीखता है बजाय चिल्लाने के जब बाकी सिस्टम सोने के लिए चला जाता है। साथ में, वे एंड्रॉइड के डिजाइन में सबसे नाजुक अभी तक शक्तिशाली तंत्र में से एक बनाते हैं।

ब्लूटूथ कंट्रोलर सिलिकॉन शहर का नाइट गार्ड बन जाता है। जब बड़े CPU कोर बंद फाटकों के पीछे गहरी नींद सोते हैं, तो कंट्रोलर चुपचाप गश्त करता है, कनेक्शन को जीवित रखता है, संकेतों के लिए सुनता है, और केवल जब कुछ वास्तव में महत्वपूर्ण होता है तो घंटी बजाता है। यह सहयोग का एक छोटा लेकिन महत्वपूर्ण कार्य है जो आधुनिक एंड्रॉइड डिवाइस को उनकी सुंदरता देता है।

पर्दे के पीछे, पावर HAL नीतियों पर बातचीत करता है, कर्नेल उन्हें लागू करता है, और फर्मवेयर उन्हें सर्जिकल सटीकता के साथ निष्पादित करता है। वे एक ऑर्केस्ट्रा की तरह चलते हैं, कभी जीवंत, कभी मौन, लेकिन हमेशा सद्भाव में। और जब आपका फोन संगीत बजाने, कॉल लेने, या अपने ईयरबड्स को पुनः कनेक्ट करने के लिए तुरंत जागता है, तो वह सहजता भाग्य नहीं है। यह लो पावर आइलैंड है जो ठीक वही कर रहा है जिसके लिए इसे बनाया गया था: पावर मैनेजमेंट को अदृश्य महसूस कराना।

डेवलपर्स के लिए, इस सिस्टम को समझना केवल जिज्ञासा में एक अभ्यास नहीं है। यह एक अनुस्मारक है कि सच्चा ऑप्टिमाइज़ेशन हमेशा ब्रूट फोर्स या तेज कोड से नहीं आता। कभी-कभी यह संयम से आता है, यह जानने से कि कब जाने देना है, कब आराम करना है, और कब सिस्टम को अपना शांत जादू करने देना है। प्रत्येक छोटा निर्णय, स्कैन बैच करना, कनेक्शन इंटरवल समायोजित करना, स्लीप सीमाओं का सम्मान करना, संतुलन की एक बड़ी कहानी में योगदान देता है।

अगली बार जब आपका फोन ब्लूटूथ स्ट्रीमिंग, नेविगेशन, और नोटिफिकेशन के पूरे दिन को बिना हिचकिचाहट के पार कर जाए, तो उस ग्लास स्क्रीन के नीचे क्या हो रहा है उसकी सराहना करने के लिए एक क्षण लें। अंदर, ट्रांजिस्टर का एक शहर सो रहा है फिर भी जाग रहा है, शांत फिर भी सतर्क, पूर्ण सिंक्रनाइज़ेशन में एक साथ काम कर रहा है। लो पावर आइलैंड केवल एक इंजीनियरिंग ट्रिक नहीं है। यह एक दर्शन है: कि मशीनों की दुनिया में भी, शांति और धैर्य निरंतर गति से अधिक शक्तिशाली हो सकते हैं।

और अगर आप इसके बारे में सोचते हैं, तो यह एक सबक है जिसे फोन और इंसान दोनों के लिए रखने लायक है।

मुफ्त में कोड करना सीखें। freeCodeCamp का ओपन सोर्स पाठ्यक्रम 40,000 से अधिक लोगों को डेवलपर्स के रूप में नौकरी पाने में मदद कर चुका है। शुरू करें

  1. विंडोज 11/10 पर माइक्रोसॉफ्ट एज प्रिंटिंग समस्याएँ ठीक करें विंडोज 11/10 पर माइक्रोसॉफ्ट एज प्रिंटिंग समस्याएँ ठीक करें

    एक प्रिंट समस्या विभिन्न कारणों से हो सकती है। यह एज ब्राउज़र में प्रिंट करने का प्रयास करते समय त्रुटि संदेश के रूप में दिखाई दे सकती है (Ctrl+P) या प्रिंटर के प्रतिक्रिया न देने के रूप में। इस पोस्ट में, हम माइक्रोसॉफ्ट द्वारा निर्धारित कुछ सुझाव प्रदान करेंगे ताकि आप एज ब्राउज़र में प्रिंटिंग समस

  1. विंडोज 11 लॉन्च: नवीनतम अपडेट में प्रमुख विशेषताएं और सुधार विंडोज 11 लॉन्च: नवीनतम अपडेट में प्रमुख विशेषताएं और सुधार

    बहुत सारे परीक्षण और प्रीव्यू बिल्ड के बाद आखिरकार आज 05 अक्टूबर 2021 को माइक्रोसॉफ्ट ने घोषणा की कि विंडोज 11 अब योग्य विंडोज 10 पीसी पर मुफ्त अपग्रेड के माध्यम से और दुनिया भर में विंडोज 11 के साथ प्री-इंस्टॉल नए पीसी पर उपलब्ध है। नवीनतम विंडोज 11 संस्करण 21H2 में एक नया आधुनिक यूजर इंटरफेस (UI),

  1. Windows Registry Keys, Values और Settings कैसे खोजें Windows Registry Keys, Values और Settings कैसे खोजें

    कई बार, Windows उपयोगकर्ताओं को Windows Registry संपादित करने की आवश्यकता होती है, या तो किसी समस्या को ठीक करने के लिए या अपने सिस्टम को ट्वीक करने के लिए। यदि आप रजिस्ट्री कुंजी का पूरा पथ जानते हैं, तो चीजें आसान हो जाती हैं, क्योंकि आप ट्री का विस्तार करके आसानी से उस पर नेविगेट कर सकते हैं। लेक