सामग्री को वरीयता देने के लिए लिनक्स को कैश फ़ाइल मेटाडेटा में कैसे कॉन्फ़िगर करें?


14

मैं फ़ाइल सिस्टम मेटाडेटा कैशिंग के लिए अधिकांश RAM का उपयोग करने के लिए सिस्टम सेट करना चाहता हूं, लेकिन कैशिंग और प्रीफ़ेटिंग फ़ाइलों को पढ़ने / लिखने के लिए केवल एक यथोचित छोटी राशि। आदर्श रूप से मैं फ़ाइल सिस्टम को ब्राउज़ करने में सक्षम होना चाहता हूं (जितना कि यह रैम में फिट बैठता है) डिस्क को बिना स्पिन किए बिना जब तक मैं वास्तव में एक फ़ाइल नहीं खोलता।

यहाँ विवरण हैं:

मेरे पास घर का बना फाइल सर्वर है। यह LVM वॉल्यूम में 9TB के आसपास पाँच डिस्क है, लेकिन केवल 4GB RAM है। चूंकि सर्वर ज्यादा कुछ नहीं करता है, इसलिए फाइलों की सेवा करते हैं, ज्यादातर RAM का उपयोग कैशिंग के लिए किया जाता है। ("मुक्त" कैश के लिए इस्तेमाल किए जाने वाले 3.9 जी में से 3.4 जी रिपोर्ट। "

सर्वर मेरे बेडरूम में रहता है, और अगर सभी डिस्क कताई कर रहे हैं तो यह शांत होने पर कष्टप्रद होने के लिए पर्याप्त शोर करता है। (मेरा मतलब शोर नहीं है, बस कताई शोर है। डिस्क विभिन्न प्रकारों और मॉडलों के हैं, और मुझे लगता है कि रोटेशन की गति में मामूली अंतर हस्तक्षेप का कारण है। कोई भी डिस्क अपने आप शोर नहीं है, लेकिन अगर उनमें से कुछ एक साथ घूम रहे हैं। एक उप-हर्ट्ज़ अवधि के साथ एक मामूली शोर।) इसलिए मैंने अधिकांश समय डिस्क को नीचे स्पिन करने के लिए सर्वर को कॉन्फ़िगर किया।

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

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

लेकिन किसी को लगता है कि 4GB को अधिकांश फ़ाइल-सिस्टम मेटाडेटा को कैश करने में सक्षम होना चाहिए, कम से कम उन हिस्सों को जो पहले से ही विज़िट किए गए थे, ताकि मैं डिस्क को स्पिन करने की आवश्यकता के बिना फ़ाइलों को ब्राउज़ कर सकूं अगर यह पता चला कि वे हैं सोया हुआ।

फ़ाइल खोलने पर अभी भी देरी होगी, लेकिन यह ठीक है। तुलना “क्लिक करें; प्रतीक्षा करें ; क्लिक करें; प्रतीक्षा करें ; क्लिक करें; प्रतीक्षा करें ; खेल; घड़ी "क्लिक" के साथ; क्लिक करें; क्लिक करें; खेल; प्रतीक्षा करें ; घड़ी"। पूर्व अविश्वसनीय रूप से निराशाजनक है; उत्तरार्द्ध लगभग अपेक्षित है।

टिप्पणियाँ:

  1. यह बात करनी चाहिए, कर्नेल 3.2 है, ओएस डेबियन है, वॉल्यूम lvm2 है, और एफएस एक्स 4 है।

  2. रात के दौरान स्पिन डाउन का एकमात्र कारण शोर है; सर्वर अन्यथा लगातार चल रहा है। (मैंने इसे कम-शक्ति के रूप में उचित रूप में बनाया है।) दिन के समय के आधार पर स्पिन-डाउन देरी विविध है।

  3. हार्ड डिस्क केवल मीडिया के लिए हैं। ओएस एक अलग (छोटे) फ्लैश ड्राइव पर है। (जिसका अर्थ है कि कोई भी स्पिन-अप विलंब डेटा से आता है, न कि केवल इसलिए कि उसे कुछ /usrभी या जो भी चाहिए। मैं उस पर कुछ जीबी अतिरिक्त कर सकता हूं अगर यह मेरी समस्या से किसी तरह मदद करेगा।

  4. प्रदर्शन पर एक उचित प्रभाव कोई बड़ी बात नहीं है। वैसे भी डिस्क मेरे नेटवर्क से अधिक तेज़ हैं।

जवाबों:


10

यह नियंत्रित करने के लिए कि लिनक्स कैश चीजें इस https://www.kernel.org/doc/Documentation/sysctl/vm.txt को कैसे संदर्भित करती हैं

विशेष रूप से vfs_cache_pressure को देखें, तो आप शायद वास्तव में कम मूल्य चाहते हैं या शायद शून्य (1 हालांकि मुझे थोड़ा सुरक्षित लगता है):

vfs_cache_pressure
------------------

Controls the tendency of the kernel to reclaim the memory which is used for
caching of directory and inode objects.

At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a "fair" rate with respect to pagecache and
swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. When vfs_cache_pressure=0, the kernel will
never reclaim dentries and inodes due to memory pressure and this can easily
lead to out-of-memory conditions. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.

इसके अलावा, आप संशोधित करना चाहते हैं swappinessताकि आप कभी भी डेटा स्वैप न करें या ऐसा न करें कि यह केवल चरम मामलों में ही हो।

drop_cachesविकल्प स्पष्ट रूप से डेटा आप अब कैश नहीं करना चाहती छोड़ने के लिए आसान हो सकता है।

मुझे यकीन है कि शायद अन्य विकल्प हैं जो मदद कर सकते हैं, इसलिए कर्नेल प्रलेखन की समीक्षा करें।

उन्हें लागू करने के लिए मैं उन सेटिंग्स को डालूंगा जिन्हें आप बदलना चाहते हैं /etc/sysctl.confया जो भी आपके ओएस को बूट पर उन्हें पुनर्स्थापित करना है।


3
अच्छा पोस्ट, लेकिन आप ओपी के लक्ष्य को देखते हुए जितना संभव हो उतना गमागमन करना चाहेंगे। स्वैपिंग केवल उपयोगकर्ता मेमोरी को हिट करती है, जिससे डिस्क को स्वैप करने की प्रवृत्ति बढ़ जाती है, फिर कैश को लेने के लिए अधिक भौतिक मेमोरी छोड़ देता है। स्वैपी बढ़ने से स्मरण शक्ति बढ़ती है, लेकिन अगर यह बहुत दूर तक बढ़ जाती है, तो यह धीमा हो सकता है (मीठे स्थान का निर्धारण मूल रूप से पुनरावृत्ति है)
ब्राचली

हाय काइल, इस विचार के लिए धन्यवाद। vfs_cache_pressure काम करता है, लेकिन यह काफी पर्याप्त नहीं है। यहाँ मैंने क्या किया है:
bogdanb

जब मैं vcp को 0 पर सेट करता हूं, अगर मैं करता हूं find / -ls > /dev/null, तो डिस्क को नीचे स्पिन करता है, फिर findसभी फाइलें फिर से, डिस्क को स्पिन करता है। freeऐसा करते समय बफ़र्स लगभग 202 एमबी तक बढ़ जाते हैं। लेकिन, अगर मैं ऐसा findहै, तो cat /file/bigger/than/ram > /dev/null, तो freeपता चलता है cachedखाली जगह है, और किसी कारण से भरने के लिए बढ़ती buffersनीचे 195MB के बारे में करने के लिए चला जाता है। फिर अगर मैं डिस्क को नीचे कर find
दूं

के बारे में swappiness: यह डिफ़ॉल्ट के लिए सेट है 60, लेकिन मशीन में कोई स्वैप विभाजन नहीं है, इसलिए मुझे यकीन नहीं है कि यह बहुत कुछ करता है। मुझे लगता है कि मैं फ्लैश ड्राइव पर एक स्वैप फ़ाइल डाल सकता हूं, लेकिन मुझे नहीं पता कि यह कैसे मदद करेगा, या इसे कैसे आकार देगा।
bogdanb

1
लिनक्स कैशिंग के बारे में स्मार्ट होने की कोशिश कर रहा है। मुझे यकीन नहीं है कि सेटिंग vfs = 0 आपकी अपेक्षा के अनुरूप काम करेगा। मुझे लगता है कि यह उन अन्य प्रविष्टियों को पुनः प्राप्त करने की कोशिश करेगा जब अनुप्रयोगों (यानी मालोक ()) से दबाव अधिक स्मृति का अनुरोध करता है। जैसे कि linux को caches के लिए अधिक 2GB का उपयोग न करने के तरीके के रूप में, मैं इस तरह की बात से अनजान हूं। यह ज्यादातर मामलों में रैम बर्बाद कर रहा होगा। एक और चीज जिसे आप देखना चाहते हैं वह है "लैपटॉप मोड" जो लैपटॉप के लिए डिस्क को नीचे रखने के लिए चीजों को अलग तरीके से करने का प्रयास करता है। हालांकि मैंने इसका उपयोग नहीं किया है, इसलिए मुझे इसके बारे में ज्यादा जानकारी नहीं है।
काइल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.