क्या स्वैपिंग को आवेदन स्तर पर अक्षम किया जा सकता है?


10

मैं वर्तमान में एन्क्रिप्टेड ईमेल पढ़ने के लिए gnupg के साथ थंडरबर्ड का उपयोग कर रहा हूं। यदि मैं स्वैपिंग व्यवहार को सही ढंग से समझता हूं, तो डिक्रिप्ट किए गए ईमेल वाले मेमोरी पेजों को स्वैप किया जा सकता है और हार्ड डिस्क पर निशान छोड़ सकते हैं जो बाद में सैद्धांतिक रूप से बरामद हो सकते हैं।

हालांकि यह निश्चित रूप से संवेदनशील फ़ाइलों का उपयोग करने की अवधि के लिए एक एन्क्रिप्टेड स्वैपफाइल का उपयोग करना या विश्व स्तर पर स्वैपिंग को अक्षम करना संभव है, यह प्रदर्शन को प्रभावित करता है, भूल सकता है और रूट विशेषाधिकारों की आवश्यकता होती है।

क्या कुछ फ़ाइलों या प्रोग्रामों को चिह्नित करना संभव है, जिन्हें स्वैप नहीं किया जाना है? रूट एक्सेस के बिना भी? क्या कोई ऐसा एप्लिकेशन लिख सकता है जिसे तकनीकी रूप से भोले-भाले उपयोगकर्ताओं को वितरित किया जा सके और जिनकी मेमोरी सामग्री कभी डिस्क पर स्वैप न हो?


2
संबंधित अनिवार्य रूप से आप एक cgroup बनाएँगे, स्वेप को ट्यून करेंगे ताकि यह कभी भी स्वैप न हो, और इसमें गड़गड़ाहट हो cgexec। आपको अभी भी रूट एक्सेस की आवश्यकता है, लेकिन यह व्यवस्थापक-स्तरीय रिज़ॉल्यूशन है। यदि आप अपना स्वयं का अनुप्रयोग विकसित कर रहे हैं तो आप झुंड का उपयोग करेंगे
ब्राचली

1
जीपीजी पहले से ही कॉल कर सकती है mlock, आपको जांच करनी चाहिए।
स्टीव

धन्यवाद! मुझे अभी तक cgroups के बारे में पता नहीं था, वे दिलचस्प लगते हैं।
user54114

1
@SteveWills यह करता है। हालांकि थंडरबर्ड के बारे में निश्चित नहीं है, जो कि डिक्रिप्टेड परिणाम प्रदर्शित कर रहा है।
user54114

@ ब्रेचली, क्या आप इसे एक उत्तर में रख सकते हैं? मुझे नहीं पता था कि आप cgroups के लिए स्वैच्छिकता सेट कर सकते हैं, यह पेचीदा लगता है।
फ्रॉस्ट्सचुट्ज़

जवाबों:


9

टिप्पणियों में, मैंने आपको सुझाव दिया कि आप एक cgroup बनाएं, memory.swappinessशून्य पर सेट करें (स्वैपिंग कम करने के लिए) और उसी के अंदर अपना एप्लिकेशन चलाएं। यदि आपने ऐसा किया है, तो आपका आवेदन संभवतः तब तक स्वैप नहीं होगा जब तक आप भौतिक मेमोरी पर इतना अविश्वसनीय रूप से कम नहीं चल रहे थे कि उस cgroup में कार्यक्रमों के लिए पृष्ठों की अदला-बदली पर्याप्त भौतिक स्मृति उपलब्ध करने का एकमात्र तरीका था।

आरएचईएल 6.5 पर ऐसा करने के लिए:

  • सुनिश्चित करें कि libcgroupपैकेज स्थापित है। यह आपको यूजर्स के लिए टूल्स जैसे cgcreateऔर एक्सेस देता है cgexec

  • cgconfigसेवा को प्रारंभ और सक्षम करें ताकि cgroup कॉन्फ़िगरेशन में परिवर्तन रिबूट के बीच लगातार हो। आरएचईएल पर इस सेवा को /cgroupपेड़ के नीचे आवश्यक फाइल सिस्टम को भी माउंट करना चाहिए ।

  • के साथ cgroup बनाएँ cgcreate -g memory:thunderbird

  • इस समूह के साथ शून्य पर स्वपन सेट करें cgset -r memory.swappiness=0 thunderbird

  • सेवा के cgsnapshot -s > /etc/cgconfig.confलिए अपडेट किए गए लगातार कॉन्फ़िगरेशन को बचाने के लिए उपयोग करें cgconfig(सभी अब तक रनटाइम परिवर्तन किए गए हैं। आप शायद डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल को कहीं और सहेजना चाहते हैं और इसे लगातार कॉन्फ़िगरेशन करने से पहले एक बार दे सकते हैं।

  • अब आप cgroup के cgexecभीतर वांछित एप्लिकेशन शुरू करने के लिए उपयोग कर सकते हैं thunderbird:

    [रूट @ xxx601 ~] # cgexec -g मेमोरी: थंडरबर्ड ls

    anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp नींद की नींद। ssl- बिल्ड स्टैक टेस्ट

    [रूट @ xxx601 ~] #

मैंने thunderbirdवास्तव में स्थापित नहीं किया है अन्यथा मैंने ऐसा किया होता। निश्चित नहीं है कि ऊपर का प्रारूपण गड़बड़ क्यों है।

  • cgexecथंडरबर्ड शुरू करने और tasksआवेदन के लिए फ़ाइल में पीआईडी ​​जोड़ने के लिए एक विकल्प होगा । उदाहरण के लिए:

    [रूट @ xxx601 ~] # कैट / cgroup / मेमोरी / थंडरबर्ड / कार्य

    [रूट @ xxx601 ~] # पिडॉफ httpd

    25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109

    [रूट @ xxx601 ~] # इको ​​२५ ९ २६> / cgroup / मेमोरी / थंडरबर्ड / कार्य

    [रूट @ xxx601 ~] # कैट / cgroup / मेमोरी / थंडरबर्ड / कार्य

    25,926

फिर, यह उल्लेख है कि यह तकनीकी रूप से अदला-बदली को रोकता नहीं है, लेकिन आवेदन को संशोधित करने में कम है, यह शायद आपका सबसे अच्छा दांव है। मैंने अभी-अभी पाया है memory.memsw.limit_in_bytesकि ऐसा लगता है कि कोई स्वैपिंग नहीं होने के लिए मजबूर करने पर एक अधिक प्रत्यक्ष नियंत्रण हो सकता है, लेकिन मैंने इसके साथ नहीं खेला है कि यह वास्तव में सहज महसूस करने के लिए पर्याप्त है कि यह आपकी समस्या को पूरी तरह से ठीक करता है। इसने कहा, इसके बाद इस पर ध्यान देना चाहिए।


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


अन्य सभी fs के @Gilles का उल्लेख करने के लिए आप chrootएक unshare--mountनामस्थान में चाहते हैं , साथ ही, मुझे लगता है। ऐसा करो और मैं अंत प्रदर्शन प्रभाव को दांव पर लगाने के लिए तैयार हूं, एक एन्क्रिप्टेड स्वैप से बेहतर होगा।
15

हाँ इसमें कोई संदेह नहीं है कि एक व्यवस्थापक केवल इतना ही कर सकता है, अंततः आवेदन को इस प्रकार की बातों को ध्यान में रखना आवश्यक है क्योंकि बहुत सारे हैं और व्यवस्थापक-स्तर के नियंत्रण बहुत विस्तृत हो सकते हैं।
ब्राचली

क्या एक कोरपम्प का अभी भी यह पता लगाने के लिए निरीक्षण किया जा सकता है कि क्या आप एक मनमानी प्रक्रिया के लिए जाते हैं, भले ही memory.swappiness=0आप क्या सोचते हैं? मुझे नहीं पता होगा - लेकिन मैं उत्सुक हूं।
फरबरी

1
हां, लेकिन यह लगभग कुछ भी सच है, जिसमें झुंड के साथ आवेदन शामिल हैं लेकिन नहीं MADV_DONTDUMP। अधिकांश समय, हालांकि, संवेदनशील जानकारी की अदला-बदली के बारे में चिंतित लोग लैपटॉप चोरी होने और स्वैप क्षेत्र में कंघी करने के बारे में चिंतित हैं। बिंदु पर वे कोर डंप शुरू कर रहे हैं सिस्टम पहले से ही पूरी तरह से समझौता कर चुका है।
19

5

अनुप्रयोग उनकी मेमोरी को लॉक कर सकते हैं इसलिए इसे स्वैप नहीं किया जा सकता है।

mlock, munlock, mlockall, munlockall - lock and unlock memory

मैं बाहर से इसे प्रभावित करने का कोई तरीका नहीं जानता, हालाँकि। एप्लिकेशन को इसे स्वयं उपयोग करने के लिए लिखना होगा। मेल के साथ यह शायद विशेष रूप से मुश्किल है क्योंकि इसमें आमतौर पर संलग्नक और ऐसे देखने के लिए बाहरी कार्यक्रम शामिल होते हैं।

इसके अलावा, यहां तक ​​कि मेमॉक के साथ भी यह आपके स्वैप विभाजन पर समाप्त होने का एक मौका है - जब आप डिस्क को सस्पेंड करते हैं जो डिस्क को सभी मेमोरी लिखता है, चाहे किसी भी गैर-स्वैप प्राथमिकताओं की परवाह किए बिना।

पहली जगह में केवल पूर्ण डिस्क एन्क्रिप्शन जाना आसान है।


5

हां, एक एप्लिकेशन mlockसिस्टम मेमोरी के साथ इसकी कुछ मेमोरी को स्वैप होने से रोक सकता है । हालांकि, यह आपके मामले में वास्तव में उपयोगी नहीं है।

गोपनीय डेटा सिर्फ एप्लिकेशन मेमोरी में नहीं है। यह विभिन्न स्थानों (में अस्थायी फ़ाइलों में समाप्त होता है /tmp, /var/spool, आदि)। थंडरबर्ड स्वयं डिक्रिप्ट किए गए ईमेल को प्रदर्शित कर रहा है, इसलिए आपको इसे रैम पर भी लॉक करना होगा।

यदि आप यह सुनिश्चित करना चाहते हैं कि आपकी डिस्क में गोपनीय फ़ाइलों के निशान नहीं होंगे, तो आपको अपने स्वैप के साथ-साथ अस्थायी फ़ाइलों के सभी संभावित स्थानों (विशेष रूप से, /tmpअगर यह tmpfs नहीं है, और अधिकांश के /varअतिरिक्त, एन्क्रिप्ट करना होगा) अपने घर निर्देशिका के लिए)।

प्रदर्शन पर एन्क्रिप्टेड स्वैप का प्रभाव शून्य से छोटा है। एन्क्रिप्शन डिस्क I / O की तुलना में बहुत तेज है।


लगता है एक chrootऔर एक नाम के साथ कंटेनर swapoffएन्क्रिप्टेड स्वैप के लिए एक बेहतर विकल्प होगा। बहुत अच्छा जवाब - कोई अन्य उत्तर अन्य फाइलसिस्टम प्रभावों का उल्लेख नहीं करता है। मेरे पास, मेरे पास बस एक नहीं है swap- मेरे पास 4GB से कम रैम वाला कोई कंप्यूटर नहीं है, और मैं इसका उपयोग करने के लिए कोई लाभ नहीं देख सकता। इसका उपयोग केवल उन मशीनों में से किसी के लिए व्यावहारिक है जहां सस्पेंड का संबंध है - और यह आसानी से स्क्रिप्टेड है।
15

0

मैं सिर्फ यह सोच रहा हूं कि आवेदन प्रक्रिया की प्राथमिकता को बदलने के साथ शुरू करना बेहतर होगा, उदाहरण के लिए एक स्टार्ट-अप स्क्रिप्ट के साथ इसे शुरू करने के साथ एक उच्च प्राथमिकता का उपयोग करते हुए niceऔर reniceI / O प्राथमिकता परिवर्तन के साथ ioniceऔर फिर क्या देखें हो जाता।

आप एप्लिकेशन को सर्वोच्च प्राथमिकता स्तर पर 'अच्छा' कर सकते हैं। -20इस तरह आप अभी भी OS छोड़ते हैं, यह वह करता है जो आवेदन प्रक्रियाओं को स्वैप करने के समय यह निर्णय करके सबसे अच्छा करता है।

लेकिन दूसरों द्वारा सुझाव दिया गया है यदि आप अधिक नियंत्रण और ग्रैन्युलैरिटी चाहते हैं तो आपको देखने cgroupsऔर स्थापित करने की आवश्यकता हैmemory.swappiness

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