Zswap
zswap とは、仮想メモリ圧縮(英語版)を実現する Linux カーネルの機能で、スワップされたページを圧縮されたライトバックキャッシュ上に保持する。メモリページ(英語版)がスワップアウトされる際にスワップデバイス上に移動させるのではなく、システム RAM 上に動的に確保されるメモリプール内に圧縮して保存する。実スワップデバイスへのライトバックは延期されるか完全に回避されるので、スワップが必要とされる Linux システム上の I/O を大きく低減させることができる。トレードオフとして、圧縮を実行するために CPU サイクルの消費は増加する。
組み込みデバイスやネットブックその他のローエンドハードウェアデバイスなどに加え、SSD をストレージに利用するデバイスなど、様々なフラッシュベースストレージ(英語版)を用いるデバイスにおいて、zswap の I/O が低減される利点を活かすことができる。なぜなら、フラッシュメモリは原理上書き込み回数が限られておりスワップ領域として利用されると急速に消耗してしまうためである。
望ましい圧縮モジュールの選択は、カーネルブートパラメータ(英語版) zswap.compressor の値を通じて 起動時に動的に行うことができる。指定のない場合、デフォルトで Lempel–Ziv–Oberhumer (LZO) 圧縮アルゴリズムが利用される。Linux カーネルバージョン 3.13 時点で、zswap を利用するには明示的にカーネルブートパラメータ zswap.enabled に 1 を指定する必要がある。
zswap が利用できるメモリプールの最大サイズは sysfs パラメータ max_pool_percent により設定可能である。このパラメータには、総システム RAM の何パーセントをメモリプールが占有できるかを指定する。指定された最大サイズのメモリープールが事前に確保されるわけではなく、必要に応じてサイズは増減する。スワップが実行された結果設定された最大プールサイズに到達した場合、もしくは out-of-memory(英語版) 状態のためプールを拡大することができなかった場合、スワップされたページは Least Recently Used アルゴリズムに基いてメモリプールからスワップデバイスへと退避させられる。