Zswap
関連記事
Wikipedia より:
- "Zswap はスワップされたページのライトバックキャッシュを圧縮する Linux カーネルの機能です。スワップアウトされたときにメモリページをスワップデバイスに移動する代わりに、zswap は圧縮を行なってシステムの RAM 内のメモリプールに動的に保存します。"
zswap はスワップデバイスの圧縮 RAM キャッシュです。スワップアウトされそうになったページは圧縮されて RAM が本当に満杯になるまで RAM 内で扱われます。そして最も長く使われてない (LRU) ページがディスクに送られます。zram は RAM のスワップデバイスとして動作するので、他にスワップデバイスは必要としません。
要するに、zswap を使用するにはスワップデバイスを設定する必要があるということです。
目次
zswap の有効化
以下のコマンドを root で実行することで zswap を有効化できます:
# echo 1 > /sys/module/zswap/parameters/enabled
永続的に zswap を有効にするには、以下をカーネルブートパラメータに追加してください:
zswap.enabled=1
zswap のカスタマイズ
現在のパラメータ
Zswap には、カスタマイズ可能なパラメーターがいくつかあります。 ライブ設定は、次を使用して表示できます。
$ grep -R . /sys/module/zswap/parameters
/sys/module/zswap/parameters/same_filled_pages_enabled:Y /sys/module/zswap/parameters/enabled:Y /sys/module/zswap/parameters/max_pool_percent:20 /sys/module/zswap/parameters/compressor:lz4 /sys/module/zswap/parameters/zpool:z3fold /sys/module/zswap/parameters/accept_threshold_percent:90
さまざまなパラメーターの説明については、 zswapのドキュメント を参照してください。
初期構成を示すブート時ロードメッセージは、次の方法で取得できます。
$ dmesg | grep zswap:
[ 0.317569] zswap: loaded using pool lz4/z3fold
パラメータを設定
sysfsの使用
各設定は、sysfsインターフェースを介して実行時に変更できます。たとえば、 compressor
パラメータを変更するには:
# echo lz4 > /sys/module/zswap/parameters/compressor
カーネルブートパラメータの使用
パラメータの変更を永続化するには、対応するオプション、たとえば zswap.compressor=lz4
をカーネルブートパラメータに追加する必要があります。したがって、上記のすべての設定を永続的に設定するには、次のカーネルパラメータを追加する必要があります。
zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold
ブートパラメータを介して圧縮アルゴリズムを変更する場合、対応する圧縮モジュールがブートの早い段階でロードされていることを確認する必要があります( #Compressionalgorithm を参照)。
systemd-swap の使用
システムスワップ スクリプトを使っているものについては、ブートプロセスの後の段階で システム パラメータを、/etc/systemd/swap.conf
に保存されている の設定 に基づいて変更します。
最大プールサイズ
メモリプールは事前に割り当てられていません。使用可能な合計メモリのパーセンテージで特定の制限まで、デフォルトでは合計 RAM の最大20%まで拡張できます。 このしきい値に達すると、ページはプールからスワップデバイスに追い出されます。
圧縮されたプールの最大サイズは、パラメーター max_pool_percent
で制御されます。
圧縮メモリプールアロケータ
zpool パラメータは、圧縮メモリプールの管理を制御します。デフォルトでは zbud
に設定されています。
zbud データアロケーターを使用すると、2つの圧縮オブジェクトが1ページに格納され、圧縮率が2以下に制限されます。 優れた [1] アロケーターでは、ページごとに最大3つの圧縮オブジェクトを使用できます。 z3fold の圧縮率は通常平均2.7ですが、 zbud の圧縮率は1.7です。
タイプ z3fold の zpool がデフォルトで作成されます。カーネルパラメータ zswap.zpool
を使用して、起動時に別のメソッドを選択します。 データアロケータは、sysfs インターフェースを介して後の段階で変更することもできます。
圧縮アルゴリズム
ページ圧縮の場合、 zswap はカーネルの暗号化 API によって提供されるコンプレッサーモジュールを使用します。デフォルトでは lz4 圧縮アルゴリズムを使用しますが、これは起動時に zswap.compressor
で変更できます。その他のオプションには、deflate、lz4hc、lzo、lzo-rle、842、zstd があります。
実行時に sysfs または systemd-swap を使用して圧縮を変更することに問題はありませんが、この場合、 zswap は lz4 で開始し、後の段階で定義されたアルゴリズムに切り替わります。別のアルゴリズムで zswap をすぐに開始するには、これをカーネルのブートパラメータを介して設定し、対応するモジュールをカーネルによって早期にロードする必要があります。これは、次の手順に従って実行できます。
- 選択したコンプレッサーに関連するモジュールを MODULES アレイに追加します。
- mkinitcpio 構成を変更した後、 RAM ディスク環境を再生成します。mkinitcpio#イメージの作成とアクティブ化 を参照してください。
zswap.compressor
を カーネルパラメータ で選択したアルゴリズムに設定します。
次回の起動時に、 #Current parameters を参照して、 zswap が要求されたコンプレッサーを使用するかどうかを確認します。