स्वैपिंग स्पष्ट रूप से तब हुई जब निष्क्रिय रैम पेज वास्तव में सक्रिय थे।
( अपडेट: जैसा कि एक टिप्पणी में स्पष्ट किया गया था, यह आपका मामला नहीं है। इसलिए समान समस्या वाले लोग क्षैतिज नियम को आगे छोड़ सकते हैं ।)
यानी आपके पास कई कार्यक्रम चल रहे थे और कर्नेल ने कुछ पृष्ठों की अदला-बदली की। फिर आपने कुछ कार्यक्रमों को चुना। कर्नेल उनके RAM पृष्ठों को निष्क्रिय के रूप में चिह्नित करता है। लेकिन जब तक इन पेजों की जरूरत नहीं होगी, तब तक यह रैम को वापस स्वैप नहीं करेगा। इससे निष्क्रिय और अदला-बदली वाले पृष्ठ दोनों बन जाते हैं।
क्यों नहीं preemptively swapping में पृष्ठों? क्योंकि यह बाधाओं के विरुद्ध होगा: लंबे समय में आप हार जाते हैं। आइए एक सरल उदाहरण के बारे में सोचते हैं: दो प्रोग्राम ए और बी जो एक ही समय में रैम में फिट नहीं होते हैं। प्रोग्राम A अभी भी चल रहा है और सभी अदला-बदली वाले पृष्ठ A. प्रोग्राम B से संबंधित हैं और सभी निष्क्रिय पृष्ठ B से संबंधित हैं।
यदि कर्नेल प्रीमेप्टीली स्वैग-इन A के पृष्ठों में और उसके बाद
- कार्यक्रम A को पृष्ठों तक पहुंचने की आवश्यकता है -> आप जीतते हैं - पृष्ठ पहले से ही रैम में हैं।
- आप बी को फिर से लॉन्च करते हैं -> आप हार जाते हैं - आप पृष्ठों को रैम में लाने के लिए लागत का "भुगतान" करते हैं और अब आपको उन्हें वापस भेजना होगा।
- यदि आप A और C एक ही समय में RAM में फिट नहीं होते हैं, तो आप एक और प्रोग्राम C -> खो देते हैं। अगर वे फिट हैं, तो आप भी हैं।
यह भी ध्यान रखें कि स्वैपिंग-आउट (डिस्क से लिखना) स्वैपिंग-इन (डिस्क से पढ़ना) की तुलना में अधिक महंगा है। जो इस "शर्त" को और भी अधिक अप्राप्य बनाता है।
संक्षेप में: अपनी कर्नेल पर भरोसा करें और इसे आउटसोर्स करने का प्रयास न करें।
अद्यतन:
यह बताता है कि निष्क्रिय मेमोरी काम नहीं करती है क्योंकि सिस्टम मेमोरी आर्टिकल पढ़ने के लिए एक्टिविटी मॉनिटर का उपयोग करने से कई लोगों को विश्वास होता है कि यह काम करता है। निष्क्रिय मेमोरी के लिए लेख में दी गई परिभाषा सही है:
यह जानकारी रैम में है लेकिन इसका सक्रिय रूप से उपयोग नहीं किया जा रहा है, हाल ही में इसका उपयोग किया गया था।
लेकिन निम्नलिखित उदाहरण पूरी तरह से भ्रामक और अति-सरलीकृत है (जैसे मेरा उदाहरण फ्रैंक होना):
उदाहरण के लिए, यदि आप मेल का उपयोग कर रहे हैं और फिर इसे छोड़ दें, तो मेल का उपयोग करने वाला RAM निष्क्रिय मेमोरी के रूप में चिह्नित है। नि: शुल्क मेमोरी की तरह, एक अन्य एप्लिकेशन द्वारा उपयोग के लिए निष्क्रिय मेमोरी उपलब्ध है। हालाँकि, यदि आप किसी अन्य अनुप्रयोग द्वारा इसकी निष्क्रिय स्मृति का उपयोग करने से पहले मेल खोलते हैं, तो मेल त्वरित रूप से खुल जाएगा क्योंकि इसकी निष्क्रिय स्मृति को सक्रिय मेमोरी में बदल दिया जाता है, बजाय इसे धीमे ड्राइव से लोड करने के।
मैंने अधिक ऑनलाइन संसाधनों की खोज की और डार्विन कर्नेल मेलिंग सूची में इस थ्रेड तक समाप्त हो गया जो काफी जानकारीपूर्ण है। जिम मेगी को उद्धृत करते हुए (डार्विन टीम से - मुझे लगता है):
संक्षेप में, स्मृति दबाव से निपटने के दौरान कर्नेल वीएम सिस्टम इन-यूज़ किए गए पृष्ठों के माध्यम से स्कैन करता है और उन्हें सक्रिय और निष्क्रिय सेटिंग के बीच संतुलन में रखने की कोशिश करता है। निष्क्रिय पृष्ठों को फिर से उपयोग के लिए स्कैन किया जाता है जबकि निष्क्रिय के रूप में चिह्नित किया जाता है। यदि उनका पुन: उपयोग किया गया है, तो उन्हें सक्रिय के रूप में चिह्नित किया जाता है और किसी अन्य पृष्ठ को सक्रिय से निष्क्रिय अवस्था में ले जाना चाहिए ताकि यह पता चल सके कि यह सक्रिय उपयोग में है। तो, निष्क्रिय एक मिथ्या नाम है। यह "संभवतः निष्क्रिय, के लिए शॉर्टहैंड है जो इसे सत्यापित करने का प्रयास करता है।"
जैसा कि आपने खोजा, आंतरिक संतुलन हम (वर्तमान में) के लिए प्रयास करते हैं लगभग 2/3 सक्रिय बनाम 1/3 निष्क्रिय ...
यह आपके द्वारा देखे गए व्यवहार की व्याख्या करता है। यानी आपके द्वारा देखे जाने वाले निष्क्रिय पृष्ठ उन चल रहे कार्यक्रमों से संबंधित हैं जिनका हाल ही में उपयोग नहीं किया गया है। इसलिए, जब आप एक नया प्रोग्राम फायर करते हैं, तो निष्क्रिय पृष्ठों की अदला-बदली होती है। उसी समय सक्रिय बनाम निष्क्रिय के 2/1 अनुपात को बनाए रखने के लिए अन्य कार्यक्रमों के पृष्ठों को निष्क्रिय के रूप में चिह्नित किया जाता है।
धागा भी डार्विन internals के बारे में अधिक जानने के लिए कुछ सुझाव दिए गए हैं। समुद्र तट की समस्याओं के कारण मेमोरी उपयोग की जांच शुरू करने के मामले में कुछ सुझाव भी हैं (जो आमतौर पर इसके साथ बहुत कम हैं)।
निष्कर्ष समान है: अपनी गिरी पर भरोसा करें और इसे बाहर करने की कोशिश न करें। :-)