लिनक्स में, मैं वीएम स्नैपशॉट्स के आकार को कम करने के लिए स्मृति पृष्ठों को कैसे मुक्त कर सकता हूं?वीएम स्नैपशॉट आकार को कम करने के लिए अप्रयुक्त स्मृति को शून्य कैसे करें
गैर-शून्य वाली स्मृति स्नैपशॉट में संग्रहीत की जाती है भले ही उस स्मृति को मुक्त कर दिया गया हो और अब इसका उपयोग नहीं किया गया है। उदाहरण के लिए, स्मृति पृष्ठों के साथ
sync && echo 3 > /proc/sys/vm/drop_caches
बेकार में स्नैपशॉट में जमा हो जाती है, क्योंकि वे ध्यान केंद्रित किया नहीं किया गया है फाइल सिस्टम कैश से मुक्त कर दिया। जब तक OOM किलर में लात मारता है
अद्यतन वास्तव में एक भयानक समाधान काम करने के लिए प्रतीत होता है कि एक पाश में malloc + memset स्मृति है। यह एक वीएम स्नैपशॉट मैं 400MB के बारे में करने के लिए 800MB के बारे में से परीक्षण किया के आकार को कम कर देता। क्या कोई बेहतर समाधान है?
(हटाए गए जवाब के बाद से संपादित करने के बाद, ऐसा लगता है मैं गलत समझा क्या तुम सच में चाहते थे) – Damon
मुझे लगता है कि यह भी संभव नहीं है। लिनक्स में एक सिंगल गाय शून्य पृष्ठ है जो यह नए आवंटन पर लौटाता है, और यह पहली लेखन पहुंच पर प्रतिलिपि बनाता है (शून्य से भरा एक पृष्ठ बना रहा है, लेकिन यह तकनीकी रूप से शून्य पृष्ठ नहीं है)। इस प्रकार _could_ इस प्रकार सभी भौतिक स्मृति (सिद्धांत में) को स्मृति की एक बड़ी मात्रा आवंटित करके और प्रत्येक पृष्ठ की शुरुआत में '' 0 0' 'लिखकर शून्य करता है, लेकिन बाद में डेटा वाले डेटा होंगे (शून्य, जैसा होता है) शून्य पेज नहीं और यदि आप उन्हें फिर से मुक्त करते हैं, तो वे आपके द्वारा किए गए गैर-शून्य मुक्त पृष्ठों के समान होंगे - केवल वे शून्य होंगे। – Damon
हालांकि आप ऐसा करने का प्रयास कर सकते हैं (बहुत सारी मेमोरी आवंटित कर सकते हैं, और इसे शारीरिक रूप से शून्य बना सकते हैं), और फिर पूरी तरह से 'MADV_MERGEABLE')। शायद कर्नेल समान पृष्ठ विलय करने से चाल चल जाएगी। ध्यान दें कि यह बिल्कुल एक नि: शुल्क ऑपरेशन (सीपीयू-वार) नहीं है। – Damon