zram vs zswap vs zcache Ultimate guide: เมื่อใดควรใช้อันไหน


55
  1. พวกมันคืออะไรกันแน่? มันแตกต่างกันอย่างไร (ฉันเขียนความเข้าใจของฉันลงในคำตอบด้านล่าง)
  2. ในระบบ Zswap เมื่อหน้าถูกขับออกจาก zswap ไปเป็น swap จริงมันจะถูกเก็บในรูปแบบบีบอัดจาก? (หรือมันแตกก่อนการจัดเก็บ? AFAICT ยังคงถูกบีบอัด แต่ฉันไม่แน่ใจ)
  3. สถานะปัจจุบันของ zcache คืออะไร เห็นได้ชัดว่ามันถูกลบออกหรือบางสิ่งบางอย่างใน 3.11 สิ่งนี้หมายความว่า? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )

2
ตอบ 2 ข้อความกระทำการอย่างชัดเจนระบุแพทช์ (ที่เกี่ยวข้องกับ zcache) ได้ถูกลบออกจาก 3.11 แต่จะถูกรวมไว้ในต้นไม้ -mm หลัก
Askb

1
@staticd ทำไมคุณไม่ยอมรับคำตอบของคุณเอง? มันดีมาก!
LéoLéopold Hertz 준영

เมื่อหน้าถูกขับออกมาจาก zswap (แคช swap ที่บีบอัด) มันคือ _ decompressed_ และวางไว้ในอุปกรณ์ swap swap ต่อหนึ่งในการอ้างอิงของคุณ [ lwn.net/Articles/537422/]ด้านล่าง ...
Cbhihe

( lwn.net/Articles/537422 - "ในระหว่างการเขียนข้อมูลต่อไป zswap จะคลายการบีบอัดหน้า ... ") @ นาทีด้านล่างแสดงให้เห็นว่าสิ่งนี้อาจไม่มีประสิทธิภาพหรือเป็นอันตรายสำหรับเซิร์ฟเวอร์!
mwfearnley

คำตอบ:


2

เกี่ยวกับ 2. , zswap ดูเหมือนจะแตกหน้าในการเขียนกลับ, ยืนยันความคิดเห็นของ @ Cbhihe

mm / 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 จึงมีประโยชน์สำหรับสถานการณ์ที่แคชแคชในหน่วยความจำมีแนวโน้มที่จะถูกลืมในไม่ช้าก่อนที่จะเขียนกลับไปที่ดิสก์ ไม่ใช่สำหรับแอปพลิเคชันที่มีฮีปขนาดใหญ่ที่มีอายุการใช้งานยาวนานซึ่งในที่สุดจะต้องได้รับการสำรองข้อมูลโดยอุปกรณ์ swap จริง


7
ฉันพบพฤติกรรมที่อาจเป็นอันตรายของ zswap เมื่อแอปพลิเคชั่นจัดสรรหลาย ๆ หน้าและเขียนข้อมูลที่บีบอัดได้ดีมาก (พูดตามลำดับเลขศูนย์), zswap เก็บไว้อย่างมีความสุขในหน่วยความจำแผ่นเคอร์เนล อย่างไรก็ตามเมื่อมีบางสิ่งที่ทำให้เกิดการแลกเปลี่ยนดิสก์เกิดขึ้นจริงข้อมูลที่จัดเก็บก็จะ 'แตก' อย่างทันทีทันใด - ศูนย์จำนวนมากบนหน้าเว็บที่ใช้หน่วยความจำกิกะไบต์เท่านั้นในหน่วยความจำในขณะนี้
59

2
ผู้โจมตีอาจพยายามเก็บข้อมูลเอนโทรปีต่ำไว้บนเซิร์ฟเวอร์ เมื่อสิ่งที่ทริกเกอร์การแลกเปลี่ยนเซิร์ฟเวอร์จะตาย
59

1
คุณรายงานต้นน้ำนี้หรือไม่
Ken Sharp

ข้อเสียเปรียบอีกประการหนึ่งของการเขียนข้อมูลที่ไม่มีการบีบอัด🤷
Mihail Malostanidis

แน่นอนว่ามันจะดีกว่าในพื้นที่และเวลาในการถ่ายโอนข้อมูลในรูปแบบแตก! ดูเหมือนสิ่งที่เราต้องการให้ทำจริงๆ ฉันสามารถสันนิษฐานได้ว่าการปรับโครงสร้างพื้นที่แลกเปลี่ยนเพื่อให้สิ่งนี้เกี่ยวข้องกับการเขียนโค้ดที่มีอยู่จำนวนมากหรือต้องการระบบการจัดสรรที่ซับซ้อนมากขึ้น
mwfearnley

75

มีหลายสิ่งหลายอย่างเกี่ยวกับระบบทั้งสามนี้ แต่ไม่มีสิ่งใดที่เปรียบเทียบง่าย ๆ ระหว่างพวกเขาโดยลำพังอธิบายได้ดี ฉันพยายามทำความเข้าใจ แต่หัวของฉันระเบิด จากนั้นฉันคิดว่าฉันได้รับแล้วฉันจึงลองเขียนมันลงและหัวของฉันก็ระเบิดอีกครั้ง (ดูบทสรุปของการใช้งาน) ฉันคิดว่ามันจะมีประโยชน์ในการโพสต์สิ่งนี้ที่นี่เนื่องจากมีคำถามมากมายเกี่ยวกับการแลกเปลี่ยนแบบแลกเปลี่ยนกัน

สรุปสิ่งที่ควรใช้เมื่อ:

  1. ZRAMถ้าคุณไม่มีอุปกรณ์ swap ใน HDD / SSD
  2. ZSWAPหากคุณมีอุปกรณ์ swap ใน HDD / SSD
  3. ZCACHE : ทำในสิ่งที่ ZSWAP ทำและยังบีบอัดและเพิ่มความเร็วแคชของระบบแฟ้ม (มันซับซ้อนมากขึ้นภายในและไม่ได้อยู่ในเคอร์เนลฉีดเนื่องจากยังอยู่ระหว่างการพัฒนา)

สรุปการใช้งานของพวกเขา:

  1. ZRAMเป็นอุปกรณ์ swap ที่มีการบีบอัด RAM
  2. ZSWAPเป็นแคชที่ถูกบีบอัดหากคุณมี swap อยู่แล้ว
  3. ZCacheเป็นแบ็กเอนด์สำหรับVirtual RAM thingy (หน่วยความจำแบบ Transcendent) ชนิดพิเศษที่สามารถใช้เพื่อแคชหน้าระบบแฟ้มหรือสลับข้อมูล

รายละเอียด:

  • ZRAM: สร้างอุปกรณ์สลับใน RAM หน้าที่ส่งมาที่นี่ถูกบีบอัดเนื่องจากจัดเก็บไว้ มันมีลำดับความสำคัญสูงกว่าอุปกรณ์แลกเปลี่ยนอื่น ๆ : หน้าเว็บที่สลับออกจะถูกส่งไปยังอุปกรณ์ zram เป็นพิเศษจนกว่าจะเต็ม แต่จะใช้เฉพาะอุปกรณ์แลกเปลี่ยนอื่น ๆ เท่านั้น

    • ประโยชน์ที่ได้รับ: เป็นอิสระจากอุปกรณ์แลกเปลี่ยน (ทางกายภาพ) อื่น ๆ สามารถใช้เมื่อไม่มีพาร์ติชันสลับเพื่อขยายหน่วยความจำที่มีอยู่
    • ข้อเสีย:หากมีอุปกรณ์ swap อื่น ๆ (HDD / SSD) แสดงอยู่พวกเขาจะไม่ได้ใช้อย่างเหมาะสมที่สุด เนื่องจากอุปกรณ์ zram เป็นอุปกรณ์ swap อิสระเมื่อหน้าเต็มหน้าใหม่ใด ๆ ที่จำเป็นต้องเปลี่ยนจะถูกส่งไปยังอุปกรณ์ swap ถัดไปโดยตรงดังนั้น:
      1. มีโอกาสที่แท้จริงของการผกผัน LRU (ใช้น้อยเมื่อเร็ว ๆ นี้): มันจะเป็นข้อมูลที่สลับสับเปลี่ยนล่าสุดที่ไปยังดิสก์ที่ช้าในขณะที่หน้าเว็บที่ไม่ได้ใช้งานซึ่งถูกสลับเป็นเวลานานจะยังคงอยู่ใน ZRAM ที่รวดเร็ว
      2. ข้อมูลที่ส่งและอ่านจากดิสก์จะใช้แบนด์วิดท์จำนวนมากเนื่องจากไม่มีการบีบอัด
    • สถานะ:ผสานเข้ากับเคอร์เนลฉีด 3.14 เมื่อเปิดใช้งานในระบบจะต้องมีการกำหนดค่า userspace บางอย่างเพื่อตั้งค่าอุปกรณ์แลกเปลี่ยนและใช้พวกเขา
  • ZSWAP:frontswapระบบตะขอพยายามที่จะสลับออกหน้าและใช้เป็น zswap เขียนหลังแคชสำหรับอุปกรณ์แลกเปลี่ยน HDD / SSD A: มีความพยายามที่จะทำในการบีบอัดหน้าและถ้ามันมีข้อมูลที่อัดไม่ดีมันจะถูกเขียนโดยตรงไปยังดิสก์ หากข้อมูลถูกบีบอัดข้อมูลจะถูกเก็บไว้ในพูลหน่วยความจำ zswap หากเพจถูกสลับหน่วยความจำไม่เพียงพอเมื่อเพจที่ถูกบีบอัดทั้งหมดใน RAM มีขนาดเกินกว่าขนาดที่กำหนดเพจที่ถูกบีบอัดน้อยที่สุดที่ใช้ล่าสุด (LRU) จะถูกเขียนไปยังดิสก์

    • ประโยชน์ที่ได้รับ:ใช้ RAM อย่างมีประสิทธิภาพและการสลับดิสก์เป็นหลัก ลดขนาดดิสก์ I / O โดยลดจำนวนการเขียนและอ่านที่ต้องการ (ข้อมูลถูกบีบอัดและเก็บไว้ใน RAM) และลดแบนด์วิดท์ของการดำเนินการ I / O เหล่านี้เนื่องจากข้อมูลอยู่ในรูปแบบบีบอัด
    • ข้อ จำกัด :มันเป็นการเพิ่มประสิทธิภาพของระบบ swap บนดิสก์และด้วยเหตุนี้ขึ้นอยู่กับ swap partition บนฮาร์ดดิสก์
    • สถานะ:ผสานเข้ากับเคอร์เนลลินุกซ์ฉีด 3.11
  • ZCache:มันเป็นแบ็กเอนด์สำหรับระบบหน่วยความจำที่ดีเยี่ยม หน่วยความจำดีเยี่ยมมีหน่วยความจำแบบ RAM ที่สามารถเข้าถึงหน้าได้ครั้งละครั้งโดยใช้putและการgetโทร ซึ่งแตกต่างจากหน่วยความจำปกติที่สามารถเข้าถึงไบต์ในแต่ละครั้ง frontswapและcleancacheระบบความพยายามเบ็ดเพื่อแลกเปลี่ยนและเรียกคืนระบบไฟล์แคชหน้าตามลำดับและส่งพวกเขาไปที่แบ็กเอนด์หน่วยความจำที่ดีเยี่ยม เมื่อใช้ zcache เป็นแบ็คเอนด์ข้อมูลจะถูกบีบอัดและเก็บไว้ใน RAM เมื่อเติมเต็มหน้าที่ถูกบีบอัดจะถูกเปลี่ยนเป็นการสลับ (แบ็กเอนด์ทางเลือกคือ RAMster ซึ่งใช้พูล RAM ร่วมกันบนคอมพิวเตอร์เครือข่าย) โดยใช้เพียงfrontswapส่วนหน้ากับแบ็กเอนด์ทำงานเช่นเดียวกับzcache zswap(อันที่จริงแล้ว zswap เป็นชุดย่อยที่ง่ายของ zcache)

    • คุณประโยชน์ให้การแคชที่บีบอัดทั้งสำหรับการสลับและสำหรับแคชของระบบไฟล์
    • สถานะ:ยังไม่ได้ฉีดเนื่องจากมีความซับซ้อนมากและกำลังทำงานอยู่

แหล่งข้อมูลที่ดีที่สุดที่ฉันพบคือ:



6
เป็นไปได้และ / หรือสมเหตุสมผลที่จะใช้ทั้ง zram และ zswap?
Phlya

2
ไม่มีความต้องการ / ควรดำเนินการสามอย่างในเวลาเดียวกัน zswap ต้องการการแลกเปลี่ยนดิสก์เป็นแบ็คเอนด์ซึ่งแตกต่างจาก ZRAM ซึ่งไม่จำเป็นต้องมีพาร์ติชั่น swap เฉพาะ อย่างไรก็ตามถ้าคุณมี swap แล้ว ZRAM + swap partition นั้นมีประสิทธิภาพน้อยกว่า zswap + swap partition มาก
staticd

zswapคุณสามารถโปรดสรุปที่นี่วิธีการที่คุณเปิดใช้งาน ที่นี่รายละเอียดaskubuntu.com/a/361321/25388
Hertz 준영


1
คำตอบที่ระบุว่าทุกคนzramเป็นswapเป็นสิ่งที่ผิดโดยสิ้นเชิง ไม่ได้เป็นzram เพียงสามารถเก็บไว้ใน แต่นี่เป็นหนึ่งในกรณีการใช้งานที่เป็นไปได้มากมาย! นี่คือตัวอย่าง: "บาง usecases รวมถึงการจัดเก็บ / tmp ใช้เป็นดิสก์ swap, แคชต่าง ๆ ภายใต้ / var และอาจจะมากขึ้น :)" kernel.org/doc/Documentation/blockdev/zram.txtตัวอย่างเช่นฉันใช้สำหรับ ที่เก็บข้อมูลชั่วคราวที่ฉันจัดรูปแบบและติดตั้งเหมือนกับอุปกรณ์บล็อกอื่น ๆ ทั่วไป swapswapzram
Victor Yarema
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.