Bazel का इस्तेमाल करने वाले हर व्यक्ति को शायद ऐसी बिल्ड का सामना करना पड़ा हो जो धीमी थीं या उम्मीद से ज़्यादा धीमी थीं. अलग-अलग बिल्ड की परफ़ॉर्मेंस को बेहतर बनाने से, उन टारगेट के लिए खास फ़ायदा मिलता है जिन पर इसका काफ़ी असर पड़ता है. जैसे:
कोर डेवलपर के ऐसे टारगेट जिन पर बार-बार काम किया जाता है और जिन्हें (फिर से) बनाया जाता है.
सामान्य लाइब्रेरी, जिन पर अन्य टारगेट काफ़ी हद तक निर्भर होते हैं.
टारगेट के किसी ग्रुप (जैसे, कस्टम नियम) से कोई प्रतिनिधि टारगेट, एक बिल्ड में समस्याओं का पता लगाने और उन्हें ठीक करने से, बड़े पैमाने पर समस्याओं को हल करने में मदद मिल सकती है.
बिल्ड की परफ़ॉर्मेंस को बेहतर बनाने के लिए, यह समझना ज़रूरी है कि संसाधनों का इस्तेमाल कहां किया जा रहा है. इस पेज पर, इकट्ठा की जा सकने वाली अलग-अलग मेट्रिक की सूची दी गई है. बिल्ड की परफ़ॉर्मेंस को बेहतर बनाना लेख में बताया गया है कि इन मेट्रिक का इस्तेमाल करके, बिल्ड की परफ़ॉर्मेंस से जुड़ी समस्याओं का पता कैसे लगाया जा सकता है और उन्हें कैसे ठीक किया जा सकता है.
Bazel बिल्ड से मेट्रिक निकालने के कुछ मुख्य तरीके यहां दिए गए हैं:
बिल्डिंग इवेंट प्रोटोकॉल (बीईपी)
Bazel, Build Event Protocol (BEP) के ज़रिए कई तरह के प्रोटोकॉल बफ़र build_event_stream.proto
आउटपुट करता है. इन्हें आपके बताए गए बैकएंड से एग्रीगेट किया जा सकता है. इस्तेमाल के उदाहरणों के आधार पर, मेट्रिक को अलग-अलग तरीकों से एग्रीगेट किया जा सकता है. हालांकि, यहां हम कुछ ऐसे कॉन्सेप्ट और प्रोटो फ़ील्ड के बारे में बताएंगे जो आम तौर पर आपके लिए मददगार होंगे.
Bazel की क्वेरी / cquery / aquery कमांड
Bazel, क्वेरी के तीन अलग-अलग मोड (query, cquery, और aquery) उपलब्ध कराता है. इनकी मदद से उपयोगकर्ता, टारगेट ग्राफ़, कॉन्फ़िगर किए गए टारगेट ग्राफ़, और ऐक्शन ग्राफ़ के बारे में क्वेरी कर सकते हैं. क्वेरी लैंग्वेज में फ़ंक्शन का एक सुइट होता है. इसका इस्तेमाल अलग-अलग क्वेरी मोड में किया जा सकता है. इससे, अपनी ज़रूरतों के हिसाब से क्वेरी को पसंद के मुताबिक बनाया जा सकता है.
JSON ट्रेस प्रोफ़ाइलें
Bazel के हर बिल्ड-जैसे इनवोकेशन के लिए, Bazel JSON फ़ॉर्मैट में एक ट्रेस प्रोफ़ाइल लिखता है. JSON ट्रेस प्रोफ़ाइल की मदद से, यह तुरंत समझा जा सकता है कि Bazel ने इनवॉकेशन के दौरान किस काम में समय लगाया.
एक्ज़ीक्यूशन लॉग
एक्ज़ीक्यूशन लॉग की मदद से, मशीन और एनवायरमेंट में अंतर या नॉन-डिटरमिनिस्टिक कार्रवाइयों की वजह से, रिमोट कैश हिट न होने की समस्या को हल किया जा सकता है. अगर आपने --experimental_execution_log_spawn_metrics
फ़्लैग (Bazel 5.2 से उपलब्ध) पास किया है, तो इसमें स्पॉन की ज़्यादा जानकारी वाली मेट्रिक भी शामिल होंगी. ये मेट्रिक, स्थानीय और रिमोट, दोनों तरह से लागू की गई कार्रवाइयों के लिए होंगी. इन मेट्रिक का इस्तेमाल, उदाहरण के लिए इन कामों के लिए किया जा सकता है: लोकल और रिमोट मशीन की परफ़ॉर्मेंस की तुलना करना या यह पता लगाना कि स्पॉन एक्ज़ीक्यूशन का कौन-सा हिस्सा, उम्मीद से ज़्यादा समय ले रहा है. उदाहरण के लिए, ऐसा कतार में लगने की वजह से हो सकता है.
एक्ज़ीक्यूशन ग्राफ़ लॉग
JSON ट्रेस प्रोफ़ाइल में, अहम पाथ की जानकारी होती है. हालांकि, कभी-कभी आपको लागू की गई कार्रवाइयों के डिपेंडेंसी ग्राफ़ के बारे में ज़्यादा जानकारी चाहिए होती है.
Bazel 6.0 से, --experimental_execution_graph_log
और --experimental_execution_graph_log_dep_type=all
फ़्लैग पास किए जा सकते हैं. इससे, एक्ज़ीक्यूट की गई कार्रवाइयों और उनकी इंटर-डिपेंडेंसी के बारे में लॉग लिखा जा सकता है.
इस जानकारी का इस्तेमाल यह समझने के लिए किया जा सकता है कि किसी नोड की वजह से, क्रिटिकल पाथ में कितना समय लगता है. ड्रैग, वह समय होता है जो किसी नोड को एक्ज़ीक्यूशन ग्राफ़ से हटाने पर बच सकता है.
इस डेटा से, आपको बिल्ड और ऐक्शन ग्राफ़ में बदलाव करने से पहले ही, उनके असर का अनुमान लगाने में मदद मिलती है.
bazel-bench का इस्तेमाल करके बैंचमार्किंग करना
Bazel bench, Git प्रोजेक्ट के लिए बेंचमार्किंग टूल है. इसका इस्तेमाल, इन मामलों में बिल्ड परफ़ॉर्मेंस की बेंचमार्किंग के लिए किया जाता है:
प्रोजेक्ट के लिए मानदंड: इसमें, Bazel के एक वर्शन पर दो Git कमिट की तुलना की जाती है. इस कुकी का इस्तेमाल, आपके बिल्ड में रिग्रेशन का पता लगाने के लिए किया जाता है. ऐसा अक्सर डिपेंडेंसी जोड़ने के ज़रिए किया जाता है.
Bazel बेंचमार्क: एक ही गिट कमिट पर, Bazel के दो वर्शन की तुलना करना. इस कुकी का इस्तेमाल, Bazel में रिग्रेशन का पता लगाने के लिए किया जाता है. ऐसा तब होता है, जब Bazel को बनाए रखा जाता है या फ़ोर्क किया जाता है.
बेंचमार्क, वॉल टाइम, सीपीयू टाइम, और सिस्टम टाइम के साथ-साथ Bazel के बनाए रखे गए हीप साइज़ को मॉनिटर करते हैं.
हमारा यह भी सुझाव है कि Bazel बेंच को ऐसे फ़िज़िकल मशीनों पर चलाएं जो सिर्फ़ इसी काम के लिए इस्तेमाल की जाती हैं और जिन पर कोई अन्य प्रोसेस नहीं चल रही है. इससे, परफ़ॉर्मेंस में होने वाले बदलावों के सोर्स को कम किया जा सकता है.