web-dev-qa-db-ja.com

Linux:より大きな塊に交換する

私のswapdiskは100 MB/sを書き込むことができます。システムがスワップアウトすると、8〜20 MB /秒しか書き込まれません。

iostatは、デバイスが100%アクティブであると言っているので、Linuxがドライブを探している、または小さなチャンクを交換しているような気がします。

同時にスワップインがあったとしても説明できますが、スワップインや他のディスクI/Oはありません。

Linuxに大きな連続したチャンクでスワップアウトするように指示することは可能ですか?たとえば、最も古い10 MBページを決定し、それらを1つのチャンクでスワップアウトしますか?

スワップのページフレームサイズは4Kではなく10Mと言ったようなものです。

私のシステムでは、これに沿ったアルゴリズムが理想的だと思います。

dirty_pct = dirty pages / all RAM
if dirty_pct > 50%:
   # Half of memory is dirty, slowly start swapping out
   if busy_time(swapdevice) < dirty_pct:
       # if RAM is 60% dirty, start swapping if disk is less than 60% busy
       # if RAM is 90% dirty, start swapping if disk is less than 90% busy
       identify the next 10 MB that would be swapped if dirty_pct had been 100%
       save the 10 MB to swap as a single chunk
       mark the pages as clean

このようにして、システムは50%ダーティでスワップアウトを開始し、アイドル状態になっていたドライブでスワップアウトするため、パフォーマンスに影響しません。スワップされたデータは決して使用されないかもしれませんし、それでも私たちはいくつかのIOとにかくアイドル状態でした)を無駄にしました。

$ uname -a
Linux r815 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
4
Ole Tange

ない。それは不可能です。

Linuxカーネルは、RAM、スワップスペース、最後に使用されたスワップロケーション、ディスクキャッシュレスポンシブ、スワップなど、さまざまなアルゴリズムを使用して、スワップメモリ​​割り当てをいつどのように使用するかを決定します。

システムのフリーズやプロセスの強制終了を回避するためにメモリ管理がオンデマンドであるため、システムは「10MB>ページコレクション」を待つだけで済みません。

ただし、RAMおよびスワップ管理に関連するいくつかのバグは、システムがスワップを開始したときのパフォーマンスが非常に悪いため、長年報告されています。

ここでの最大の問題は、スワップに到達したときのページの指数関数的な乗算です(メモリページがリンクしているため)ため、ディスク使用量はzswapを使用して改善できると言えます。

zswapはその乗算を圧縮し、ディスクの読み取り/書き込みを減らし、CPU使用率に顕著な影響を与える可能性があります。

zswapはカーネル管理されており、システムのニーズに合わせて調整するための便利な低レベル構成がたくさんあります。

https://www.maketecheasier.com/use-zswap-improve-old-linux-performance/

2
DATALOT