क्या वास्तव में vm.swappiness पैरामीटर नियंत्रित करता है?


36

कर्नेल दस्तावेज़ के अनुसार:

This control is used to define how aggressive the kernel will swap
memory pages.  Higher values will increase aggressiveness, lower values
decrease the amount of swap.

हालांकि यह अस्पष्ट है। मैं यह जानने की कोशिश कर रहा हूं कि आखिरकार पैरामीटर क्या नियंत्रित करता है। मुझे पता है कि यह समायोजित करता है कि कर्नेल पृष्ठ को स्वैप करने की कितनी आक्रामक कोशिश करता है, लेकिन कर्नेल कोड में निर्णय लेने की प्रक्रिया क्या प्रभावित करती है?

क्या यह समायोजित करता है कि कर्नेल को स्वैप करने से पहले एक पृष्ठ को कितनी देर पहले एक्सेस किया गया होगा? यदि हां, तो 60 का डिफ़ॉल्ट मान क्या दर्शाता है? और 1 के वेतन वृद्धि / घटाव (एक सूत्र अच्छा होगा) द्वारा कितना बदला गया है?
या क्या यह उनकी पहुँच आवृत्ति के आधार पर पृष्ठों की अदला-बदली करता है?
या कुछ और?


1
हाँ, swapiness है अस्पष्ट ;-)
ℝaphink

जवाबों:


27

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

vm.swappinessमें विकल्प खेलने में आता है get_scan_count()में परिभाषित किया गया mm/vmscan.cget_scan_count()यह निर्धारित करता है कि कैसे अज्ञात और फ़ाइल LRU सूचियों को स्कैन किया जाना चाहिए, जब पृष्ठों को निकालने के लिए खोज की जानी चाहिए। प्रत्येक मामले का मूल्य हाल ही में घुमाए गए और हाल ही में स्कैन किए गए अनुपातों के फ्लोटिंग औसत से निर्धारित होता है जहां सिस्टम के बदलते कार्यभार को ध्यान में रखते हुए हाल के संदर्भों में पुराने लोगों की तुलना में अधिक वजन होता है।

vm.swappinessएक आपरिवर्तक कि गुमनाम पृष्ठों के पक्ष में फ़ाइल कैश पृष्ठों बाहर गमागमन के बीच संतुलन को बदल देता है। डिफ़ॉल्टvm.swappiness पेजों को प्राथमिकता दी जाती है, डिफ़ॉल्ट रूप से 60 पर सेट की जाती है । फ़ाइल कैश को 200 का प्राथमिकता मूल्य दिया जाता है जिसमें से vm.swappinessसंशोधक काटा जाता है ( file_prio=200-anon_prio)। इसका मतलब यह है कि, डिफ़ॉल्ट रूप से, प्राथमिकता वाले वज़न गुमनाम पृष्ठों ( anon_prio=60, file_prio=200-60=140) के पक्ष में हैं । हालाँकि, जब सिस्टम एक आउट-ऑफ-मेमोरी स्थिति के करीब होता है , तो अनाम और फ़ाइल LRU सूची दोनों को समान रूप से स्कैन किया जाता है, जब तक कि vm.swappinessइसे शून्य पर सेट नहीं किया जाता है।

जब vm.swappiness100 पर सेट किया जाता है, तो प्राथमिकताएं समान ( anon_prio=100, file_prio=200-100=100) होंगी । vm.swappinessशून्य पर सेट करने से कर्नेल को फ़ाइल कैश से पृष्ठों के पक्ष में अनाम पृष्ठों को बेदखल करने से रोका जा सकेगा।


क्या फ़ाइल_प्रियो के स्वपन बदलने का कोई तरीका है? या इसे एक विशेष निर्देशिका तक सीमित करें?
CMCDragonkai

13

एक सूत्र है जिसका उपयोग यह गणना करने के लिए किया जाता है कि किस पृष्ठ को स्वैप किया जाएगा। में vmscan.cआप इस एल्गोरिथ्म देख सकते हैं:

स्वैप प्रवृत्ति = mapped_ratio / 2 + संकट + vm_swappiness

यहां आप देख सकते हैं कि स्वैगनेस एक पैमाना है, जिसे कुछ एल्गोरिथ्म में जोड़ा जाता है और आप इस पैरामीटर द्वारा नियंत्रित कर सकते हैं कि जब यह स्वैप करना होगा तो कर्नेल कैसे व्यवहार करेगा। आप इसे संभाव्यता के प्रतिशत के रूप में समझ सकते हैं, कि कुछ निष्क्रिय मेमोरी पेज स्वैप हो जाएगा। यदि आप 100 पर स्वैग सेट करते हैं, तो कोई संभावना नहीं है, लेकिन इस बात की गारंटी है कि यह स्वैप होगा और यदि आप इसे 0 पर सेट करते हैं, तो कर्नेल तब तक स्वैप नहीं करने का प्रयास करेगा, जब तक कि इसकी कुछ खाली मेमोरी न हो।


6

यह कहा गया है (मुझे लगता है कि नॉर्मन 1986) कि अक्सर एक लिफ्ट में "CLOSE DOOR" बटन या तो टूट गया है या कभी भी पहली जगह में कुछ भी जुड़ा नहीं था। यह ersatz को लिफ्ट में हेरफेर करने का एक तरीका नहीं है, बल्कि अति-जल्दी सवार को शांत करने का एक तरीका है।

इसी तरह से, स्वप्नदोष का एक कर्नेल के पूर्व-निर्धारण के लिए अच्छी तरह से परिभाषित, नियतात्मक नियंत्रण से असंबंधित प्रभाव होता है। जैसा कि askubuntu.com पर @neon_overlord ने नोट किया था

क्योंकि अधिकांश का मानना ​​है कि स्वैपिंग = खराब और अगर आप स्वैगनेस को कम नहीं करते हैं, तो सिस्टम स्वैप कर देगा जब वास्तव में इसकी आवश्यकता नहीं है। दोनों में से कोई भी सच नहीं है। लोग स्वैपिंग को ऐसे समय के साथ जोड़ते हैं, जहां उनका सिस्टम अस्त-व्यस्त हो रहा है - हालाँकि, यह ज्यादातर स्वैपिंग है क्योंकि सिस्टम को अन्य तरीकों से नहीं, बल्कि नीचे की ओर से चलाया जा रहा है। यह सच है कि कुछ निश्चित समय होते हैं जब स्वैपिंग पर ध्यान देने योग्य जुर्माना हो सकता है, लेकिन उस स्थिति के लिए स्वैग को कम करने से अन्य तरीकों से समग्र सिस्टम प्रदर्शन या स्थिरता कम हो सकती है जो बाद में ध्यान देने योग्य हो सकती है ...

तो यह वास्तव में क्या नियंत्रित करता है ? एक मान्य उत्तर - पहले से उपलब्ध कराए गए ठीक उत्तरों के अलावा - यह है कि यह आपकी अपेक्षा को संशोधित करता है कि आपके सिस्टम पर आपका अधिक नियंत्रण है और एक घुंडी को घुमाकर आप उस नियंत्रण को एक सार्थक अंदाज में बढ़ा पाएंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.