Android की परफ़ॉर्मेंस को बेहतर बनाना: कर्नेल के लिए AutoFDO की सुविधा लॉन्च की गई है
4 मिनट में पढ़ें
हम Android LLVM टूलचेन टीम हैं. हमारी सबसे अहम प्राथमिकताओं में से एक यह है कि LLVM के इकोसिस्टम में ऑप्टिमाइज़ेशन की तकनीकों का इस्तेमाल करके, Android की परफ़ॉर्मेंस को बेहतर बनाया जाए. हम लगातार ऐसे तरीके खोज रहे हैं जिनसे Android को ज़्यादा तेज़, बेहतर, और असरदार बनाया जा सके. ऑप्टिमाइज़ेशन से जुड़ा ज़्यादातर काम, यूज़रस्पेस में होता है. हालांकि, कर्नल सिस्टम का मुख्य हिस्सा होता है. आज हम यह जानकारी शेयर करके बहुत खुश हैं कि हम Android कर्नल में ऑटोमैटिक फ़ीडबैक-डायरेक्टेड ऑप्टिमाइज़ेशन (AutoFDO) की सुविधा जोड़ रहे हैं. इससे उपयोगकर्ताओं को बेहतर परफ़ॉर्मेंस मिलेगी.
ऑटोएफ़डीओ क्या है?
स्टैंडर्ड सॉफ़्टवेयर बिल्ड के दौरान, कंपाइलर कई छोटे-छोटे फ़ैसले लेता है. जैसे, किसी फ़ंक्शन को इनलाइन करना है या नहीं और स्टैटिक कोड के सुझावों के आधार पर, शर्त की कौनसी ब्रांच को चुना जाना चाहिए. ये अनुमान लगाने के तरीके काम के होते हैं. हालांकि, ये फ़ोन के असल इस्तेमाल के दौरान कोड एक्ज़ीक्यूशन का हमेशा सटीक अनुमान नहीं लगाते.
AutoFDO, कंपाइलर को गाइड करने के लिए, एक्ज़ीक्यूशन के असल पैटर्न का इस्तेमाल करके इस समस्या को हल करता है. ये पैटर्न, निर्देश को लागू करने के सबसे सामान्य पाथ को दिखाते हैं. ये पाथ, कोड को असल इस्तेमाल के दौरान मिलते हैं. इन्हें सीपीयू की ब्रांचिंग के इतिहास को रिकॉर्ड करके कैप्चर किया जाता है. इस डेटा को फ्लीट डिवाइसों से इकट्ठा किया जा सकता है. हालांकि, कर्नल के लिए हम इसे लैब के माहौल में सिंथेसाइज़ करते हैं. इसके लिए, हम प्रतिनिधि वर्कलोड का इस्तेमाल करते हैं. जैसे, सबसे ज़्यादा लोकप्रिय 100 ऐप्लिकेशन चलाना. हम इस डेटा को कैप्चर करने के लिए, सैंपलिंग प्रोफ़ाइलर का इस्तेमाल करते हैं. इससे यह पता चलता है कि कोड के कौनसे हिस्से 'हॉट' (बार-बार इस्तेमाल किए जाने वाले) हैं और कौनसे 'कोल्ड' हैं. इन प्रोफ़ाइलों की मदद से कर्नल को फिर से बनाने पर, कंपाइलर ऑप्टिमाइज़ेशन के बारे में ज़्यादा बेहतर फ़ैसले ले सकता है. ये फ़ैसले, Android के असल वर्कलोड के हिसाब से लिए जाते हैं.
इस ऑप्टिमाइज़ेशन के असर को समझने के लिए, इन अहम तथ्यों पर ध्यान दें:
- Android पर, सीपीयू के समय का करीब 40% हिस्सा कर्नल के पास होता है.
- हम पहले से ही AutoFDO का इस्तेमाल कर रहे हैं, ताकि यूज़रस्पेस में नेटिव एक्ज़ीक्यूटेबल और लाइब्रेरी को ऑप्टिमाइज़ किया जा सके. इससे ऐप्लिकेशन को पहली बार लॉन्च करने में लगने वाले समय में करीब 4% की कमी आई है. साथ ही, बूट होने में लगने वाले समय में 1% की कमी आई है.
असल दुनिया में परफ़ॉर्मेंस से जुड़ी जीत
हमने नियंत्रित लैब एनवायरमेंट से प्रोफ़ाइलें इस्तेमाल करके, Android की मुख्य मेट्रिक में शानदार सुधार देखे हैं. इन प्रोफ़ाइलों को ऐप्लिकेशन क्रॉल करने और लॉन्च करने की प्रोसेस के दौरान इकट्ठा किया गया था. साथ ही, इन्हें Pixel डिवाइसों पर 6.1, 6.6, और 6.12 कर्नल के हिसाब से मेज़र किया गया था.
सबसे अहम सुधारों की सूची यहां दी गई है. इन कर्नल वर्शन के लिए, AutoFDO प्रोफ़ाइलों के बारे में जानकारी, android16-6.12 और android15-6.6 कर्नल के लिए, Android कर्नल रिपॉज़िटरी में देखी जा सकती है.
ये सिर्फ़ सिद्धांत के तौर पर बताए गए आंकड़े नहीं हैं. इनसे इंटरफ़ेस ज़्यादा तेज़ी से काम करता है, ऐप्लिकेशन के बीच तेज़ी से स्विच किया जा सकता है, बैटरी लाइफ़ बढ़ जाती है, और डिवाइस ज़्यादा तेज़ी से काम करता है.
यह कैसे काम करता है: पाइपलाइन
हमारी डिप्लॉयमेंट रणनीति में एक बेहतर पाइपलाइन शामिल है. इससे यह पक्का किया जाता है कि प्रोफ़ाइलें काम की बनी रहें और परफ़ॉर्मेंस स्थिर रहे.
पहला चरण: प्रोफ़ाइल कलेक्शन
हम उपयोगकर्ताओं के बाइनरी को प्रोफ़ाइल करने के लिए, अपनी इंटरनल टेस्ट फ्लीट पर भरोसा करते हैं. हालांकि, हमने सामान्य कर्नेल इमेज (जीकेआई) के लिए, कंट्रोल किए गए लैब एनवायरमेंट का इस्तेमाल किया. प्रोफ़ाइलिंग को डिवाइस रिलीज़ साइकल से अलग करने पर, डिप्लॉय किए गए कर्नल वर्शन से अलग, तुरंत अपडेट किए जा सकते हैं. सबसे अहम बात यह है कि टेस्ट से यह पुष्टि होती है कि लैब में तैयार किए गए इस डेटा से, परफ़ॉर्मेंस में उतनी ही बढ़ोतरी होती है जितनी असल दुनिया में मौजूद फ्लीट से मिलती है.
- टूल और एनवायरमेंट: हम टेस्ट डिवाइसों पर, कर्नल की नई इमेज फ़्लैश करते हैं. साथ ही, निर्देश के एक्ज़ीक्यूशन स्ट्रीम को कैप्चर करने के लिए, simpleperf का इस्तेमाल करते हैं. यह प्रोसेस, ब्रांचिंग का इतिहास रिकॉर्ड करने के लिए हार्डवेयर की क्षमताओं पर निर्भर करती है. खास तौर पर, Pixel डिवाइसों पर ARM एम्बेड किए गए ट्रेस एक्सटेंशन (ईटीई) और ARM ट्रेस बफ़र एक्सटेंशन (टीआरबीई) का इस्तेमाल करती है.
- वर्कलोड: हम Android App Compatibility Test Suite (C-Suite) में शामिल सबसे लोकप्रिय 100 ऐप्लिकेशन का इस्तेमाल करके, एक वर्कलोड बनाते हैं. सबसे सटीक डेटा कैप्चर करने के लिए, हम इन बातों पर फ़ोकस करते हैं:
- ऐप्लिकेशन लॉन्च करना: उपयोगकर्ताओं को ऐप्लिकेशन लॉन्च होने में लगने वाले समय को कम करना
- एआई की मदद से ऐप्लिकेशन को क्रॉल करना: लगातार और बेहतर होते उपयोगकर्ता इंटरैक्शन को सिम्युलेट करना
- सिस्टम-वाइड मॉनिटरिंग: इसमें न सिर्फ़ फ़ोरग्राउंड ऐप्लिकेशन की गतिविधियों को कैप्चर किया जाता है, बल्कि बैकग्राउंड में चल रहे ज़रूरी वर्कलोड और इंटर-प्रोसेस कम्यूनिकेशन को भी कैप्चर किया जाता है
- पुष्टि: इस सिंथेसाइज़ किए गए वर्कलोड में, हमारी इंटरनल फ्लीट से इकट्ठा किए गए एक्ज़ीक्यूशन पैटर्न से 85% समानता दिखती है.
- टारगेट किया गया डेटा: इन टेस्ट को बार-बार करके, हम हाई-फ़िडेलिटी एक्ज़ीक्यूशन पैटर्न कैप्चर करते हैं. ये पैटर्न, सबसे लोकप्रिय ऐप्लिकेशन के साथ उपयोगकर्ता के इंटरैक्शन को सटीक तरीके से दिखाते हैं. इसके अलावा, इस एक्सटेंसिबल फ़्रेमवर्क की मदद से, हम अपने कवरेज को बढ़ाने के लिए अतिरिक्त वर्कलोड और बेंचमार्क को आसानी से इंटिग्रेट कर सकते हैं.
दूसरा चरण: प्रोफ़ाइल प्रोसेस करना
हम रॉ ट्रेस डेटा को पोस्ट-प्रोसेस करते हैं, ताकि यह पक्का किया जा सके कि यह साफ़, असरदार, और कंपाइलर के लिए तैयार है.
- एग्रीगेशन: हम कई टेस्ट रन और डिवाइसों से मिले डेटा को एक ही सिस्टम व्यू में शामिल करते हैं.
- कन्वर्ज़न: हम रॉ ट्रेस को AutoFDO प्रोफ़ाइल फ़ॉर्मैट में बदलते हैं. साथ ही, ज़रूरत के मुताबिक अवांछित सिंबल को फ़िल्टर करते हैं.
- प्रोफ़ाइल ट्रिमिंग: हम प्रोफ़ाइलों को ट्रिम करते हैं, ताकि "कोल्ड" फ़ंक्शन के लिए डेटा हटाया जा सके. इससे उन्हें स्टैंडर्ड ऑप्टिमाइज़ेशन का इस्तेमाल करने की अनुमति मिलती है. इससे, ऐसे कोड में रिग्रेशन को रोका जा सकता है जिसका इस्तेमाल कभी-कभार ही किया जाता है. साथ ही, इससे बाइनरी के साइज़ में बेवजह की बढ़ोतरी को भी रोका जा सकता है.
तीसरा चरण: प्रोफ़ाइल की टेस्टिंग
डप्लॉयमेंट से पहले, प्रोफ़ाइलों की पुष्टि की जाती है. इससे यह पक्का किया जाता है कि वे बिना किसी जोखिम के लगातार अच्छी परफ़ॉर्मेंस दें.
- प्रोफ़ाइल और बाइनरी विश्लेषण: हम नई प्रोफ़ाइल के कॉन्टेंट (इसमें हॉट फ़ंक्शन, सैंपल की संख्या, और प्रोफ़ाइल का साइज़ शामिल है) की तुलना पिछले वर्शन से करते हैं. हम प्रोफ़ाइल का इस्तेमाल नई कर्नल इमेज बनाने के लिए भी करते हैं. इसके लिए, हम बाइनरी का विश्लेषण करते हैं, ताकि यह पक्का किया जा सके कि टेक्स्ट सेक्शन में किए गए बदलाव, उम्मीदों के मुताबिक हैं.
- परफ़ॉर्मेंस की पुष्टि करना: हम नई कर्नल इमेज पर टारगेट किए गए बेंचमार्क चलाते हैं. इससे यह पुष्टि होती है कि यह पिछली बेसलाइन से तय की गई परफ़ॉर्मेंस में सुधार को बनाए रखता है.
लगातार अपडेट
समय के साथ कोड में बदलाव होता रहता है. इसलिए, स्टैटिक प्रोफ़ाइल कुछ समय बाद काम नहीं करेगी. बेहतरीन परफ़ॉर्मेंस बनाए रखने के लिए, हम पाइपलाइन को लगातार चलाते हैं, ताकि नियमित अपडेट मिलते रहें:
- नियमित तौर पर रीफ़्रेश करना: हम हर GKI रिलीज़ से पहले, Android कर्नल की एलटीएस शाखाओं में प्रोफ़ाइलें रीफ़्रेश करते हैं. इससे यह पक्का होता है कि हर बिल्ड में, प्रोफ़ाइल का नया डेटा शामिल हो.
- आने वाले समय में विस्तार: फ़िलहाल, हम ये अपडेट
android16-6.12औरandroid15-6.6ब्रांच को उपलब्ध करा रहे हैं. साथ ही, हम GKI के नए वर्शन के लिए भी सहायता उपलब्ध कराएंगे. जैसे, आने वालाandroid17-6.18.
स्थिरता बनाए रखना
प्रोफ़ाइल-गाइडेड ऑप्टिमाइज़ेशन के बारे में अक्सर यह सवाल पूछा जाता है कि क्या इससे स्थिरता से जुड़े जोखिम पैदा होते हैं. AutoFDO, सोर्स कोड के लॉजिक में बदलाव करने के बजाय, मुख्य रूप से कंपाइलर के अनुमानों पर असर डालता है. जैसे, फ़ंक्शन इनलाइनिंग और कोड लेआउट. इसलिए, यह कर्नल के फ़ंक्शनल इंटिग्रिटी को बनाए रखता है. यह टेक्नोलॉजी पहले से ही बड़े पैमाने पर इस्तेमाल की जा रही है. यह Android प्लैटफ़ॉर्म लाइब्रेरी, ChromeOS, और Google के सर्वर इन्फ़्रास्ट्रक्चर के लिए, सालों से स्टैंडर्ड ऑप्टिमाइज़ेशन के तौर पर काम कर रही है.
हमेशा एक जैसा व्यवहार बनाए रखने के लिए, हम "डिफ़ॉल्ट रूप से ज़्यादा सावधानी बरतने" वाली रणनीति लागू करते हैं. हमारी हाई-फ़िडेलिटी प्रोफ़ाइलों में कैप्चर नहीं किए गए फ़ंक्शन को, स्टैंडर्ड कंपाइलर के तरीकों का इस्तेमाल करके ऑप्टिमाइज़ किया जाता है. इससे यह पक्का होता है कि कर्नल के "कोल्ड" या कभी-कभार इस्तेमाल किए जाने वाले हिस्से, स्टैंडर्ड बिल्ड में ठीक वैसे ही काम करें जैसे वे करते हैं. इससे परफ़ॉर्मेंस में गिरावट या कॉर्नर केस में अनचाहे व्यवहार को रोका जा सकता है.
आगे की योजना
फ़िलहाल, हम android16-6.12 और android15-6.6 ब्रांच में AutoFDO को डिप्लॉय कर रहे हैं. इस सुविधा को लॉन्च करने के बाद, हम टेक्नोलॉजी को बेहतर बनाने के लिए कई और तरीके अपना सकते हैं:
- ज़्यादा पहुंच: हम AutoFDO प्रोफ़ाइलों को GKI के नए कर्नल वर्शन और मौजूदा
aarch64के अलावा अन्य बिल्ड टारगेट पर डिप्लॉय करने के लिए उत्सुक हैं. - GKI मॉड्यूल ऑप्टिमाइज़ेशन: फ़िलहाल, हमारा ऑप्टिमाइज़ेशन मुख्य कर्नल बाइनरी (
vmlinux) पर फ़ोकस करता है. GKI मॉड्यूल के लिए AutoFDO को बढ़ाने से, कर्नल सबसिस्टम के ज़्यादातर हिस्से को परफ़ॉर्मेंस के फ़ायदे मिल सकते हैं. - वेंडर मॉड्यूल के लिए AutoFDO की सुविधा: हमें ड्राइवर डेवलपमेंट किट (डीडीके) का इस्तेमाल करके बनाए गए वेंडर मॉड्यूल के लिए, AutoFDO की सुविधा उपलब्ध कराने में भी दिलचस्पी है. हमारे बिल्ड सिस्टम (Kleaf) और प्रोफ़ाइलिंग टूल (simpleperf) में पहले से ही सहायता उपलब्ध है. इससे वेंडर, ऑप्टिमाइज़ेशन की इन तकनीकों को अपने हार्डवेयर ड्राइवर पर लागू कर सकते हैं.
- प्रोफ़ाइल का ज़्यादा कवरेज: क्रिटिकल यूज़र जर्नी (सीयूजे) की ज़्यादा रेंज से प्रोफ़ाइलें इकट्ठा की जा सकती हैं, ताकि उन्हें ऑप्टिमाइज़ किया जा सके.
Android कर्नल में AutoFDO को शामिल करके, हम यह पक्का कर रहे हैं कि ओएस का बुनियादी ढांचा, आपके डिवाइस के रोज़ाना के इस्तेमाल के हिसाब से ऑप्टिमाइज़ किया गया हो.
-
प्रॉडक्ट से जुड़ी खबरेंहम Google Play पर अपने सदस्यता प्लैटफ़ॉर्म का लगातार विस्तार कर रहे हैं, ताकि आपको अपने कारोबार को आगे बढ़ाने, नए कारोबारी मॉडल अपनाने, और अपने उपयोगकर्ताओं की ज़रूरतों को पूरा करने में मदद मिल सके.
Sheenam Mittal • 4 मिनट में पढ़ें -
प्रॉडक्ट से जुड़ी खबरेंपिछले साल, Android Studio को किसी भी एआई मॉडल के लिए उपलब्ध कराया गया था. आज हम एक और कदम आगे बढ़ाते हुए, आपकी पसंद के कोडिंग एजेंट के लिए सहायता उपलब्ध करा रहे हैं.
Matthew Warner • 3 मिनट में पढ़ा जा सकता है -
प्रॉडक्ट से जुड़ी खबरेंGooglebook, Android पर आधारित लैपटॉप की नई कैटगरी पेश करता है. HP, Dell, Lenovo, Acer, और Asus जैसे पार्टनर के बेहतरीन हार्डवेयर में, मोबाइल की सुविधा के साथ-साथ डेस्कटॉप की पावर भी मिलती है.
Fahd Imtiaz, Loryn Hairston • 4 मिनट में पढ़ें
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.