web-dev-qa-db-ja.com

zramを使用する場合のvm.swappinessの適切な値は何ですか?

コンピューターでzramを圧縮RAMでバックアップされたスワップとして使用しています。システムが何かを交換する必要がある場合、それをzram-backedスワップファイルに交換することは、そのデータをメモリ内で圧縮して領域を解放することとほぼ同じです。これにより、ほとんどの場合、ディスクに基づくスワップに比べてスワップが非常に高速になります。このため、実際にディスクにアクセスすることなく実行できるため、システムに未使用のものをより積極的にスワップアウトするように促すことで、パフォーマンスが得られるかどうか疑問に思います。

だから、たとえば、vm.swappiness zramの使用中に100に?これは望ましいでしょうか?

sysctl -w vm.swappiness=100
13

短い答え:vm.swappiness=100is zramの適切な値 (少なくともLinux 4.9のDebian Stretchでは、これが最良の値であると信じています)

私はすでにvm.swappiness=100をテストしています。

私はあなたが いくつかの簡単なテスト をしてあなたに最適な値を確かめることができると思います。

また、私はこの質問をテストするために 別の簡単なプログラム を作成しました。 x私のマシンでは、非常に低いvm.swappiness値(vm.swappiness=1など)により、明らかに応答性の問題が発生します。

/proc/meminfoSwapCachedについて:

まず、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
illiterate

Swappinessを高くすることはお勧めしません。カーネルの一般的なメカニズムは、ページ(メモリのチャンク)をスワップに入れて、他の実行中のタスクのためにメモリを解放することです。

カーネルがnページの解放を希望する場合の最初の「問題」、m(m <n、mはnを保持するために必要な圧縮ページの数)がRAMに新しく作成されます。これがカーネルを妨害するか、ない。

とにかく、スワップにページがある場合、スワップの一部のページでアプリケーションを後で使用することができます。カーネルは、これらのページを物理メモリに戻しますが、ページをスワップから削除しません(標準のスワップではcachingと見なすことができるため、アプリケーションがバックグラウンドで戻ると、カーネルはこれらのページを遅いスワップに書き戻す必要はありません)。ただし、zramの場合、zramのmページ+メモリに戻ったnページがメモリにあるため、賢明なトリックではない可能性があります。

カーネルは通常、ビジネスを行うために使用できる「総メモリ」を持っています。 zramを追加すると、ディスクベースのスワップの場合と同様に、「スワップ」メモリのみがカウントされますが、実際の「合計メモリ」が減少し、カーネルによって予期/予測されません。時々、あなたはこれのために奇妙で望まない振る舞いをすることができます!

Zramを使用すると、カーネルがメモリの負荷がかかっているときに、この領域にカーネルがあまりスワップしないようにするのが良いでしょう。また、実際のハードディスクスワップパーティションは、少なくともzramの最大サイズよりも大きくする必要があります。そうすることで、システムがOOMを取得しないと同時に、freeによって報告される十分な空き領域が表示されます。 !

2
Huygens

メモリがいっぱいになると、ページを(ディスクに)スワップアウトする必要があります。メモリがいっぱいになったときにページをスワップアウトする場所を作成するためにメモリを使用している場合、圧縮によって違いが生じる場合を除いて、目的を達成すると考えられます(そして、メモリを経由せずに直接メモリを圧縮するのが自然ですスワップ)。コンピュータはメモリ速度と比較して圧縮と解凍の速度がますます高速になるため、これをベンチマークする必要があると思います。

0
Alexander