web-dev-qa-db-ja.com

zram vs zswap vs zcache Ultimateガイド:どちらを使用するか

  1. 一体何なの?それらはどのように違いますか(以下の回答に私の理解を書きました)
  2. Zswapシステムでは、ページがzswapから実際のスワップに追い出されたときに、圧縮元に保存されますか? (または、保存する前に解凍されますか?それはまだ圧縮されていますが、確信がありません)
  3. Zcacheの現在の状態は何ですか?明らかに削除されたか、3.11の何かでした。これは何を意味するのでしょうか? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7
55
staticd

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は、圧縮されたインラムキャッシュがディスクに書き戻される直前に忘れられる可能性が高い状況で役立ちます。最終的に実際のスワップデバイスによってバックアップされる必要がある、長くて長いヒープを持つアプリケーション用ではありません。

2
mnish

これらの3つのシステムについては非常に多くのものがありますが、それらを簡単に比較することはできません。私はそれを理解しようとしましたが、私の頭は爆発しました。それから私はそれを手に入れたと思ったので書き留めてみたところ、頭が再び爆発した。 (実装の概要を参照してください)それらの間のペアワイズ比較について尋ねる多くのスタック交換の質問があったので、私はこれをここに投稿することが役に立つと思いました。

次の場合に使用するものの概要:

  1. ZRAM HDD/SSDにスワップデバイスがない場合。
  2. ZSWAP HDD/SSDにスワップデバイスがある場合。
  3. ZCACHE:ZSWAPが行うことを行い、ファイルシステムページキャッシュを圧縮および高速化します。 (内部的にははるかに複雑であり、まだ開発中であるためメインラインカーネルにはありません)。

実装の概要:

  1. ZRAMは、圧縮されたRAMベースですスワップデバイス
  2. ZSWAPは圧縮されていますCacheすでにスワップがある場合。
  3. ZCacheは、特殊なタイプのバックエンドですVirtual RAM thingy(超越メモリ)ファイルシステムページのキャッシュまたはデータのスワップに使用できます。

詳細:

  • ZRAM: RAMにスワップデバイスを作成します。ここに送信されたページは、保存時に圧縮されます。他のスワップデバイスよりも優先度が高くなります:スワップアウトされたページは、満杯になるまで優先的にzramデバイスに送信され、その後のみ他のスワップデバイスが使用されます。

    • 利点:他の(物理)スワップデバイスに依存しません。スワップパーティションがないときに使用可能なメモリを拡張するために使用できます。
    • 欠点:他のスワップデバイス(HDD/SSD)が存在する場合、それらは最適に使用されません。 zramデバイスは独立したスワップデバイスであるため、いっぱいになると、スワップアウトする必要がある新しいページは次のスワップデバイスに直接送信されます。したがって、
      1. LRU(最も最近使用された)反転の本当の可能性があります:それは遅いディスクに行く最も最近スワップされたデータになりますが、ずっと前にスワップアウトされた非アクティブなページは高速ZRAMに残ります
      2. ディスクとの間で送受信されるデータは、圧縮されていないため、多くの帯域幅を消費します。
    • Status:メインラインカーネルに統合3.14。システムで有効にすると、スワップデバイスをセットアップして使用するためのユーザースペース設定が必要になります。
  • ZSWAP:frontswapシステムはページをスワップアウトする試みをフックし、zswapを write-back-cache として使用します。HDD/ SSDスワップデバイスの場合:試行が行われますページを圧縮し、圧縮率の低いデータが含まれている場合は、直接ディスクに書き込まれます。データが圧縮されている場合、zswapメモリのプールに保存されます。 RAMの圧縮されたページの合計が特定のサイズを超えたときにページがメモリからスワップアウトされた場合、最長時間未使用(LRU)compressedページが書き込まれますすぐに必要になる可能性は低いため、ディスク。

    • 利点:非常に効率的にRAMとディスクベースのスワップを使用します。必要な書き込みと読み取りの数を減らす(データを圧縮してRAMに保持する)ことと、データが圧縮形式であるため、これらのI/O操作の帯域幅を減らすことにより、ディスクI/Oを最小限に抑えます。
    • 制限:これは、ディスクベースのスワップシステムの拡張機能であるため、ハードディスク上のスワップパーティションに依存しています。
    • Status: 3.11メインラインLinuxカーネルにマージされました。
  • ZCache:超越メモリシステムのバックエンドです。超越メモリは、putおよびget呼び出しを使用して、一度に1ページだけにアクセスできるRAMのようなメモリを提供します。これは、一度に1バイトずつアクセスできる通常のメモリとは異なります。 frontswapおよびcleancacheシステムは、それぞれファイルシステムページキャッシュのスワップと再生を試み、それらを超越メモリバックエンドに送信しようとします。 zcacheがバックエンドとして使用される場合、データは圧縮されてRAMに保存されます。いっぱいになると、圧縮されたページがスワップに追い出されます。 (代替バックエンドは、ネットワークコンピューター間でRAMのプールを共有するRAMsterです)。 frontswapフロントエンドとzcacheバックエンドのみを使用すると、zswapと同様に機能します。 (実際、zswapはzcacheの簡略化されたサブセットです)

    • Benefitsスワップとファイルシステムキャッシュの両方に圧縮キャッシュを提供します。
    • Status:非常に複雑であり、作業中であるため、まだメインラインではありません。

私が見つけた最高のリソースは次のとおりです。


75
staticd