zramが「圧縮された」値と比較してより多くのメモリを占めるのはなぜですか?

zramが「圧縮された」値と比較してより多くのメモリを占めるのはなぜですか?

私はzramを設定し、Linuxボックスで広範囲にテストし、これが私のシナリオに実際に役立つかどうかを測定しました。しかし、私は混乱しているzram〜らしい圧縮されていないデータサイズ全体にメモリを使用します。 「zramctl」と入力すると、以下が表示されます。

NAME       ALGORITHM DISKSIZE   DATA  COMPR  TOTAL STREAMS MOUNTPOINT
/dev/zram0                 2G 853,6M 355,1M 367,1M       4 [SWAP]

zramctlのヘルプコマンドによるとはメタデータを含むDATA非圧縮サイズとTOTAL圧縮メモリです。ただし、 を入力すると、swapon -s次のような出力が表示されます。

Filename            Type        size     used    Priority
/dev/sda2           partition   1463292  0       4
/dev/zram0          partition   2024224  906240  5

906240使用されたメモリ(KB)で、DATAzramctlの853,6M値に変換できます。これは、圧縮されたzramデバイスが保存するよりも多くのメモリを必要とするという印象を与えます。いっぱいになるとDATA、実際にディスクドライブに交換され始めるので、確かにいっぱいです。

zramが元のデータサイズと同じくらい多くのメモリを占有しているように見えるのはなぜですか?なぜCOMPRサイズがまたはではないのですかTOTAL?まだこれに関する情報が見つからないため、オンラインには何の情報もないようです。ありがとうございます!

答え1

だからもう少しテストして観察したところ、私はいくつかの非常に興味深い事実を見つけました。DATAもちろん圧縮されていないスワップ空間が占めるメモリ量。しかし、一見すると非常に欺瞞的で混乱しています。 zramを設定してスワップとして使用すると、disksize圧縮データに対してzramが消費する合計メモリ量は表示されません。代わりに総額を表します。圧縮されていないzram はデータを圧縮します。したがって、2GB のサイズの zram デバイスを作成できますが、実際には総圧縮メモリが約 500 ~ 1000 MB 程度(もちろんシナリオによって異なる)になると zram が停止します。または、Gnomeのシステムモニタなどのコマンドがswapon -s表示されます。圧縮されていないzramctlのデータサイズと同様に、zramデバイスのデータサイズですDATA。幸い、zramは実際に報告されたメモリ量を使用しません。しかし、これは実際に実際に利用するために持っているRAM + 50%と同じzramディスクサイズを作成する必要があることを意味します。いいえzram-configが誤って実行したように、ディスクサイズはRAMサイズの半分に等しくなります。しかし、もっと詳しく知りたい場合は、読んでください。

より深い文脈は次のとおりです。私はなぜそんなに確信していますか? zswapでもテストしたからです。私はanon_prioと比較してmm / vmscan.cでfile_prio値を下げる独自のカーネルをコンパイルしました(最新のLinux 5.6カーネルでは、変数名はそれぞれfpとapに変更されました)。 file_prioの値を減らすと、カーネルが貴重なキャッシュメモリを破棄するのを防ぎます。デフォルトでは、100に設定されていても、カーネルはスペアメモリであるかアクティブプログラムであるvm.swappinessかにかかわらず、キャッシュされた大量のRAMデータを削除します。基本構成がパフォーマンスに与える影響は次のとおりです。厳しい本当にzramを使いたいときにメモリ不足が発生した場合は絶対に考えるスワップコアはほとんど使用されません。そして圧縮率の高いメモリ方式をより頻繁に使用します。使用可能なメモリが多いほど、データキャッシュ用のスペースが増えます。これにより、キャッシュされたデータは途方もなく高速で削除されず、Linuxはクリアされた特定のプログラムファイルキャッシュを繰り返し読み取る必要がなくなります。通常のハードドライブでテストすると、パフォーマンスの影響を簡単に確認できます。

zswapテストに戻る:カスタムカーネルを使用して50〜70%のメモリーマーキングに達すると、zswapに圧縮するのに十分なメモリーがあります。 Gnomeのシステムモニターはすぐにページパーティションのスワップデータ使用率が高いことを示しましたが、奇妙なことに、ハードドライブのページングは​​まったくありませんでした!もちろん、これは最近使用されたメモリを独自に交換するzswapの設計です。しかし、システムがこのように高いスワップ使用量を報告していることは興味深いです。スワップパーティションの場合それにもかかわらず、最終的にはスワップパーティションまたはスワップファイルのサイズによって制限されます。メモリをすべて圧縮しても〜しなければならない少なくとも圧縮されていないデータのスワップサイズ。したがって、zswapの4GBスワップメモリ​​が実際には1〜2GBしか使用されていない場合でも、スワップのサイズは圧縮されていないデータサイズに調整する必要があります。 zramも同様ですが、ここには少なくとも実際に予約されたメモリはありません。もちろん、動的に増加するスワップファイルでzswapを使用しない限り。

zramについて話しましょう。非常に興味深い詳細これは私の観察を支持します。

zramを作ることは意味がありませんメモリサイズの2倍以上 なぜなら2:1の圧縮率を期待しているからです。 zramは使用しないときにディスクサイズの約0.1%を使用するため、巨大なzramは無駄です。

これは、zramを効果的に使用するには、次のことを行う必要があることを意味します。少なくともインストールしたRAMと同じディスクサイズを作成します。圧縮率が非常に高いため、GB RAM + 50%をお勧めしますが、上記の引用は+100%を超えるとあまり意味がないという意味です。さらに、圧縮されていないデータサイズと一致するディスクサイズを指定する必要があるため、実際の物理メモリ使用量を制御して予測することははるかに困難です。上記の有用な公式ソースでは、TOTAL次のコマンドを使用して物理メモリ使用量(zramctl値と同じ)を制限できますecho 1G > /sys/block/zram0/mem_limit。ただし、実際にはシステムがロックされます。システムはまだ交換を試みますが、zramは制限を適用し、CPU使用率が非常に高く、システムがロックされます。このような行動は意図的ではなかった。これは、物語全体の一部が非常に信頼できないという印象を高めた。

結論として:

  • zramデバイスの作成中に設定したのは、デフォルトでは仮想disksizeディスクサイズです。いいえ実際のRAM使用量を示します。
  • シナリオの実際のRAM使用量(圧縮率)を予測したり、大きすぎるzramディスクを作成したりしないでください。実際には、現在のRAMサイズ+ 50%がほぼ常に大丈夫です。
  • 残念ながら、Linuxカーネルのデフォルト設定はvm.swappiness100に設定されていてもzram圧縮には完全には適していません。実際に作成するには、カスタムカーネルを作成する必要があります。本物Linuxでは、最も圧縮可能なデータを置き換えてメモリを解放するのではなく、あまりにも多くのファイルキャッシュを消去するので、この便利な機能を使用してください。たくさんより早く。皮肉なことに、このような状況を解決するのに役立つパッチがあります。決して受け入れられなかった
  • 圧縮データがこのしきい値に達すると、zram制限を使用するとecho 1G > /sys/block/zram0/mem_limitシステムがロックされます。制限に加えて他の選択肢がないように思われるので、よく予測されたzramディスクサイズにzramの使用量を制限する方が良いでしょう。

関連情報