1.5 एमबी / एस डिस्क डिस्क दिखा रहा है, लेकिन सभी कार्यक्रमों में 0.00 बी / एस है


18

मुझे iotopआउटपुट समझ में नहीं आता है: यह डिस्क लेखन के ~ 1.5 एमबी / एस (शीर्ष दाएं) दिखाता है, लेकिन सभी कार्यक्रमों में 0.00 बी / एस है। क्यों?

यहाँ छवि विवरण दर्ज करें

के रूप में मैं फ़ाइलों के कुछ ही लाखों लोगों के साथ एक फ़ोल्डर की सामग्री को हटाने गया था वीडियो लिया गया था का उपयोग कर perl -e 'for(<*>){((stat)[9]<(unlink))}' , Kubuntu 14.04.3 LTS 64 पर।

iotopका उपयोग कर लॉन्च किया गया था sudo iotop

जवाबों:


22

Iotop द्वारा दर्शाई गई जानकारी अलग-अलग प्रक्रियाओं के लिए और सिस्टम के लिए समान रूप से एकत्रित नहीं की जाती है। "वास्तविक" वैश्विक आंकड़े प्रति-प्रक्रिया आंकड़ों का योग नहीं हैं (यह "कुल" है)।

सभी जानकारी खरीद फाइल सिस्टम से एकत्र की जाती है ।

  • प्रत्येक प्रक्रिया के लिए, iotop डेटा , विशेष रूप से और मूल्यों से डेटा पढ़ता है। इन में पारित कर दिया बाइट्स की संख्या में हैं और सिस्टम कॉल (सहित जैसे वेरिएंट , , , , आदि)।/proc/PID/iorcharwcharreadwritereadvwritevrecvsend
  • वैश्विक "वास्तविक" मूल्यों को /proc/vmstatविशेष रूप से pgpginऔर pgpgoutमूल्यों से पढ़ा जाता है। ये कर्नेल और हार्डवेयर के बीच आदान-प्रदान किए गए डेटा को मापते हैं (अधिक सटीक रूप से, यह कर्नेल में ब्लॉक डिवाइस परत द्वारा चारों ओर फेरबदल किया गया डेटा है)।

प्रति-प्रक्रिया डेटा और ब्लॉक डिवाइस परत डेटा भिन्न होने के कई कारण हैं। विशेष रूप से:

  • कैशिंग और बफ़रिंग का मतलब है कि एक परत पर हो रहा I / O एक ही समय में नहीं हो रहा है, या दूसरी परत पर समान संख्या में हो सकता है। उदाहरण के लिए, कैश से पढ़े गए डेटा को उस तक पहुँचने वाली प्रक्रिया से पढ़े जाने के रूप में जाना जाता है, लेकिन हार्डवेयर से कोई संबंधित रीड नहीं होता है (जो पहले से ही हुआ है, संभवतः किसी अन्य प्रक्रिया की ओर से)।
  • प्रक्रिया-स्तरीय डेटा में पाइप, सॉकेट और अन्य इनपुट / आउटपुट पर एक्सचेंज किए गए डेटा शामिल होते हैं जिसमें एक अंतर्निहित डिस्क या अन्य ब्लॉक डिवाइस शामिल नहीं होता है।
  • प्रक्रिया-स्तर डेटा केवल फ़ाइल सामग्री के लिए खाता है, मेटाडेटा नहीं।

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

मुझे नहीं लगता कि लिनक्स फ़ाइल मेटाडेटा अपडेट की निगरानी करने का कोई तरीका प्रदान करता है। आप /sys/fsकुछ फाइल सिस्टम के तहत प्रविष्टियों के माध्यम से प्रति-फाइलसिस्टम I / O की निगरानी कर सकते हैं । मुझे नहीं लगता कि आप विशिष्ट प्रक्रियाओं के खिलाफ मेटाडेटा I / O का लेखा कर सकते हैं, यह सामान्य मामले में करने के लिए बहुत जटिल होगा क्योंकि कई प्रक्रियाएं एक ही मेटाडेटा को पढ़ने या परिवर्तित करने का कारण बन सकती हैं।


1
बहुत अच्छा जवाब, धन्यवाद। क्या आप आउटपुट के विकास का पालन करने के लिए अधिक विश्वसनीय तरीका सुझाएंगे?
रुई एफ रिबेरो

1
@RuiFRibeiro आप देख सकते हैं कि कौन सी फ़ाइल rm -rवर्तमान में straceआईएनजी द्वारा प्रसंस्करण कर रही है, लेकिन यह आपको पूर्ण प्रतिशत का बहुत उपयोगी अनुमान नहीं देगा क्योंकि प्रत्येक निर्देशिका में ट्रैवर्सल का आदेश कुछ अप्रत्याशित है। यदि उस फ़ाइल सिस्टम में केवल एक ही विशाल ऑपरेशन चल रहा है, और इसमें बहुत अधिक हार्ड लिंक शामिल नहीं हैं, तो यह देखना df -iआपको बताता है कि कितनी फ़ाइलों को संसाधित किया गया है।
गिल्स का SO-
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.