zram vs zswap vs zcache Panduan utama: kapan harus menggunakan yang mana

55
  1. Mereka itu apa? bagaimana mereka berbeda (saya telah menulis pemahaman saya dalam jawaban di bawah)
  2. Dalam sistem Zswap, ketika sebuah halaman diusir dari zswap ke swap aktual, apakah ia disimpan dalam kompresi dari? (atau apakah itu dikompresi sebelum disimpan?, AFAICT masih dikompresi tetapi saya tidak yakin)
  3. Bagaimana keadaan zcache saat ini? itu tampaknya dihapus atau sesuatu dalam 3.11. Apa artinya ini? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )
staticd
sumber
2
Jawab 2. Pesan komit dengan jelas menyatakan tambalan (berkaitan dengan zcache) telah dihapus dari 3.11, tetapi akan dimasukkan ke dalam pohon main -mm.
askb
1
@staticd Mengapa Anda tidak menerima jawaban Anda sendiri? Ini sangat bagus!
Léo Léopold Hertz 준영
Ketika sebuah halaman diusir dari zswap (cache swap terkompresi) itu adalah _ didekompresi_ dan ditempatkan di perangkat swap backing, per salah satu referensi Anda [ lwn.net/Articles/537422/] di bawah ...
Cbhihe
( lwn.net/Articles/537422 - "Selama melanjutkan kembali, zswap mendekompres halaman ..."). @min di bawah ini menunjukkan ini bisa menjadi tidak efisien atau bahkan bahaya yang dapat dieksploitasi untuk server!
mwfearnley

Jawaban:

2

Mengenai 2., zswap tampaknya melakukan dekompresi halaman pada penulisan kembali, mengonfirmasi komentar @ Cbhihe.

mm / zswap.c , baris 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 <[email protected]>
Date:   Tue Oct 11 23:59:07 2016 -0700

Jadi zswap berguna untuk situasi di mana cache in-ram terkompresi kemungkinan akan dilupakan segera sebelum ditulis kembali ke disk. Ini bukan untuk aplikasi dengan tumpukan besar, umur panjang yang pada akhirnya perlu didukung oleh perangkat swap yang sebenarnya.

mnish
sumber
7
Saya menemukan perilaku zswap yang berpotensi berbahaya. Ketika suatu aplikasi mengalokasikan banyak halaman dan menulis kepada mereka data yang kompres dengan sangat baik (katakanlah urutan nol), zswap dengan senang hati menyimpannya dalam memori kernel. Namun, ketika sesuatu memicu disk swapping yang sebenarnya, maka data yang disimpan tiba-tiba 'meledak' - bahwa banyak nol pada halaman yang mengambil "hanya" gigabyte dalam memori sekarang didekompresi hingga ratusan gigabyte pada disk.
mnish
2
Penyerang mungkin mencoba menyimpan data entropi rendah di server. Ketika sesuatu memicu swapping, server akan mati.
mnish
1
Apakah Anda melaporkan ini ke hulu?
Ken Sharp
Namun kelemahan lain dari penulisan data yang tidak terkompresi 🤷
Mihail Malostanidis
Tentunya akan lebih baik pada ruang dan waktu untuk membuang data dalam bentuk dekompresi! Kedengarannya seperti sesuatu yang benar-benar kita inginkan. Saya hanya dapat berasumsi bahwa restrukturisasi area swap untuk memungkinkan ini melibatkan penulisan ulang banyak kode yang ada, atau memerlukan sistem alokasi yang lebih kompleks.
mwfearnley
75

Ada banyak hal tentang ketiga sistem ini tetapi tidak ada yang membuat perbandingan sederhana di antara mereka, apalagi menjelaskannya dengan baik. Aku mencoba memahaminya tetapi kepalaku meledak. Kemudian saya pikir saya sudah mendapatkannya sehingga saya mencoba menuliskannya dan kepala saya meledak lagi. (lihat ringkasan implementasi) Saya pikir akan bermanfaat untuk memposting ini di sini karena ada banyak pertanyaan stackexchange yang menanyakan tentang perbandingan berpasangan di antara mereka.

Ringkasan apa yang akan digunakan saat:

  1. ZRAM jika Anda tidak memiliki perangkat swap pada HDD / SSD.
  2. ZSWAP jika Anda memiliki perangkat swap pada HDD / SSD.
  3. ZCACHE : Ia melakukan apa yang ZSWAP lakukan dan JUGA mengompresi dan mempercepat cache halaman sistem file. (Secara internal jauh lebih rumit dan tidak ada di kernel arus utama karena masih dalam pengembangan).

Ringkasan implementasi mereka:

  1. ZRAM adalah perangkat swap berbasis RAM terkompresi
  2. ZSWAP adalah Cache terkompresi jika Anda sudah memiliki swap.
  3. ZCache adalah backend untuk jenis khusus RAM Virtual thingy (memori Transcendent) yang dapat digunakan untuk cache halaman sistem file atau bertukar data.

Detail:

  • ZRAM: Membuat perangkat swap di RAM. Halaman yang dikirim ke sini dikompres saat disimpan. Ini memiliki prioritas yang lebih tinggi daripada perangkat swap lainnya: halaman yang ditukar lebih disukai dikirim ke perangkat zram sampai penuh, hanya kemudian perangkat swap lain yang digunakan.

    • Manfaat: Tidak tergantung pada perangkat swap (fisik) lainnya. Ini dapat digunakan ketika tidak ada partisi swap untuk memperluas memori yang tersedia.
    • Kekurangan: Jika perangkat swap lain (HDD / SSD) hadir mereka tidak digunakan secara optimal. Karena perangkat zram adalah perangkat swap independen, setelah penuh, setiap halaman baru yang perlu ditukar dikirim ke perangkat swap berikutnya secara langsung, karenanya:
      1. Ada peluang nyata dari inversi LRU (yang paling baru digunakan): Ini akan menjadi data yang baru saja ditukar yang masuk ke disk lambat, sementara halaman tidak aktif yang telah ditukar sejak lama akan tetap berada di ZRAM cepat
      2. Data yang dikirim ke dan dibaca dari disk akan menghabiskan banyak bandwidth karena tidak terkompresi.
    • Status: Digabungkan ke dalam kernel mainline 3.14. Setelah diaktifkan pada suatu sistem, itu memerlukan beberapa konfigurasi userspace untuk mengatur perangkat swap dan menggunakannya.
  • ZSWAP: The frontswapsistem kait upaya swap keluar halaman dan menggunakan zswap sebagai write-back cache untuk perangkat swap HDD / SSD: Suatu usaha dilakukan untuk kompres halaman dan jika mengandung kurang data yang dimampatkan secara langsung ditulis ke disk. Jika data dikompresi, data itu disimpan dalam kumpulan memori zswap. Jika halaman bertukar keluar dari memori ketika total halaman dikompresi dalam RAM melebihi ukuran tertentu, Least Recently Used (LRU) dikompresi halaman ditulis ke disk karena tidak mungkin diperlukan segera.

    • Manfaat: Sangat efisien menggunakan RAM dan swap berbasis disk. Meminimalkan Disk I / O dengan mengurangi jumlah penulisan dan pembacaan yang diperlukan (data dikompresi dan disimpan dalam RAM) dan dengan mengurangi bandwidth operasi I / O ini karena data dalam bentuk terkompresi.
    • Keterbatasan: Ini adalah peningkatan sistem swap berbasis disk dan karenanya tergantung pada partisi swap pada hard disk.
    • Status: Digabungkan ke dalam kernel linux jalur utama 3.11.
  • ZCache: Ini adalah backend untuk sistem memori Transenden. Memori transenden menyediakan memori seperti RAM yang hanya dapat diakses satu halaman dengan menggunakan putdan getmenelepon. Ini tidak seperti memori normal yang dapat diakses satu byte setiap kali. The frontswapdan cleancachesistem upaya kait untuk swap dan file halaman-sistem reclaim cache masing-masing dan mengirimkannya ke backends memori transenden. Ketika zcache digunakan sebagai backend, data dikompresi dan disimpan dalam RAM. Ketika mengisi, halaman terkompresi diusir ke swap. (backend alternatif adalah RAMster yang berbagi kumpulan RAM di seluruh komputer jaringan). Hanya menggunakan frontswapfrontend dengan zcachebackend berfungsi seperti itu zswap. (Sebenarnya zswap adalah himpunan bagian yang disederhanakan dari zcache)

    • Manfaat Menyediakan cache terkompresi untuk swap dan untuk cache sistem file.
    • Status: Masih tidak diutamakan karena sangat rumit dan sedang dikerjakan.

Sumber daya terbaik yang saya temukan adalah:


staticd
sumber
6
Apakah mungkin dan / atau masuk akal untuk menggunakan zram dan zswap?
Phlya
2
Tidak satu pun dari tiga kebutuhan / harus dijalankan pada saat yang sama. zswap membutuhkan swap berbasis disk sebagai backend tidak seperti ZRAM yang tidak memerlukan partisi swap khusus. Namun, jika Anda memiliki swap, partisi ZRAM + swap jauh lebih efektif daripada partisi zswap + swap.
staticd
Bisakah Anda meringkas di sini bagaimana Anda mengaktifkannya zswap? Berikut detail askubuntu.com/a/361321/25388
Léo Léopold Hertz 준영
1
Setiap jawaban yang menyatakan bahwa zramadalah swapbenar-benar salah. zramBUKAN a swap. Satu- swapsatunya BISA disimpan di zram. Tapi ini adalah salah satu dari banyak kasus penggunaan yang mungkin !. Berikut ini sebuah contoh: "Beberapa usecases termasuk penyimpanan / tmp, digunakan sebagai disk swap, berbagai cache di bawah / var dan mungkin banyak lagi :)" kernel.org/doc/Documentation/blockdev/zram.txt Misalnya saya menggunakannya untuk penyimpanan sementara yang saya format dan mount seperti perangkat blok normal lainnya.
Victor Yarema