zramを使用するときにvm.swappinessに適した値は何ですか?

zramを使用するときにvm.swappinessに適した値は何ですか?

私のコンピュータでは、圧縮RAMサポートスワップ領域としてzramを使用しています。システムが何かを交換する必要があるときにzramサポートスワップファイルに置き換えることは、スペースを確保するためにメモリ内のデータを圧縮するのとほぼ同じです。これにより、ほとんどの場合、ディスクサポートスワップと比較してスワップが非常に高速になります。もしそうなら、システムが実際にディスクにアクセスせずに未使用のコンテンツをより積極的に交換することを奨励することで、どれくらいのパフォーマンスが得られるのか疑問に思います。

vm.swappinessそれでは、zramを100に設定するなど、いたずらをする人はいますか?これが望ましいですか?

sysctl -w vm.swappiness=100

答え1

短い答え:vm.swappiness=100はい適切な値zramの場合(少なくともDebian StretchとLinux 4.9ではこれが最も価値があると思います)

私はvm.swappiness=100それをテストしました。

私の考えでは、あなたができると思います。いくつかの簡単なテストあなたに最適な値を決定します。

私もそうだった別の簡単なプログラムこの問題をテストするには。私のコンピュータでは、非常に低いvm.swappiness値(たとえばvm.swappiness=1)が原因で顕著な応答の問題が発生します。

についてSwapCached/proc/meminfo

まずvm.page-cluster=0これを試してみてください。無駄な交換を減らすこともできますSwapCached

SwapCachedは、zramではなくスワップデバイスのようにzramを高速化できます。

SwapCached必要に応じて再利用可能(無料):

./linux-4.9/mm$ grep -rn delete_from_swap_cache
memory-failure.c:715:   delete_from_swap_cache(p);
shmem.c:1115:       delete_from_swap_cache(*pagep);
shmem.c:1645:            * unaccounting, now delete_from_swap_cache() will do
shmem.c:1652:               delete_from_swap_cache(page);
shmem.c:1668:       delete_from_swap_cache(page);
vmscan.c:673:       __delete_from_swap_cache(page);
swap_state.c:137:void __delete_from_swap_cache(struct page *page)
swap_state.c:218:void delete_from_swap_cache(struct page *page)
swap_state.c:227:   __delete_from_swap_cache(page);
swapfile.c:947:         delete_from_swap_cache(page);
swapfile.c:987: delete_from_swap_cache(page);
swapfile.c:1023:            delete_from_swap_cache(page);
swapfile.c:1571:            delete_from_swap_cache(page);
./linux-4.9/mm$ 

答え2

私は実際にswappinessをより高く設定することをお勧めしません。カーネルの一般的なメカニズムは、他の実行ジョブで使用できるようにいくつかのメモリを解放するためにページ(メモリブロック)をスワップすることです。

最初の「問題」は、カーネルがnページを解放しようとすると、m(m < n、mはnを受け入れるために必要な圧縮ページ数)がRAMに新しく作成されることです。カーネル。

それでも、交換にページがある間は、後で交換でアプリケーションとそのページの一部を使用できます。カーネルが行うことは、これらのページを物理メモリに戻すことですが、スワップから削除することはありません(標準スワップを使用すると、次のように考えることができます)。隠れ家したがって、アプリケーションがバックグラウンドに戻るとき、カーネルはこれらのページを遅いスワップ領域に書き換える必要はありません。しかし、zramの場合、メモリにzramのmページ+メモリのnページが含まれているので、これは賢明な方法ではないかもしれません!

カーネルには通常、仕事を完了するために使用できる「合計メモリ」があります。 zramを追加すると、ディスクベースのスワップと同様に「スワップ」メモリとしてのみ計算されますが、実際の「合計メモリ」は減少します。これはカーネルが期待または期待するものとは異なります。その結果、時には奇妙で歓迎されない行動を経験することがあります!

zramを使用しているときにカーネルがメモリ不足の状態にあるときに、この領域にあまりにも多くのスワップを行わないことをお勧めします。そして、システムがOOMされずに多くの空き領域が報告されるようにするには、常にzramの最大サイズよりも大きい物理ハードドライブスワップパーティションが必要ですfree

答え3

https://wiki.archlinux.org/title/Zram#Optimizing_swap_on_zram

この値はPop!_OSは何を使いますか?。 Pop!_OS GitHub プールリクエストも次にリンクされています。r/Fedoraでユーザーが行ったいくつかのテスト、vm.page-cluster = 0を決定するのが理想的です。彼らはまた、提案されたものと一致する高い交換価値が望ましいことを発見しました。カーネル文書:

デフォルトは60です。インメモリスワップ(zramやzswapなど)とファイルシステムよりも高速なデバイスでのスワップを混在させて設定する場合は、100を超える値が考慮されることがあります。たとえば、スワップデバイスのランダムIOがファイルシステムのIOよりも平均2倍速い場合、スワップ可能性は133(x + 2x = 200、2x = 133.33)でなければなりません。

答え4

メモリがいっぱいになったら、ページをディスクに交換する必要があります。メモリがいっぱいになったときにページが交換される場所を生成するためにメモリを使用する場合、圧縮によって差が生じない限り、目的に合わないと考えることができます(それでは、スワップを介さずにメモリを直接圧縮するのは自然です。 )。コンピュータがメモリ速度と比較して圧縮と解凍速度がますます速くなっているので、これをベンチマークする必要があるようです。

関連情報