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

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

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

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

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

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

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

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

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

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

Bazel की क्वेरी / cquery / aquery के निर्देश

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

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

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

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

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

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

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

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

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

बेज़ेल-बेंच वाली तुलना

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

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

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

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

यह भी सुझाव दिया जाता है कि ऐसी खास मशीनों पर Bazel बेंच चलाएं जो दूसरी प्रोसेस का इस्तेमाल नहीं कर रही हैं. इससे, डेटा में होने वाले उतार-चढ़ाव के सोर्स को कम किया जा सकेगा.