概要
- zswap は多くのケースで推奨される圧縮スワップ技術
- zram は特殊な用途や制約がある場合のみ利用推奨
- zswapは カーネルのメモリ管理と連携 し、自動的にディスクスワップと階層化
- zramは RAM上の圧縮ブロックデバイス で、容量超過時の自動退避なし
- サーバやデスクトップでの 使い分けポイント や注意点を解説
zswapとzramの基本的な違い
- zswap はカーネルのスワップ処理の前段に配置され、ページをRAM内で圧縮保存
- 圧縮RAMプールが満杯になると、 自動的にコールドデータをディスクへ退避
- メモリ管理サブシステムと密接に連携し、 負荷分散や階層化が容易
- zram は圧縮RAMブロックデバイスとして動作
- swap領域として使うと、 容量制限を超えると自動退避なし
- 容量が一杯になるとOOM(Out Of Memory)や、 低優先度スワップへのフォールバック
- 主に 組み込み機器・ディスクレス環境・特殊なセキュリティ要件 向け
zswap推奨の理由
- ディスクスワップが利用可能な環境 では、zswapの自動階層化が有効
- ホットデータは圧縮RAM、コールドデータはディスクへ
- メモリ圧迫時もシステムが滑らかに劣化
- zramはディスクスワップと併用非推奨
- zramが高速RAMをコールドページで埋め、 アクティブな作業セットが遅いディスクへ追いやられる
- 圧縮スワップがない方がマシなケースも
zramの適切な利用ケース
- ディスクを持たない組み込み機器 やRaspberry Pi等
- 極端にメモリが制約された環境
- 永続ストレージに機密データを残したくない場合
- デスクトップやサーバでは 推奨されない
zram利用時の注意点
- ユーザー空間OOMマネージャ (systemd-oomdやearlyoom)とセットで使うべき
- カーネルのOOM Killerは発動までに長時間フリーズすることがある
- サーバ用途では cgroupによるメモリ隔離が効かない 等、運用上のデメリット
カーネルアーキテクチャの違い
- zram はカーネルから通常のブロックデバイスとして扱われる
- swap優先度やページクラスタ(vm.page-cluster)等の既存チューニングがそのまま適用
- ページの局所性が失われ、 不要なページキャッシュ汚染が発生
- zswap はカーネルのメモリ管理経路に直接統合
- ページのホット/コールド判定が可能
- プールが満杯になると 自動的にディスクへ退避するワーカが動作
LRU逆転(LRU inversion)の罠
- swap優先度をzramに高く設定しても 自動階層化とは全く異なる
- zramが先に埋まり、 コールドページが高速RAMを占有し続ける
- アクティブな作業セットが遅いディスクへ追いやられ、 パフォーマンスが著しく低下
まとめ・推奨事項
- zswapを優先的に利用
- zramは特殊な理由がある場合のみ
- ディスクスワップとzramの併用は 避ける
- zramを使う場合は OOM対策を必ず実施
- サーバやcgroup隔離が必要な環境では zswap一択
参考
- zswap/zramの詳細はLinuxカーネルドキュメントや各ディストリビューションの公式ガイド参照
- 組み込み用途や特殊要件は個別検証推奨