コンテンツにスキップ

「Zswap」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
AshMyzk (トーク | 投稿記録)
zswap の有効化: セクション名を変更
AshMyzk (トーク | 投稿記録)
同期
 
(同じ利用者による、間の10版が非表示)
1行目: 1行目:
{{Lowercase title}}
[[Category:カーネル]]
[[Category:カーネル]]
[[en:Zswap]]
[[en:Zswap]]
[[pt:Zswap]]
[[ru:Zswap]]
[[zh-hans:Zswap]]
{{Related articles start}}
{{Related articles start}}
{{Related|カーネルパラメータ}}
{{Related|カーネルパラメータ}}
{{Related|Mkinitcpio}}
{{Related|Mkinitcpio}}
{{Related articles end}}
{{Related articles end}}
[[Wikipedia:zswap|Wikipedia]] より:
:"Zswap はスワップされたページのライトバックキャッシュを圧縮する Linux カーネルの機能です。スワップアウトされたときにメモリページをスワップデバイスに移動する代わりに、zswap は圧縮を行なってシステムの RAM 内のメモリプールに動的に保存します。"


zswap はスワップデバイスの圧縮 RAM キャッシュです。スワップアウトされそったペジは圧縮され RAM 本当にになるまで RAM 内で扱われます。そも長く使れてない (LRU) ページディスクに送られます。[[ZRAM]] は RAM のスワップデバイスとして動作するので、他にスワップデバイスは必要としせん
[[Wikipedia:ja:zswap|zswap]]スワップページ用の圧縮された RAM キャッシュを提供する、カーネルの機能です。ページをディスクにスワップアウトしてしまのではく、RAM 内のメモリプルに圧縮保存します。プールが満タンになったり RAM が枯渇たりすると、使用されてない ([[Wikipedia:Cache replacement policies#Least recently_used (LRU)|LRU]]) ページを解凍して (まるでインターセプトされなかったかのように) ディスクに書き込みます。ページがスワップキャシュへ解凍された後、ール内の圧縮された方を解放でき


[[zram]] と異なる点は、''zram'' に作成されたスワップはそれ自体が RAM 内のスワップデバイスとして働いてバッキングスワップデバイスを必要としないのに対し、''zswap'' は[[スワップ]]デバイスと組み合わさって動作することです。
要するに、zswap を使用するには[[スワップ]]デバイスを設定する必要があるということです。


== zswap を切り替える ==
== zswap を切り替える ==
以下のコマンドを root で実行することで zswap を有効化できます:
# echo 1 > /sys/module/zswap/parameters/enabled


すべての[[カーネル#公式サポートカーネル|公式にサポートされているカーネル]]で ''zswap'' はデフォルトで有効化されています。このことは、{{ic|zgrep CONFIG_ZSWAP_DEFAULT_ON /proc/config.gz}} を実行することで確認できます。
永続的に zswap を有するには、以下を[[カーネルパラメータ#設定|カーネルブートパラメータ]]に追加してください:
zswap.enabled=1


''zswap'' を実行時に無効化するには、以下のコマンドを実行してください:
{{Tip|{{pkg|systemd-swap}} パッケージを使って {{ic|/etc/systemd/swap.conf}} で zswap を有効化・[[#zswap のカスタマイズ|設定]]することもできます。}}

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

''zswap'' を永続的にするには、{{ic|1=zswap.enabled=0}} を[[カーネルパラメータ]]に追加してください

== zswap のカスタマイズ ==


==zswap のカスタマイズ==
=== 現在のパラメータ ===
=== 現在のパラメータ ===


Zswap には、カスタマイズ可能なパラメーターがいくつかあります。 ライブ設定は、次を使用して表示できます
''zswap'' には、カスタマイズ可能なパラメーターがいくつかあります。現在の設定は、次を使用して表示できます:


{{hc|$ grep -R . /sys/module/zswap/parameters|
{{hc|$ grep -r . /sys/module/zswap/parameters/|
/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/max_pool_percent:20
/sys/module/zswap/parameters/max_pool_percent:20
/sys/module/zswap/parameters/compressor:lz4
/sys/module/zswap/parameters/compressor:zstd
/sys/module/zswap/parameters/zpool:z3fold
/sys/module/zswap/parameters/non_same_filled_pages_enabled:Y
/sys/module/zswap/parameters/zpool:zsmalloc
/sys/module/zswap/parameters/exclusive_loads:N
/sys/module/zswap/parameters/accept_threshold_percent:90
/sys/module/zswap/parameters/accept_threshold_percent:90
}}
}}


さまざまなパラメーターの説明については、 [https://www.kernel.org/doc/html/latest/vm/zswap.html zswapのドキュメント] を参照してください。
様々なパラメーターの説明については、[https://docs.kernel.org/admin-guide/mm/zswap.html zswap のドキュメント]を参照してください。


{{ic|exclusive_loads}} パラメータ (現在 ''zswap'' のドキュメントには記述されていません) に関する詳細は [https://github.com/torvalds/linux/blob/9ed22ae6be817d7a3f5c15ca22cbc9d3963b481d/mm/Kconfig#L48 Linux カーネルのソースコード内にあるこのコメント]を見てください。
初期構成を示すブート時ロードメッセージは、次の方法で取得できます


初期構成を示すブート時ロードメッセージは、次のコマンドで取得できます:
{{hc|$ dmesg {{!}} grep zswap:|

[ 0.317569] zswap: loaded using pool lz4/z3fold
{{hc|# dmesg {{!}} grep zswap:|
[ 0.317569] zswap: loaded using pool zstd/zsmalloc
}}
}}


=== パラメータ設定 ===
=== パラメータ設定 ===

==== 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 の使用 ====
''システムスワップ'' スクリプトを使っているものについては、ブートプロセスの後の段階で ''システム'' パラメータを、{{ic|/etc/systemd/swap.conf}} に保存されている [https://github.com/Nefelim4ag/systemd-swap/blob/master/swap-default.conf の設定] に基づいて変更します。


=== 最大プールサイズ ===
=== 最大プールサイズ ===

メモリプールは事前に割り当てられていません。使用可能な合計メモリのパーセンテージで特定の制限まで、デフォルトでは合計 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'' インターフェースを介して後の段階で変更することもできます。

より最近のカーネル (6.3.arch1-1 以降) では、[https://docs.kernel.org/mm/zsmalloc.html zsmalloc] アロケータが追加されています。これは、メモリが少ない状況で良く動作するとされており、より多くのメモリを削減します。


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


{{Out of date|{{Pkg|linux}} 6.3.arch1-1+ では {{ic|1=CONFIG_ZSWAP_COMPRESSOR_DEFAULT="zstd"}} が設定されています。[https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/blob/main/config]}}
実行に ''sysfs'' または ''systemd-swap'' を使用して圧縮を変更することに問題はありませんが、この場合、 zswap は ''lz4'' で開始し、後の段階で定義されたアルゴリズムに切り替わります。別のアルゴリズムで zswap をすぐに開始するには、これをカーネルのブートパラメータを介して設定し、対応するモジュールをカーネルによって早期にロードする必要があります。これは、次の手順に従って実行できます


ページ圧縮の場合、''zswap'' はカーネルの暗号化 API によって提供されるコンプレッサーモジュールを使用します。デフォルトでは ''lz4'' 圧縮アルゴリズムを使用しますが、これは起動時に {{ic|1=zswap.compressor}} で変更できます。その他のオプションには、''deflate''、''lz4hc''、''lzo''、''lzo-rle''、''842''、''zstd'' があります。
#選択したコンプレッサーに関連するモジュールを [https://wiki.archlinux.jp/index.php/Mkinitcpio#MODULES MODULES] アレイに追加します。
# mkinitcpio 構成を変更した後、 RAM ディスク環境を再生成します。[[mkinitcpio#イメージ作成とアクティブ化]] を参照してください。
#{{ic|1=zswap.compressor}} を [[カーネルパラメータ]] で選択したアルゴリズムに設定します。


実行に ''sysfs'' を使用して圧縮を変更することに問題はありませんが、この場合、 ''zswap'' は ''lz4'' で開始し、後の段階で定義されたアルゴリズムに切り替わります。別のアルゴリズムで ''zswap'' をすぐに開始するには、これをカーネルのブートパラメータを介して設定し、対応するモジュールをカーネルによって早期にロードする必要があります。これは、次の手順に従って実行できます:
次回の起動時に、 [[#Current parameters]] を参照して、 zswap が要求されたコンプレッサーを使用するかどうかを確認します

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

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

== Zswap の統計 ==

''zswap'' の統計を見るには、以下を実行してください:

{{hc|# grep -r . /sys/kernel/debug/zswap|
duplicate_entry:0
pool_limit_hit:13404213
pool_total_size:6184960 (pool size in total in pages)
reject_alloc_fail:5
reject_compress_poor:0
reject_kmemcache_fail:0
reject_reclaim_fail:13404213
stored_pages:4251 (pool size after compression)
written_back_pages:0
}}


== 参照 ==
== 参照 ==


* [https://www.kernel.org/doc/Documentation/vm/zswap.txt Zswap ドキュメント]
* [https://lore.kernel.org/lkml/1674223.HVFdAhB7u5@merkaba/ zswap: How to determine whether it is compressing swap pages?]
* [https://www.ibm.com/support/pages/new-linux-zswap-compression-functionality IBM Support 記事 "New Linux zswap compression functionality" (ベンチマーク画像がロードされず)]。
* [https://lkml.org/lkml/2013/7/17/147 zswap: How to determine whether it is compressing swap pages?]
* [https://askubuntu.com/questions/471912/zram-vs-zswap-vs-zcache-ultimate-guide-when-to-use-which-one Ask Ubuntu: zram vs. zswap vs. zcache]。(zcache は非推奨です)
* [https://www.ibm.com/developerworks/community/blogs/fe313521-2e95-46f2-817d-44a4f27eba32/entry/new_linux_zswap_compression_functionality7?lang=en IBM Developer Works の記事 (ベンチマーク結果あり)]
* [https://bbs.archlinux.org/viewtopic.php?id=169585 Arch Linux フォーラムスレッド]
* [https://askubuntu.com/questions/471912/zram-vs-zswap-vs-zcache-ultimate-guide-when-to-use-which-one Ask Ubuntu: zram vs. zswap vs. zcache]
* [https://lwn.net/Articles/537422/ zswap のメイン開発者による LWN.net 技術記事]。
* [https://bbs.archlinux.org/viewtopic.php?id=169585 Archlinux フォーラムスレッド]

{{TranslationStatus|Zswap|2023-10-03|788810}}

2023年10月3日 (火) 13:52時点における最新版

zswap は、スワップページ用の圧縮された RAM キャッシュを提供する、カーネルの機能です。ページをディスクにスワップアウトしてしまうのではなく、RAM 内のメモリプールに圧縮して保存します。プールが満タンになったり RAM が枯渇したりすると、最近使用されていない (LRU) ページを解凍して (まるでインターセプトされなかったかのように) ディスクに書き込みます。ページがスワップキャッシュへ解凍された後、プール内の圧縮された方を解放できます。

zram と異なる点は、zram に作成されたスワップはそれ自体が RAM 内のスワップデバイスとして働いてバッキングスワップデバイスを必要としないのに対し、zswapスワップデバイスと組み合わさって動作することです。

zswap を切り替える

すべての公式にサポートされているカーネルzswap はデフォルトで有効化されています。このことは、zgrep CONFIG_ZSWAP_DEFAULT_ON /proc/config.gz を実行することで確認できます。

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:zstd
/sys/module/zswap/parameters/non_same_filled_pages_enabled:Y
/sys/module/zswap/parameters/zpool:zsmalloc
/sys/module/zswap/parameters/exclusive_loads:N
/sys/module/zswap/parameters/accept_threshold_percent:90

様々なパラメーターの説明については、zswap のドキュメントを参照してください。

exclusive_loads パラメータ (現在 zswap のドキュメントには記述されていません) に関する詳細は Linux カーネルのソースコード内にあるこのコメントを見てください。

初期構成を示すブート時ロードメッセージは、次のコマンドで取得できます:

# dmesg | grep zswap:
[    0.317569] zswap: loaded using pool zstd/zsmalloc

パラメータの設定

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

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

最大プールサイズ

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

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

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

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

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

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

より最近のカーネル (6.3.arch1-1 以降) では、zsmalloc アロケータが追加されています。これは、メモリが少ない状況で良く動作するとされており、より多くのメモリを削減します。

圧縮アルゴリズム

この記事またはセクションは情報が古くなっています。
理由: linux 6.3.arch1-1+ では CONFIG_ZSWAP_COMPRESSOR_DEFAULT="zstd" が設定されています。[1] (Discuss)

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

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

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

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

Zswap の統計

zswap の統計を見るには、以下を実行してください:

# grep -r . /sys/kernel/debug/zswap
duplicate_entry:0
pool_limit_hit:13404213
pool_total_size:6184960 (pool size in total in pages)
reject_alloc_fail:5
reject_compress_poor:0
reject_kmemcache_fail:0
reject_reclaim_fail:13404213
stored_pages:4251 (pool size after compression)
written_back_pages:0

参照

翻訳ステータス: このページは en:Zswap の翻訳バージョンです。最後の翻訳日は 2023-10-03 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。