रिमोट एक्ज़ीक्यूशन के लिए रिमोट कैश हिट को डीबग करना

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है किसी समस्या की शिकायत करें सोर्स देखें रात · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

यह पेज मानता है कि आपके पास एक बिल्ड और/या टेस्ट है जो रिमोट तरीके से एक्ज़ीक्यूट किया जा सकता है. साथ ही, आपको यह पक्का करना है कि रिमोट कैश मेमोरी का इस्तेमाल करके.

कैश मेमोरी का हिट रेट देखना

अपने Basel रन के स्टैंडर्ड आउटपुट में, वह INFO लाइन देखें जिसमें प्रोसेस के बारे में बताती हैं, जो मोटे तौर पर Basel की कार्रवाइयों से जुड़ी होती हैं. उस लाइन की जानकारी जहां कार्रवाई की गई थी. remote लेबल खोजें. यह लेबल, कार्रवाई के बारे में बताता है रिमोट तौर पर चलाया जा सकता है, लोकल सैंडबॉक्स में की गई कार्रवाइयों के लिए linux-sandbox, और एक्ज़ीक्यूशन की अन्य रणनीतियों के लिए अन्य वैल्यू. वह कार्रवाई जिसका नतीजा मिला रिमोट कैश मेमोरी में सेव की गई कॉपी को remote cache hit के तौर पर दिखाया जाता है.

उदाहरण के लिए:

INFO: 11 processes: 6 remote cache hit, 3 internal, 2 remote.

इस उदाहरण में 6 रिमोट कैश हिट थे और 2 कार्रवाइयों में ऐसा नहीं था कैश मेमोरी हिट को एक्सपोर्ट किया गया और उन्हें दूर से ही एक्ज़ीक्यूट किया गया. तीन अंदरूनी हिस्से को अनदेखा किया जा सकता है. आम तौर पर, इसमें अंदरूनी कार्रवाइयां छोटी होती हैं. जैसे, सिंबल के तौर पर लिंक बनाना. लोकल कैंपेन इस खास जानकारी में कैश मेमोरी हिट शामिल नहीं किए जाते. अगर आपको कोई भी प्रोसेस नहीं मिल रही है (या उम्मीद से कम संख्या), bazel clean चलाएं. इसके बाद, बिल्ड/टेस्ट करें आदेश.

कैश मेमोरी हिट से जुड़ी समस्या हल करना

अगर आपको कैश मेमोरी का हिट रेट अपनी उम्मीद के मुताबिक नहीं मिल रहा है, तो ये काम करें:

पक्का करें कि उसी बिल्ड/टेस्ट निर्देश को फिर से चलाने से कैश मेमोरी हिट मिल रहे हों

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

  2. bazel clean चलाएं. इस निर्देश से आपकी लोकल कैश मेमोरी मिट जाती है, जिससे की मदद से, रिमोट कैश मेमोरी हिट की जांच की जा सकती है. ऐसा करने पर, नतीजों को लोकल कैश मेमोरी से मिले हिट के बारे में बताता है.

  3. वे बिल्ड और टेस्ट फिर से चलाएं जिनकी जांच आप फिर से कर रहे हैं (उसी पर) मशीन).

  4. कैश मेमोरी हिट रेट के बारे में जानने के लिए, INFO लाइन देखें. अगर आपको इसके अलावा कोई प्रोसेस नहीं दिखती है remote cache hit और internal, तो आपकी कैश मेमोरी सही तरीके से भरी जा रही है और ऐक्सेस किया गया. इस स्थिति में, सीधे अगले सेक्शन पर जाएं.

  5. अंतर की वजह यह है कि बिल्ड में कोई अंतर नहीं है और इसकी वजह से कार्रवाई करें. ढूंढने के लिए तो ये कार्रवाइयां करें:

    a. एक्ज़ीक्यूशन लॉग पाने के लिए, बिल्ड या टेस्ट को फिर से चलाएं:

      bazel clean
      bazel --optional-flags build //your:target --execution_log_binary_file=/tmp/exec1.log
    

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

    यदि आप कैशिंग समस्याओं को हल करने में सक्षम हैं और अब बार-बार रन करना है सभी कैश हिट जनरेट करता है, तो अगले सेक्शन पर जाएं.

    अगर आपके ऐक्शन आईडी एक जैसे हैं, लेकिन कैश मेमोरी हिट नहीं हैं, तो कुछ आपके कॉन्फ़िगरेशन में, कैश मेमोरी में डेटा सेव होने से रोका जा रहा है. इस सेक्शन के साथ जारी रखें सामान्य समस्याओं की जांच करें.

  6. देखें कि एक्ज़ीक्यूशन लॉग में सभी कार्रवाइयों के लिए, cacheable को 'सही' पर सेट किया गया है. अगर आपने cacheable किसी कार्रवाई के लिए एक्ज़ीक्यूशन लॉग में नहीं दिखता, क्योंकि का मतलब है कि संबंधित नियम में no-cache टैग हो सकता है BUILD फ़ाइल में दी गई परिभाषा. mnemonic और target_label को देखें एक्ज़ीक्यूशन लॉग में फ़ील्ड की मदद से यह पता लगाना कि कार्रवाई कहां होने वाली है से.

  7. अगर कार्रवाइयां एक जैसी हैं और cacheable, लेकिन कोई कैश मेमोरी हिट नहीं है, तो यह हो सकता है कि आपकी कमांड लाइन में --noremote_accept_cached शामिल हो जो बिल्ड के लिए कैश लुकअप को बंद कर देगा.

    अगर वास्तविक कमांड लाइन को समझना मुश्किल है, तो कमांड लाइन की मदद से, इवेंट प्रोटोकॉल बनाएं इस तरह से:

    a. ये फ़ाइलें पाने के लिए, --build_event_text_file=/tmp/bep.txt को अपने Basel कमांड में जोड़ें लॉग का टेक्स्ट वर्शन.

    b. लॉग का टेक्स्ट वर्शन खोलें और command_line_label: "canonical" के साथ structured_command_line मैसेज. एक्सपैंशन के बाद, इसमें सभी विकल्प दिखेंगे.

    c. remote_accept_cached खोजें और देखें कि वह false पर सेट है या नहीं.

    d. अगर remote_accept_cached, false है, तो पता लगाएं कि वह कहां है false पर सेट करें: कमांड लाइन पर या baज़ेनrc फ़ाइल में.

यह पक्का करें कि सभी मशीनों को कैश मेमोरी में सेव किया जा रहा हो

एक ही मशीन पर कैश मेमोरी हिट होने के बाद, किसी दूसरी मशीन पर एक ही बिल्ड/टेस्ट. अगर आपको लगता है कि कैश मेमोरी में सेव किया गया है ऐसा न हो, तो ये काम करें:

  1. मौजूदा कैश मेमोरी को नुकसान पहुंचने से बचने के लिए, अपने बिल्ड में छोटा सा बदलाव करें.

  2. बिल्ड को पहली मशीन पर चलाएं:

     bazel clean
     bazel ... build ... --execution_log_binary_file=/tmp/exec1.log
    
  3. पहले चरण में हुए बदलाव को पक्का करते हुए, बिल्ड को दूसरी मशीन पर चलाएं शामिल है:

     bazel clean
     bazel ... build ... --execution_log_binary_file=/tmp/exec2.log
    
  4. दोनों के लिए एक्ज़िक्यूशन लॉग की तुलना करें दौड़ता है. अगर लॉग एक जैसे नहीं हैं, तो अपने बिल्ड कॉन्फ़िगरेशन की जांच करें और होस्ट एनवायरमेंट के लीक होने से जुड़ी गड़बड़ियों के साथ-साथ दोनों में से किसी भी एक बिल्ड में इस्तेमाल किया जा सकता है.

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

एक्ज़ीक्यूशन लॉग में, बिल्ड के दौरान की गई सभी कार्रवाइयों के रिकॉर्ड होते हैं. इसके लिए हर कार्रवाई SpawnExec वह एलीमेंट जिसमें कार्रवाई कुंजी की सभी जानकारी शामिल है, इसलिए, अगर लॉग एक जैसे होते हैं और ऐक्शन कैश बटन भी एक जैसे होते हैं.

उम्मीद के मुताबिक कैश हिट शेयर नहीं करने वाले दो बिल्ड के लॉग की तुलना करने के लिए, ये काम करें:

  1. हर बिल्ड से एक्ज़ीक्यूशन लॉग पाएं और उन्हें /tmp/exec1.log के तौर पर सेव करें और /tmp/exec2.log.

  2. Basel सोर्स कोड डाउनलोड करें और देखने के लिए नीचे दिया गया तरीका अपनाएं. इसे पार्स करने के लिए आपको सोर्स कोड की ज़रूरत होगी एक्ज़ीक्यूशन लॉग execlog पार्सर.

    git clone https://github.com/bazelbuild/bazel.git
    cd bazel
    
  3. लॉग को टेक्स्ट में बदलने के लिए, एक्ज़ीक्यूशन लॉग पार्सर का इस्तेमाल करें. नीचे दिए गए शुरू करने की सुविधा, कार्रवाई के क्रम से मैच करने के लिए दूसरे लॉग में भी कार्रवाइयों को क्रम से लगाती है तुलना करने में आसानी के लिए, पहले लॉग में जोड़ें.

    bazel build src/tools/execlog:parser
    bazel-bin/src/tools/execlog/parser \
      --log_path=/tmp/exec1.log \
      --log_path=/tmp/exec2.log \
      --output_path=/tmp/exec1.log.txt \
      --output_path=/tmp/exec2.log.txt
    
  4. /tmp/exec1.log.txt और में अंतर के हिसाब से अपने पसंदीदा टेक्स्ट का इस्तेमाल करें /tmp/exec2.log.txt.