प्रॉडक्ट से जुड़ी खबरें
Android की परफ़ॉर्मेंस को बेहतर बनाना: कर्नेल के लिए AutoFDO लॉन्च करना
पढ़ने में 4 मिनट लगेंगे
हम Android LLVM टूलचेन टीम हैं. हमारी मुख्य प्राथमिकताओं में से एक, LLVM इकोसिस्टम में ऑप्टिमाइज़ेशन की तकनीकों की मदद से Android की परफ़ॉर्मेंस को बेहतर बनाना है. हम Android को ज़्यादा तेज़, बेहतर, और असरदार बनाने के लिए लगातार काम कर रहे हैं. हालांकि, ऑप्टिमाइज़ेशन से जुड़ा हमारा ज़्यादातर काम यूज़रस्पेस में होता है, लेकिन कर्नेल, सिस्टम का मुख्य हिस्सा होता है. आज हमें यह बताते हुए खुशी हो रही है कि हम Android कर्नेल के लिए, Automatic Feedback-Directed Optimization (AutoFDO) की सुविधा लॉन्च कर रहे हैं. इससे उपयोगकर्ताओं को परफ़ॉर्मेंस में काफ़ी सुधार दिखेगा.
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 Embedded Trace Extension (ETE) और ARM Trace Buffer Extension (TRBE) का इस्तेमाल किया जाता है.
- वर्कलोड: हम Android App Compatibility Test Suite (C-Suite) से सबसे लोकप्रिय 100 ऐप्लिकेशन का इस्तेमाल करके, प्रतिनिधि वर्कलोड बनाते हैं. सबसे सटीक डेटा कैप्चर करने के लिए, हम इन पर फ़ोकस करते हैं:
- ऐप्लिकेशन लॉन्च करना: उपयोगकर्ता को दिखने वाली सबसे ज़्यादा देरी के लिए ऑप्टिमाइज़ करना
- एआई-ड्रिवन ऐप्लिकेशन क्रॉल करना: लगातार, उपयोगकर्ता के इंटरैक्शन को सिम्युलेट करना
- सिस्टम-वाइड मॉनिटरिंग: सिर्फ़ फ़ोरग्राउंड ऐप्लिकेशन की गतिविधियों को ही नहीं, बल्कि अहम बैकग्राउंड वर्कलोड और इंटर-प्रोसेस कम्यूनिकेशन को भी कैप्चर करना
- पुष्टि करना: सिंथेसाइज़ किए गए इस वर्कलोड में, हमारे इंटरनल फ़्लीट से इकट्ठा किए गए एक्ज़ीक्यूशन पैटर्न से 85% समानता दिखती है.
- टारगेट किया गया डेटा: इन टेस्ट को बार-बार करके, हम हाई-फ़िडेलिटी एक्ज़ीक्यूशन पैटर्न कैप्चर करते हैं. ये पैटर्न, सबसे लोकप्रिय ऐप्लिकेशन के साथ असल इस्तेमाल के दौरान उपयोगकर्ता के इंटरैक्शन को सटीक तरीके से दिखाते हैं. इसके अलावा, इस एक्सटेंसिबल फ़्रेमवर्क की मदद से, हम अपने कवरेज को बढ़ाने के लिए, अतिरिक्त वर्कलोड और बेंचमार्क को आसानी से इंटिग्रेट कर सकते हैं.
दूसरा चरण: प्रोफ़ाइल प्रोसेसिंग
हम रॉ ट्रेस डेटा को पोस्ट-प्रोसेस करते हैं, ताकि यह साफ़, असरदार हो, और कंपाइलर के लिए तैयार हो.
- एग्रीगेशन: हम कई टेस्ट रन और डिवाइसों से मिले डेटा को, एक ही सिस्टम व्यू में कंसोलिडेट करते हैं.
- कन्वर्ज़न: हम रॉ ट्रेस को AutoFDO प्रोफ़ाइल फ़ॉर्मैट में बदलते हैं. साथ ही, ज़रूरत के हिसाब से अनचाहे सिंबल को फ़िल्टर करते हैं.
- प्रोफ़ाइल ट्रिम करना: हम प्रोफ़ाइलों को ट्रिम करके, "कोल्ड" फ़ंक्शन के लिए डेटा हटाते हैं. इससे, वे स्टैंडर्ड ऑप्टिमाइज़ेशन का इस्तेमाल कर पाते हैं. इससे, कभी-कभी इस्तेमाल किए जाने वाले कोड में रिग्रेशन नहीं होता. साथ ही, बाइनरी साइज़ में गैर-ज़रूरी बढ़ोतरी नहीं होती.
तीसरा चरण: प्रोफ़ाइल टेस्टिंग
डिप्लॉयमेंट से पहले, प्रोफ़ाइलों की पुष्टि की जाती है, ताकि यह पक्का किया जा सके कि वे स्थिरता से जुड़े जोखिम के बिना, परफ़ॉर्मेंस में लगातार सुधार करें.
- प्रोफ़ाइल और बाइनरी का विश्लेषण: हम नई प्रोफ़ाइल के कॉन्टेंट (इसमें हॉट फ़ंक्शन, सैंपल की संख्या, और प्रोफ़ाइल का साइज़ शामिल है) की तुलना, पिछले वर्शन से करते हैं. हम प्रोफ़ाइल का इस्तेमाल करके, कर्नेल की नई इमेज भी बनाते हैं. साथ ही, बाइनरी का विश्लेषण करके यह पक्का करते हैं कि टेक्स्ट सेक्शन में किए गए बदलाव, उम्मीद के मुताबिक हों.
- परफ़ॉर्मेंस की पुष्टि करना: हम कर्नेल की नई इमेज पर, टारगेट किए गए बेंचमार्क चलाते हैं. इससे पुष्टि होती है कि यह, पिछले बेसलाइन से मिले परफ़ॉर्मेंस में सुधार को बनाए रखता है.
लगातार अपडेट
समय के साथ कोड में बदलाव होते रहते हैं. इसलिए, स्टैटिक प्रोफ़ाइल की असरदारता कम हो जाती है. बेहतरीन परफ़ॉर्मेंस बनाए रखने के लिए, हम पाइपलाइन को लगातार चलाते हैं, ताकि नियमित तौर पर अपडेट किए जा सकें:
- नियमित रीफ़्रेश: हम हर जीकेआई रिलीज़ से पहले, Android कर्नेल एलटीएस ब्रांच में प्रोफ़ाइलें रीफ़्रेश करते हैं. इससे यह पक्का होता है कि हर बिल्ड में, प्रोफ़ाइल का नया डेटा शामिल हो.
- आने वाले समय में विस्तार: फ़िलहाल, हम ये अपडेट
android16-6.12औरandroid15-6.6ब्रांच के लिए उपलब्ध करा रहे हैं. साथ ही, हम आने वाले समय में जीकेआई के नए वर्शन के लिए भी सहायता उपलब्ध कराएंगे. जैसे, आने वालाandroid17-6.18.
स्थिरता पक्का करना
प्रोफ़ाइल-गाइडेड ऑप्टिमाइज़ेशन से जुड़ा एक आम सवाल यह है कि क्या इससे स्थिरता से जुड़े जोखिम पैदा होते हैं. AutoFDO, सोर्स कोड की लॉजिक में बदलाव करने के बजाय, मुख्य तौर पर कंपाइलर ह्यूरिस्टिक को प्रभावित करता है. जैसे, फ़ंक्शन इनलाइनिंग और कोड लेआउट. इसलिए, यह कर्नेल की फ़ंक्शनल इंटिग्रिटी को बनाए रखता है. इस टेक्नोलॉजी को बड़े पैमाने पर आज़माया जा चुका है. यह कई सालों से, Android प्लैटफ़ॉर्म लाइब्रेरी, ChromeOS, और Google के अपने सर्वर इन्फ़्रास्ट्रक्चर के लिए, स्टैंडर्ड ऑप्टिमाइज़ेशन के तौर पर काम कर रही है.
लगातार बेहतर परफ़ॉर्मेंस की गारंटी देने के लिए, हम "डिफ़ॉल्ट तौर पर कंज़र्वेटिव" रणनीति अपनाते हैं. हमारी हाई-फ़िडेलिटी प्रोफ़ाइलों में कैप्चर नहीं किए गए फ़ंक्शन को, कंपाइलर के स्टैंडर्ड तरीकों का इस्तेमाल करके ऑप्टिमाइज़ किया जाता है. इससे यह पक्का होता है कि कर्नेल के "कोल्ड" या कभी-कभी इस्तेमाल किए जाने वाले हिस्से, स्टैंडर्ड बिल्ड की तरह ही काम करें. साथ ही, कॉर्नर केस में परफ़ॉर्मेंस रिग्रेशन या अनचाहे व्यवहार से बचा जा सके.
आने वाले समय में
फ़िलहाल, हम android16-6.12 और android15-6.6 ब्रांच के लिए, AutoFDO डिप्लॉय कर रहे हैं. शुरुआती रोल आउट के अलावा, हमें टेक्नोलॉजी को बेहतर बनाने के लिए कई संभावनाएं दिख रही हैं:
- ज़्यादा लोगों तक पहुंच: हम आने वाले समय में, जीकेआई कर्नेल के नए वर्शन और मौजूदा
aarch64सहायता के अलावा, अन्य बिल्ड टारगेट के लिए, AutoFDO प्रोफ़ाइलें डिप्लॉय करना चाहते हैं. - जीकेआई मॉड्यूल ऑप्टिमाइज़ेशन: फ़िलहाल, हमारा ऑप्टिमाइज़ेशन, कर्नेल की मुख्य बाइनरी (
vmlinux) पर फ़ोकस है. जीकेआई मॉड्यूल के लिए, AutoFDO का इस्तेमाल करने से, कर्नेल सबसिस्टम के ज़्यादा हिस्से को परफ़ॉर्मेंस के फ़ायदे मिल सकते हैं. - वेंडर मॉड्यूल सहायता: हम ड्राइवर डेवलपमेंट किट (डीडीके) का इस्तेमाल करके बनाए गए वेंडर मॉड्यूल के लिए, AutoFDO की सहायता उपलब्ध कराने में भी दिलचस्पी रखते हैं. हमारे बिल्ड सिस्टम (Kleaf) और प्रोफ़ाइलिंग टूल (simpleperf) में पहले से ही सहायता उपलब्ध है. इससे वेंडर, अपने खास हार्डवेयर ड्राइवर के लिए, ऑप्टिमाइज़ेशन की इन तकनीकों का इस्तेमाल कर सकते हैं.
- प्रोफ़ाइल का ज़्यादा कवरेज: क्रिटिकल यूज़र जर्नी (सीयूजे) की ज़्यादा रेंज से प्रोफ़ाइलें इकट्ठा करके, उन्हें ऑप्टिमाइज़ किया जा सकता है.
Android कर्नेल के लिए, AutoFDO की सुविधा लॉन्च करके, हम यह पक्का कर रहे हैं कि ओएस की मुख्य नींव को, आपके डिवाइस के रोज़ाना के इस्तेमाल के हिसाब से ऑप्टिमाइज़ किया जाए.
पढ़ना जारी रखें
-
प्रॉडक्ट से जुड़ी खबरें
हमें यह बताते हुए खुशी हो रही है कि Android XR के लिए, Unreal Engine और Godot की आधिकारिक सहायता उपलब्ध हो गई है. हम आपकी प्रॉडक्टिविटी बढ़ाने और नई XR क्षमताओं को चालू करने के लिए, नए टूल भी लॉन्च कर रहे हैं: Android XR Engine Hub और Android XR Interaction Framework.
Luke Hopkins • पढ़ने में 4 मिनट लगेंगे
-
प्रॉडक्ट से जुड़ी खबरें
Android 17 के रिलीज़ होने के साथ ही, हम अडैप्टिव फ़र्स्ट डेवलपमेंट स्टैंडर्ड में ट्रांज़िशन कर रहे हैं. आपके उपयोगकर्ता अब सिर्फ़ एक फ़ॉर्म फ़ैक्टर पर निर्भर नहीं रहते. वे दिन भर फ़ोन, फ़ोल्डेबल, टैबलेट, लैपटॉप, ऑटोमोटिव डिसप्ले, और इमर्सिव XR एनवायरमेंट के बीच ट्रांज़िशन करते हैं.
Fahd Imtiaz • पढ़ने में 4 मिनट लगेंगे
-
प्रॉडक्ट से जुड़ी खबरें
हमें Google TV की उन सुविधाओं और डेवलपर टूल के बारे में बताते हुए खुशी हो रही है जिनसे आपके कॉन्टेंट की खोज को बढ़ाया जा सकता है. साथ ही, आपके ऐप्लिकेशन को टीवी के आने वाले समय के अनुभवों के लिए तैयार किया जा सकता है.
Paul Lammertsma • पढ़ने में 4 मिनट लगेंगे
अप-टू-डेट रहें
Android डेवलपमेंट से जुड़ी अहम जानकारी हर हफ़्ते अपने इनबॉक्स में पाएं.