Zram का उपयोग करते समय vm.swappiness का उपयुक्त मूल्य क्या है?


13

मैं अपने कंप्यूटर पर एक संपीड़ित रैम-समर्थित स्वैप के रूप में zram का उपयोग कर रहा हूं। जब सिस्टम को किसी चीज़ को स्वैप करने की आवश्यकता होती है, तो उसे ज़राम-समर्थित स्वैप फ़ाइल पर स्वैप करना उस डेटा को मेमोरी को खाली करने के लिए संपीड़ित करने के लिए कम या ज्यादा बराबर होता है। यह डिस्क-समर्थित स्वैप के सापेक्ष अधिकांश समय स्वैपिंग को बहुत तेज़ बनाता है। इस वजह से, मुझे आश्चर्य होता है कि सिस्टम को अप्रयुक्त सामान को अधिक आक्रामक तरीके से स्वैप करने के लिए प्रोत्साहित करने के लिए कुछ प्रदर्शन प्राप्त करना है, क्योंकि यह वास्तव में डिस्क को हिट किए बिना ऐसा कर सकता है?

तो क्या किसी ने vm.swappinessमेस के साथ खिलवाड़ किया है, कहते हैं, zram का उपयोग करते समय 100 पर सेट करें? क्या यह वांछनीय होगा?

sysctl -w vm.swappiness=100

2
यह एक उत्कृष्ट सवाल है और मुझे लगता है कि कुछ बेंचमार्किंग है ताकि राय को हटाया जा सके और तथ्यों को प्राप्त किया जा सके ...
एल्डर गीक

अच्छा विचार है, और zram में 2012 के बाद से सुधार हो सकता है जब मैंने इसे आखिरी बार इस्तेमाल किया था
Huygens

एक छोटा सा परीक्षण किया और जहाँ तक मैं बता सकता हूँ स्मृति "आरक्षित" zram के लिए अभी भी कैश के रूप में उपयोग की जाती है। अगर इसकी पुष्टि हो जाती है, तो मुझे लगता है कि सीपीयू के चक्रों से बचने के लिए स्वप्नदोष को कम रखना समझदारी हो सकती है?
विटावर

जवाबों:


2

मैं वास्तव में स्वैपीपन को अधिक रखने की सिफारिश नहीं करूंगा। कर्नेल में एक सामान्य तंत्र यह है कि यह कुछ स्मृति को अन्य चल रहे कार्यों के लिए मुक्त करने के लिए स्वैप में पृष्ठ (मेमोरी का हिस्सा) डाल देगा।

पहले "समस्या" जब कर्नेल चाहते हैं कि n पेज मुक्त हो जाए, m (m <n के साथ, m n को धारण करने के लिए आवश्यक संपीड़ित पृष्ठों की संख्या है) RAM में नए बनाए गए हैं, मुझे यकीन नहीं है कि यह कर्नेल को परेशान कर सकता है या नहीं।

फिर वैसे भी, जब आपके पास स्वैप में पृष्ठ होते हैं, तो संभव है कि आप बाद में इसके कुछ पृष्ठों का उपयोग स्वैप में करें। कर्नेल क्या करते हैं, उन पृष्ठों को भौतिक मेमोरी में वापस लाते हैं, लेकिन उन्हें स्वैप से नहीं हटाते हैं (जो मानक स्वैप के साथ कैशिंग के रूप में देखा जा सकता है , इसलिए जब एप्लिकेशन पृष्ठभूमि में वापस जाता है, तो कर्नेल को उन पृष्ठों को वापस लिखना नहीं पड़ता है धीमी गति से)। हालाँकि zram के साथ यह शायद एक बुद्धिमान चाल नहीं है, क्योंकि आपके पास स्मृति में m पेज zram + n पृष्ठ हैं जो स्मृति में वापस हैं!

कर्नेल में एक सामान्य "टोटल मेमोरी" होती है, जिसका उपयोग वह अपना व्यवसाय करने के लिए कर सकता है। जब आप ज़्राम जोड़ते हैं, तो यह केवल "स्वैप" मेमोरी में गिना जाता है, क्योंकि यह किसी भी डिस्क आधारित स्वैप के साथ होगा, लेकिन इसने वास्तविक "कुल मेमोरी" को कम कर दिया और कर्नेल द्वारा अपेक्षित / प्रत्याशित नहीं है। कभी-कभी आप अजीब हो सकते हैं और इस वजह से व्यवहार नहीं चाहते हैं!

ज़्राम के साथ, यह अच्छा होगा कि कर्नेल इस क्षेत्र में बहुत अधिक स्वैप न करे जब यह स्मृति दबाव में हो। और आपके पास हमेशा एक वास्तविक हार्ड डिस्क स्वैप विभाजन होना चाहिए जो आपके ज़्राम अधिकतम आकार से कम से कम बड़ा हो, ताकि सिस्टम को OOM नहीं मिलेगा जबकि उसी समय आपको बहुत सारी खाली जगह दिखाई देगी जैसा कि रिपोर्ट किया गया था free!


zram RAM ब्लॉक डिवाइस प्रदान करता है। इन ब्लॉक डिवाइसेस पर लिखी गई हर चीज कंप्रेस हो जाती है। अगर zram ब्लॉक डिवाइसेस का उपयोग स्वैप के रूप में किया जाता है, जब सिस्टम मेमोरी के कुछ हिस्सों को स्वैप करने की कोशिश करता है तो यह रैम के एक हिस्से से दूसरे हिस्से में मेमोरी को प्रभावी ढंग से चलाएगा, सिवाय इसके कि डेटा को गंतव्य पर कॉपी किए जाने से पहले संपीड़ित किया जाएगा। यह प्रभावी रूप से सीमित मात्रा में मेमोरी के साथ सिस्टम में जवाबदेही को बेहतर बनाने के लिए एक सस्ते मेमोरी कम्प्रेशन मैकेनिज्म के रूप में काम करता है। ... Zram लिनक्स 2.6.33 के बाद से मंचन में रहा है। 3.14 में zram को ड्राइवरों / ब्लॉक / zram के मंचन से बाहर ले जाया गया।
एल्डर गीक

1
@ElderGeek बिल्कुल! और मैं उदाहरण के लिए उदाहरण प्रस्तुत करूंगा कि यह सही क्यों नहीं है। कर्नेल 64MB RAM को निकालने का प्रयास करेगा, इसने उन्हें zram स्वैप में डाल दिया। संपीडित 64 एमबी का हिस्सा अब 32 एमबी है। नतीजा यह है कि मेमोरी 32MB कम हो गई है न कि 64MB। अब क्या होता है जब एप्लिकेशन को स्मृति में 64MB वापस की आवश्यकता होती है, कर्नेल प्रतिलिपि (और नहीं चलती) वापस chunk स्मृति में। अब आपके पास 64MB RAM + 32MB में zram है। कॉपी क्यों? क्योंकि मेरे उत्तर में बताए अनुसार कर्नेल पृष्ठ को कैश करता है। दोनों व्यवहार आदर्श नहीं हैं। और जब स्मृति अच्छी तरह से संपीड़ित नहीं होती है, तो यह और भी खराब है।
ह्यूजेंस

अभी भी परीक्षण के चरण में है। मुझे लगता है कि कैशिंग एल्गोरिथ्म को ट्यून करने के लिए कुछ तरीका होना चाहिए जो कि zram संकुचित पृष्ठ को मुक्त करने के लिए उपयोग करता है जब इसे असम्पीडित RAM पर वापस कॉपी किया जाता है।
एल्डर गीक

मैंने 2012 तक इसे कई बार आज़माया है। उस समय मेरा कंप्यूटर 1GB रैम तक सीमित था और इंटरनेट ब्राउज़ करते समय यह बहुत धीमी गति से होता था (मेरे पास आमतौर पर 10-50 टैब खुले होते हैं)। लेकिन उसके बाद से मैंने फिर कभी इसका इस्तेमाल नहीं किया। मेरे पास पर्याप्त से अधिक रैम है जो मैं अब स्वैप का उपयोग नहीं करता हूं। वापस फ़ायरफ़ॉक्स के साथ zram का उपयोग करते समय, मैं जल्दी से "स्वैपिंग" शुरू कर दिया था जो मेरे पास थोड़ी सी रैम थी। और जल्दी से मेरे पास कई दुर्घटनाओं के साथ एक अनुत्तरदायी प्रणाली थी। ज़राम के बिना यह धीमी गति से लेकिन कम से कम स्थिर था। मेरी समस्या यह थी कि शायद यह लगातार मेमोरी पेजों को कंप्रेस / अनसेफ कर रहा था।
हुय्गेंस

हां, मेरे परिणाम कुछ इसी तरह के रहे हैं, 8GB वाले सिस्टम पर मैं कई VM के एन्कोडिंग कार्य के दौरान लॉन्च करके OOM को बाध्य करने में सक्षम था। क्या आपको zswap के साथ कोई अनुभव है? यह एक व्यावहारिक विकल्प है जो मैंने पढ़ा है के आधार पर लगता है।
एल्डर गीक

2

संक्षिप्त उत्तर: vm.swappiness=100है उचित मान zram के लिए (लिनक्स 4.9 के साथ डेबियन खिंचाव पर कम से कम, मुझे विश्वास है कि सबसे अच्छा मूल्य है)

मैं पहले से ही vm.swappiness=100मेरे लिए परीक्षा है।

मुझे लगता है कि आप यह सुनिश्चित करने के लिए कुछ सरल परीक्षण कर सकते हैं कि कौन सा मूल्य आपके लिए सबसे अच्छा है।

इस प्रश्न का परीक्षण करने के लिए मैंने एक और सरल कार्यक्रम बनाया । x मेरी मशीन पर बहुत कम vm.swappinessमूल्य (जैसे vm.swappiness=1) स्पष्ट जवाबदेही समस्या का कारण होगा।

के बारे SwapCachedमें /proc/meminfo:

पहले, कोशिश करो vm.page-cluster=0, यह शायद SwapCachedस्वैप-इन से कुछ बेकार को कम कर सकता है।

स्वैच्च्ड ज़्राम को नॉन-ज़्राम स्वैप डिवाइस के समान गति प्रदान कर सकता है

SwapCached आवश्यक होने पर पुन: उपयोग (मुक्त) किया जा सकता है:

./linux-4.9/mm$ grep -rn delete_from_swap_cache
memory-failure.c:715:   delete_from_swap_cache(p);
shmem.c:1115:       delete_from_swap_cache(*pagep);
shmem.c:1645:            * unaccounting, now delete_from_swap_cache() will do
shmem.c:1652:               delete_from_swap_cache(page);
shmem.c:1668:       delete_from_swap_cache(page);
vmscan.c:673:       __delete_from_swap_cache(page);
swap_state.c:137:void __delete_from_swap_cache(struct page *page)
swap_state.c:218:void delete_from_swap_cache(struct page *page)
swap_state.c:227:   __delete_from_swap_cache(page);
swapfile.c:947:         delete_from_swap_cache(page);
swapfile.c:987: delete_from_swap_cache(page);
swapfile.c:1023:            delete_from_swap_cache(page);
swapfile.c:1571:            delete_from_swap_cache(page);
./linux-4.9/mm$ 

0

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


जब सिस्टम मेमोरी से बाहर चल रहा हो तो मैंने zram- समर्थित स्वैप को काफी मददगार पाया है। यह मुझे स्वैपिंग नरक में पूरी तरह से फंसने और पुनः आरंभ होने से कुछ समय बचा रहा है (मैं बड़े डेटा सेट का विश्लेषण कर रहा हूं, इसलिए मुझे मेमोरी की आवश्यकता है, सभी 24 जीबी)। मैं बस सोच रहा था कि क्या vm.swappinessमूल्य डिस्क-समर्थित स्वैप के लिए ट्यून किया गया है और अगर मुझे ज्यादातर zram- समर्थित स्वैप का उपयोग करना होगा, तो मुझे इसे बदलना चाहिए।
रयान सी। थॉम्पसन

1
"तेजी से बढ़ रहा है"? फ्लाई कंप्रेशन पिछले एक दशक से अधिक समय से डायरेक्ट डिस्क I / O से बेहतर प्रदर्शन कर रहा है (इसकी मेमोरी एक्सेस की तुलना में कभी तेज़ नहीं होने वाली है - यह बात नहीं है)
सिम्बियन

सिम्बियन, आप "मेमोरी स्पीड की तुलना में" भूल गए। असहमति कहाँ है?
अलेक्जेंडर

मुझे लगता है कि सिम्बियन की बात यह है कि संकुचित मेमोरी समर्थित पृष्ठों (ज़्राम) का लक्ष्य स्वैपिंग को भौतिक माध्यम में बदलना है। इसका कारण "मेमोरी को सीधे संपीड़ित करने के लिए प्राकृतिक" नहीं है, क्योंकि यह अनुप्रयोगों के लिए जटिलता से भरा होगा, यह निर्धारित करने के लिए कि इसकी मेमोरी के किन हिस्सों को संकुचित किया जा सकता है और कब; वीएम सबसिस्टम इसे लागू करने के लिए बहुत आसान जगह है। ज़राम से लाभान्वित होने वाले वर्कलोड में ऐसे पृष्ठ होते हैं जो काम करने वाले सेट में नहीं होते हैं और आसानी से संपीड़ित किए जा सकते हैं।
डैनियल पापासियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.