「Zswap」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎zswap のカスタマイズ: 最大プールサイズを翻訳して追加)
(→‎zswap のカスタマイズ: 圧縮メモリプールアロケータを翻訳して追加)
68行目: 68行目:
 
メモリプールは事前に割り当てられていません。使用可能な合計メモリのパーセンテージで特定の制限まで、デフォルトでは合計 RAM の最大20%まで拡張できます。 このしきい値に達すると、ページはプールからスワップデバイスに追い出されます。
 
メモリプールは事前に割り当てられていません。使用可能な合計メモリのパーセンテージで特定の制限まで、デフォルトでは合計 RAM の最大20%まで拡張できます。 このしきい値に達すると、ページはプールからスワップデバイスに追い出されます。
 
圧縮されたプールの最大サイズは、パラメーター {{ic|max_pool_percent}} で制御されます。
 
圧縮されたプールの最大サイズは、パラメーター {{ic|max_pool_percent}} で制御されます。
  +
  +
=== 圧縮メモリプールアロケータ ===
  +
''zpool'' パラメータは、圧縮メモリプールの管理を制御します。デフォルトでは {{ic|zbud}} に設定されています。
  +
''zbud'' データアロケーターを使用すると、2つの圧縮オブジェクトが1ページに格納され、圧縮率が2以下に制限されます。 優れた [https://www.kernel.org/doc/html/latest/vm/z3fold.htmlz3fold] アロケーターでは、ページごとに最大3つの圧縮オブジェクトを使用できます。 ''z3fold'' の圧縮率は通常平均2.7ですが、 ''zbud'' の圧縮率は1.7です。
  +
  +
タイプ ''z3fold'' の ''zpool'' がデフォルトで作成されます。カーネルパラメータ {{ic|1=zswap.zpool}} を使用して、起動時に別のメソッドを選択します。 データアロケータは、''sysfs'' インターフェースを介して後の段階で変更することもできます。
   
 
====LZ4 圧縮を有効にする (lzo や deflate より高速で、圧縮率は低め) ====
 
====LZ4 圧縮を有効にする (lzo や deflate より高速で、圧縮率は低め) ====

2020年12月22日 (火) 21:05時点における版

関連記事

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
ヒント: systemd-swap パッケージを使って /etc/systemd/swap.conf で zswap を有効化・設定することもできます。

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 に保存されている の設定 に基づいて変更します。

圧縮アルゴリズムを変更する

/sys/module/zswap/parameters/compressor に使用したいアルゴリズムを書き込むことで設定できます:

# echo lz4 > /sys/module/zswap/parameters/compressor

zswap の圧縮アルゴリズムもカーネルブートパラメータで設定できます:

zswap.compressor=lzo #deflate #lz4

最大プールサイズ

メモリプールは事前に割り当てられていません。使用可能な合計メモリのパーセンテージで特定の制限まで、デフォルトでは合計 RAM の最大20%まで拡張できます。 このしきい値に達すると、ページはプールからスワップデバイスに追い出されます。 圧縮されたプールの最大サイズは、パラメーター max_pool_percent で制御されます。

圧縮メモリプールアロケータ

zpool パラメータは、圧縮メモリプールの管理を制御します。デフォルトでは zbud に設定されています。 zbud データアロケーターを使用すると、2つの圧縮オブジェクトが1ページに格納され、圧縮率が2以下に制限されます。 優れた [1] アロケーターでは、ページごとに最大3つの圧縮オブジェクトを使用できます。 z3fold の圧縮率は通常平均2.7ですが、 zbud の圧縮率は1.7です。

タイプ z3foldzpool がデフォルトで作成されます。カーネルパラメータ zswap.zpool を使用して、起動時に別のメソッドを選択します。 データアロケータは、sysfs インターフェースを介して後の段階で変更することもできます。

LZ4 圧縮を有効にする (lzo や deflate より高速で、圧縮率は低め)

  1. Mkinitcpio#MODULESlz4 lz4_compress を追加
  2. mkinitcpio を実行
  3. カーネルパラメータに zswap.compressor=lz4 を追加
  4. 再起動
  5. dmesg を確認:
$ dmesg | grep zswap:
[    0.918052] zswap: loaded using pool lz4/zbud

参照