बैचिंग क्या है?
बैचिंग से तात्पर्य सेंसर एचएएल के माध्यम से घटनाओं की रिपोर्ट करने से पहले सेंसर हब और/या हार्डवेयर फीफो में सेंसर घटनाओं को बफर करने से है। वह स्थान जहां सेंसर घटनाओं को बफर किया जाता है (सेंसर हब और/या हार्डवेयर फीफो) को इस पृष्ठ पर "फीफो" के रूप में संदर्भित किया जाता है। जब सेंसर इवेंट बैचिंग सक्रिय नहीं होती है, तो सेंसर इवेंट उपलब्ध होने पर तुरंत सेंसर एचएएल को सूचित किया जाता है।
बैचिंग केवल मुख्य एप्लिकेशन प्रोसेसर (एपी) को सक्रिय करके महत्वपूर्ण बिजली बचत को सक्षम कर सकती है, जो एंड्रॉइड चलाता है, जब कई सेंसर ईवेंट संसाधित होने के लिए तैयार होते हैं, प्रत्येक व्यक्तिगत ईवेंट के लिए इसे सक्रिय करने के बजाय। संभावित बिजली बचत सीधे उन घटनाओं की संख्या से संबंधित होती है जिन्हें सेंसर हब और/या फीफो बफर कर सकता है: यदि अधिक घटनाओं को बैच किया जा सकता है तो बिजली बचत की अधिक संभावना है। उच्च-शक्ति एपी वेक-अप की संख्या को कम करने के लिए बैचिंग कम-शक्ति मेमोरी के उपयोग का लाभ उठाती है।
बैचिंग केवल तभी हो सकती है जब सेंसर के पास हार्डवेयर फीफो हो और/या सेंसर हब के भीतर घटनाओं को बफर कर सकता है। किसी भी स्थिति में, सेंसर को उन घटनाओं की अधिकतम संख्या की रिपोर्ट करनी होगी जिन्हें SensorInfo.fifoMaxEventCount
के माध्यम से एक बार में बैच किया जा सकता है।
यदि किसी सेंसर के पास FIFO के भीतर स्थान आरक्षित है, तो सेंसर को SensorInfo.fifoReservedEventCount
के माध्यम से आरक्षित घटनाओं की संख्या की रिपोर्ट करनी होगी। यदि FIFO सेंसर को समर्पित है, तो SensorInfo.fifoReservedEventCount
FIFO का आकार है। यदि FIFO को कई सेंसरों के बीच साझा किया जाता है, तो यह मान शून्य हो सकता है। एक सामान्य उपयोग का मामला एक सेंसर को संपूर्ण FIFO का उपयोग करने की अनुमति देना है यदि यह एकमात्र सक्रिय सेंसर है। यदि एकाधिक सेंसर सक्रिय हैं, तो प्रत्येक सेंसर को FIFO में कम से कम SensorInfo.fifoReservedEventCount
इवेंट के लिए स्थान की गारंटी दी जाती है। यदि सेंसर हब का उपयोग किया जाता है, तो गारंटी को सॉफ़्टवेयर के माध्यम से लागू किया जा सकता है।
सेंसर इवेंट को निम्नलिखित स्थितियों में बैच किया जाता है:
- सेंसर की वर्तमान अधिकतम रिपोर्ट विलंबता शून्य से अधिक है, जिसका अर्थ है कि सेंसर घटनाओं को एचएएल के माध्यम से रिपोर्ट किए जाने से पहले अधिकतम रिपोर्ट विलंबता तक विलंबित किया जा सकता है।
- एपी सस्पेंड मोड में है और सेंसर एक नॉन-वेक-अप सेंसर है। इस मामले में, घटनाओं को एपी को जागृत नहीं करना चाहिए और एपी के जागने तक संग्रहीत किया जाना चाहिए।
यदि कोई सेंसर बैचिंग का समर्थन नहीं करता है और एपी सो रहा है, तो केवल वेक-अप सेंसर घटनाओं को एपी को रिपोर्ट किया जाता है और गैर-वेक-अप घटनाओं को एपी को रिपोर्ट नहीं किया जाना चाहिए।
बैचिंग पैरामीटर
बैचिंग के व्यवहार को नियंत्रित करने वाले दो पैरामीटर सैंपलिंग_पीरियड_एनएस और मैक्स_रिपोर्ट_लेटेंसी_एनएस हैं। sampling_period_ns
यह निर्धारित करता है कि एक नया सेंसर इवेंट कितनी बार उत्पन्न होता है, और max_report_latency_ns
यह निर्धारित करता है कि इवेंट को सेंसर एचएएल को कितनी देर तक रिपोर्ट किया जाना चाहिए।
नमूनाकरण_अवधि_एनएस
sampling_period_ns
पैरामीटर का क्या मतलब है यह निर्दिष्ट सेंसर के रिपोर्टिंग मोड पर निर्भर करता है:
- निरंतर:
sampling_period_ns
नमूनाकरण दर है, जिसका अर्थ है वह दर जिस पर घटनाएं उत्पन्न होती हैं। - ऑन-चेंज:
sampling_period_ns
घटनाओं की सैंपलिंग दर को सीमित करता है, जिसका अर्थ है कि घटनाएं प्रत्येकsampling_period_ns
नैनोसेकंड से अधिक तेजी से उत्पन्न नहीं होती हैं। यदि कोई घटना उत्पन्न नहीं होती है और मापे गए मान लंबे समय तक नहीं बदलते हैं, तो अवधिsampling_period_ns
से अधिक लंबी हो सकती है। अधिक विवरण के लिए, ऑन-चेंज रिपोर्टिंग मोड देखें। - एक-शॉट:
sampling_period_ns
नजरअंदाज कर दिया गया है। इसका कोई असर नहीं होता. - विशेष: विशेष सेंसर के लिए
sampling_period_ns
का उपयोग कैसे किया जाता है, इसके विवरण के लिए, सेंसर प्रकार देखें।
विभिन्न मोड में sampling_period_ns
के प्रभाव के बारे में अधिक जानकारी के लिए, रिपोर्टिंग मोड देखें।
निरंतर और परिवर्तनशील सेंसर के लिए:
- यदि
sampling_period_ns
SensorInfo.minDelay
से कम है, तो HAL कार्यान्वयन को चुपचाप इसेmax(SensorInfo.minDelay, 1ms)
पर क्लैंप करना होगा। एंड्रॉइड 1000 हर्ट्ज से अधिक पर इवेंट जनरेशन का समर्थन नहीं करता है। - यदि
sampling_period_ns
SensorInfo.maxDelay
से अधिक है, तो HAL कार्यान्वयन को चुपचाप इसेSensorInfo.maxDelay
में छोटा कर देना चाहिए।
भौतिक सेंसरों के चलने की गति और उनकी घड़ियों की सटीकता पर कभी-कभी सीमाएं होती हैं। इसे ध्यान में रखते हुए, वास्तविक नमूना आवृत्ति अनुरोधित आवृत्ति से भिन्न हो सकती है जब तक कि यह नीचे दी गई तालिका में आवश्यकताओं को पूरा करती है।
यदि अनुरोधित आवृत्ति है | तब वास्तविक आवृत्ति होनी चाहिए |
---|---|
न्यूनतम आवृत्ति से नीचे (<1/अधिकतमविलंब) | न्यूनतम आवृत्ति के 90% और 110% के बीच |
न्यूनतम और अधिकतम आवृत्ति के बीच | अनुरोधित आवृत्ति के 90% से 220% के बीच |
अधिकतम आवृत्ति से ऊपर (>1/मिनट विलंब) | अधिकतम आवृत्ति के 90% और 110% के बीच, और 1100 हर्ट्ज से नीचे |
max_report_latency_ns
max_report_latency_ns
नैनोसेकंड में अधिकतम समय निर्धारित करता है, जिससे घटनाओं को विलंबित किया जा सकता है और एपी के सक्रिय रहने के दौरान एचएएल के माध्यम से रिपोर्ट किए जाने से पहले हार्डवेयर फीफो में संग्रहीत किया जा सकता है।
शून्य का मान दर्शाता है कि घटनाओं को मापते ही रिपोर्ट किया जाना चाहिए, या तो FIFO को पूरी तरह से छोड़ देना चाहिए, या सेंसर से एक घटना मौजूद होते ही FIFO को खाली कर देना चाहिए।
उदाहरण के लिए, max_report_latency_ns=0
के साथ 50 हर्ट्ज पर सक्रिय एक्सेलेरोमीटर एपी सक्रिय होने पर प्रति सेकंड 50 बार व्यवधान उत्पन्न करेगा।
जब max_report_latency_ns>0
, सेंसर घटनाओं का पता चलते ही उन्हें रिपोर्ट करने की आवश्यकता नहीं होती है। उन्हें अस्थायी रूप से FIFO में संग्रहीत किया जा सकता है और बैचों में रिपोर्ट किया जा सकता है, जब तक कि कोई भी घटना max_report_latency_ns
नैनोसेकंड से अधिक विलंबित न हो। इसका मतलब यह है कि पिछले बैच के बाद से सभी घटनाओं को रिकॉर्ड किया जाता है और एक ही बार में वापस कर दिया जाता है। यह एपी को भेजे जाने वाले व्यवधानों की मात्रा को कम कर देता है और जब सेंसर डेटा कैप्चर और बैच कर रहा होता है तो एपी को कम पावर मोड (निष्क्रिय) पर स्विच करने की अनुमति देता है।
प्रत्येक ईवेंट के साथ एक टाइमस्टैम्प जुड़ा होता है। जिस समय किसी घटना की रिपोर्ट की जाती है उसमें देरी करने से घटना के टाइमस्टैम्प पर कोई प्रभाव नहीं पड़ता है। टाइमस्टैम्प सटीक होना चाहिए और उस समय के अनुरूप होना चाहिए जिस समय घटना भौतिक रूप से घटित हुई थी, न कि उस समय के अनुरूप जब इसकी सूचना दी गई थी।
सेंसर इवेंट को FIFO में अस्थायी रूप से संग्रहीत करने की अनुमति देने से HAL में इवेंट सबमिट करने का व्यवहार संशोधित नहीं होता है; विभिन्न सेंसरों की घटनाओं को आपस में जोड़ा जा सकता है और एक ही सेंसर की सभी घटनाएं समय-क्रम में होती हैं।
जाग्रत और न जाग्रत घटनाएँ
वेक-अप सेंसर से सेंसर घटनाओं को एक या अधिक वेक-अप FIFO में संग्रहीत किया जाना चाहिए। एक सामान्य डिज़ाइन में एक एकल, बड़ा, साझा वेक-अप FIFO होता है जहाँ सभी वेक-अप सेंसरों की घटनाओं को आपस में जोड़ा जाता है। वैकल्पिक रूप से, आपके पास प्रति सेंसर एक वेक-अप FIFO हो सकता है या विशेष वेक-अप सेंसर के लिए समर्पित FIFO और बाकी वेक-अप सेंसर के लिए एक साझा FIFO हो सकता है।
इसी तरह, नॉन-वेक-अप सेंसर से सेंसर घटनाओं को एक या अधिक नॉन-वेक-अप एफआईएफओ में संग्रहित किया जाना चाहिए।
सभी मामलों में, वेक-अप सेंसर इवेंट और नॉन-वेक-अप सेंसर इवेंट को एक ही FIFO में इंटरलीव नहीं किया जा सकता है। वेक-अप घटनाओं को वेक-अप फीफो में संग्रहीत किया जाना चाहिए, और गैर-वेक-अप घटनाओं को गैर-वेक-अप फीफो में संग्रहीत किया जाना चाहिए।
वेक-अप फीफो के लिए, एकल, बड़ा, साझा फीफो डिज़ाइन सर्वोत्तम शक्ति लाभ प्रदान करता है। नॉन-वेक-अप FIFO के लिए, एकल, बड़े साझा FIFO और कई छोटे आरक्षित FIFO डिज़ाइन में समान शक्ति विशेषताएँ होती हैं। प्रत्येक FIFO को कॉन्फ़िगर करने के तरीके पर अधिक सुझावों के लिए, FIFO आवंटन प्राथमिकता देखें।
सस्पेंड मोड के बाहर व्यवहार
जब एपी सक्रिय होता है (निलंबित मोड में नहीं), तो घटनाओं को अस्थायी रूप से एफआईएफओ में संग्रहीत किया जाता है, जब तक कि वे max_report_latency
से अधिक विलंबित न हों।
जब तक एपी सस्पेंड मोड में प्रवेश नहीं करता, तब तक कोई भी इवेंट छोड़ा या खोया नहीं जाएगा। यदि आंतरिक FIFO max_report_latency
समाप्त होने से पहले पूर्ण हो जाते हैं, तो उस बिंदु पर घटनाओं की रिपोर्ट की जाती है ताकि यह सुनिश्चित किया जा सके कि कोई भी घटना नष्ट न हो।
यदि कई सेंसर समान FIFO साझा करते हैं और उनमें से एक की max_report_latency
समाप्त हो जाती है, तो FIFO की सभी घटनाओं की रिपोर्ट की जाती है, भले ही अन्य सेंसर की max_report_latency
अभी समाप्त न हुई हो। इससे घटनाओं के बैचों की रिपोर्ट किए जाने की संख्या कम हो जाती है। जब एक घटना की रिपोर्ट की जानी चाहिए, तो सभी सेंसरों से सभी घटनाओं की रिपोर्ट की जाती है।
उदाहरण के लिए, यदि निम्नलिखित सेंसर सक्रिय हैं:
- एक्सेलेरोमीटर को
max_report_latency
= 20s के साथ बैच किया गया - जाइरोस्कोप को
max_report_latency
= 5s के साथ बैच किया गया
एक्सेलेरोमीटर बैचों की रिपोर्ट उसी समय की जाती है जब जाइरोस्कोप बैचों की रिपोर्ट की जाती है (प्रत्येक 5 सेकंड), भले ही एक्सेलेरोमीटर और जाइरोस्कोप समान FIFO साझा न करें।
सस्पेंड मोड में व्यवहार
एपी को सक्रिय रखे बिना पृष्ठभूमि में सेंसर डेटा एकत्र करने के लिए बैचिंग विशेष रूप से फायदेमंद है। क्योंकि सेंसर ड्राइवर और एचएएल कार्यान्वयन को वेक-लॉक* रखने की अनुमति नहीं है, सेंसर डेटा एकत्र होने के दौरान भी एपी सस्पेंड मोड में प्रवेश कर सकता है।
एपी निलंबित होने पर सेंसर का व्यवहार इस बात पर निर्भर करता है कि सेंसर वेक-अप सेंसर है या नहीं। अधिक विवरण के लिए, वेक-अप सेंसर देखें।
जब एक नॉन-वेक-अप फीफो भर जाता है, तो इसे चारों ओर लपेटना चाहिए और एक परिपत्र बफर की तरह व्यवहार करना चाहिए, पुराने घटनाओं को पुराने की जगह नई घटनाओं के साथ अधिलेखित करना चाहिए। सस्पेंड मोड में रहते हुए max_report_latency
नॉन-वेक-अप FIFO पर कोई प्रभाव नहीं पड़ता है।
जब एक वेक-अप FIFO भर जाता है, या जब एक वेक-अप सेंसर की max_report_latency
समाप्त हो जाती है, तो हार्डवेयर को एपी को जगाना होगा और डेटा की रिपोर्ट करनी होगी।
दोनों मामलों में (वेक-अप और नॉन-वेक-अप), जैसे ही एपी सस्पेंड मोड से बाहर आता है, सभी FIFO की सामग्री के साथ एक बैच तैयार किया जाता है, भले ही कुछ सेंसर की max_report_latency
अभी समाप्त नहीं हुई हो। इससे एपी के सस्पेंड मोड पर लौटने के तुरंत बाद फिर से जागने का जोखिम कम हो जाता है और इसलिए, बिजली की खपत कम हो जाती है।
*ड्राइवरों को वेक लॉक रखने की अनुमति नहीं दिए जाने का एक उल्लेखनीय अपवाद तब है जब निरंतर रिपोर्टिंग मोड वाला वेक-अप सेंसर max_report_latency
<1 सेकंड के साथ सक्रिय होता है। इस मामले में, ड्राइवर वेक लॉक पकड़ सकता है क्योंकि एपी के पास सस्पेंड मोड में प्रवेश करने का समय नहीं है, क्योंकि यह सस्पेंड मोड पर पहुंचने से पहले एक वेक-अप इवेंट द्वारा जाग जाएगा।
वेक-अप सेंसरों को बैच करते समय सावधानियां
डिवाइस के आधार पर, एपी को सस्पेंड मोड से पूरी तरह बाहर आने और फीफो को फ्लश करना शुरू करने में कुछ मिलीसेकंड लग सकते हैं। फीफो में पर्याप्त हेड रूम आवंटित किया जाना चाहिए ताकि डिवाइस वेक-अप फीफो ओवरफ्लो किए बिना सस्पेंड मोड से बाहर आ सके। कोई भी घटना नष्ट नहीं होगी और max_report_latency
सम्मान किया जाना चाहिए।
नॉन-वेक-अप ऑन-चेंज सेंसर को बैच करते समय सावधानियां
ऑन-चेंज सेंसर केवल तभी घटनाएँ उत्पन्न करते हैं जब उनके द्वारा मापा जा रहा मूल्य बदल रहा हो। यदि एपी सस्पेंड मोड में होने पर मापा गया मान बदल जाता है, तो एप्लिकेशन एपी के जागते ही एक ईवेंट प्राप्त करने की उम्मीद करते हैं। इस वजह से, यदि सेंसर अपने FIFO को अन्य सेंसर के साथ साझा करता है , तो नॉन-वेक-अप- ऑन-चेंज सेंसर घटनाओं की बैचिंग सावधानी से की जानी चाहिए। प्रत्येक ऑन-चेंज सेंसर द्वारा उत्पन्न अंतिम घटना को हमेशा साझा फीफो के बाहर सहेजा जाना चाहिए ताकि इसे कभी भी अन्य घटनाओं द्वारा अधिलेखित न किया जा सके। जब एपी जागता है, तो फीफो से सभी घटनाओं की सूचना मिलने के बाद, अंतिम ऑन-चेंज सेंसर घटना की सूचना दी जानी चाहिए।
यहां बचने के लिए एक स्थिति दी गई है:
- एक एप्लिकेशन नॉन-वेक-अप स्टेप काउंटर (ऑन-चेंज) और नॉन-वेक-अप एक्सेलेरोमीटर (कंटीन्यूअस) पर रजिस्टर होता है, दोनों समान फीफो साझा करते हैं।
- एप्लिकेशन को एक स्टेप काउंटर इवेंट
step_count=1000 steps
कोड> प्राप्त होता है। - एपी निलंबित करने के लिए चला जाता है.
- उपयोगकर्ता 20 कदम चलता है, जिससे स्टेप काउंटर और एक्सेलेरोमीटर इवेंट इंटरलीव हो जाते हैं, अंतिम स्टेप काउंटर इवेंट
step_count = 1020 steps
होता है। - उपयोगकर्ता लंबे समय तक नहीं चलता है, जिससे एक्सेलेरोमीटर इवेंट फीफो में जमा होते रहते हैं, अंततः साझा फीफो में प्रत्येक
step_count
इवेंट को ओवरराइट कर देते हैं। - एपी जागता है और फीफो से सभी घटनाएं एप्लिकेशन पर भेज दी जाती हैं।
- एप्लिकेशन केवल एक्सेलेरोमीटर ईवेंट प्राप्त करता है और सोचता है कि उपयोगकर्ता नहीं चला।
एफआईएफओ के बाहर अंतिम चरण काउंटर इवेंट को सहेजकर, एपी के जागने पर एचएएल इस घटना की रिपोर्ट कर सकता है, भले ही अन्य सभी चरण काउंटर इवेंट एक्सेलेरोमीटर इवेंट द्वारा ओवरराइट किए गए हों। इस तरह, एपी के जागने पर एप्लिकेशन को step_count = 1020 steps
प्राप्त होते हैं।
बैचिंग लागू करें
बिजली बचाने के लिए, बैचिंग को एपी की सहायता के बिना लागू किया जाना चाहिए, और एपी को बैचिंग के दौरान निलंबित करने की अनुमति दी जानी चाहिए।
यदि सेंसर हब में बैचिंग की जाती है, तो सेंसर हब की बिजली का उपयोग कम से कम किया जाना चाहिए।
अधिकतम रिपोर्ट विलंबता को किसी भी समय संशोधित किया जा सकता है, विशेष रूप से जब निर्दिष्ट सेंसर पहले से ही सक्षम हो; और इसके परिणामस्वरूप आयोजनों की हानि नहीं होनी चाहिए।
फीफो आवंटन प्राथमिकता
उन प्लेटफार्मों पर जहां हार्डवेयर फीफो और/या सेंसर हब बफर आकार सीमित है, सिस्टम डिजाइनरों को यह चुनना पड़ सकता है कि प्रत्येक सेंसर के लिए कितना फीफो आरक्षित किया जाए। इस विकल्प में सहायता के लिए, विभिन्न सेंसरों पर बैचिंग लागू होने पर संभावित अनुप्रयोगों की एक सूची यहां दी गई है।
उच्च मूल्य: कम शक्ति वाले पैदल यात्री मृत गणना
लक्ष्य बैचिंग समय: 1 से 10 मिनट
बैच के लिए सेंसर:
- वेक-अप स्टेप डिटेक्टर
- 5 हर्ट्ज पर वेक-अप गेम रोटेशन वेक्टर
- 5 हर्ट्ज़ पर वेक-अप बैरोमीटर
- 5 हर्ट्ज़ पर वेक-अप अनकैलिब्रेटेड मैग्नेटोमीटर
इस डेटा को बैचने से एपी को निलंबित करने की अनुमति देते हुए पैदल यात्री मृतकों की गणना करने की अनुमति मिलती है।
उच्च मूल्य: मध्यम शक्ति आंतरायिक गतिविधि/संकेत पहचान
लक्ष्य बैचिंग समय: 3 सेकंड
बैच के लिए सेंसर: 50 हर्ट्ज पर नॉन-वेक-अप एक्सेलेरोमीटर
इस डेटा को बैचने से डेटा एकत्र करते समय एपी को सक्रिय रखे बिना समय-समय पर मनमानी गतिविधियों और इशारों को पहचानने की अनुमति मिलती है।
मध्यम मूल्य: मध्यम शक्ति सतत गतिविधि/संकेत पहचान
लक्ष्य बैचिंग समय: 1 से 3 मिनट
बैच के लिए सेंसर: 50 हर्ट्ज पर वेक-अप एक्सेलेरोमीटर
इस डेटा को बैचने से डेटा एकत्र करते समय एपी को सक्रिय रखे बिना मनमानी गतिविधियों और इशारों को लगातार पहचानने की अनुमति मिलती है।
मध्यम-उच्च मूल्य: लोड में कमी को बाधित करें
लक्ष्य बैचिंग समय: <1 सेकंड
बैच करने के लिए सेंसर: कोई भी उच्च-आवृत्ति सेंसर, आमतौर पर नॉन-वेक-अप।
यदि जाइरोस्कोप को 240 हर्ट्ज़ पर सेट किया गया है, तो केवल 10 जाइरो घटनाओं को बैचने से भी रुकावटों की संख्या 240/सेकंड से 24/सेकंड तक कम हो सकती है।
मध्यम मूल्य: निरंतर कम-आवृत्ति डेटा संग्रह
लक्ष्य बैचिंग समय: 1 से 10 मिनट
बैच के लिए सेंसर:
- 1 हर्ट्ज पर वेक-अप बैरोमीटर
- 1 हर्ट्ज पर वेक-अप आर्द्रता सेंसर
- अन्य कम-आवृत्ति वेक-अप सेंसर समान दरों पर
कम पावर पर मॉनिटरिंग एप्लिकेशन बनाने की अनुमति देता है।
मध्यम-निम्न मान: सतत पूर्ण-सेंसर संग्रह
लक्ष्य बैचिंग समय: 1 से 10 मिनट
बैच के लिए सेंसर: सभी वेक-अप सेंसर, उच्च आवृत्तियों पर
एपी को सस्पेंड मोड में छोड़ते समय सेंसर डेटा के पूर्ण संग्रह की अनुमति देता है। केवल तभी विचार करें जब FIFO स्पेस कोई समस्या न हो।