Linux は、選択した匿名メモリページを RAM とスワップ用ストレージの間で移動できます。これにより、使用頻度の低いメモリを保持しつつ、アクティブなワークロードやファイルシステムキャッシュのために RAM を解放できます。ただし、ストレージは RAM よりはるかに低速です。スワップは容量とメモリ管理のための手段であり、十分なメモリやアプリケーションのメモリ制限の代わりにはなりません。
ファイルシステム · レッスン 8
スワップ
Linux がスワップ領域を利用、初期化、有効化、容量設計、安全に無効化する仕組みを学びます。
スワップがメモリ管理に関与する仕組み
カーネルは、ワークロード、メモリ圧力、cgroup、swappiness などの調整値に応じて、RAM が完全に尽きる前からスワップを使うことがあります。ファイルを裏付けとする変更されていないページは破棄して元のファイルから読み直せることが多い一方、匿名ページはスワップへ移すか RAM に残す必要があります。
大量のスワップが継続すると、深刻な遅延やスラッシングが起こることがあります。スワップ領域を増やせば必ず性能が改善するとは考えず、メモリ需要、ワーキングセット、圧力、アプリケーションの制限を診断してください。
スワップへ格納する主な候補となるメモリはどれですか?
有効なスワップを調べる
まず読み取り専用のコマンドを使います。
$ swapon --show
$ cat /proc/swaps
$ free -h
これらは、有効なスワップの構成とメモリ全体の数値を表示します。「used」が 0 でなくても、それだけで問題とは限りません。スワップインとスワップアウトの速度、メモリ圧力、遅延、ワークロードの動作と関連付けて判断してください。
有効なスワップ領域を構造化して一覧表示するコマンドはどれですか?
スワップデバイスを初期化して有効化する
mkswap はスワップシグネチャを書き込み、対象にあった以前の有効なメタデータを破壊します。練習には、確認済みの使い捨て対象だけを使ってください。
$ sudo mkswap /dev/VERIFIED-SWAP-TARGET
$ sudo swapon /dev/VERIFIED-SWAP-TARGET
mkswap の前には、mkfs の前と同様に、モデル、シリアル番号、サイズ、永続的な識別情報、既存のシグネチャ、マウント、RAID、LVM、暗号化、バックアップを確認します。有効化した後、swapon --show で正確なソースを確認してください。
永続化する場合は、ローカルの方針に適した種類とオプションを指定し、/etc/fstab でスワップ UUID を使います。
UUID=VERIFIED-SWAP-UUID none swap sw 0 0
初期化済みのスワップ領域を有効にするコマンドはどれですか?
スワップファイルとそのほかのバックエンド
スワップファイルなら、パーティションを変更せず柔軟に容量を用意できます。ただし、作成要件はファイルシステムごとに異なります。ファイルには、制限の厳しいパーミッション、未対応のホールやコピーオンライト動作を避けた適切な割り当て、スワップシグネチャ、有効化が必要です。どこでも同じ汎用的な fallocate 手順をコピーせず、ファイルシステムとディストリビューションの文書に従ってください。
zram のような圧縮 RAM デバイスは、CPU と容量のトレードオフが異なる別のスワップ階層になります。暗号化スワップは保存中のページを保護でき、休止状態には再開設定と十分な適合ストレージが必要です。これらの目的は容量設計に影響します。
スワップを RAM の必ず 2 倍にすべきという普遍的な規則はありません。ワークロードのピーク、望ましい障害時の動作、休止状態の要件、ストレージの遅延と耐久性、クラッシュダンプ設計、運用監視を基に容量を決めてください。
スワップ容量を決める最適な基準はどれですか?
スワップを安全に無効化する
確認済みの領域を指定して無効化します。
$ sudo swapoff /dev/VERIFIED-SWAP-TARGET
カーネルは、その領域にある使用中のスワップページを別の場所へ移動する必要があります。RAM と残りのスワップに収まらなければ、操作が失敗したり危険なメモリ圧力が生じたりします。先にワークロードを停止または制限してメモリを監視し、正しい対象だと確認してから永続的な fstab エントリを削除します。ストレージを別用途に使う前に、swapon --show で無効化を確認してください。
高負荷のシステムで swapoff が失敗したり危険になったりするのはなぜですか?
管理された環境でファイルのパーミッション、有効化、永続化を練習するには、Linux でスワップファイルを作成して有効にする を利用してください。
レッスン完了
スワップ を完了しました
これで、スワップを明示的なメモリ管理リソースとして扱えるようになりました。
スワップを、主にメモリ圧力下の匿名メモリと関連付ける。
容量を変更する前に、有効なスワップとワークロードの動作を調べる。
確認済みの使い捨て対象だけを初期化し、
swaponで有効化する。ワークロードと休止状態の要件に応じて、スワップの容量と保護を設計する。
swapoffの前に、ページを移動できる容量を確保する。