「Zswap」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎参照: 同期)
82行目: 82行目:
 
== 参照 ==
 
== 参照 ==
   
* [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]。
* [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 フォーラムスレッド]
 

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

関連記事

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

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

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

圧縮アルゴリズム

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

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

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

次回の起動時に、 #Current parameters を参照して、 zswap が要求されたコンプレッサーを使用するかどうかを確認します。

参照