क्या मैं अधिक आक्रामक फ़ाइल सिस्टम कैशिंग के लिए अपने लिनक्स सिस्टम को कॉन्फ़िगर कर सकता हूं?


119

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

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

मैं एक्स 3 और एनटीएफएस का उपयोग करता हूं (एक्सयूबंटू 11.10 x86 के साथ फाइल सिस्टम को मैं बहुत उपयोग करता हूं!) फाइल सिस्टम।


6
यदि आपके पास बहुत सारी रैम है, तो प्रदर्शन के बारे में बहुत ध्यान रखें और डेटा हानि की परवाह न करें, बस अपने सभी डेटा को एक रैम डिस्क पर कॉपी करें और वहां से सेवा करें, क्रैश / शटडाउन पर सभी अपडेट को छोड़ दें। यदि वह आपके लिए काम नहीं करेगा, तो आपको रैम के लिए "पर्याप्त" योग्यता प्राप्त करने की आवश्यकता हो सकती है या डेटा कितना महत्वपूर्ण नहीं है।
जेम्स यंगमैन

1
@ निल्स, कंप्यूटर एक लैपटॉप है, इसलिए, मेरा मानना ​​है कि, नियंत्रक बहुत साधारण है।
इवान

1
प्रदर्शन को बेहतर बनाने का एक तरीका डेटा के स्थायित्व को छोड़ना है। यदि एप्लिकेशन कुछ सिंक के लिए अनुरोध करता है, तो भी डिस्क को सिंक्रनाइज़ करना अक्षम करें। यह डेटा हानि का कारण होगा यदि आपका स्टोरेज डिवाइस कभी बिजली की हानि से ग्रस्त है। यदि आप इसे वैसे भी करना चाहते हैं, तो किसी भी फाइल सिस्टम को शामिल sudo mount -o ro,nobarrier /path/to/mountpointकरने के /etc/fstabलिए बस निष्पादित या समायोजित करें nobarrierजिसे आप बेहतर प्रदर्शन के लिए बलिदान करने के लिए तैयार हैं। हालाँकि, यदि आपके संग्रहण डिवाइस में आंतरिक बैटरी जैसे Intel 320 SSD श्रृंखला है, तो nobarrierबिना डेटा हानि का उपयोग किए।
मिकको रेंटालिनेन

1
Red Hat Enterprise Linux 6 में nobarrier के उपयोग की अनुशंसा नहीं की गई है क्योंकि अवरोधक का नकारात्मक प्रदर्शन प्रभाव नगण्य है (लगभग 3%)। लिखने की बाधाओं के लाभ आमतौर पर उन्हें अक्षम करने के प्रदर्शन लाभों से आगे निकल जाते हैं। इसके अतिरिक्त, वर्चुअल मशीनों पर कॉन्फ़िगर किए गए स्टोरेज पर नोबैरियर विकल्प का उपयोग कभी नहीं किया जाना चाहिए। access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
Ivailo Bardarov

1
दो अंक - 1) डेबियन या उबंटू के आधार पर लिनक्स डिस्ट्रोस हैं, जैसे पिल्ला लिनक्स और एंटीएक्स लिनक्स, और कई अन्य जो पूरे ऑपरेटिंग सिस्टम को स्तरित रैमडिस्क भागों (यानी एएफएफएस या ओवरलेफ़्स) में रखते हैं और पारदर्शी रूप से प्रबंधित करते हैं। बहुत तेज़! - 2) हमने एक बहुत बड़ी प्रणाली के वास्तविक-संसार के डिजाइन की खोज की है जो इस पर अधिक कैश फेंक सकता है, निष्पादन को कम कर सकता है। जैसे-जैसे भंडारण गति बढ़ती है (यानी एसएसडी), आवश्यक कैश आकार में कमी आती है। यह जानने का कोई तरीका नहीं है कि आपके विशेष सिस्टम पर प्रयोग के बिना वह आकार क्या है। यदि वृद्धि काम नहीं कर रही है, तो इसे कम करने का प्रयास करें।
DocSalvager

जवाबों:


106

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

आपने यह नहीं बताया कि आपका स्टोरेज डिवाइस SSD या HDD है या नहीं। यहाँ मुझे मेरे लिए काम करने के लिए मिला है (मेरे मामले sdaमें एक एचडीडी घुड़सवार है /homeऔर sdbएसएसडी माउंट है /)।

पहले लोड-सामान-से-स्टोरेज-टू-कैश भाग का अनुकूलन करें:

यहाँ HDD के लिए मेरा सेटअप है (सुनिश्चित करें कि AHCI + NCQ BIOS में सक्षम है यदि आपके पास टॉगल है):

echo cfq > /sys/block/sda/queue/scheduler
echo 10000 > /sys/block/sda/queue/iosched/fifo_expire_async
echo 250 > /sys/block/sda/queue/iosched/fifo_expire_sync
echo 80 > /sys/block/sda/queue/iosched/slice_async
echo 1 > /sys/block/sda/queue/iosched/low_latency
echo 6 > /sys/block/sda/queue/iosched/quantum
echo 5 > /sys/block/sda/queue/iosched/slice_async_rq
echo 3 > /sys/block/sda/queue/iosched/slice_idle
echo 100 > /sys/block/sda/queue/iosched/slice_sync
hdparm -q -M 254 /dev/sda

एचडीडी मामले के लिए वर्थ नोटिंग उच्च है fifo_expire_async(आमतौर पर लिखते हैं) और slice_syncकिसी भी प्रक्रिया को उच्च थ्रूपुट प्राप्त करने की अनुमति देने के लिए लंबा है ( slice_syncयदि आप उन स्थितियों से टकराते हैं, जहां कई प्रक्रियाएं समानांतर में डिस्क से कुछ डेटा की प्रतीक्षा कर रही हैं)। slice_idleहमेशा HDDs के लिए एक समझौता है, लेकिन सीमा 3-20 में कहीं की स्थापना डिस्क उपयोग और डिस्क फर्मवेयर के आधार पर ठीक किया जाना चाहिए। मैं कम मूल्यों के लिए लक्ष्य बनाना पसंद करता हूं लेकिन इसे बहुत कम सेट करना आपके थ्रूपुट को नष्ट कर देगा। quantumसेटिंग प्रवाह क्षमता एक बहुत प्रभावित करते हैं लेकिन संभव के रूप में इस के रूप में कम रखने के लिए समझदार स्तर पर विलंबता रखने की कोशिश करने लगता है। quantumबहुत कम स्थापित करने से थ्रूपुट नष्ट हो जाएगा। श्रेणी 3-8 में मान एचडीडी के साथ अच्छी तरह से काम करते हैं। एक पढ़ने के लिए सबसे खराब स्थिति विलंबता ( quantum* slice_sync) + ( slice_async_rq* है )slice_async) एमएस अगर मैंने कर्नेल व्यवहार को सही ढंग से समझा है। Async का उपयोग ज्यादातर लिखते हैं और चूंकि आप डिस्क पर लिखने में देरी करने के लिए तैयार हैं, दोनों को सेट करें slice_async_rqऔर slice_asyncबहुत कम संख्या में। हालाँकि, slice_async_rqबहुत कम मान सेट करना स्टॉल पढ़ सकता है क्योंकि किसी भी अधिक पढ़ने के बाद लिखने में देरी नहीं की जा सकती है। मेरे config 10 सेकंड के बाद ज्यादा से ज्यादा डिस्क पर डेटा लिखने के लिए के बाद डेटा कर्नेल पारित किया गया है की कोशिश करेंगे, लेकिन जब से तुम शक्ति नुकसान पर डेटा भी सेट की हानि बर्दाश्त कर सकते हैं fifo_expire_asyncके लिए 3600000बताने के लिए है कि 1 घंटे डिस्क पर देरी के लिए ठीक है। slice_asyncहालांकि, कम रखें , क्योंकि अन्यथा आप उच्च पठनीयता प्राप्त कर सकते हैं।

hdparmआदेश प्रदर्शन AHCI + NCQ की अनुमति देता है कि के ज्यादा की ह्त्या AAM को रोकने के लिए आवश्यक है। यदि आपकी डिस्क बहुत अधिक शोर करती है, तो इसे छोड़ें।

यहाँ SSD (Intel 320 श्रृंखला) के लिए मेरा सेटअप है:

echo cfq > /sys/block/sdb/queue/scheduler
echo 1 > /sys/block/sdb/queue/iosched/back_seek_penalty
echo 10000 > /sys/block/sdb/queue/iosched/fifo_expire_async
echo 20 > /sys/block/sdb/queue/iosched/fifo_expire_sync
echo 1 > /sys/block/sdb/queue/iosched/low_latency
echo 6 > /sys/block/sdb/queue/iosched/quantum
echo 2 > /sys/block/sdb/queue/iosched/slice_async
echo 10 > /sys/block/sdb/queue/iosched/slice_async_rq
echo 1 > /sys/block/sdb/queue/iosched/slice_idle
echo 20 > /sys/block/sdb/queue/iosched/slice_sync

यहाँ यह अलग-अलग स्लाइस सेटिंग्स के लिए कम मूल्यों पर ध्यान देने योग्य है। SSD के लिए सबसे महत्वपूर्ण सेटिंग है slice_idleजिसे 0-1 तक सेट किया जाना चाहिए। इसे शून्य पर सेट करने से देशी NCQ के लिए सभी ऑर्डर करने के निर्णय ले जाते हैं, जबकि इसे 1 पर सेट करने से अनुरोधों को ऑर्डर करने की अनुमति मिलती है (लेकिन अगर NCQ सक्रिय है, तो हार्डवेयर कर्नेल को आंशिक रूप से ऑर्डर करने से रोक सकता है)। दोनों मानों को देखें कि क्या आप अंतर देख सकते हैं। इंटेल 320 श्रृंखला के लिए, ऐसा लगता है कि स्थापित करने slide_idleके लिए 0सबसे अच्छा प्रवाह क्षमता देता है, लेकिन यह करने के लिए स्थापित करने 1के लिए सबसे अच्छा (न्यूनतम) समग्र विलंबता देता है।

इन सुरंगों के बारे में अधिक जानकारी के लिए, http://www.linux-mag.com/id/7572/ देखें ।

अब जब हमने डिस्क से कैश में सामान को समझदार प्रदर्शन के साथ लोड करने के लिए कर्नेल को कॉन्फ़िगर किया है, तो यह कैश व्यवहार को समायोजित करने का समय है:

मेरे द्वारा किए गए बेंचमार्क के अनुसार, मैं आगे पढ़ने की जहमत नहीं उठाता blockdev। कर्नेल डिफ़ॉल्ट सेटिंग्स ठीक हैं।

एप्लिकेशन कोड पर फ़ाइल डेटा स्वैपिंग पसंद करने के लिए सिस्टम सेट करें (यदि आपके पास संपूर्ण RAM सिस्टम रखने के लिए पर्याप्त RAM नहीं है और सभी एप्लिकेशन कोड और RAM में एप्लिकेशन द्वारा आवंटित सभी वर्चुअल मेमोरी)। यह एक ही अनुप्रयोग से बड़ी फ़ाइलों तक पहुँचने के लिए विलंबता पर विभिन्न अनुप्रयोगों के बीच स्वैपिंग के लिए विलंबता को कम करता है:

echo 15 > /proc/sys/vm/swappiness

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

मैं आजकल (2017) को पसंद करता हूं कि अगर आपके पास पर्याप्त रैम है तो कोई स्वैप नहीं करना चाहिए। कोई स्वैप नहीं होने से आमतौर पर लंबे समय तक चलने वाली डेस्कटॉप मशीन पर 200-1000 एमबी रैम खो जाएगी। मैं सबसे खराब स्थिति परिदृश्य विलंबता से बचने के लिए इतना त्याग करने को तैयार हूं (जब रैम भरा हो तो एप्लिकेशन कोड स्वैप करना)। व्यवहार में, इसका मतलब है कि मैं OOM किलर को स्वैप करना पसंद करता हूं। यदि आपको स्वैपिंग की अनुमति / आवश्यकता है, तो आप /proc/sys/vm/watermark_scale_factorकुछ विलंबता से बचने के लिए भी बढ़ाना चाह सकते हैं । मैं 100 और 500 के बीच मान सुझाता हूं। आप इस सेटिंग को निम्न स्वैप विलंब के लिए ट्रेडिंग CPU उपयोग के रूप में मान सकते हैं। डिफ़ॉल्ट 10 है और अधिकतम संभव 1000 है। उच्च मूल्य चाहिए ( कर्नेल प्रलेखन के अनुसार ) जिसके परिणामस्वरूप kswapdप्रक्रियाओं के लिए अधिक सीपीयू का उपयोग होता है और समग्र समग्र विलंबता कम होती है।

इसके बाद, कर्नेल को फ़ाइल की सामग्री पर मेमोरी में पदानुक्रम रखने को प्राथमिकता दें, यदि कुछ रैम को मुक्त करने की आवश्यकता होती है (फिर, यदि सब कुछ रैम में फिट होता है, तो यह सेटिंग कुछ भी नहीं करती है):

echo 10 > /proc/sys/vm/vfs_cache_pressure

स्थापना vfs_cache_pressureकम मूल्य का मतलब समझ में आता है क्योंकि ज्यादातर मामलों में, कर्नेल को निर्देशिका संरचना को जानने की आवश्यकता होती है, इससे पहले कि वह कैश से फ़ाइल सामग्री का उपयोग कर सकती है और डायरेक्टरी कैश को जल्द ही फ्लश करके फ़ाइल को कैश के आगे बेकार कर देगी। इस सेटिंग के साथ 1 से नीचे जाने के सभी तरीकों पर विचार करें यदि आपके पास बहुत सारी छोटी फाइलें हैं (मेरी प्रणाली में लगभग 150K 10 मेगापिक्सेल तस्वीरें हैं और "बहुत सारी छोटी फाइलें" प्रणाली के रूप में गिना जाता है)। इसे कभी भी शून्य पर सेट न करें या निर्देशिका संरचना हमेशा स्मृति में रखी जाती है, भले ही सिस्टम मेमोरी से बाहर चल रहा हो। इसे बड़े मूल्य पर सेट करना तभी समझदारी है जब आपके पास केवल कुछ बड़ी फाइलें होती हैं जिन्हें लगातार पढ़ा जा रहा है (फिर से, पर्याप्त रैम के बिना एचडी वीडियो संपादन एक उदाहरण का मामला होगा)। आधिकारिक कर्नेल प्रलेखन कहता है कि "

अपवाद: यदि आपके पास वास्तव में भारी मात्रा में फ़ाइलें और निर्देशिकाएं हैं और आप शायद ही कभी स्पर्श करें / पढ़ें / सूची दें vfs_cache_pressureतो 100 से अधिक की सेटिंग वाली सभी फाइलें बुद्धिमान हो सकती हैं। यह केवल तभी लागू होता है जब आपके पास पर्याप्त रैम नहीं होती है और रैम में पूरी निर्देशिका संरचना नहीं रख सकती है और फिर भी सामान्य फ़ाइल कैश और प्रक्रियाओं के लिए पर्याप्त रैम होती है (उदाहरण के लिए कंपनी का फ़ाइल सर्वर बहुत सारे अभिलेखीय सामग्री के साथ)। यदि आपको लगता है कि आपको vfs_cache_pressure100 से ऊपर बढ़ाने की आवश्यकता है तो आप पर्याप्त रैम के बिना चल रहे हैं। वृद्धि से vfs_cache_pressureमदद मिल सकती है लेकिन अधिक रैम प्राप्त करने के लिए एकमात्र वास्तविक सुधार है। करने के बाद vfs_cache_pressureउच्च संख्या के लिए सेट और अधिक स्थिर प्रदर्शन समग्र होने के लिए औसत प्रदर्शन के बलिदान (जो है, तुम सच में बुरा व्यवहार सबसे खराब स्थिति से बचने लेकिन बदतर समग्र प्रदर्शन से निपटने के लिए कर सकते हैं)।

अंत में (डिफ़ॉल्ट के लिए राम का 50% तक का उपयोग करने के लेखन के लिए कैश के रूप में राम के 99% अप करने के लिए इस्तेमाल करते हैं और गिरी निर्देश देने के लिए नीचे प्रक्रिया है कि लिख रही धीमा से पहले गिरी बता dirty_background_ratioहै 10)। चेतावनी: मैं व्यक्तिगत रूप से ऐसा नहीं करूंगा लेकिन आपने दावा किया है कि आपके पास पर्याप्त रैम है और डेटा खोने के लिए तैयार हैं।

echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio

और बताएं कि 1h लिखने में देरी डिस्क पर सामान लिखना शुरू करना ठीक है (फिर, मैं ऐसा नहीं करूंगा):

echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs

यदि आप उन सभी /etc/rc.localको अंत में शामिल करते हैं और निम्नलिखित शामिल करते हैं, तो बूट के बाद जितनी जल्दी हो सके सब कुछ कैश में होगा (केवल ऐसा करें यदि आपका फाइलसिस्टम वास्तव में रैम में फिट बैठता है):

(nice find / -type f -and -not -path '/sys/*' -and -not -path '/proc/*' -print0 2>/dev/null | nice ionice -c 3 wc -l --files0-from - > /dev/null)&

या थोड़ा सरल विकल्प जो बेहतर तरीके से काम कर सकता है (केवल कैश /homeऔर /usr, ऐसा केवल तभी करें जब आपका /homeऔर /usrवास्तव में रैम में फिट हो):

(nice find /home /usr -type f -print0 | nice ionice -c 3 wc -l --files0-from - > /dev/null)&

3
एक अच्छी तरह से सूचित और समग्र रूप से स्वीकृत उत्तर की तुलना में बहुत बेहतर उत्तर! यह एक अंडरस्टैंडिंग है ... मुझे लगता है कि ज्यादातर लोग सिर्फ यह समझने की जहमत किए बिना सरल निर्देश चाहते हैं कि वे वास्तव में क्या करते हैं ...
व्लादिमीर पेंटेलेव

2
@Phpdevpad: इसके अलावा, प्रश्न में कहा गया है कि "मुझे न तो रैम के उपयोग के बारे में चिंता है [...]" - मुझे नहीं लगता कि कोई भी मेमो डिवाइस योग्य है।
मिकको रेंटालीनें

1
क्या SSDs के लिए एक बेहतर अनुसूचक नहीं है?
rep_movsd

1
@rep_movsd मैं केवल इंटेल SSD ड्राइव का उपयोग कर रहा हूं, लेकिन कम से कम ये ड्राइव अभी भी काफी धीमी हैं और अधिक बुद्धिमान शेड्यूलर जैसे कि CFQ के साथ बेहतर समग्र प्रदर्शन है। मुझे लगता है कि अगर आपका SSD ड्राइव 100K से अधिक यादृच्छिक IOPS के साथ सौदा कर सकता है, तो noop या समय सीमा का उपयोग करके तेजी से सीपीयू से भी समझ में आएगा। "फास्ट सीपीयू" के साथ मेरा मतलब है कि कम से कम कई 3GHz कोर केवल IO के लिए उपलब्ध हैं।
मिक्को रेंटालीनें

1
आप vm कर्नेल डॉक्स से इन vm ट्यूनबल्स के बारे में भी पढ़ सकते हैं ।
joeytwiddle

16

सबसे पहले, मैं आपको NTFS का उपयोग जारी रखने की अनुशंसा नहीं करता, क्योंकि लिनक्स में एनटीएफएस कार्यान्वयन किसी भी समय प्रदर्शन और सुरक्षा मुसीबत होगा।

यहाँ काफी चीजे है जो आप कर सकते है:

  • कुछ नए fs जैसे ext4या का उपयोग करेंbtrfs
  • उदाहरण के लिए, अपने io अनुसूचक को बदलने की कोशिश करें bfq
  • स्वैप बंद करें
  • जैसे कुछ स्वचालित प्रीलोडर का उपयोग करें preload
  • systemdबूट करते समय प्रीलोड करने के लिए कुछ का उपयोग करें
  • ... और कुछ और

शायद आप इसे आजमाना चाहते हैं :-)


1
मैं पहले से ही NTFS से पूरी तरह से एक बार ext4 में चला गया हूं, केवल Windows सिस्टम विभाजन होने के लिए केवल NTFS विभाजन छोड़ रहा है। लेकिन यह मेरे लिए कई असुविधाओं में बदल गया और मैंने एनटीएफएस को मुख्य डेटा विभाजन (जहां मैं अपने सभी दस्तावेज़, डाउनलोड, प्रोजेक्ट, स्रोत कोड आदि को संग्रहीत करता हूं) फ़ाइल सिस्टम के रूप में वापस बदल दिया। मैं अपने विभाजन संरचना और मेरे वर्कफ़्लो (कम विंडोज़ का उपयोग करने के लिए) का पुनर्विचार करना नहीं छोड़ता, लेकिन अभी NTFS को छोड़ना एक यथार्थवादी विकल्प नहीं लगता है।
इवान

अगर आपको विंडोज के अंदर भी अपने डेटा का उपयोग करना है, तो NTFS एकमात्र विकल्प हो सकता है। (कई अन्य विकल्प उपलब्ध हैं यदि आप अपने विंडोज को सिर्फ लिनक्स के अंदर वीएम के रूप में उपयोग कर सकते हैं)
फेलिक्स यान

1
एनटीएफएस की इन संभावित समस्याओं का सारांश उपयोगी होगा।
अंडरस्कोर_ड

2
लिनक्स पर NTFS प्रदर्शन के अलावा बहुत अधिक स्वीकार्य है। यह देखते हुए कि प्रश्न विशेष रूप से फ़ाइल सिस्टम के प्रदर्शन में सुधार के बारे में था, NTFS को जाना चाहिए।
मिको रानाल्टेन ने

भले ही btrfsहाल ही में फ़ाइल सिस्टम तैयार किया गया हो, फिर भी मैं इससे बचता हूँ कि अगर प्रदर्शन की आवश्यकता हो। हम अन्यथा सिस्टम btrfsऔर ext4फाइल सिस्टम के साथ समान रूप से चल रहे हैं और ext4वास्तविक दुनिया में बड़े अंतर से जीतते हैं ( btrfsलगता है ext4कि समान प्रदर्शन स्तर के लिए 4x सीपीयू समय की आवश्यकता है और एकल तार्किक कमांड के लिए अधिक डिस्क संचालन का कारण बनता है)। कार्यभार के आधार पर, मैं सुझाव दूंगा ext4, jfsया xfsकाम की मांग करने वाले किसी भी प्रदर्शन के लिए।
मिक्को रैंटलैनेन

8

आगे पढ़ें:

32 बिट सिस्टम पर:

blockdev --setra 8388607 /dev/sda

64 बिट सिस्टम पर:

blockdev --setra 4294967295 /dev/sda

कैश के पीछे लिखें:

echo 100 > /proc/sys/vm/dirty_ratio

यह आपकी मुफ्त मेमोरी के 100% तक कैश का उपयोग करेगा।

या आप सभी बाहर जा सकते हैं और tmpfs का उपयोग कर सकते हैं। यह केवल तभी प्रासंगिक है जब आपके पास पर्याप्त रैम हो। इसे अंदर डालें /etc/fstab। भौतिक रैम की मात्रा के साथ 100G बदलें।

tmpfs /mnt/tmpfs tmpfs size=100G,rw,nosuid,nodev 0 0

फिर:

mkdir /mnt/tmpfs; mount -a

फिर / mnt / tmpfs का उपयोग करें।


5
3 जीबी या 2 टीबी रीडहेड? वास्तव में? क्या आप भी जानते हैं कि ये विकल्प क्या करते हैं?
कोबरा_फास्ट

1
@Cobra_Fast क्या आप जानते हैं कि इसका क्या मतलब है? मुझे वास्तव में कोई पता नहीं है और मुझे अब दिलचस्पी है।
syss

3
@syss रीडहेड सेटिंग्स को मेमोरी "ब्लॉक" की संख्या के रूप में सहेजा जाता है, बाइट्स या बिट्स के रूप में नहीं। एक ब्लॉक का आकार कर्नेल संकलन समय पर निर्धारित किया जाता है (चूंकि रीडहेड-ब्लॉक मेमोरी ब्लॉक हैं) या कुछ मामलों में फाइलसिस्टम निर्माण समय। आम तौर पर हालांकि, 1 ब्लॉक में 512 या 4096 बाइट्स होते हैं। देखें linux.die.net/man/8/blockdev
Cobra_Fast

6

आप रीड-फ़ॉरवर्ड साइज़ के साथ सेट कर सकते हैं blockdev --setra sectors /dev/sda1, जहाँ वे सेक्टर हैं जो आप 512 बाइट सेक्टर में चाहते हैं।


2

मेरा हत्यारा सेटिंग बहुत सरल और बहुत प्रभावी है:

echo "2000" > /proc/sys/vm/vfs_cache_pressure

कर्नेल प्रलेखन से स्पष्टीकरण :

vfs_cache_pressure

कर्नेल की प्रवृत्ति को नियंत्रित करने के लिए मेमोरी को पुनः प्राप्त करने के लिए उपयोग किया जाता है जो निर्देशिका और इनोड ऑब्जेक्ट के कैशिंग के लिए उपयोग किया जाता है।

Vfs_cache_pressure = 100 के डिफ़ॉल्ट मान पर, कर्नेल पेजशेक और स्वैचेचे पुनः प्राप्त करने के संबंध में "निष्पक्ष" दर पर दांत और इनोड को पुनः प्राप्त करने का प्रयास करेगा। घटती vfs_cache_pressure कर्नेल को दांते और इनोड कैश को बनाए रखना पसंद करती है। जब vfs_cache_pressure = 0, कर्नेल मेमोरी दबाव के कारण डेन्चर और इनोडेस को पुनः प्राप्त नहीं करेगा और इससे आसानी से मेमोरी की स्थिति बन सकती है। 100 से अधिक vfs_cache_pressure बढ़ाना कर्नेल को डेन्थ और इनोड को पुनः प्राप्त करना पसंद करता है।

vfs_cache_pressure 2000 में इसका कारण यह है कि अधिकांश कंप्यूटिंग रैम में होता है और बहुत देर से डिस्क लिखता है।


4
vfs_cache_pressureबहुत अधिक सेट करना (मैं 2000बहुत अधिक विचार करूंगा) निर्देशिका सूची जैसे सरल सामान के लिए अनावश्यक डिस्क एक्सेस का कारण होगा जो आसानी से कैश में फिट होना चाहिए। आपके पास कितनी रैम है और आप सिस्टम के साथ क्या कर रहे हैं? जैसा कि मैंने अपने जवाब में लिखा था, इस सेटिंग के लिए उच्च मूल्य का उपयोग करना उदाहरण के लिए सीमित HD के साथ HD वीडियो संपादन के लिए समझ में आता है।
मिकको रेंटालिनेन

2
ध्यान दें कि संदर्भित प्रलेखन जारी है: " 100 से अधिक vfs_cache_pressure बढ़ाने से नकारात्मक प्रदर्शन प्रभाव पड़ सकता है। पुनर्प्राप्त कोड को फ्रीवेबल डायरेक्टरी और इनकोड ऑब्जेक्ट्स खोजने के लिए विभिन्न तालों को लेने की आवश्यकता है। vfs_cache_pressure - 1000 के साथ, यह वहां की तुलना में दस गुना अधिक मुक्त वस्तुओं की तलाश करेगा। कर रहे हैं। "
मिकको रेंटालिनेन

1

कैशिंग लिखने से संबंधित नहीं, लेकिन लिखने से संबंधित:

  • एक ext4 सिस्टम के लिए, आप जर्नलिंग को पूरी तरह से अक्षम कर सकते हैं

    यह किसी विशेष अपडेट के लिए डिस्क लिखने की संख्या को कम कर देगा, लेकिन एक अप्रत्याशित शटडाउन के बाद फाइल सिस्टम एक असंगत स्थिति हो सकती है, जिसमें एक fsck या बदतर की आवश्यकता होती है।

डिस्क को ट्रिगर डिस्क से पढ़ने से रोकने के लिए लिखते हैं:

  • साथ माउंट relatime या noatime विकल्प

    जब आप कोई फ़ाइल पढ़ते हैं, तो उस फ़ाइल के लिए "अंतिम एक्सेस किया गया समय" मेटाडेटा आमतौर पर अपडेट किया जाता है। noatimeविकल्प है कि व्यवहार को निष्क्रिय कर देगा। यह अनावश्यक डिस्क को कम करता है लिखता है, लेकिन अब आपके पास मेटाडेटा नहीं होगा। कुछ वितरण (उदाहरण के लिए मंज़रो) ने इसे सभी विभाजनों पर डिफ़ॉल्ट के रूप में अपनाया है (संभवतः पहले के मॉडल एसएसडी के जीवनकाल को बढ़ाने के लिए)।

    relatimeपहुँच के समय को कम बार अद्यतन करता है, जो आंकड़े के अनुसार उन अनुप्रयोगों का समर्थन करने में मदद करते हैं जो एटिम का उपयोग करते हैं। यह Red Hat Enterprise Linux पर डिफ़ॉल्ट है।

अन्य विकल्प:

  • उपरोक्त टिप्पणियों में, मिक्को ने नोबैरियर विकल्प के साथ बढ़ते की संभावना साझा की । लेकिन इवैलो ने रेडहैट को उद्धृत किया, जिन्होंने इसके खिलाफ चेतावनी दी थी। आप कितना अतिरिक्त 3% चाहते हैं?
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.