इटरेशन की स्पीड ऑप्टिमाइज़ करें

किसी समस्या की शिकायत करना सोर्स देखना Nightly · 8.2 · 8.1 · 8.0 · 7.6 · 7.5

इस पेज पर, बार-बार Bazel को चलाते समय, Bazel के बिल्ड की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने का तरीका बताया गया है.

Bazel के रनटाइम की स्थिति

Bazel को शुरू करने में, कई हिस्से शामिल होते हैं.

  • bazel कमांड-लाइन इंटरफ़ेस (सीएलआई), उपयोगकर्ता के सामने मौजूद फ़्रंट-एंड टूल है. साथ ही, यह उपयोगकर्ता से निर्देश पाता है.

  • सीएलआई टूल, हर अलग आउटपुट बेस के लिए Bazel सर्वर शुरू करता है. Bazel सर्वर आम तौर पर लगातार काम करता रहता है. हालांकि, कुछ समय के लिए काम न करने पर वह बंद हो जाएगा, ताकि संसाधनों का गलत इस्तेमाल न हो.

  • Bazel सर्वर, किसी दिए गए निर्देश (build, run, cquery वगैरह) के लिए लोड करने और विश्लेषण करने के चरणों को पूरा करता है. इसमें, यह मेमोरी में बिल्ड ग्राफ़ के ज़रूरी हिस्सों को बनाता है. इस प्रोसेस के बाद, डेटा स्ट्रक्चर को विश्लेषण कैश मेमोरी के हिस्से के तौर पर, Bazel सर्वर में सेव किया जाता है.

  • Bazel सर्वर भी कार्रवाई को लागू कर सकता है. इसके अलावा, अगर इसे ऐसा करने के लिए सेट अप किया गया है, तो यह कार्रवाई को रिमोट तौर पर लागू करने के लिए भेज सकता है. कार्रवाई को लागू करने के नतीजे भी कैश मेमोरी में सेव किए जाते हैं. जैसे, कार्रवाई कैश मेमोरी (या कार्रवाई कैश मेमोरी, जो स्थानीय या रिमोट हो सकती है और इसे Bazel सर्वर के बीच शेयर किया जा सकता है).

  • Bazel को शुरू करने का नतीजा, आउटपुट ट्री में उपलब्ध कराया जाता है.

Bazel को बार-बार चलाना

डेवलपर के सामान्य वर्कफ़्लो में, कोड का कोई हिस्सा बार-बार बनाया (या चलाया) जाता है.ऐसा अक्सर बहुत ज़्यादा फ़्रीक्वेंसी पर किया जाता है. उदाहरण के लिए, किसी कंपाइलेशन से जुड़ी गड़बड़ी को ठीक करने या किसी टेस्ट के नतीजे के बारे में पता लगाने के लिए. इस स्थिति में, यह ज़रूरी है कि bazel को बार-बार इस्तेमाल करने पर, बार-बार की जाने वाली कार्रवाई (जैसे, किसी कंपाइलर को इस्तेमाल करना या कोई टेस्ट चलाना) के मुकाबले, bazel को इस्तेमाल करने पर कम से कम ओवरहेड हो.

इस बात को ध्यान में रखते हुए, हम Bazel के रनटाइम स्टेटस पर फिर से नज़र डालते हैं:

विश्लेषण कैश मेमोरी, डेटा का एक अहम हिस्सा है. कोल्ड रन (यानी Bazel सर्वर के शुरू होने के ठीक बाद या विश्लेषण कैश मेमोरी को खारिज करने के बाद किया गया रन) के लोड होने और विश्लेषण के चरणों में काफ़ी समय लग सकता है. एक बार में, सफल कोल्ड बिल्ड (उदाहरण के लिए, प्रोडक्शन रिलीज़ के लिए) के लिए, यह लागत चुकाई जा सकती है. हालांकि, एक ही टारगेट को बार-बार बनाने के लिए, यह ज़रूरी है कि इस लागत को कम किया जाए और हर बार इसे दोहराया न जाए.

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

अच्छी तरह से लागू होने वाला कैश मेमोरी, बिल्ड की परफ़ॉर्मेंस के लिए भी अहम है. एक्सीक्यूशन कैश मेमोरी को स्थानीय तौर पर डिस्क पर या रिमोट तौर पर सेव किया जा सकता है. कैश मेमोरी को Bazel सर्वर और डेवलपर के बीच शेयर किया जा सकता है.

विश्लेषण की कैश मेमोरी को न हटाना

अगर विश्लेषण कैश मेमोरी को खारिज कर दिया गया है या सर्वर को फिर से शुरू किया गया है, तो Bazel चेतावनी प्रिंट करेगा. बार-बार इस्तेमाल करने के दौरान, इनमें से किसी भी चीज़ का इस्तेमाल नहीं किया जाना चाहिए:

  • बार-बार होने वाले वर्कफ़्लो के बीच में, bazel फ़्लैग बदलने से सावधान रहें. उदाहरण के लिए, bazel build -c opt को bazel cquery के साथ इस्तेमाल करने पर, हर निर्देश दूसरे के विश्लेषण कैश मेमोरी को खारिज कर देता है. आम तौर पर, किसी खास वर्कफ़्लो के दौरान, फ़्लैग के तय किए गए सेट का इस्तेमाल करें.

  • Bazel सर्वर के बंद होने पर, विश्लेषण कैश मेमोरी भी मिट जाती है. Bazel सर्वर के लिए, कॉन्फ़िगर किया जा सकने वाला कोई ऐसा समय तय किया जा सकता है जब कोई काम न होने पर वह बंद हो जाए. अपनी ज़रूरतों के हिसाब से, इस समय को अपनी bazelrc फ़ाइल के ज़रिए कॉन्फ़िगर किया जा सकता है. स्टार्टअप फ़्लैग बदलने पर भी सर्वर रीस्टार्ट हो जाता है. इसलिए, अगर हो सके, तो उन फ़्लैग को बदलने से बचें.

  • ध्यान रखें कि Bazel के चलने के दौरान, बार-बार Ctrl-C दबाने पर, Bazel सर्वर बंद हो जाता है. ऐसा हो सकता है कि आप किसी ऐसे चल रहे बिल्ड को रोककर समय बचाना चाहें जिसकी अब ज़रूरत नहीं है. हालांकि, मौजूदा कॉल को आराम से खत्म करने का अनुरोध करने के लिए, सिर्फ़ एक बार Ctrl-C दबाएं.

  • अगर आपको एक ही फ़ाइल से फ़्लैग के कई सेट इस्तेमाल करने हैं, तो --output_base फ़्लैग का इस्तेमाल करके, कई अलग-अलग आउटपुट बेस का इस्तेमाल किया जा सकता है. हर आउटपुट बेस को अपना Bazel सर्वर मिलता है.

इस शर्त को चेतावनी के बजाय गड़बड़ी के तौर पर दिखाने के लिए, --noallow_analysis_cache_discard फ़्लैग का इस्तेमाल किया जा सकता है. इसे Bazel 6.4.0 में जोड़ा गया था