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