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


55
  1. 一体何なの?それらはどのように違いますか(以下の回答に私の理解を書きました)
  2. Zswapシステムでは、ページがzswapから実際のスワップに追い出されたときに、圧縮元に保存されますか?(または、保存する前に解凍されますか?それはまだ圧縮されていますが、確信がありません)
  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なぜ自分の答えを受け入れなかったのですか?とても良いです!
レオレオポルドヘルツ

ページがzswap(圧縮スワップキャッシュ)から削除されると、以下のyr参照[ lwn.net/Articles/537422/]の 1つにつき、_decompressed_でバッキングスワップデバイスに配置されます...
Cbhihe

lwn.net/Articles/537422-「書き戻しの再開中、zswapはページを圧縮解除します...」)。以下の@mminは、これがサーバーにとって非効率であるか、悪用可能な危険でさえあることを示唆しています!
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は、圧縮されたインラムキャッシュがディスクに書き戻される直前に忘れられる可能性が高い状況で役立ちます。最終的に実際のスワップデバイスによってバックアップされる必要がある、長くて長いヒープを持つアプリケーション用ではありません。


7
zswapの潜在的に危険な動作を発見しました。アプリケーションが多くのページを割り当て、非常によく圧縮されたデータ(ゼロのシーケンスなど)を書き込むと、zswapはそれらをカーネルスラブメモリに喜んで保存します。ただし、実際のディスクスワッピングがトリガーされると、保存されたデータが突然「バースト」します。メモリ上の「のみ」ギガバイトを使用していたページのゼロが、ディスク上の数百ギガバイトに圧縮解除されます。
mnish

2
攻撃者は、低エントロピーデータをサーバーに保存しようとする可能性があります。何かがスワッピングをトリガーすると、サーバーは停止します。
mnish

1
このアップストリームを報告しましたか?
ケンシャープ

しかし、非圧縮データを書き込むの別の欠点🤷
ミハイルMalostanidis

確かに、圧縮されていない形式でデータをダンプすることは、スペースと時間の面で優れています。本当にやりたいことのように思えます。これを可能にするためにスワップ領域を再構築するには、多くの既存のコードを書き直すか、より複雑な割り当てシステムが必要になると思います。
mwfearnley

75

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

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

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

実装の概要:

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

詳細:

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

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

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

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

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



6
zramとzswapの両方を使用することは可能および/または合理的ですか?
-Phlya

2
3つの必要はありません/同時に実行する必要があります。zswapは、専用のスワップパーティションを必要としないZRAMとは異なり、ディスクベースのスワップをバックエンドとして必要とします。ただし、スワップがある場合、ZRAM +スワップパーティションはzswap + swapパーティションよりもはるかに効果が低くなります。
16年

ここでどのようにアクティベートするかまとめてくださいzswap。詳細はこちらaskubuntu.com/a/361321/25388
レオレオポルドヘルツ


1
述べているすべての答えzramではswap完全に間違っています。zramではありませんswapswapに保存できるのはのみzramです。しかし、これは多くの可能なユースケースの1つです!例は次のとおりです。「ユースケースには、/ tmpストレージ、スワップディスクとして使用、/ varの下のさまざまなキャッシュなどが含まれます:)」kernel.org/doc/Documentation/blockdev/zram.txtたとえば、他の通常のブロックデバイスと同様にフォーマットしてマウントする一時ストレージ。
ビクターヤレマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.