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

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

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

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

  2. आम तौर पर, टारगेट लाइब्रेरी दूसरे टारगेट पर निर्भर करती हैं.

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

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

Bazel बिल्ड से मेट्रिक निकालने के कुछ मुख्य तरीके हैं, जैसे:

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

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

Bazel की क्वेरी / cquery / aquery कमांड

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

JSON ट्रेस प्रोफ़ाइलें

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

एक्ज़ीक्यूशन लॉग

एक्ज़ीक्यूशन लॉग की मदद से, रिमोट कैश हिट न मिलने की समस्या को हल किया जा सकता है. ऐसा, मशीन और एनवायरमेंट में अंतर होने या तय न की जाने वाली कार्रवाइयों की वजह से होता है. अगर आप फ़्लैग पास कर लेते हैं --experimental_execution_log_spawn_metrics (Bzel 5.2 से उपलब्ध है), तो इसमें लोकल और रिमोट, दोनों तरह की कार्रवाइयों के लिए विस्तृत स्पॉन मेट्रिक भी शामिल होंगी. उदाहरण के लिए, इन मेट्रिक का इस्तेमाल करके, स्थानीय और रिमोट मशीन की परफ़ॉर्मेंस की तुलना की जा सकती है. इसके अलावा, यह भी पता लगाया जा सकता है कि स्पॉन एक्ज़ीक्यूशन का कौनसा हिस्सा उम्मीद से कम है (उदाहरण के लिए, कतार में है).

एक्ज़ीक्यूशन ग्राफ़ लॉग

हालांकि, JSON ट्रेस प्रोफ़ाइल में पाथ की अहम जानकारी शामिल होती है, लेकिन कभी-कभी, आपको एक्ज़ीक्यूट होने से जुड़ी कार्रवाइयों के डिपेंडेंसी ग्राफ़ में ज़्यादा जानकारी की ज़रूरत होती है. Bazel 6.0 से, आप फ़्लैग किए गए दस्तावेज़ --experimental_execution_graph_log और --experimental_execution_graph_log_dep_type=all पास करके, एक्ज़ीक्यूट की जा चुकी कार्रवाइयों और उनकी इंटरडिपेंडेंसी के बारे में जान सकते हैं.

इस जानकारी का इस्तेमाल, उस खींचें. इसे समझने के लिए किया जा सकता है जो अहम पाथ के किसी नोड से जुड़ता है. खींचकर लिया जाने वाला समय, वह अवधि होती है जो किसी खास नोड को लागू करने के ग्राफ़ से हटाकर सेव की जा सकती है.

यह डेटा, बिल्ड और ऐक्शन ग्राफ़ में किए जाने वाले बदलावों के असर का अनुमान लगाने में आपकी मदद करता है.

बैज-बेंच के साथ मानदंड

बेजल बेंचमार्क, मानदंड प्रोजेक्ट के लिए एक बेंचमार्क टूल है. इसका इस्तेमाल करके, इन मामलों में बिल्ड परफ़ॉर्मेंस को मापा जा सकता है:

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

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

मानदंड दीवार के समय, सीपीयू के समय और सिस्टम के समय और Bazel के बनाए गए हीप के साइज़ पर नज़र रखते हैं.

यह भी सुझाव दिया जाता है कि बैज़ेल की ऐसी बेंच बनाई जाएं जो खास तरह की मशीनों पर काम करती हैं और जिनमें दूसरी प्रोसेस नहीं चलाई जाती हैं, ताकि बदलाव के स्रोतों को कम किया जा सके.