हमें अपनी भौतिक स्मृति से दोगुना बड़ा स्वैप स्थान निर्धारित करने की आवश्यकता क्यों है?


11

जब हम एक linux system सेटअप करना चाहते हैं, तो स्वैप स्पेस को आपकी भौतिक मेमोरी से दोगुना बड़ा करने के लिए एक सामान्य सुझाव है। मैं जानना चाहता हूं कि हमें इसकी आवश्यकता क्यों है, और यह सुझाव कैसा है?

जवाबों:


8

संक्षिप्त उत्तर "आपको नहीं है "।

कर्नेल / प्रणाली के प्रकार के आधार पर यह स्वैप स्पेस को आकार देने के लिए समझ में आता है, जैसे कि FreeBSD की ट्यूनिंग (7) मैनपेज में हम भौतिक स्मृति आकार के कम से कम 2x में स्वैप आकार के पीछे निम्नलिखित तर्क पाते हैं:

आप आमतौर पर अपने स्वैप स्पेस को 2GB से कम रैम वाले सिस्टम के लिए लगभग 2x मुख्य मेमोरी या लगभग 1x मुख्य मेमोरी का आकार दें यदि आप अधिक हैं। यदि आपके पास बहुत अधिक रैम नहीं है, हालांकि, आप आमतौर पर बहुत अधिक स्वैप चाहते हैं। यह अनुशंसा नहीं की जाती है कि आप किसी सिस्टम पर 256M से कम स्वैप को कॉन्फ़िगर करें और स्वैप विभाजन को आकार देते समय भविष्य की मेमोरी के विस्तार को ध्यान में रखें। जब कम से कम 2x स्वैप बनाम मुख्य मेमोरी होती है, तो कर्नेल का VM पेजिंग एल्गोरिदम सबसे अच्छा प्रदर्शन करने के लिए तैयार होता है। बहुत कम स्वैप को कॉन्फ़िगर करने से वीएम पेज स्कैनिंग कोड में अक्षमता हो सकती है और साथ ही बाद में समस्याएं पैदा हो सकती हैं यदि आप अपनी मशीन में अधिक मेमोरी जोड़ते हैं। अंत में, कई SCSI डिस्क (या विभिन्न नियंत्रकों पर संचालित कई IDE डिस्क) के साथ बड़े सिस्टम पर, हम दृढ़ता से अनुशंसा करते हैं कि आप प्रत्येक ड्राइव पर स्वैप कॉन्फ़िगर करें। ड्राइव पर स्वैप विभाजन लगभग एक ही आकार का होना चाहिए। कर्नेल मनमाने आकार को संभाल सकता है, लेकिन आंतरिक डेटा संरचनाएं सबसे बड़े स्वैप विभाजन का 4 गुना है। एक ही आकार के पास स्वैप विभाजन को रखने से कर्नेल को N डिस्क के पार स्वैच्छिक रूप से स्ट्राइप स्पेस मिल जाएगा। इसे थोड़ा ज़्यादा करने के बारे में चिंता न करें, स्वैप स्पेस UNIX की बचत अनुग्रह है और यहां तक ​​कि अगर आप सामान्य रूप से बहुत स्वैप का उपयोग नहीं करते हैं, तो यह आपको रिबूट के लिए मजबूर होने से पहले एक भगोड़ा कार्यक्रम से उबरने के लिए अधिक समय दे सकता है। एक ही आकार के पास स्वैप विभाजन को रखने से कर्नेल को N डिस्क के पार स्वैच्छिक रूप से स्ट्राइप स्पेस मिल जाएगा। इसे थोड़ा ज़्यादा करने के बारे में चिंता न करें, स्वैप स्पेस UNIX की बचत अनुग्रह है और यहां तक ​​कि अगर आप सामान्य रूप से बहुत स्वैप का उपयोग नहीं करते हैं, तो यह आपको रिबूट के लिए मजबूर होने से पहले एक भगोड़ा कार्यक्रम से उबरने के लिए अधिक समय दे सकता है। एक ही आकार के पास स्वैप विभाजन को रखने से कर्नेल को N डिस्क के पार स्वैच्छिक रूप से स्ट्राइप स्पेस मिल जाएगा। इसे थोड़ा ज़्यादा करने के बारे में चिंता न करें, स्वैप स्पेस UNIX की बचत अनुग्रह है और यहां तक ​​कि अगर आप सामान्य रूप से बहुत स्वैप का उपयोग नहीं करते हैं, तो यह आपको रिबूट के लिए मजबूर होने से पहले एक भगोड़ा कार्यक्रम से उबरने के लिए अधिक समय दे सकता है।

अन्य कारक महत्वपूर्ण हो सकते हैं जब आप तय करते हैं कि कितना स्वैप स्थान आवंटित करना है, इसे कहां आवंटित करना है, और इसी तरह। उदाहरण के लिए, यदि आप 128 जीबी की भौतिक मेमोरी के साथ एक बड़ा सर्वर स्थापित कर रहे हैं, तो स्वैप के लिए 256 जीबी डिस्क स्थान के पूर्व-आवंटन से बचने के लिए संभवतः एक अच्छा विचार है जो कभी उपयोग नहीं होने वाला है।

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

कोई भी पूर्ण नियम नहीं है जो सभी मामलों में फिट हो । आपको अपने विशिष्ट सिस्टम के व्यवहार के बारे में पढ़ना होगा, यह सीखना होगा कि यह कैसे काम करता है, सिस्टम के इच्छित उपयोग के बारे में सोचें और स्वैप स्पेस का सबसे अच्छा आकार तय करें जो आपकी आवश्यकताओं के अनुरूप हो।


5

आपको बिलकुल भी ज़रूरत नहीं है। विंडोज़ के पुराने संस्करण आवंटित मेमोरी के प्रत्येक पृष्ठ को अनिवार्य रूप से स्वैप फ़ाइल पर एक एमएएमपी के रूप में मानते हैं, इसलिए आपको इसे उपयोगी बनाने के लिए स्वैप में कम से कम आपके कुल भौतिक रैम आकार की आवश्यकता है - यह आज मामला नहीं है, और कभी भी नहीं था लिनक्स में मामला है, लेकिन अफवाह बनी रहती है।

हालांकि, एक ऐसा मामला है जहां रैम के रूप में कम से कम स्वैप होना वांछनीय है - हाइबरनेशन। चूंकि लिनक्स हाइबरनेशन (उर्फ, सस्पेंड-टू-डिस्क) के लिए स्वैप फ़ाइल का उपयोग करता है, इसलिए आपको रैम में सभी डेटा को रखने के लिए पर्याप्त स्वैप की आवश्यकता होती है, साथ ही सभी डेटा जो पहले से स्वैप किए गए थे (माइनस कैश रैम)। यह केवल उन मशीनों के लिए मामला है, जिन्हें लैपटॉप के रूप में हाइबरनेट करने की आवश्यकता है, निश्चित रूप से।

अंत में, बहुत अधिक स्वैप होना एक बुरी बात हो सकती है, इसके बावजूद कि दूसरे क्या कह सकते हैं। सोचें - अगर आपके पास 4 जी रैम है, और उसके ऊपर स्वैप की अतिरिक्त 8 जी की जरूरत है, तो क्या आपको लगता है कि आपका सिस्टम अभी भी प्रयोग करने योग्य है, यह सभी स्वैपिंग / डिस्क से क्या कर रहा है? जब आप स्मृति से बाहर निकलते हैं, तो स्मृति-हॉगिंग प्रक्रिया को तुरंत समाप्त करना बेहतर होता है, बल्कि पूरे सिस्टम को एक अनुपयोगी स्तर तक धीमा होने के बजाय जब वह अपने सभी समय के डेटा को स्वैप और उसके बाहर खर्च करना शुरू कर देता है।


1

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

आधुनिक यूनियनों ने ऐसा व्यवहार नहीं किया है, इसलिए नियम का कारण अप्रचलित है (मुझे लगता है कि यह 1992 में पहले से ही अप्रचलित था, इसलिए यह लिनक्स के लिए कभी भी प्रासंगिक नहीं था)। लेकिन विचित्र रूप से पर्याप्त नियम बच गया। यदि आप अभी इसका अनुसरण करते हैं, तो आपको वर्चुअल मेमोरी मिलती है जो आपकी रैम की मात्रा का तीन गुना है, जबकि मूल इरादा इससे दोगुना प्राप्त करना था।

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


विंडोज ऐसा भी करता है: यदि मेमोरी मैनेजर के पास पर्याप्त स्वैप स्थान है तो यह उन पृष्ठों की एक प्रति भी रखता है जो स्मृति में हैं (कम से कम हाल ही में संशोधित लोगों से मुझे लगता है), इसलिए यदि उन्हें स्वैप करने की आवश्यकता है तो वह ऐसा कर सकते हैं पृष्ठों को स्मृति से दूर करके।
pqnet

0

विशिष्ट प्रणाली मेमोरी क्षमता, मेमोरी बस गति बनाम डिस्क की गति और विभिन्न प्रतीक्षा अवस्थाओं में समय प्रक्रियाओं का प्रतिशत के बारे में मान्यताओं के आधार पर एक प्राचीन सिफारिश। मुझे संदेह है कि इन दिनों आप स्वैप अंतरिक्ष में शायद 1/2 से अधिक भौतिक मेमोरी चाहते हैं - जब आप पूर्ण मेमोरी उपयोग के पास चल रहे हों तो यादृच्छिक OOM हत्या को रोकने के लिए पर्याप्त है। लेकिन पूरी तरह से आपके विशिष्ट कार्यभार, YMMV, आदि पर निर्भर करता है

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