क्षमता कुछ संसाधनों (सीपीयू, जीपीयू, आदि) की कुल मात्रा है जो एक उपकरण के पास कुछ समय के लिए होती है। यह पृष्ठ वर्णन करता है कि क्षमता-संबंधी जंक समस्याओं को कैसे पहचाना जाए और उनका समाधान कैसे किया जाए।
राज्यपाल प्रतिक्रिया देने में धीमे
जंक से बचने के लिए, सीपीयू फ़्रीक्वेंसी गवर्नर को अत्यधिक कार्यभार पर तुरंत प्रतिक्रिया करने में सक्षम होना चाहिए। अधिकांश यूआई एप्लिकेशन समान मूल पैटर्न का पालन करते हैं:
- उपयोगकर्ता स्क्रीन पढ़ रहा है.
- उपयोगकर्ता स्क्रीन को छूता है: बटन टैप करता है, स्क्रॉल करता है, आदि।
- स्क्रीन स्क्रॉल करती है, गतिविधि बदलती है, या इनपुट के जवाब में किसी तरह से एनिमेट करती है।
- नई सामग्री प्रदर्शित होते ही सिस्टम बंद हो जाता है।
- उपयोगकर्ता स्क्रीन को पढ़ने के लिए वापस जाता है।
पिक्सेल और नेक्सस डिवाइस टच पर सीपीयू फ्रीक्वेंसी गवर्नर (और शेड्यूलर) व्यवहार को संशोधित करने के लिए टच बूस्ट लागू करते हैं। उच्च क्लॉक फ़्रीक्वेंसी (जो डिवाइस को छूने पर फ़्रेम को गिराने का कारण बन सकता है) की धीमी गति से बचने के लिए, टच बूस्ट आमतौर पर सीपीयू पर एक फ़्रीक्वेंसी फ़्लोर सेट करता है ताकि यह सुनिश्चित हो सके कि टच पर भरपूर सीपीयू क्षमता उपलब्ध है। एक फर्श स्पर्श के बाद कुछ समय तक रहता है (आमतौर पर लगभग दो सेकंड)।
पिक्सेल एक अतिरिक्त टच बूस्ट सिग्नल के रूप में एनर्जी अवेयर शेड्यूलिंग (ईएएस) द्वारा प्रदान किए गए शेड्यूल्यून सीग्रुप का भी उपयोग करता है: शीर्ष एप्लिकेशन को शेड्यूलट्यून के माध्यम से अतिरिक्त वजन मिलता है ताकि यह सुनिश्चित हो सके कि उन्हें जल्दी से चलाने के लिए पर्याप्त सीपीयू क्षमता मिले। Nexus 5X और 6P में छोटे और बड़े CPU क्लस्टर (क्रमशः A53 और A57) के बीच Kryo CPU वाले पिक्सेल की तुलना में बहुत बड़ा प्रदर्शन अंतर है। हमने पाया कि छोटा सीपीयू क्लस्टर हमेशा सुचारू यूआई रेंडरिंग के लिए पर्याप्त नहीं था, विशेष रूप से डिवाइस पर घबराहट के अन्य स्रोतों को देखते हुए।
तदनुसार, नेक्सस 5एक्स और 6पी पर, टच बूस्ट शेड्यूलर व्यवहार को संशोधित करता है जिससे अग्रभूमि अनुप्रयोगों के बड़े कोर में जाने की संभावना अधिक हो जाती है (यह अवधारणात्मक रूप से सीपीयू आवृत्ति पर फर्श के समान है)। अग्रभूमि अनुप्रयोगों को बड़े सीपीयू क्लस्टर में ले जाने की अधिक संभावना बनाने के लिए शेड्यूलर में बदलाव के बिना, अग्रभूमि अनुप्रयोगों में रेंडर करने के लिए अपर्याप्त सीपीयू क्षमता हो सकती है जब तक कि शेड्यूलर एक बड़े सीपीयू कोर में थ्रेड को लोड करने का निर्णय नहीं लेता। टच बूस्ट के दौरान शेड्यूलर व्यवहार को बदलने से, यूआई थ्रेड के तुरंत बड़े कोर पर चलने और जंक से बचने की संभावना अधिक होती है, जबकि इसे हमेशा बड़े कोर पर चलने के लिए मजबूर नहीं किया जाता है, जिससे बिजली की खपत पर गंभीर प्रभाव पड़ सकता है।
थर्मल थ्रॉटलिंग
थर्मल थ्रॉटलिंग तब होती है जब डिवाइस को अपने समग्र थर्मल आउटपुट को कम करना होता है, जो आमतौर पर सीपीयू, जीपीयू और डीआरएएम घड़ियों को कम करके किया जाता है। आश्चर्य की बात नहीं है, इसका परिणाम अक्सर जंक में होता है क्योंकि सिस्टम अब किसी निश्चित समयसीमा के भीतर प्रस्तुत करने के लिए पर्याप्त क्षमता प्रदान करने में सक्षम नहीं हो सकता है। थर्मल थ्रॉटलिंग से बचने का एकमात्र तरीका कम बिजली का उपयोग करना है। ऐसा करने के बहुत सारे तरीके नहीं हैं, लेकिन पिछले एसओसी के साथ हमारे अनुभवों के आधार पर, हमारे पास सिस्टम विक्रेताओं के लिए कुछ सिफारिशें हैं।
सबसे पहले, विषम सीपीयू आर्किटेक्चर के साथ एक नया एसओसी बनाते समय, सुनिश्चित करें कि सीपीयू क्लस्टर के प्रदर्शन/डब्ल्यू वक्र ओवरलैप हों। संपूर्ण प्रोसेसर के लिए समग्र प्रदर्शन/W वक्र एक सतत रेखा होनी चाहिए। पर्फ़/डब्ल्यू वक्र में असंततता शेड्यूलर और फ़्रीक्वेंसी गवर्नर को यह अनुमान लगाने के लिए मजबूर करती है कि कार्यभार को क्या चाहिए; जंक को रोकने के लिए, शेड्यूलर और फ़्रीक्वेंसी गवर्नर कार्यभार को आवश्यकता से अधिक क्षमता देने में गलती करते हैं। इसके परिणामस्वरूप बहुत अधिक बिजली खर्च होती है, जो थर्मल थ्रॉटलिंग में योगदान करती है।
दो सीपीयू क्लस्टर के साथ एक काल्पनिक एसओसी की कल्पना करें:
- क्लस्टर 1, छोटा क्लस्टर, 100-300mW के बीच खर्च कर सकता है और घड़ियों के आधार पर थ्रूपुट बेंचमार्क में 100-300 स्कोर कर सकता है।
- क्लस्टर 2, बड़ा क्लस्टर, 1000 और 1600mW के बीच खर्च कर सकता है और घड़ियों के आधार पर समान थ्रूपुट बेंचमार्क में 800 और 1200 के बीच स्कोर कर सकता है।
इस बेंचमार्क में, उच्च स्कोर तेज़ होता है। जबकि धीमी, तेज़ == अधिक बिजली खपत से अधिक वांछनीय नहीं है।
यदि शेड्यूलर का मानना है कि यूआई वर्कलोड के लिए उस थ्रूपुट बेंचमार्क पर 310 के बराबर स्कोर की आवश्यकता होगी, तो जंक से बचने के लिए इसका सबसे अच्छा विकल्प बड़े क्लस्टर को सबसे कम आवृत्ति पर चलाना है, जिससे महत्वपूर्ण बिजली बर्बाद होती है। (यह सीपीयू व्यवहार और निष्क्रिय होने की दौड़ पर निर्भर करता है; निरंतर पूर्ण/डब्ल्यू वक्र वाले एसओसी को अनुकूलित करना आसान होता है।)
दूसरा, cpusets का उपयोग करें। सुनिश्चित करें कि आपने अपने कर्नेल और अपने BoardConfig.mk
में cpusets सक्षम किया है। आपको अपने डिवाइस-विशिष्ट init.rc
में वास्तविक cpuset असाइनमेंट भी सेट करना होगा। कुछ विक्रेता इस आशा में इसे अपने बीएसपी में अक्षम छोड़ देते हैं कि वे शेड्यूलर व्यवहार को प्रभावित करने के लिए अन्य संकेतों का उपयोग कर सकते हैं; हमें लगता है कि इसका कोई मतलब नहीं है। सीपीयूसेट यह सुनिश्चित करने के लिए उपयोगी हैं कि सीपीयू के बीच लोड संतुलन इस तरह से हो कि उपयोगकर्ता वास्तव में डिवाइस पर क्या कर रहा है।
एक्टिविटीमैनेजर उन ऐप्स (शीर्ष, अग्रभूमि, पृष्ठभूमि) के सापेक्ष महत्व के आधार पर विभिन्न सीपीयूसेट्स को ऐप्स असाइन करता है, साथ ही अधिक महत्वपूर्ण एप्लिकेशन को सीपीयू कोर तक अधिक पहुंच मिलती है। इससे अग्रभूमि और शीर्ष ऐप्स के लिए सेवा की गुणवत्ता सुनिश्चित करने में मदद मिलती है।
सीपीयूसेट सजातीय सीपीयू कॉन्फ़िगरेशन पर उपयोगी होते हैं, लेकिन आपको सीपीयूसेट सक्षम किए बिना विषम सीपीयू कॉन्फ़िगरेशन वाले डिवाइस को शिप नहीं करना चाहिए। नेक्सस 6P विषम सीपीयू कॉन्फ़िगरेशन पर सीपीयूसेट का उपयोग करने के लिए एक अच्छा मॉडल है; इसे अपने डिवाइस के कॉन्फ़िगरेशन के आधार के रूप में उपयोग करें।
सीपीयूसेट यह सुनिश्चित करके बिजली लाभ भी प्रदान करते हैं कि जो पृष्ठभूमि थ्रेड प्रदर्शन-महत्वपूर्ण नहीं हैं, उन्हें कभी भी बड़े सीपीयू कोर पर संतुलित लोड नहीं मिलता है, जहां वे किसी भी उपयोगकर्ता-कथित लाभ के बिना काफी अधिक बिजली खर्च कर सकते हैं। इससे थर्मल थ्रॉटलिंग से भी बचने में मदद मिल सकती है। जबकि थर्मल थ्रॉटलिंग एक क्षमता मुद्दा है, थर्मल थ्रॉटलिंग के दौरान घबराहट में सुधार का यूआई प्रदर्शन पर अत्यधिक प्रभाव पड़ता है। क्योंकि सिस्टम 60FPS रेंडर करने की अपनी क्षमता के करीब चल रहा होगा, इसलिए फ्रेम गिरने के कारण कम घबराहट होती है।