2012-03-15 8 views
15

यह पहले पूछा गया है लेकिन एक पुराने थ्रेड के रूप में उसी धागे को फिर से अपडेट नहीं करना चाहते हैं।मुफ्त कमांड से "बफर" और "कैश्ड" को समझना

free कमांड के आउटपुट से "बफर" और "कैश" कॉलम पर खुद को स्पष्ट करना चाहते हैं।

यह वही है मेरी समझ ...

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

दूसरी ओर कैश प्रोग्राम/डेटा है जो स्मृति में लोड होता है लेकिन स्मृति में बनाए रखा जाता है ताकि यदि आवश्यक हो तो यह जल्दी से उपलब्ध होगा।

बफ़र्स की अवधारणा को समझने के लिए, मैं निम्नलिखित प्रयोग ...

यह मेरे डेस्कटॉप में free आदेश के पढ़ने

 
[[email protected] ~]$ free -m 
      total  used  free  shared buffers  cached 
Mem:   2897  465  2431   0   30  230 
-/+ buffers/cache:  204  2692 
Swap:   4000   0  4000 

[[email protected] ~]$ sync 

[[email protected] ~]$ free -m 
      total  used  free  shared buffers  cached 
Mem:   2897  466  2431   0   30  230 
-/+ buffers/cache:  205  2691 
Swap:   4000   0  4000 

यहाँ मैं देख क्रियान्वित करने के बाद कम हो रही बफ़र नहीं कर सकते हैं की कोशिश की sync कमांड।

अगला मैंने निम्न कोशिश की ... डिस्क पर एक बड़ी फ़ाइल लिखने का प्रयास किया।

 
[[email protected] ~]$ dd if=/dev/zero of=test bs=1024k 

जैसी उम्मीद थी, कैश की गई मूल्य वृद्धि करनी चाहिए और इस बात की पुष्टि है ..

 
@localhost ~]# free -m 
      total  used  free  shared buffers  cached 
Mem:   2897  1466  1430   0   32  1127 
-/+ buffers/cache:  306  2590 
Swap:   4000   0  4000 

मैं फिर से sync आदेश निष्पादित और फिर free का उपयोग कर जाँच की। मैं देख सकता हूं कि बफर मूल्य free कमांड के आउटपुट से घट रहा है। कैश में कोई कमी नहीं हुई थी। इसका मतलब है कि dd कूमैंड के निष्पादन के बाद रैम में गंदे पृष्ठ डिस्क पर फंस गए हैं।

 
@localhost ~]# free -m 
      total  used  free  shared buffers  cached 
Mem:   2897  1466  1430   0   10  1127 
-/+ buffers/cache:  306  2590 
Swap:   4000   0  4000 

तब मैं drop_cache कर्नेल पैरामीटर ताकि कैश vlaue

 
[[email protected] ~]# cat /proc/sys/vm/drop_caches 
0 

[[email protected] ~]# echo "1" > /proc/sys/vm/drop_caches 

[[email protected] ~]# cat /proc/sys/vm/drop_caches 
1 

free गिरा दिया जाता है अब पुष्टि की है कि दोनों बफ़र और कैश मूल्य गिरा दिया जाता है अद्यतन किया गया।

 
[[email protected] ~]# free -m 
      total  used  free  shared buffers  cached 
Mem:   2897  299  2597   0   1   74 
-/+ buffers/cache:  224  2672 
Swap:   4000   0  4000 

तो, मेरा प्रारंभिक बयान है कि "बफर" रैम डेटा है जिसे डिस्क पर अभी तक फ़्लश किया जाना सही नहीं है।

कृपया मुझे मार्गदर्शन करें कि मैं सही दिशा में हूं या नहीं।

उत्तर

2

जिस तरह से मैंने हमेशा यह समझा है कि स्मृति का बफर क्षेत्र डेटा के अस्थायी भंडारण के लिए है या डिस्क (डिस्क सहित) में लिखा गया है, जबकि स्मृति का कैश क्षेत्र तेजी से पढ़ने के लिए है डिवाइस।

1

यह मेरी समझ है: बफर आपको बताता है कि ब्लॉक डिवाइस को बनाए रखने के लिए कितनी मेमोरी आरक्षित है, लेकिन कैश आपको बताता है कि फ़ाइल सामग्री के लिए कितनी मेमोरी का उपयोग किया जाता है।

18

नि: शुल्क कमांड में कॉलम हेडर कुछ हद तक गलत तरीके से गलत हैं, कम से कम एक लिनक्स उपयोगकर्ता (डेवलपर के विपरीत) के दृष्टिकोण से। नीचे शीर्षक का अर्थ क्या है:

कुल: हां, यह कुल रैम है।

प्रयुक्त: यह शायद सबसे भ्रमित कॉलम है। यह एप्लिकेशन का उपयोग मिश्रित स्मृति और अन्य 'अस्थायी रूप से' (बफर + कैश) मिश्रित स्मृति है जो वास्तव में आवश्यक होने पर उपलब्ध है। तो तकनीकी रूप से स्मृति का वास्तव में उपयोग किया जा रहा है, लेकिन अगर किसी एप्लिकेशन को इसकी आवश्यकता होती है तो इस मेमोरी में से अधिकांश उपलब्ध है। 'अस्थायी रूप से उपयोग की गई मेमोरी उधार ली जाती है यदि लिनक्स सिस्टम द्वारा सिस्टम प्रदर्शन को तेज करने में मदद के लिए उपलब्ध कराया जाता है, अन्यथा सिस्टम डिस्क से अधिक बार पढ़ता होता। इस प्रकार की अधिकांश मेमोरी 'कैश्ड' कॉलम के नीचे दिखायी जाती है। यदि किसी एप्लिकेशन को मेमोरी की आवश्यकता होती है तो यह मेमोरी लिनक्स सिस्टम द्वारा दी जाती है।

नि: शुल्क: हां, यह शुद्ध नि: शुल्क और अनछुआ स्मृति।

साझा: मेमोरी विशेष रूप से कई प्रक्रियाओं द्वारा उपयोग के लिए आवंटित

बफ़र्स: अस्थाई स्मृति कि एक तरफ कुछ प्रक्रियाओं

मदद करने के लिए सेट कर दिया जाता

कैश: मेमोरी कि उपलब्ध है और 'उधार' ऑपरेटिंग सिस्टम द्वारा कई लिनक्स ओएस संचालन को तेज करने में मदद करने के लिए। यदि किसी एप्लिकेशन को इसकी आवश्यकता होती है तो यह स्मृति सिस्टम द्वारा छोड़ी जाती है।

लाइन है कि साथ शुरू होता है -/+ बफ़र्स/कैश आम तौर पर पहले मेम लाइन की तुलना में अधिक उपयोगी है। का छेड़छाड़ और -/+ बफर/कैश अनिवार्य रूप से आपके पास 'उपलब्ध' स्मृति के लिए है। (पेज-कैश)

2

लिनक्स VM उप-प्रणाली किसी भी मुक्त या अप्रयुक्त या गैर आवंटित स्मृति के रूप में बफ़र्स/कैश व्यवहार करता है

इसलिए, चल echo 1 > /proc/sys/vm/drop_caches ड्रॉप या पेज कैश साफ करने के लिए कर्नेल का निर्देश , दंत चिकित्सा (स्लैब-कैश), और इनोड्स (स्लैब-कैश में) और स्मृति को पुनः प्राप्त करने और उपलब्ध होने का कारण बनता है।

स्वच्छ डेटा कैश पृष्ठों को डिज़ाइन द्वारा मुक्त नहीं किया जाता है। उन्हें कर्नेल द्वारा आसानी से पुनः दावा किया जा सकता है अगर अतिरिक्त मेमोरी आवंटित की जाती है (मॉलोक/कॉलोक/ब्रैक/एसआरबीके और दोस्तों), जबकि उनमें डिस्क से उपयोगी डेटा होता है, यदि आवश्यक हो तो डिस्क I/O को सहेजता है।

sync कमांड केवल स्मृति में किसी भी गंदे पृष्ठ को डिस्क पर करता है, यह बफर/कैश को मुक्त नहीं करता है। बफ़र्स/कैश ड्रॉप करने का एकमात्र तरीका echo "1" > /proc/sys/vm/drop_caches का उपयोग करना है या कर्नेल reclaims नए के लिए डेटा पृष्ठों अनुप्रयोगों से अनुरोध किया आवंटित

pdflush प्रति समर्थन डिवाइस जानकारी (बीडीआई) निस्तब्धता धागे का उपयोग करके प्रतिस्थापित किया गया है।

2

RHEL से हवाला देते हुए:

लिनक्स हमेशा बफ़र्स के लिए उपलब्ध स्मृति (फ़ाइल सिस्टम मेटाडाटा) और कैश (फाइल या ब्लॉक उपकरणों की वास्तविक सामग्री के साथ पृष्ठों) का उपयोग करके डिस्क कार्रवाइयों को गति देने रैम उपयोग करने के लिए कोशिश करता है।

संबंधित मुद्दे