「Zswap」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎参照: 同期)
22行目: 22行目:
 
zswap を永続的に無効化するには、{{ic|1=zswap.enabled=0}} を[[カーネルパラメータ]]に追加してください。
 
zswap を永続的に無効化するには、{{ic|1=zswap.enabled=0}} を[[カーネルパラメータ]]に追加してください。
   
==zswap のカスタマイズ==
+
== zswap のカスタマイズ ==
  +
 
=== 現在のパラメータ ===
 
=== 現在のパラメータ ===
   
Zswap には、カスタマイズ可能なパラメーターがいくつかあります。 ライブ設定は、次を使用して表示できます
+
Zswap には、カスタマイズ可能なパラメーターがいくつかあります。現在の設定は、次を使用して表示できます:
   
 
{{hc|$ grep -R . /sys/module/zswap/parameters|
 
{{hc|$ grep -R . /sys/module/zswap/parameters|
36行目: 37行目:
 
}}
 
}}
   
さまざまなパラメーターの説明については、 [https://www.kernel.org/doc/html/latest/vm/zswap.html zswapのドキュメント] を参照してください。
+
様々なパラメーターの説明については、[https://docs.kernel.org/admin-guide/mm/zswap.html zswap のドキュメント]を参照してください。
   
初期構成を示すブート時ロードメッセージは、次の方法で取得できます
+
初期構成を示すブート時ロードメッセージは、次のコマンドで取得できます:
   
{{hc|$ dmesg {{!}} grep zswap:|
+
{{hc|# dmesg {{!}} grep zswap:|
 
[ 0.317569] zswap: loaded using pool lz4/z3fold
 
[ 0.317569] zswap: loaded using pool lz4/z3fold
 
}}
 
}}
   
=== パラメータ設定 ===
+
=== パラメータ設定 ===
  +
==== sysfsの使用 ====
 
  +
==== sysfs の使用 ====
各設定は、[[Wikipedia:sysfs|sysfs]]インターフェースを介して実行時に変更できます。たとえば、 {{ic|compressor}}パラメータを変更するには:
 
  +
  +
各設定は、[[Wikipedia:ja:sysfs|sysfs]] インターフェースを介して実行中に変更できます。例えば、{{ic|compressor}} パラメータを変更するには:
  +
 
# echo lz4 > /sys/module/zswap/parameters/compressor
 
# echo lz4 > /sys/module/zswap/parameters/compressor
   
 
==== カーネルブートパラメータの使用 ====
 
==== カーネルブートパラメータの使用 ====
  +
パラメータの変更を永続化するには、対応するオプション、たとえば {{ic|1=zswap.compressor=lz4}} をカーネルブートパラメータに追加する必要があります。したがって、上記のすべての設定を永続的に設定するには、次のカーネルパラメータを追加する必要があります。
 
  +
パラメータの変更を永続化するには、対応するオプション (例えば {{ic|1=zswap.compressor=lz4}} など) をカーネルブートパラメータに追加する必要があります。したがって、上記のすべての設定を永続的に設定するには、次の[[カーネルパラメータ]]を追加する必要があります:
   
 
zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold
 
zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold
   
ブートパラメータを介して圧縮アルゴリズムを変更する場合、対応する圧縮モジュールがブートの早い段階でロードされていることを確認する必要があります( [[#Compressionalgorithm]] を参照)。
+
ブートパラメータを介して圧縮アルゴリズムを変更する場合、対応する圧縮モジュールがブートの早い段階でロードされていることを確認する必要があります ([[#圧縮アルゴリズム]] を参照)。
   
 
==== systemd-swap の使用 ====
 
==== systemd-swap の使用 ====
  +
''システムスワップ'' スクリプトを使っているものについては、ブートプロセスの後の段階で ''システム'' パラメータを、{{ic|/etc/systemd/swap.conf}} に保存されている [https://github.com/Nefelim4ag/systemd-swap/blob/master/swap-default.conf の設定] に基づいて変更します。
 
  +
{{Note|(systemd-swap の) 作者は、代わりに {{Pkg|zram-generator}} を使用することを[https://github.com/Nefelim4ag/systemd-swap#%EF%B8%8F-current-code-quality-and-commit-frequency-is-low-%EF%B8%8F 推奨しています]。(systemd-swap の) コミット頻度が低く、[[zram]] はほとんどのユーザのニーズを満たすからです。}}
  +
  +
systemd-swap は、[[zram]] スワップ、スワップファイル、スワップパーティションからハイブリッドスワップ領域を作成するスクリプトです。systemd プロジェクトには参加していません。
  +
  +
{{pkg|systemd-swap}} パッケージを[[インストール]]してください。{{ic|/etc/systemd/swap.conf}} 内の ''Swap File Chunked'' セクション内にある {{ic|1=swapfc_enabled=1}} をアンコメント・設定してください。{{ic|systemd-swap}} サービスを[[起動/有効化]]してください。
  +
  +
詳細や[https://github.com/Nefelim4ag/systemd-swap/blob/master/README.md#about-configuration 推奨される設定]に関しては [https://github.com/Nefelim4ag/systemd-swap 作者の GitHub] ページを見てください。
  +
  +
{{Note|
  +
* ジャーナルに {{ic|systemd-swap[..]: WARN: swapFC: ENOSPC}} という警告が表示され続け、スワップファイルが作成されない場合、{{ic|/etc/systemd/swap.conf}} 内の {{ic|1=swapfc_force_preallocated=1}} をアンコメント・設定する必要があります。
  +
* systemd-swap によって作成されるスワップファイルは、簡単には[[ハイバネート]]に使用できません。[https://github.com/Nefelim4ag/systemd-swap/issues/85 systemd-swap issue 85] を参照してください。
  +
}}
   
 
=== 最大プールサイズ ===
 
=== 最大プールサイズ ===
  +
メモリプールは事前に割り当てられていません。使用可能な合計メモリのパーセンテージで特定の制限まで、デフォルトでは合計 RAM の最大20%まで拡張できます。 このしきい値に達すると、ページはプールからスワップデバイスに追い出されます。
 
圧縮されたプールの最大サイズは、パラメーター {{ic|max_pool_percent}} で制御されます。
+
メモリプールは事前に割り当てられません。使用可能な合計メモリのパーセンテージによる特定の制限まで (デフォルトでは合計 RAM の最大20%まで) 拡張できます。このしきい値に達すると、ページはプールからスワップデバイスに追い出されます。圧縮されたプールの最大サイズは、パラメーター {{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です。
 
   
  +
''zpool'' パラメータは、圧縮メモリプールの管理を制御します。
タイプ ''z3fold'' の ''zpool'' がデフォルトで作成されます。カーネルパラメータ {{ic|1=zswap.zpool}} を使用して、起動時に別のメソッドを選択します。 データアロケータは、''sysfs'' インターフェースを介して後の段階で変更することもできます。
 
  +
  +
''zbud'' データアロケーターを使用すると、2つの圧縮オブジェクトが1ページに格納され、圧縮率が2以下に制限されます。
  +
  +
優れた [https://docs.kernel.org/mm/z3fold.html z3fold] アロケーターでは、ページごとに最大3つの圧縮オブジェクトを使用できます。''z3fold'' の圧縮率は通常平均2.7ですが、''zbud'' の圧縮率は1.7です。
  +
  +
タイプ ''z3fold'' の ''zpool'' がデフォルトで作成されます。カーネルパラメータ {{ic|zswap.zpool}} を使用して、起動時に別のメソッドを選択してください。データアロケータは、''sysfs'' インターフェースを介して後の段階で変更することもできます。
   
 
=== 圧縮アルゴリズム ===
 
=== 圧縮アルゴリズム ===
ページ圧縮の場合、 zswap はカーネルの暗号化 API によって提供されるコンプレッサーモジュールを使用します。デフォルトでは ''lz4'' 圧縮アルゴリズムを使用しますが、これは起動時に {{ic|1=zswap.compressor}} で変更できます。その他のオプションには、''deflate''、''lz4hc''、''lzo''、''lzo-rle''、''842''、''zstd'' があります。
 
   
  +
ページ圧縮の場合、zswap はカーネルの暗号化 API によって提供されるコンプレッサーモジュールを使用します。デフォルトでは ''lz4'' 圧縮アルゴリズムを使用しますが、これは起動時に {{ic|1=zswap.compressor}} で変更できます。その他のオプションには、''deflate''、''lz4hc''、''lzo''、''lzo-rle''、''842''、''zstd'' があります。
実行時に ''sysfs'' または ''systemd-swap'' を使用して圧縮を変更することに問題はありませんが、この場合、 zswap は ''lz4'' で開始し、後の段階で定義されたアルゴリズムに切り替わります。別のアルゴリズムで zswap をすぐに開始するには、これをカーネルのブートパラメータを介して設定し、対応するモジュールをカーネルによって早期にロードする必要があります。これは、次の手順に従って実行できます。
 
  +
  +
実行中に ''sysfs'' または ''systemd-swap'' を使用して圧縮を変更することに問題はありませんが、この場合、 zswap は ''lz4'' で開始し、後の段階で定義されたアルゴリズムに切り替わります。別のアルゴリズムで zswap をすぐに開始するには、これをカーネルのブートパラメータを介して設定し、対応するモジュールをカーネルによって早期にロードする必要があります。これは、次の手順に従って実行できます:
   
#選択したコンプレッサーに関連するモジュールを [https://wiki.archlinux.jp/index.php/Mkinitcpio#MODULES MODULES] アレイに追加します。
+
# んだコンプレッサーに関連するモジュールを [[mkinitcpio#MODULES]] 配列に追加す
# mkinitcpio 構成を変更した後、 RAM ディスク環境を再生成します。[[mkinitcpio#イメージ作成とアクティブ化]] を参照してください。
+
# mkinitcpio の設定を変更した後、RAM ディスク環境を再生成す。[[mkinitcpio#イメージ作成とアクティベーション]] を参照してください。
#{{ic|1=zswap.compressor}} を [[カーネルパラメータ]] で選択したアルゴリズムに設定します。
+
# [[カーネルパラメータ]] で {{ic|1=zswap.compressor}} をあなの選んだアルゴリズムに設定します。
   
次回の起動時に、 [[#Current parameters]] を参照して、 zswap が要求されたコンプレッサーを使用するかどうかを確認します
+
次回の起動時に、[[#現在のパラメータ]] を参照して、zswap が要求されたコンプレッサーを使用するかどうかを確認してください
   
 
== 参照 ==
 
== 参照 ==

2023年1月31日 (火) 15:37時点における版

関連記事

Wikipedia より:

"Zswap はスワップされたページのライトバックキャッシュを圧縮する Linux カーネルの機能です。スワップアウトされたときにメモリページをスワップデバイスに移動する代わりに、zswap は圧縮を行なってシステムの RAM 内のメモリプールに動的に保存します。"

zswap はスワップデバイスの圧縮 RAM キャッシュです。スワップアウトされそうになったページは圧縮されて RAM が本当に満杯になるまで RAM 内で扱われます。そして最も長く使われてない (LRU) ページがディスクに送られます。ZRAM は RAM のスワップデバイスとして動作するので、他にスワップデバイスは必要としません。

要するに、zswap を使用するにはスワップデバイスを設定する必要があるということです。

zswap を切り替える

安定版の linux 公式カーネルでは、zswap はデフォルトで有効化されています。このことは安定版カーネルの configCONFIG_ZSWAP_DEFAULT_ON フラグで確認できます。

zswap を実行時に無効化するには、以下のコマンドを実行してください:

# echo 0 > /sys/module/zswap/parameters/enabled

zswap を永続的に無効化するには、zswap.enabled=0カーネルパラメータに追加してください。

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

ブートパラメータを介して圧縮アルゴリズムを変更する場合、対応する圧縮モジュールがブートの早い段階でロードされていることを確認する必要があります (#圧縮アルゴリズム を参照)。

systemd-swap の使用

ノート: (systemd-swap の) 作者は、代わりに zram-generator を使用することを推奨しています。(systemd-swap の) コミット頻度が低く、zram はほとんどのユーザのニーズを満たすからです。

systemd-swap は、zram スワップ、スワップファイル、スワップパーティションからハイブリッドスワップ領域を作成するスクリプトです。systemd プロジェクトには参加していません。

systemd-swap パッケージをインストールしてください。/etc/systemd/swap.conf 内の Swap File Chunked セクション内にある swapfc_enabled=1 をアンコメント・設定してください。systemd-swap サービスを起動/有効化してください。

詳細や推奨される設定に関しては 作者の GitHub ページを見てください。

ノート:
  • ジャーナルに systemd-swap[..]: WARN: swapFC: ENOSPC という警告が表示され続け、スワップファイルが作成されない場合、/etc/systemd/swap.conf 内の swapfc_force_preallocated=1 をアンコメント・設定する必要があります。
  • systemd-swap によって作成されるスワップファイルは、簡単にはハイバネートに使用できません。systemd-swap issue 85 を参照してください。

最大プールサイズ

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

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

zpool パラメータは、圧縮メモリプールの管理を制御します。

zbud データアロケーターを使用すると、2つの圧縮オブジェクトが1ページに格納され、圧縮率が2以下に制限されます。

優れた z3fold アロケーターでは、ページごとに最大3つの圧縮オブジェクトを使用できます。z3fold の圧縮率は通常平均2.7ですが、zbud の圧縮率は1.7です。

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

圧縮アルゴリズム

ページ圧縮の場合、zswap はカーネルの暗号化 API によって提供されるコンプレッサーモジュールを使用します。デフォルトでは lz4 圧縮アルゴリズムを使用しますが、これは起動時に zswap.compressor で変更できます。その他のオプションには、deflatelz4hclzolzo-rle842zstd があります。

実行中に sysfs または systemd-swap を使用して圧縮を変更することに問題はありませんが、この場合、 zswap は lz4 で開始し、後の段階で定義されたアルゴリズムに切り替わります。別のアルゴリズムで zswap をすぐに開始するには、これをカーネルのブートパラメータを介して設定し、対応するモジュールをカーネルによって早期にロードする必要があります。これは、次の手順に従って実行できます:

  1. 選んだコンプレッサーに関連するモジュールを mkinitcpio#MODULES 配列に追加する。
  2. mkinitcpio の設定を変更した後、RAM ディスク環境を再生成する。mkinitcpio#イメージ作成とアクティベーション を参照してください。
  3. カーネルパラメータzswap.compressor をあなたの選んだアルゴリズムに設定します。

次回の起動時に、#現在のパラメータ を参照して、zswap が要求されたコンプレッサーを使用するかどうかを確認してください。

参照