सवाल लिनक्स पर रैम में कैशिंग / प्रीलोडिंग फाइलें


मेरे पास एक पुराना सर्वर है जिसमें 4 जीबी रैम है और यह पूरे दिन एक ही फाइलों की सेवा कर रहा है, लेकिन यह हार्ड ड्राइव से ऐसा कर रहा है जबकि 3 जीबी रैम "फ्री" है।

जिसने कभी भी राम-ड्राइव चलाने की कोशिश की है, वह यह देख सकता है कि यह है बहुत बढ़िया गति के मामले में। इस प्रणाली का स्मृति उपयोग आम तौर पर 1 जीबी / 4 जीबी से अधिक नहीं होता है, इसलिए मैं जानना चाहता हूं कि कुछ अच्छी चीज़ के लिए उस अतिरिक्त मेमोरी का उपयोग करने का कोई तरीका है या नहीं।

  • क्या फाइल सिस्टम को हमेशा कुछ फाइलों को राम से बाहर करने के लिए बताना संभव है?
  • क्या रैम के उपयोग से फ़ाइल पढ़ने की क्षमताओं को बेहतर बनाने के लिए मैं उपयोग कर सकता हूं?

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

यहां संभावित अनुप्रयोग हैं:

  • स्थैतिक फ़ाइलों वाले वेब सर्वर जो बहुत पढ़ते हैं
  • बड़े पुस्तकालयों के साथ आवेदन सर्वर
  • डेस्कटॉप कंप्यूटर बहुत अधिक रैम के साथ

कोई विचार?

संपादित करें:

  • यह बहुत ही जानकारीपूर्ण पाया: लिनक्स पेज कैश और पीडीएफएलश
  • जैसा कि ज़ैन ने बताया, स्मृति वास्तव में मुक्त नहीं है। मेरा मतलब यह है कि यह अनुप्रयोगों द्वारा उपयोग नहीं किया जा रहा है और मैं नियंत्रण में नियंत्रण करना चाहता हूं कि स्मृति में कैश किया जाना चाहिए।

60
2017-07-21 07:01


मूल


मैं भी इन पंक्तियों के साथ कुछ मांग रहा हूँ। मुझे नहीं लगता कि सामान्य फाइल सिस्टम डिस्क ब्लॉक कैशिंग उत्तर है। मान लीजिए कि मैं डिस्क ब्लॉक एक्स हमेशा कैश किया जाना चाहता हूँ। कुछ इसका उपयोग करता है, और कर्नेल इसे कैश करता है। अब तक बहुत अच्छा है, लेकिन अगली प्रक्रिया ब्लॉक वाई चाहता है, इसलिए कर्नेल मेरे ब्लॉक एक्स और कैश वाई को बदले में छोड़ देता है। अगली प्रक्रिया जो एक्स चाहता है उसे डिस्क से बाहर आने के लिए इंतजार करना होगा; यही वह है जिसे मैं टालना चाहता हूं। मैं क्या चाहूंगा (और मुझे लगता है कि मूल पोस्टर भी बाद में है) एक फाइल सिस्टम पर लिखने के माध्यम से एक कैश ओवरले करना है जो फाइलों की गारंटी देगा
यह देखते हुए कि सर्वसम्मति यह प्रतीत होती है कि लिनक्स आपके लिए अक्सर उपयोग की जाने वाली फाइलों को कैशिंग कर रहा है, मुझे आश्चर्य है कि क्या आप वास्तव में यहां दी गई सलाह का उपयोग करके कोई सुधार करने में कामयाब रहे हैं। ऐसा लगता है कि कैशिंग को मैन्युअल रूप से नियंत्रित करने का प्रयास कैश को गर्म करने के लिए उपयोगी हो सकता है, लेकिन उपयोग पैटर्न के साथ आप वर्णन करते हैं ("पूरे दिन एक ही फाइल की सेवा"), यह पहले से ही गर्म होने वाले सर्वर की मदद नहीं करेगा बहुत, अगर बिल्कुल। - Nate C-K
आप कहते हैं कि आप एक हैक की तलाश नहीं कर रहे हैं, लेकिन लिनक्स पहले से ही करता है जो आप डिफ़ॉल्ट रूप से करना चाहते हैं। निम्नलिखित समीकरण: "पूरे दिन एक ही फाइलों की सेवा करना" + "फाइल सिस्टम को हमेशा रैम से कुछ फाइलों को सेवा देने के लिए बताएं" परिभाषा के अनुसार "हैक" बराबर है। क्या आपने वास्तव में कोई प्रदर्शन सुधार देखा था? मेरे अनुभव से, आपके फाइल सिस्टम से लिनक्स कैश का बीजीजस पढ़ता है। - Mike S
स्पष्टीकरण के लिए, लिनक्स फ़ाइलों को कैश करता है, लेकिन मेटाडेटा प्रत्येक अनुरोध के लिए प्रत्येक फ़ाइल के लिए मान्य है। कताई जंग पर, बहुत छोटी फाइलों के साथ एक व्यस्त वेब सर्वर पर, जो अभी भी आईओ विवाद और समय से बाहर ड्राइव पहन सकता है। स्टेटिक सामग्री और स्क्रिप्ट्स rsync / dev / shm या ऐप स्टार्टअप पर कस्टम tmpfs माउंट में हो सकती हैं। मैंने इसे कुछ दशकों तक किया है और मेरी ड्राइव समय से पहले नहीं पहनती है। इसके अलावा मेरी साइटें भारी विस्फोट का सामना करती हैं इस तरह से काफी बेहतर होती हैं। यह सबसे महंगा उद्यम हार्डवेयर से कमोडिटी हार्डवेयर तक कुछ भी मदद करता है। - Aaron


जवाब:


vmtouch नौकरी के लिए एक अच्छा उपकरण की तरह लगता है।

मुख्य विशेषताएं:

  • पूछें कि निर्देशिका में कितना कैश किया गया है
  • पूछें कि कितनी फाइल कैश की गई है (कौन से पेज, ग्राफिकल प्रतिनिधित्व)
  • फ़ाइल को कैश में लोड करें
  • कैश से फ़ाइल हटा दें
  • कैश में फ़ाइलों को लॉक करें
  • डेमन के रूप में चलाओ

vmtouch मैनुअल

संपादित करें: प्रश्न में पूछे गए उपयोग उदाहरण 5 में सूचीबद्ध है vmtouch होमपेज

Example 5

Daemonise and lock all files in a directory into physical memory:

vmtouch -dl /var/www/htdocs/critical/

EDIT2: जैसा विख्यात टिप्पणियों में, अब एक है गिट भंडार उपलब्ध।


45
2017-09-01 21:40



भविष्य के दर्शकों के लिए, vmtouch का उपयोग करने का प्रयास करें गिट भंडार लिंक किए गए पृष्ठ पर निर्देशों का पालन करने के बजाय। इस तरह आप एक मेकफ़ाइल प्राप्त करते हैं और अपडेट खींच सकते हैं। - randomous
ऐसा लगता है कि फ़ाइल के आकार (4 जीबी) की सीमा है। क्या कोई और विकल्प है? - Alix Axel


इसका उपयोग करना भी संभव है vmtouch वर्चुअल मेमोरी टौचर उपयोगिता

टूल आपको लिनक्स सिस्टम पर फाइल सिस्टम कैश को नियंत्रित करने की अनुमति देता है। आप VM कैश उपप्रणाली में किसी विशिष्ट फ़ाइल या निर्देशिका को बल या लॉक कर सकते हैं, या यह देखने के लिए इसका उपयोग कर सकते हैं कि फ़ाइल / निर्देशिका का कौन सा भाग वीएम के भीतर निहित है।

How much of the /bin/ directory is currently in cache?

$ vmtouch /bin/
           Files: 92
     Directories: 1
  Resident Pages: 348/1307  1M/5M  26.6%
         Elapsed: 0.003426 seconds

या ...

Let's bring the rest of big-dataset.txt into memory...

$ vmtouch -vt big-dataset.txt
big-dataset.txt
[OOo                                                 oOOOOOOO] 6887/42116
[OOOOOOOOo                                           oOOOOOOO] 10631/42116
[OOOOOOOOOOOOOOo                                     oOOOOOOO] 15351/42116
[OOOOOOOOOOOOOOOOOOOOOo                              oOOOOOOO] 19719/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOo                        oOOOOOOO] 24183/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo                  oOOOOOOO] 28615/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo              oOOOOOOO] 31415/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo      oOOOOOOO] 36775/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo  oOOOOOOO] 39431/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 42116/42116

           Files: 1
     Directories: 0
   Touched Pages: 42116 (164M)
         Elapsed: 12.107 seconds

24
2017-10-23 16:50



यह एक महान उपयोगिता है और वास्तव में ओपी ने अनुरोध किया है। अगर वह केवल इसे एक उत्तर के रूप में स्वीकार करेगा। - laebshade
क्या आप जानते हैं कि यह ZFS के साथ काम करता है? - CMCDragonkai
@CMCDragonkai मुझे नहीं लगता कि यह ZFS के साथ जरूरी है ... सोचें: एआरसी और एल 2एआरसी। - ewwhite


2.6 कर्नेल स्वैपिंग और पृष्ठ-कैशिंग सुविधाओं पर कुछ व्यापक पढ़ने के बाद मुझे 'fcoretools' मिला। जिसमें दो टूल्स होते हैं;

  • फिनकोर: यह बताएगा कि कोर मेमोरी में एप्लिकेशन कितने पेज संग्रहीत है
  • fadvise: आपको कोर मेमोरी (पेज-कैश) में हेरफेर करने की अनुमति देता है।

(यदि किसी और को यह दिलचस्प लगता है तो मैं इसे यहां पोस्ट कर रहा हूं)


17
2017-07-21 08:09



मैंने सोचा कि कहीं ऐसा करने के लिए एक कार्यक्रम था। +1 - Brad Gilbert


फाइल सिस्टम कैश में सामान प्राप्त करने के लिए एक गरीब व्यक्ति की चाल बस इसे बिल्ली और उसे / dev / null पर रीडायरेक्ट करना है।


16
2017-07-21 07:19



इस बात से सहमत। और यदि आप यह सुनिश्चित करना चाहते हैं कि कुछ फाइलें कैश की गई हैं, तो क्रॉन जॉब बनाएं catसमय-समय पर / dev / null फ़ाइल है - Josh


लिनक्स जितना संभव हो उतना डिस्क IO स्मृति में कैश करेगा। कैश और बफर मेमोरी आंकड़े यही हैं। सही चीजों को संग्रहित करने से आप शायद बेहतर काम करेंगे।

हालांकि, अगर आप मेमोरी में अपना डेटा संग्रहीत करने का आग्रह करते हैं, तो आप या तो tmpfs या ramfs का उपयोग करके रैम ड्राइव बना सकते हैं। अंतर यह है कि ramfs आपके द्वारा मांगी गई सभी मेमोरी आवंटित करेगा, क्योंकि tmpfs केवल उस स्मृति का उपयोग करेगा जो आपका ब्लॉक डिवाइस उपयोग कर रहा है। मेरी याददाश्त थोड़ा जंगली है, लेकिन आपको ऐसा करने में सक्षम होना चाहिए:

 # mount -t ramfs ram /mnt/ram 

या

 # mount -t tmpfs tmp /mnt/tmp

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


15
2017-07-21 07:17



आपके उत्तर के लिए धन्यवाद, लेकिन यह स्पष्ट रूप से मैं बचाना चाहता हूं। अन्यथा मैं बस इसे स्क्रिप्ट करता हूं ताकि कंप्यूटर रैमड्राइव बना सके, फाइलों की प्रतिलिपि बनाये और प्रतीकात्मक रूप से रैमड्राइव से लिंक हो। लेकिन फिर मेरा डेटा असंगत है। मैं एक फाइल सिस्टम की उम्मीद कर रहा था जहां मैं कुछ फाइलों को स्मृति में कैश करने के लिए 'टैग' कर सकता हूं। लेकिन शायद मैं थोड़ा आशावादी हूँ। - Andrioid
आप उन्हें "टैग" फ़ाइलों को एक्सेस करके कैश किए जाने के लिए। - womble♦
यदि केवल सबसे अधिक उपयोग की जाने वाली फ़ाइलों को स्वचालित रूप से टैग करने का कोई तरीका था। - David Pashley
Blimey, कटाक्ष अच्छी तरह से यात्रा नहीं करता है :) - David Pashley
हाँ धन्यवाद। मैं आईओ कैशिंग की अवधारणा को समझता हूं। मैंने इसे अपने जवाब में भी समझाया। ऐसा लगता है कि आपने सूक्ष्म टिप्पणी नहीं पढ़ी कि यह कटाक्ष था। - David Pashley


दो कर्नेल सेटिंग्स हैं जो अन्य टूल्स का उपयोग किए बिना भी काफी मदद कर सकती हैं:

swappiness

लिनक्स कर्नेल को बताता है कि इसे स्वैप का उपयोग कैसे करना चाहिए। विकिपीडिया लेख का उद्धरण:

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

vfs_cache_pressure

से उद्धरण vm.txt:

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

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


व्यवस्थित करके swappiness उच्च (100 की तरह), कर्नेल उन सभी चीज़ों को ले जाता है जिन्हें इसे स्वैप करने की आवश्यकता नहीं होती है, कैशिंग फ़ाइलों के लिए रैम को मुक्त करना। और सेटिंग द्वारा vfs_cache_pressure निचला (चलो 50 से कहें, 0 से नहीं!), यह रैम में एप्लिकेशन डेटा रखने के बजाय कैशिंग फ़ाइलों का पक्ष लेगा।

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


5
2017-10-23 16:17





मुझे बहुत संदेह है कि यह वास्तव में डिस्क से फ़ाइलों को 3 जीबी रैम के साथ मुक्त कर रहा है। लिनक्स फ़ाइल कैशिंग बहुत अच्छी है।

यदि आप डिस्क IO देख रहे हैं, तो मैं आपकी लॉगिंग कॉन्फ़िगरेशन देखता हूं। कई लॉग्स अनबफर के रूप में सेट हो जाते हैं, यह गारंटी देने के लिए कि नवीनतम लॉग जानकारी क्रैश होने की स्थिति में उपलब्ध है। उन प्रणालियों में जिन्हें तेजी से ध्यान दिया जाना चाहिए, buffered लॉग IO का उपयोग करें या रिमोट लॉग सर्वर का उपयोग करें।


2
2017-07-21 07:11



ठीक है आप हैं, मैं सिर्फ यह नियंत्रित करना चाहता हूं कि कैश किया जा रहा है। - Andrioid


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


2
2017-07-21 07:44





आप सिर्फ एक प्रोग्राम प्राप्त करने में सक्षम हो सकते हैं mmapआपकी फाइलें तब चलती रहती हैं।


2
2017-07-21 17:24



जहां तक ​​मैं कह सकता हूं, वह बहुत कुछ है जो 'फडवाइस' (fcoretools) करता है। - Andrioid