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 <[email protected]>
Date: Tue Oct 11 23:59:07 2016 -0700
したがって、zswapは、圧縮されたインラムキャッシュがディスクに書き戻される直前に忘れられる可能性が高い状況で役立ちます。最終的に実際のスワップデバイスによってバックアップされる必要がある、長くて長いヒープを持つアプリケーション用ではありません。
これらの3つのシステムについては非常に多くのものがありますが、それらを簡単に比較することはできません。私はそれを理解しようとしましたが、私の頭は爆発しました。それから私はそれを手に入れたと思ったので書き留めてみたところ、頭が再び爆発した。 (実装の概要を参照してください)それらの間のペアワイズ比較について尋ねる多くのスタック交換の質問があったので、私はこれをここに投稿することが役に立つと思いました。
ZRAM: RAMにスワップデバイスを作成します。ここに送信されたページは、保存時に圧縮されます。他のスワップデバイスよりも優先度が高くなります:スワップアウトされたページは、満杯になるまで優先的にzramデバイスに送信され、その後のみ他のスワップデバイスが使用されます。
ZSWAP:frontswap
システムはページをスワップアウトする試みをフックし、zswapを write-back-cache として使用します。HDD/ SSDスワップデバイスの場合:試行が行われますページを圧縮し、圧縮率の低いデータが含まれている場合は、直接ディスクに書き込まれます。データが圧縮されている場合、zswapメモリのプールに保存されます。 RAMの圧縮されたページの合計が特定のサイズを超えたときにページがメモリからスワップアウトされた場合、最長時間未使用(LRU)compressedページが書き込まれますすぐに必要になる可能性は低いため、ディスク。
ZCache:超越メモリシステムのバックエンドです。超越メモリは、put
およびget
呼び出しを使用して、一度に1ページだけにアクセスできるRAMのようなメモリを提供します。これは、一度に1バイトずつアクセスできる通常のメモリとは異なります。 frontswap
およびcleancache
システムは、それぞれファイルシステムページキャッシュのスワップと再生を試み、それらを超越メモリバックエンドに送信しようとします。 zcacheがバックエンドとして使用される場合、データは圧縮されてRAMに保存されます。いっぱいになると、圧縮されたページがスワップに追い出されます。 (代替バックエンドは、ネットワークコンピューター間でRAMのプールを共有するRAMsterです)。 frontswap
フロントエンドとzcache
バックエンドのみを使用すると、zswap
と同様に機能します。 (実際、zswapはzcacheの簡略化されたサブセットです)
私が見つけた最高のリソースは次のとおりです。