zram बनाम zswap बनाम zcache अंतिम गाइड: कब किसका उपयोग करना है


55
  1. वे क्या नरक हैं? वे कैसे अलग हैं (मैंने नीचे एक उत्तर में अपनी समझ लिखी है)
  2. Zswap सिस्टम में, जब किसी पेज को zswap से वास्तविक स्वैप में निकाला जाता है, तो क्या इसे एक संपीड़ित में से संग्रहीत किया जाता है? (या यह भंडारण से पहले विघटित है ?, AFAICT यह अभी भी संकुचित है, लेकिन मुझे यकीन नहीं हो सकता है)
  3. वर्तमान स्थिति क्या है? यह स्पष्ट रूप से 3.11 में हटा दिया गया था। इसका क्या मतलब है? ( http://git.kernel.org/cgit/linux/kernel/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06x9e428f7 )

2
उत्तर 2. प्रतिबद्ध संदेश स्पष्ट रूप से बताता है कि पैच (ज़ैचे से संबंधित) को 3.11 से हटा दिया गया है, लेकिन मुख्य-मिमी पेड़ में शामिल किया जाएगा।
आस्कब

1
@staticd आपने अपने स्वयं के उत्तर को स्वीकार क्यों नहीं किया? बहुत अच्छा है!
लेओ लेपोल्ड हर्ट्ज़ '

एक पेज zswap (संपीड़ित स्वैप कैश) से बेदखल कर दिया जाता है तो यह _ decompressed_ है और साल के संदर्भ के समर्थन स्वैप डिवाइस में रखा, एक प्रति [ lwn.net/Articles/537422/] नीचे ...
Cbhihe

( lwn.net/Articles/537422 - "फिर से शुरू करने के दौरान, zswap पृष्ठ को विघटित करता है ...")। नीचे दिए गए @mmin से यह पता चलता है कि यह सर्वर के लिए अकुशल या शोषक खतरा हो सकता है!
mwfearnley

जवाबों:


2

2. के बारे में, zswap @ Cbhihe की टिप्पणी की पुष्टि करते हुए, राइट-बैक पर पृष्ठों को डिकम्प्रेस करने लगता है।

मिमी / zswap.c , पंक्ति 828:

/*
 * Attempts to free an entry by adding a page to the swap cache,
 * decompressing the entry data into the page, and issuing a
 * bio write to write the page back to the swap device.
 * ...
 */
static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
{
    ...

    case ZSWAP_SWAPCACHE_NEW: /* page is locked */
        /* decompress */
        ...

        ret = crypto_comp_decompress(tfm, src, entry->length,
                         dst, &dlen);
        ...
        kunmap_atomic(dst);    


$ git show
commit 1573d2caf713874cfe0d1336c823d0fb548d8bed
Merge: 4cdf8db 0a86248
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Tue Oct 11 23:59:07 2016 -0700

तो zswap उन परिस्थितियों के लिए उपयोगी है जहां डिस्क में लिखे जाने से पहले-इन-रैम कैश को जल्द ही भूल जाने की संभावना है। यह बड़े, लंबे समय तक रहने वाले ढेरों वाले अनुप्रयोगों के लिए नहीं है, जिन्हें अंततः वास्तविक स्वैप डिवाइस द्वारा समर्थित होने की आवश्यकता होगी।


7
मुझे zswap का संभावित खतरनाक व्यवहार मिला। जब कोई एप्लिकेशन कई पेजों को आवंटित करता है और उन्हें डेटा लिखता है जो बहुत अच्छी तरह से संपीड़ित करता है (शून्य का एक क्रम कहता है), zswap खुशी से उन्हें कर्नेल स्लैब मेमोरी में संग्रहीत करता है। हालाँकि, जब कोई चीज़ वास्तविक डिस्क स्वैपिंग को ट्रिगर करती है, तो संग्रहीत डेटा अचानक 'फट' जाता है - कि पृष्ठों पर कई शून्य जो "केवल" गीगाबाइट मेमोरी में ले गए थे, अब डिस्क पर सैकड़ों गीगाबाइट्स तक विघटित हो गए।
mnish

2
एक हमलावर सर्वर पर कम एन्ट्रापी डेटा संग्रहीत करने का प्रयास कर सकता है। जब कुछ स्वैपिंग को ट्रिगर करता है, तो सर्वर मृत हो जाएगा।
mnish

1
क्या आपने इस अपस्ट्रीम की रिपोर्ट की?
केन शार्प

फिर भी असम्पीडित डेटा लिखने का एक और दोष draw
Mihail Malostanidis

निश्चित रूप से अंतरिक्ष में और समय पर डेटा को विघटित रूप में डंप करना बेहतर होगा! ऐसा लगता है कि हम वास्तव में ऐसा करना चाहते हैं। मैं केवल यह मान सकता हूं कि इसकी अनुमति देने के लिए स्वैप क्षेत्र का पुनर्गठन करने के लिए या तो मौजूदा कोड को फिर से लिखना शामिल है, या अधिक जटिल आवंटन प्रणाली की आवश्यकता है।
mwfearnley

75

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

जब क्या उपयोग करने का सारांश:

  1. ZRAM अगर आपके पास HDD / SSD पर कोई स्वैप डिवाइस नहीं है।
  2. ZSWAP अगर आपके पास HDD / SSD पर स्वैप डिवाइस है।
  3. ZCACHE : यह वही करता है जो ZSWAP करता है और ALSO फाइलसिस्टम पेज कैश को कंप्रेस और स्पीड देता है। (यह आंतरिक रूप से बहुत अधिक जटिल है और मेनलाइन कर्नेल में नहीं है क्योंकि यह अभी भी विकास के अधीन है)।

उनके कार्यान्वयन का सारांश:

  1. ZRAM एक संपीड़ित रैम आधारित स्वैप डिवाइस है
  2. ZSWAP एक संपीड़ित कैश है यदि आपके पास पहले से ही एक स्वैप है।
  3. ZCache एक विशेष प्रकार की वर्चुअल रैम चीज़ (ट्रांससेन्ट मेमोरी) के लिए एक बैकएंड है जिसका उपयोग फाइलसिस्टम पेज या स्वैप डेटा को कैश करने के लिए किया जा सकता है।

विवरण:

  • ZRAM: रैम में एक स्वैप डिवाइस बनाता है। यहां भेजे गए पृष्ठ संचित होने के साथ ही संकुचित हो जाते हैं। अन्य स्वैप उपकरणों की तुलना में इसकी उच्च प्राथमिकता है: जिन पृष्ठों की अदला-बदली की जाती है, उन्हें अधिमानी रूप से ज़्राम डिवाइस पर भेजा जाता है, जब तक कि यह पूर्ण न हो, तब ही किसी अन्य स्वैप उपकरण का उपयोग किया जाता है।

    • लाभ: अन्य (भौतिक) स्वैप उपकरणों से स्वतंत्र। इसका उपयोग तब किया जा सकता है जब उपलब्ध मेमोरी का विस्तार करने के लिए कोई स्वैप विभाजन नहीं है।
    • नुकसान: यदि अन्य स्वैप डिवाइस (HDD / SSD) मौजूद हैं, तो वे उपयोग नहीं किए जाते हैं। जैसे कि ज़्राम डिवाइस एक स्वतंत्र स्वैप डिवाइस है, एक बार भर जाने के बाद, किसी भी नए पेज को स्वैप करने की आवश्यकता होती है, इसे अगले स्वैप डिवाइस पर सीधे भेजा जाता है, इसलिए:
      1. एलआरयू (कम से कम हाल ही में उपयोग किए गए) उलटा का एक वास्तविक मौका है: यह सबसे हाल ही में स्वैप किया गया डेटा होगा जो धीमी डिस्क पर जाता है, जबकि निष्क्रिय पृष्ठ जो बहुत पहले स्वैप किए गए थे, तेजी से ZRAM में बने रहेंगे
      2. डिस्क से पढ़ने और पढ़ने के लिए डेटा बहुत सारे बैंडविड्थ का उपभोग करेगा क्योंकि यह असम्पीडित है।
    • स्थिति: मेनलाइन कर्नेल में विलय 3.14। एक बार सिस्टम पर सक्षम होने के बाद, इसे स्वैप उपकरणों को सेट करने और उनका उपयोग करने के लिए कुछ उपयोगकर्ताओं के कॉन्फ़िगरेशन की आवश्यकता होती है।
  • ZSWAP:frontswap प्रणाली हुक पृष्ठों बाहर स्वैप करने के लिए प्रयास करता है और के रूप में zswap का उपयोग करता है लिखने-बैक कैश एक HDD / SSD स्वैप डिवाइस के लिए: एक प्रयास पेज संपीड़ित करने के लिए किया जाता है और यदि इसका खराब संपीड़न योग्य डेटा होता है यह सीधे डिस्क पर लिखी है। यदि डेटा संपीड़ित है, तो इसे zswap मेमोरी के पूल में संग्रहीत किया जाता है। यदि RAM में कुल संपीड़ित पृष्ठ एक निश्चित आकार से अधिक होने पर पृष्ठों को स्मृति से बाहर कर दिया जाता है, तो Least हाल ही में प्रयुक्त (LRU) संपीड़ित पृष्ठ डिस्क पर लिखा जाता है क्योंकि इसके जल्द ही आवश्यक होने की संभावना नहीं होती है।

    • लाभ: बहुत कुशल उपयोग रैम और डिस्क आधारित स्वैप। डिस्क I / O को कम से कम लिखता है और आवश्यक पढ़ता है (डेटा संपीड़ित है और RAM में है) को कम करके और इन I / O संचालन की बैंडविड्थ को कम करके क्योंकि डेटा एक संपीड़ित रूप में है।
    • सीमाएँ: यह डिस्क आधारित स्वैप सिस्टम की वृद्धि है और इसलिए हार्ड डिस्क पर स्वैप विभाजन पर निर्भर करता है।
    • स्थिति: 3.11 मेनलाइन लिनक्स कर्नेल में विलय।
  • ZCache: यह ट्रांसेंडेंट मेमोरी सिस्टम के लिए बैकएंड है। ट्रान्सेंडेंट मेमोरी एक रैम जैसी मेमोरी प्रदान करती है जिसे केवल एक समय में एक पेज पर ही कॉल putऔर getकॉल करके एक्सेस किया जा सकता है । यह सामान्य मेमोरी के विपरीत है जिसे एक बार में बाइट तक पहुँचा जा सकता है। frontswapऔर cleancacheप्रणालियों हुक प्रयास स्वैप और क्रमशः फ़ाइल-प्रणाली पेज कैश को पुनः प्राप्त करने और उन्हें उत्कृष्ट स्मृति बैकेंड को भेजना चाहिए। जब zcache का उपयोग बैकएंड के रूप में किया जाता है, तो डेटा को संपीड़ित किया जाता है और RAM में संग्रहीत किया जाता है। जब यह भर जाता है, तो संपीड़ित पृष्ठ स्वैप के लिए बेदखल कर दिए जाते हैं। (एक वैकल्पिक बैकएंड है RAMster जो नेटवर्क वाले कंप्यूटरों में RAM का एक पूल साझा करता है)। बैकएंड के frontswapसाथ केवल फ्रंटएंड का उपयोग करना zcacheजैसे काम करता है zswap। (वास्तव में zswap zcache का एक सरल उपसमूह है)

    • लाभ दोनों स्वैप और फाइलसिस्टम कैश के लिए संपीड़ित कैशिंग प्रदान करता है।
    • स्थिति: अभी भी मेनलाइन नहीं है क्योंकि यह बहुत जटिल है और इस पर काम किया जा रहा है।

मुझे मिले सर्वोत्तम संसाधन निम्नलिखित थे:



6
क्या zram और zswap दोनों का उपयोग करना संभव और / या उचित है?
फूलिया

2
तीन की जरूरत नहीं है / एक ही समय में चलाया जाना चाहिए। zswap को ZRAM के विपरीत एक बैकएंड के रूप में एक डिस्क आधारित स्वैप की आवश्यकता होती है, जिसे कोई समर्पित स्वैप विभाजन की आवश्यकता नहीं होती है। हालाँकि अगर आपने स्वैप किया है, तो ZRAM + स्वैप विभाजन zswap + स्वैप विभाजन की तुलना में बहुत कम प्रभावी है।
21

क्या आप कृपया यहां बता सकते हैं कि आप कैसे सक्रिय होते हैं zswap। यहाँ विवरण askubuntu.com/a/361321/25388
Léo Léopold Hertz at


1
हर जवाब है कि कहा गया है कि zramएक swapपूरी तरह से गलत है। zramनहीं है swapswapकेवल में संग्रहित किया जा सकता zram। लेकिन यह कई संभावित उपयोग मामलों में से एक है! यहाँ एक उदाहरण है: "usecases में से कुछ में / tmp भंडारण शामिल है, स्वैप डिस्क के रूप में उपयोग करें, विभिन्न कैश / var के तहत और शायद कई और अधिक :)" kernel.org/doc/Documentation/blockdev/zram.txt उदाहरण के लिए इसका उपयोग करें अस्थायी भंडारण जो मैं किसी भी अन्य सामान्य ब्लॉक डिवाइस की तरह प्रारूपित और माउंट करता हूं।
विक्टर यारमा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.