पराक्रमी 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परिणाम को समझाने के लिए मुख्य धागा भी बहुत नींद होना चाहिए ।