ऐसा होने का कारण यह है कि कार्यक्रम "डेटा लिखता है" कहता है और लिनक्स कर्नेल इसे एक मेमोरी बफर में कॉपी करता है जो डिस्क पर जाने के लिए कतारबद्ध है, और फिर "ठीक है, किया" कहता है। इसलिए प्रोग्राम को लगता है कि उसने सब कुछ कॉपी कर लिया है। फिर प्रोग्राम फ़ाइल को बंद कर देता है, लेकिन अचानक कर्नेल इसे प्रतीक्षा करता है जबकि बफर को डिस्क से बाहर धकेल दिया जाता है।
इसलिए, दुर्भाग्य से कार्यक्रम आपको यह नहीं बता सकता है कि बफर को फ्लश करने में कितना समय लगेगा क्योंकि यह नहीं जानता है।
यदि आप कुछ पॉवर-यूजर ट्रिक आजमाना चाहते हैं, तो आप लिनक्स के कर्नेल पैरामीटर vm.dirty_bytes
को सेट करके बफर के आकार को कम कर सकते हैं जैसे 15000000
(15 एमबी)। इसका अर्थ है कि एप्लिकेशन अपनी वास्तविक प्रगति के आगे 15MB से अधिक नहीं प्राप्त कर सकता है। (आप के साथ उड़ने पर कर्नेल मापदंडों को बदल सकते हैं, sudo sysctl vm.dirty_bytes=15000000
लेकिन उन्हें रिबूट के पार रहने के लिए एक कॉन्फ़िगर फ़ाइल को बदलने की आवश्यकता होती है जैसे /etc/sysctl.conf
कि आपके डिस्ट्रो के लिए विशिष्ट हो सकती है।)
एक साइड इफेक्ट यह है कि आपके कंप्यूटर में इस सेटिंग के साथ डेटा-राइटिंग थ्रूपुट हो सकता है, लेकिन पूरे पर, मुझे यह देखने में मदद मिलती है कि एक प्रोग्राम लंबे समय से चल रहा है, जबकि यह बहुत सारे डेटा को लिखता है। कार्यक्रम अपनी नौकरी के साथ किया जाता है, लेकिन कर्नेल बुरी तरह से काम करता है क्योंकि वास्तविक कार्य करता है। dirty_bytes
जब आप मुफ्त मेमोरी पर कम होते हैं और एक प्रोग्राम चलाते हैं, जो अचानक बहुत सारा डेटा लिखता है, तो एक छोटे से मान को सेट करना भी आपके सिस्टम को गैर-जिम्मेदार बनने से रोकने में मदद कर सकता है।
लेकिन, इसे बहुत छोटा न रखें! मैं एक मोटे अनुमान के रूप में 15 एमबी का उपयोग करता हूं कि कर्नेल बफर को एक सामान्य हार्ड ड्राइव में 1/4 या उससे कम में फ्लश कर सकता है। यह "लैगी" महसूस करने से मेरी प्रणाली को बनाए रखता है।