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

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 7.4 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

विश्लेषण की कैश मेमोरी को खारिज करने से बचें

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

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

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

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

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