डाइनैमिक एक्ज़ीक्यूशन की सुविधा Basel की एक सुविधा है 0.21 वर्शन के बाद के वर्शन, जहां एक ही कार्रवाई को लोकल और रिमोट तरीके से एक्ज़ीक्यूट किया जाता है. खत्म होने वाली पहली ब्रांच के आउटपुट का इस्तेमाल करके, दूसरी ब्रांच को रद्द करना ब्रांच. यह किसी रिमोट की एक्ज़ीक्यूशन पावर और/या शेयर की गई बड़ी कैश मेमोरी को साथ में इस्तेमाल करता है यह एक ऐसा बिल्ड सिस्टम है, जो लोकल प्रोग्राम चलाने में कम समय लेता है. इससे आपको दोनों में से सबसे अच्छी तरह काम करने में मदद मिलती है पर्यावरण को बेहतर बनाने में मदद करने के लिए,
इस पेज पर डाइनैमिक एक्ज़ीक्यूशन को चालू करने, ट्यून करने, और डीबग करने का तरीका बताया गया है. अगर आपको लोकल और रिमोट एक्ज़ीक्यूशन, दोनों को सेट अप किया गया हो और ऐसे में बेज़ल को अडजस्ट करने की कोशिश की जा रही हो सेटिंग की जानकारी देखें, तो यह पेज आपके लिए है. अगर आपने पहले से ऐसा नहीं किया है, तो रिमोट तरीके से एक्ज़ीक्यूशन सेट अप किया गया, Basel पर जाएं सबसे पहले, रिमोट एक्ज़ीक्यूट करने की खास जानकारी.
डाइनैमिक एक्ज़ीक्यूशन चालू हो रहा है?
डाइनैमिक एक्ज़ीक्यूशन मॉड्यूल बेज़ल का हिस्सा है, लेकिन यह डाइनैमिक का इस्तेमाल करने के लिए है प्रोग्राम चलाने के बाद, आपको पहले से ही स्थानीय और रिमोट तरीके से, पुराने वर्शन की सुविधा बंद कर दी है.
डाइनैमिक एक्ज़ीक्यूशन मॉड्यूल को चालू करने के लिए, --internal_spawn_scheduler
को पास करें
फ़्लैग करने के लिए बेज़ल
को फ़्लैग करता है. ऐसा करने पर, प्लान लागू करने की नई रणनीति जुड़ जाती है, जिसका नाम dynamic
है. अब ये काम किए जा सकते हैं
इसका इस्तेमाल अपनी रणनीति के तौर पर उन याद के विषयों के लिए करें जिन्हें आप डाइनैमिक तौर पर चलाना चाहते हैं, जैसे
--strategy=Javac=dynamic
. याद रखने की कला चुनने का तरीका जानने के लिए, अगला सेक्शन देखें
ताकि डाइनैमिक एक्ज़ीक्यूशन चालू किया जा सके.
डाइनैमिक रणनीति का इस्तेमाल करने वाली किसी भी याद दिलाने के लिए, रिमोट तौर पर एक्ज़ीक्यूट करने की रणनीतियां
--dynamic_remote_strategy
फ़्लैग से लिया गया है. साथ ही, स्थानीय रणनीतियों के बारे में भी बताया गया है
--dynamic_local_strategy
फ़्लैग. पासिंग
--dynamic_local_strategy=worker,sandboxed
, लोकल पर डिफ़ॉल्ट रूप से सेट करता है
डाइनैमिक एक्ज़ीक्यूशन की ब्रांच को
ऑर्डर. --dynamic_local_strategy=Javac=worker
को पास करना,
और सिर्फ़ Javac मेनेमॉनिक के लिए उपलब्ध है. रिमोट वर्शन इसी तरह से काम करता है. दोनों फ़्लैग यह कर सकते हैं
कई बार तय किया जाना चाहिए. अगर किसी कार्रवाई को स्थानीय तौर पर लागू नहीं किया जा सकता है, तो
सामान्य तरीके से रिमोट तरीके से एक्ज़ीक्यूट किया जाता है. इसी तरह, रिमोट तरीके से भी लागू किया जाता है.
अगर आपके रिमोट सिस्टम में कैश मेमोरी है, तो --local_execution_delay
फ़्लैग, रिमोट सिस्टम के बाद लोकल एक्ज़ीक्यूशन में मिलीसेकंड में देरी जोड़ता है
ने कैश हिट बताया है. ज़्यादा कैश मेमोरी होने पर, इससे लोकल ऐक्ज़ीक्यूशन नहीं चलता
हिट होने की संभावना है. डिफ़ॉल्ट वैल्यू 1000 मि॰से॰ है, लेकिन इसे सिर्फ़
आम तौर पर, कैश मेमोरी से मिलने वाले हिट से थोड़ा ज़्यादा समय लगता है. वास्तविक समय इन दोनों पर निर्भर करता है
रिमोट सिस्टम और दोतरफ़ा यात्रा में कितना समय लगता है. आम तौर पर, मान
किसी रिमोट सिस्टम का इस्तेमाल करने वाले सभी लोगों के लिए एक जैसा होता है. हालांकि, ऐसा तब ही होता है, जब उनमें से कुछ उपयोगकर्ताओं के लिए
दोतरफ़ा यात्रा का इंतज़ार समय जोड़ सकते हैं. Google आपके यूआरएल पैरामीटर को कैसे इस्तेमाल करेगा, यह तय करने के लिए
Baze प्रोफ़ाइल की प्रोफ़ाइल बनाने की सुविधाएं
देखें कि सामान्य कैश मेमोरी हिट में कितना समय लगता है.
डाइनैमिक एक्ज़ीक्यूशन का इस्तेमाल, लोकल सैंडबॉक्स रणनीति के साथ-साथ
स्थायी कर्मचारी. लगातार काम करने वाले लोग
डाइनैमिक एक्ज़ीक्यूशन के साथ इस्तेमाल किए जाने पर, ये अपने-आप सैंडबॉक्स की सुविधा के साथ काम करते हैं.
मल्टीप्लेक्स वर्कर का इस्तेमाल करने की सुविधा मिलती है. डार्विन और Windows सिस्टम में,
तो सैंडबॉक्स की गई रणनीति धीमी हो सकती है; तुम पास कर सकती हो
--reuse_sandbox_directories
इन सिस्टम पर सैंडबॉक्स बनाने के काम को कम करने के लिए किया जाता है.
डाइनैमिक एक्ज़ीक्यूशन को standalone
रणनीति के साथ भी चलाया जा सकता है. हालांकि,
standalone
रणनीति लागू करते समय, आउटपुट लॉक लेना ज़रूरी है. यह
असरदार तरीके से, रिमोट स्ट्रेटजी को पहले पूरा होने से रोकता है. कॉन्टेंट बनाने
--experimental_local_lockfree_output
फ़्लैग इन चीज़ों से इस समस्या को हल करने में मदद करता है
लोकल एक्ज़ीक्यूशन को सीधे आउटपुट में लिखने की अनुमति देता है, लेकिन यह
रिमोट एक्ज़ीक्यूशन को, क्या पहले पूरा करना होगा.
अगर डाइनैमिक एक्ज़ीक्यूशन की कोई ब्रांच पहले पूरी हो जाती है, लेकिन वह पूरी नहीं हो पाती है, तो पूरी कार्रवाई नहीं की जा सकी. अंतर को रोकने के लिए यह एक सोच-समझकर चुना गया विकल्प है लागू होने से रोका जा सके.
डाइनैमिक एक्ज़ीक्यूशन और लॉक करने की सुविधा के काम करने के तरीके के बारे में ज़्यादा जानने के लिए, जूलियो से संपर्क करें मेरिनो की बेहतरीन जगहें ब्लॉग पोस्ट
मुझे डाइनैमिक एक्ज़ीक्यूशन का इस्तेमाल कब करना चाहिए?
डाइनैमिक एक्ज़ीक्यूशन के लिए रिमोट एक्ज़ीक्यूशन सिस्टम. फ़िलहाल, ऐसा नहीं है सिर्फ़-कैश मेमोरी में सेव किए जाने वाले रिमोट सिस्टम का इस्तेमाल किया जा सकता है, क्योंकि कैश मेमोरी में सेव न होने की समस्या को कार्रवाई नहीं की जा सकी.
रिमोट तरीके से एक्ज़ीक्यूट करने के लिए, सभी तरह की कार्रवाइयां सही नहीं होती हैं. सबसे अच्छी उम्मीदवार वे हैं जो स्थानीय रूप से स्वाभाविक रूप से तेज़ होते हैं, उदाहरण के लिए स्थायी कर्मचारियों या काम करने वाले इतनी तेज़ी से काम करता है कि एक्ज़ीक्यूशन के समय पर, रिमोट एक्ज़ीक्यूशन का ओवरहेड ज़्यादा हो. स्थानीय तौर पर चलाई जाने वाली हर कार्रवाई, कुछ सीपीयू और मेमोरी को लॉक करती है ऐसे संसाधन जो उन कैटगरी में नहीं आते हैं उनकी वजह से होने वाली कार्रवाइयों से, लागू करने के लिए कहा जा सकता है.
रिलीज़ के समय
5.0.0-pre.20210708.4,
परफ़ॉर्मेंस प्रोफ़ाइलिंग
इसमें वर्कर के काम को पूरा करने से जुड़ा डेटा शामिल होता है. इसमें किसी काम को पूरा करने में लगा समय भी शामिल होता है
एक डाइनैमिक एक्ज़ीक्यूशन रेस हारने के बाद अनुरोध. अगर आपको डाइनैमिक एक्ज़ीक्यूशन दिखता है, तो
कर्मचारियों से जुड़े ऐसे थ्रेड जिन्हें संसाधन हासिल करने में काफ़ी समय लग रहा है या बहुत ज़्यादा समय लग रहा है
async-worker-finish
में, आपको कुछ धीमी लोकल कार्रवाइयों की वजह से देरी हो सकती है
वर्कर थ्रेड.
ऊपर दी गई प्रोफ़ाइल में, जो 8 Javac वर्कर का इस्तेमाल करती है, हमें कई Javac वर्कर दिखते हैं
async-worker-finish
में रेस हार गई और अपना काम पूरा किया
थ्रेड. ऐसा इसलिए हुआ, क्योंकि काम न करने वाले लोगों ने याद रखने के लिए ज़रूरी संसाधन इकट्ठा कर लिए थे
इससे ज़्यादा समय नहीं लगेगा.
जब सिर्फ़ Javac को डाइनैमिक एक्ज़ीक्यूशन के साथ चलाया जाता है, तो शुरू होने वाले ब्राउज़र का सिर्फ़ आधा हिस्सा काम शुरू करने के बाद, कर्मचारी रेस में हिस्सा नहीं ले पाते.
पहले सुझाए गए --experimental_spawn_scheduler
फ़्लैग का इस्तेमाल नहीं किया जा सकता.
यह डाइनैमिक एक्ज़ीक्यूशन की सुविधा चालू करता है और dynamic
को सभी के लिए डिफ़ॉल्ट रणनीति के तौर पर सेट करता है
याददाश्त बढ़ाने वाली तकनीक, जिससे अक्सर इस तरह की समस्याएं पैदा होती हैं.
समस्या का हल
डाइनैमिक एक्ज़ीक्यूशन से जुड़ी समस्याएं मामूली और डीबग करने में मुश्किल हो सकती हैं, क्योंकि वे
मेनिफ़ेस्ट सिर्फ़ लोकल और रिमोट एक्ज़ीक्यूशन के कुछ खास कॉम्बिनेशन के तहत.
--debug_spawn_scheduler
, डाइनैमिक से ज़्यादा आउटपुट जोड़ता है
एक्ज़ीक्यूशन सिस्टम दिया है जो इन समस्याओं को डीबग करने में मदद कर सकता है. आपको यह भी तय करना होगा कि
--local_execution_delay
फ़्लैग और रिमोट जॉब की संख्या बनाम स्थानीय नौकरियां
ताकि समस्याओं को आसानी से समझा जा सके.
अगर आपको standalone
का इस्तेमाल करके, डाइनैमिक एक्ज़ीक्यूशन में समस्याएं आ रही हैं
रणनीति, --experimental_local_lockfree_output
के बिना दौड़ने की कोशिश करें या दौड़ें
स्थानीय कार्रवाइयों को सैंडबॉक्स किया गया हो. इससे आपका बिल्ड थोड़ा धीमा हो सकता है (ऊपर देखें अगर
Mac या Windows पर काम करता है). हालांकि, यह फ़ेलियर की कुछ संभावित वजहों को हटा देता है.