शायद Bazel का इस्तेमाल करने वाले हर व्यक्ति को ऐसे बिल्ड मिले हों जो उम्मीद से धीमे या उससे भी धीमे थे. अलग-अलग बिल्ड की परफ़ॉर्मेंस को बेहतर बनाने से, उन टारगेट के लिए काफ़ी फ़ायदा मिलता है जिनका असर काफ़ी ज़्यादा होता है. जैसे:
डेवलपर के मुख्य टारगेट, जिन्हें बार-बार दोहराया जाता है और फिर से बनाया जाता है.
आम तौर पर, अन्य टारगेट इन लाइब्रेरी पर निर्भर होते हैं.
टारगेट की किसी क्लास (जैसे, कस्टम नियम) का प्रतिनिधि टारगेट, एक बिल्ड में समस्याओं का पता लगाने और उन्हें ठीक करने में मदद कर सकता है. इससे बड़े पैमाने पर समस्याओं को हल करने में मदद मिल सकती है.
बिल्ड की परफ़ॉर्मेंस को बेहतर बनाने के लिए, यह समझना ज़रूरी है कि संसाधन कहां खर्च किए जाते हैं. इस पेज पर, उन अलग-अलग मेट्रिक की सूची दी गई है जिन्हें इकट्ठा किया जा सकता है. बिल्ड की परफ़ॉर्मेंस के बारे में जानकारी से पता चलता है कि बिल्ड की परफ़ॉर्मेंस से जुड़ी समस्याओं का पता लगाने और उन्हें ठीक करने के लिए, इन मेट्रिक का इस्तेमाल कैसे किया जा सकता है.
Bazel बिल्ड से मेट्रिक निकालने के कुछ मुख्य तरीके हैं, जैसे:
बिल्ड इवेंट प्रोटोकॉल (बीईपी)
Bazel, बिल्ड इवेंट प्रोटोकॉल (बीईपी) की मदद से, कई तरह के प्रोटोकॉल बफ़र build_event_stream.proto
का आउटपुट देता है. इन्हें आपके तय किए गए बैकएंड से एग्रीगेट किया जा सकता है. इस्तेमाल के उदाहरणों के आधार पर, आपके पास मेट्रिक को अलग-अलग तरीकों से इकट्ठा करने का विकल्प होता है. हालांकि, यहां हम कुछ ऐसे कॉन्सेप्ट और प्रोटो फ़ील्ड के बारे में बताएंगे जो आम तौर पर काम के होते हैं.
Bazel के query / cquery / aquery निर्देश
Bazel में क्वेरी के तीन अलग-अलग मोड (query, cquery, और aquery) उपलब्ध होते हैं. इनकी मदद से, उपयोगकर्ता क्रमशः टारगेट ग्राफ़, कॉन्फ़िगर किए गए टारगेट ग्राफ़, और ऐक्शन ग्राफ़ के बारे में क्वेरी कर सकते हैं. क्वेरी लैंग्वेज में, फ़ंक्शन का एक सुइट होता है. इसका इस्तेमाल, अलग-अलग क्वेरी मोड में किया जा सकता है. इससे, अपनी ज़रूरतों के हिसाब से क्वेरी को पसंद के मुताबिक बनाया जा सकता है.
JSON ट्रेस प्रोफ़ाइल
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 का मानदंड: एक ही git कमिट में, Bazel के दो वर्शन की तुलना करना. इसका इस्तेमाल, Bazel में हुए रेग्रेशन का पता लगाने के लिए किया जाता है. ऐसा तब होता है, जब आपके पास Bazel को मैनेज करने या फ़ॉर्क करने की अनुमति हो.
बेंचमार्क, कुल समय, सीपीयू का समय, और सिस्टम का समय और Bazel के बनाए गए ह्प का साइज़ मॉनिटर करते हैं.
हमारा सुझाव है कि Bazel bench को खास तौर पर उन फ़िज़िकल मशीनों पर चलाएं जिन पर कोई दूसरी प्रोसेस नहीं चल रही है. इससे, परफ़ॉर्मेंस में अंतर की संभावना कम हो जाती है.