`स्ट्रेस` क्यों नहीं दिखाता है कि यह प्रक्रिया किसी चीज़ का इंतज़ार कर रही है?


11

पराक्रमी straceने मुझे निराश कर दिया। यह कैसे हो सकता है?


time fooदिखाता है कि fooचलाने के लिए ("वास्तविक") में कई सेकंड लगते हैं, लेकिन उपयोगकर्ता ("उपयोगकर्ता") और कर्नेल ("sys") दोनों में नगण्य सीपीयू समय का उपयोग करता है। जिज्ञासु के लिए, fooनीचे परिभाषित किया गया है।

इसलिए यह अपना अधिकांश समय सीपीयू निर्देशों को निष्पादित न करके किसी और चीज के इंतजार में बिताता है। आम तौर पर, मैं देख सकता हूं कि यह किस तरह से इंतजार कर रहा है strace- यानी किस सिस्टम कॉल को लंबे समय तक रोकना है। दुर्भाग्य से यह दृष्टिकोण काम नहीं आया।

strace -ttt -T -C -w fooसिस्टम कॉल, टाइमस्टैम्प्ड और सिस्टम कॉल में बिताए गए (वास्तविक) समय का सारांश दिखाता है। लेकिन इस विशेष प्रक्रिया को सिस्टम कॉल के अंदर नगण्य समग्र (वास्तविक) समय बिताने के रूप में दिखाया गया।


fooवास्तव में है journalctl -b -u dev-hugepages.mount। सिवाय इसके कि मुझे इसे पुन: उत्पन्न करने के लिए अंतिम तर्क को हर बार एक अलग सिस्टमड यूनिट में बदलना पड़ा। दूसरे शब्दों में, मैं जो जांच कर रहा हूं, वह पहली बार हुआ है कि मैं किसी एक सिस्टम यूनिट के लिए लॉग प्राप्त करने का प्रयास करता हूं। EDIT : मुख्य प्रश्न का उत्तर देने के बाद, मुझे इस कारण का भी एहसास हुआ कि मुझे यह समस्या देरी की वजह से हुई थी

इस प्रक्रिया द्वारा बिताया गया समय एक विशिष्ट मुद्दा है, जाहिर है यह सभी प्रणालियों पर नहीं होता है। https://github.com/systemd/systemd/issues/7963


हम्म ... चूँकि आपका "फू" प्रोग्राम केवल एक सरल एकल-प्रक्रिया, एकल-थ्रेडेड प्रक्रिया नहीं है, इसलिए आपको स्टॉर्क को फॉलो करने और संलग्न करने के लिए स्ट्रेस बताकर बेहतर सेवा प्रदान की जाएगी। '-ff' आपका दोस्त है! :) आप भी उन सभी strafe प्रक्रिया आउटपुट फ़ाइलों को एक स्थान पर रखने के लिए "-o / dev / shm / strace-foo" का उपयोग करना चाहते हैं। केवल एक सलाह।
जेसी एडेलमैन

@JesseAdelman मुझे लगता है कि journalctlकेवल एक प्रक्रिया चलती है। मुझे लगता है कि journalctlजो भी कारण के लिए एक अतिरिक्त धागा का उपयोग करता है - वहाँ एक क्लोन () कॉल था। मुझे लगता है कि इसका मतलब है कि आप तकनीकी रूप से सही हैं, लेकिन यह प्रश्न के लिए तकनीकी रूप से अप्रासंगिक भी है। timeइस प्रक्रिया को एक पूरे के रूप में देखता है, और यह दिखाया है कि एक पूरी प्रक्रिया के बजाय नींद है (कुछ पर अवरुद्ध)। straceपर्याप्त नींद नहीं दिखा। इससे कोई फर्क नहीं पड़ता है कि एक दूसरा धागा सो रहा है, timeपरिणाम को समझाने के लिए मुख्य धागा भी बहुत नींद होना चाहिए ।
sourcejedi

जवाबों:


18

इस मुद्दे को मारने का सामान्य कारण, यह है कि प्रक्रिया पृष्ठ दोषों में अवरुद्ध है। ये एक मेमोरी मैपिंग उर्फ ​​के माध्यम से प्रदर्शित फ़ाइलों को पढ़ते हैं या संभवतः लिखते हैं mmap()। आपने mmap()सिस्टम कॉल के ट्रेस में कुछ देखा होगा ।

यदि आपने शेल बिल्ट के /usr/bin/timeबजाय प्रोग्राम का उपयोग किया था time, तो आपने भी देखा होगा:

0.04user 0.10system 0:02.29elapsed 6%CPU (0avgtext+0avgdata 40464maxresident)k
73632inputs+0outputs (376major+1081minor)pagefaults 0swaps

majorपेजफॉल्ट वे होते हैं जिन्हें फाइलसिस्टम IO की आवश्यकता होती है। minorपेजफॉल्ट्स बहुत कम महत्वपूर्ण हैं (शायद केवल "टीएलबी मिस")।

मुझे लगता है inputsकि पढ़े गए पृष्ठों की कुल संख्या है। वर्तमान में, मुझे लगता है कि फ़ाइल मैप किए गए पृष्ठ हमेशा एक ही आकार के होते हैं। ज्यादातर मामलों में 4096 बाइट्स, लेकिन आप जांच कर सकते हैं getconf PAGESIZE

तो यह ~ 290 मेगाबाइट का प्रतिनिधित्व करता है, प्रति सेकंड 100 मेगाबाइट पर कुछ पढ़ा, हार्ड डिस्क के लिए एक मानक गति मेरी जैसी। रहस्य सुलझ गया!


ध्यान दें, आप यह मान रहे हैं कि आपके पास इस प्रक्रिया के लिए एक संपूर्ण मुफ्त सीपीयू है। अन्यथा, सीपीयू की उपज के लिए प्रक्रिया को अन्य प्रक्रियाओं के इंतजार में अवरुद्ध किया जा सकता है।

straceकेवल तब दिखाता है जब सिस्टम कॉल के कारण प्रक्रिया प्रवेश करती है (और फिर छोड़ देता है)। या जब एक यूनिक्स सिग्नल दिया जाता है। हालांकि अन्य प्रकार के व्यवधान हैं जो straceबिल्कुल नहीं दिखाते हैं। तो इनमें शामिल हैं

  • पृष्ठ दोष।
  • टाइमर में रुकावट। यह एक अलग प्रक्रिया पर स्विच करने के लिए उपयोग किया जाता है, जब वर्तमान एक ने सीपीयू पर अपने आवंटित समय के स्लाइस को समाप्त कर दिया है।

1
अच्छा जवाब, बधाई! जो उपकरण उपयोग कर रहे हैं, उनकी सीमाओं को समझना वास्तव में महत्वपूर्ण है। +1; मैं इन विषयों का भी आनंद लेता हूं : unix.stackexchange.com/questions/418354/… और unix.stackexchange.com/questions/419697/…
Rui F Ribeiro
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.