बिल्ड परफ़ॉर्मेंस मेट्रिक निकालना

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

शायद Bazel का इस्तेमाल करने वाले हर व्यक्ति को ऐसे बिल्ड मिले हों जो उम्मीद से धीमे या उससे भी धीमे थे. अलग-अलग बिल्ड की परफ़ॉर्मेंस को बेहतर बनाने से, उन टारगेट के लिए काफ़ी फ़ायदा मिलता है जिनका असर काफ़ी ज़्यादा होता है. जैसे:

  1. डेवलपर के लिए मुख्य टारगेट, जिन्हें बार-बार दोहराया जाता है और जिन्हें फिर से बनाया जाता है.

  2. आम तौर पर, अन्य टारगेट इन लाइब्रेरी पर निर्भर होते हैं.

  3. टारगेट की किसी क्लास (जैसे, कस्टम नियम) का प्रतिनिधि टारगेट, एक बिल्ड में समस्याओं का पता लगाने और उन्हें ठीक करने में मदद कर सकता है. इससे बड़े पैमाने पर समस्याओं को हल करने में मदद मिल सकती है.

यह समझना कि संसाधन कहां खर्च किए जाते हैं, बिल्ड की परफ़ॉर्मेंस को बेहतर बनाने का एक अहम कदम है. इस पेज पर उन अलग-अलग मेट्रिक की सूची दी गई है जिन्हें इकट्ठा किया जा सकता है. बिल्ड की परफ़ॉर्मेंस के बारे में जानकारी से पता चलता है कि बिल्ड की परफ़ॉर्मेंस से जुड़ी समस्याओं का पता लगाने और उन्हें ठीक करने के लिए, इन मेट्रिक का इस्तेमाल कैसे किया जा सकता है.

आपके Basel बिल्ड से मेट्रिक निकालने के कुछ मुख्य तरीके यहां दिए गए हैं, जैसे:

बिल्ड इवेंट प्रोटोकॉल (बीईपी)

Bazel, बिल्ड इवेंट प्रोटोकॉल (बीईपी) की मदद से, कई तरह के प्रोटोकॉल बफ़र build_event_stream.proto का आउटपुट देता है. इन्हें आपके तय किए गए बैकएंड से एग्रीगेट किया जा सकता है. इस्तेमाल के उदाहरणों के आधार पर, आपके पास मेट्रिक को अलग-अलग तरीकों से इकट्ठा करने का विकल्प होता है. हालांकि, यहां हम कुछ ऐसे कॉन्सेप्ट और प्रोटो फ़ील्ड के बारे में बताएंगे जो आम तौर पर काम के होते हैं.

बेज़ेल की क्वेरी / cquery / aquery आदेश

Bazel में क्वेरी के तीन अलग-अलग मोड (query, cquery, और aquery) उपलब्ध होते हैं. इनकी मदद से, उपयोगकर्ता क्रमशः टारगेट ग्राफ़, कॉन्फ़िगर किए गए टारगेट ग्राफ़, और ऐक्शन ग्राफ़ के बारे में क्वेरी कर सकते हैं. क्वेरी लैंग्वेज में, फ़ंक्शन का एक सुइट होता है. इसका इस्तेमाल, अलग-अलग क्वेरी मोड में किया जा सकता है. इससे, अपनी ज़रूरतों के हिसाब से क्वेरी को पसंद के मुताबिक बनाया जा सकता है.

JSON ट्रेस करने वाली प्रोफ़ाइलें

Bazel को हर बार इस्तेमाल करने पर, वह JSON फ़ॉर्मैट में एक ट्रैक प्रोफ़ाइल लिखता है. JSON ट्रेस प्रोफ़ाइल ये काम कर सकती है इससे यह तुरंत समझने में मदद मिलेगी कि बेज़ल ने YouTube पर शुरू करना.

बदलाव किए जाने का लॉग

लागू करने की जानकारी के लॉग से, आपको समस्याओं को हल करने और समस्या को हल करने में मदद मिल सकती है मशीन और एनवायरमेंट में अंतर की वजह से रिमोट कैश हिट मौजूद नहीं हैं या ऐसी कार्रवाइयां जो तय नहीं की जा सकतीं. अगर --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, Git प्रोजेक्ट के लिए एक बेंचमार्किंग टूल है. इसका इस्तेमाल, इन मामलों में बिल्ड की परफ़ॉर्मेंस को बेंचमार्क करने के लिए किया जाता है:

  • प्रोजेक्ट बेंचमार्क: बेंचमार्किंग के लिए इस्तेमाल किए गए दो गिट एक-दूसरे के मुकाबले सिंगल बेज़ल वर्शन का इस्तेमाल कर रहे हैं. इसका इस्तेमाल बिल्ड में रिग्रेशन का पता लगाने के लिए किया जाता है (अक्सर डिपेंडेंसी जोड़ना).

  • बेज़ल का मानदंड: यहां दिए गए बैज की मेट्रिक में, Basel के दो वर्शन एक-दूसरे के मुकाबले सिंगल git कमिटी का इस्तेमाल करें. बेज़ल में ही रिग्रेशन का पता लगाने के लिए इस्तेमाल किया जाता है (अगर रखरखाव / फ़ोर्क बेज़ल के लिए हुआ).

बेंचमार्क, कुल समय, सीपीयू का समय, और सिस्टम का समय और Bazel के बनाए गए ह्प का साइज़ मॉनिटर करते हैं.

बेज़ल बेंच को खास तौर पर फ़िज़िकल मशीनों पर चलाने की भी सलाह दी जाती है परिवर्तनशीलता के स्रोतों को कम करने के लिए अन्य प्रोसेस नहीं चला रहे हैं.