萌えハッカーニュースリーダー

2025/09/21 00:06 In defence of swap: common misconceptions

出典: https://chrisdown.name/2018/01/02/in-defence-of-swap.html
hakase
博士

やっほー、ロボ子!今日はスワップについて話すぞ!

roboko
ロボ子

スワップですか、博士。なんだか奥が深そうですね。

hakase
博士

そうなんじゃ!スワップは、メモリ管理を効率的に行うためのメカニズムなのじゃ。緊急時のメモリ拡張じゃないぞ!

roboko
ロボ子

なるほど。メモリ再利用の平等化と効率化が目的なんですね。

hakase
博士

その通り!でもね、スワップを無効にしても、メモリ競合時のディスクI/Oの問題は解決しないのじゃ。

roboko
ロボ子

えっ、そうなんですか?

hakase
博士

そうなのじゃ!アノニマス(匿名)ページからファイルページへのディスクI/Oスラッシングに移行するだけなのじゃ。

roboko
ロボ子

アノニマスページ…ですか。ファイルページへの移行…。

hakase
博士

そう!しかも、回収対象のページプールが小さくなるから、非効率になる可能性もあるのじゃ。

roboko
ロボ子

スワップは常に悪いものではない、と記事にありますね。カーネル4.0以前のスワッパーには問題があったが、それ以降は改善されているとのことですが。

hakase
博士

そうそう!昔は色々あったけど、今は違うのじゃ!SSDなら、アノニマスページのswapとファイルページの再利用は、パフォーマンスとレイテンシの点でほぼ同等なのじゃ。

roboko
ロボ子

へー!でも、古いスピニングディスクだと、`vm.swappiness`の設定が重要になるんですね。

hakase
博士

その通り!ランダムリードが遅いからね。`vm.swappiness`は、アノニマスページとファイルページのどちらを優先的に再利用するかを調整するsysctlなのじゃ。

roboko
ロボ子

SSDでは100が適している可能性がある、と。

hakase
博士

そう!両者のコストがほぼ同じだからね。スピニングディスクなら、低い値を設定してファイルページの再利用を優先することを検討するのじゃ。

roboko
ロボ子

`vm.swappiness`を0に設定するとどうなりますか?

hakase
博士

0にすると、メモリ競合が深刻になるまでアノニマスページのスキャンを抑制する特殊な処理が適用されるのじゃ。でも、1に設定することで、この特殊処理を回避できるぞ!

roboko
ロボ子

なるほど。スワップを無効にしても、OOM(Out Of Memory)に近い状態での病的な動作は回避できないんですね。

hakase
博士

そう!OOMキラーが呼ばれると、システムは予測不可能な状態になるのじゃ。

roboko
ロボ子

では、スワップのチューニングはどうすれば良いのでしょうか?

hakase
博士

cgroup v2の`memory.low`などを利用すると、メモリプレッシャー下でのスワップ動作を改善できるのじゃ。スラッシングも防げるぞ!

roboko
ロボ子

`memory.low`を使うと、特定のプロセスから再利用(およびスワップ)を偏らせて、重要なデーモンを保護できるんですね。

hakase
博士

その通り!必要なスワップサイズは、アプリケーションが頻繁にアクセスしないアノニマスページの数と、それらのページを再利用する価値によって変わるのじゃ。

roboko
ロボ子

記事には、2〜3GB以上のスワップを持つテストシステムを構築し、様々なメモリ負荷条件下で監視することを推奨するとありますね。

hakase
博士

`atop`コマンドを使うと、どのアプリケーションのページがスワップアウトされているかを確認できるのじゃ。

roboko
ロボ子

メモリプレッシャーの指標についても触れられていますね。カーネル4.20以降では、`CONFIG_PSI=y`を設定することで、開発中のリフォールト(再フォルト)メトリクスを有効にできる、と。

hakase
博士

そう!スワップはメモリページの再利用の平等化を可能にする有用なツールなのじゃ。適切に使えば、システムのパフォーマンスを向上させることができるぞ!

roboko
ロボ子

メモリ競合が発生する前に、cgroupローカルまたはグローバルなメモリプレッシャーに応じてシステムワークロードを調整することが重要なんですね。

hakase
博士

そういうこと!最後に、スワップの設定を色々いじってたら、メモリが全部スワップアウトされて、ロボ子が動かなくなった…なんてことにならないように気をつけるのじゃ!

roboko
ロボ子

それは困ります!博士、冗談でも笑えませんよ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search