「Zram」の版間の差分
同期 & 修正 |
同期 |
||
| 1行目: | 1行目: | ||
{{Lowercase title}} |
{{Lowercase title}} |
||
[[en:zram]] |
[[en:zram]] |
||
[[ru:Zram]] |
|||
[[zh-hans:Zram]] |
|||
[[Category:カーネル]] |
[[Category:カーネル]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
| 6行目: | 8行目: | ||
{{Related|zswap}} |
{{Related|zswap}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
| ⚫ | [https://docs.kernel.org/admin-guide/blockdev/zram.html zram] (以前は compcache と呼ばれていました) は、RAM 内に圧縮ブロックデバイスを作成するための Linux カーネルモジュールです。つまり、オンザフライのディスク圧縮を用いる RAM ディスクです。zram で作成されたブロックデバイスは、スワップとして使ったり、汎用 RAM ディスクとして使ったりすることができます。zram の最も一般的な2つの使用法は、一時ファイル ({{ic|/tmp}}) のストレージとスワップデバイスです。初期の zram には後者の機能しか存在しておらず、ゆえに元の名前は "compcache" ("compressed cache") でした。 |
||
| ⚫ | [ |
||
== スワップとしての使用 == |
== スワップとしての使用 == |
||
最初の段階では、作成された zram ブロックデバイスは RAM を予約したり使用したりしません。ファイルをスワップアウトする必要が生じた場合にのみ、そのファイルは圧縮され、zram ブロックデバイスへ移動されます。zram ブロックデバイスは必要に応じて動的に拡大/縮小します。 |
|||
| ⚫ | |||
例 (システムは 32 GiB RAM を搭載し、zram は (最大で) 16 GiB RAM を使うように設定されており、圧縮比は 1:4 と仮定します): |
|||
| ⚫ | |||
* 最悪ケース (RAM と zram が完全に”一杯になった”): 16 GiB RAM + 64 GiB zram |
|||
=== 自動的に === |
|||
* スワップの発生しない通常の使用: 32 GiB RAM + 0 GiB zram |
|||
* 軽いスワップが発生する通常の使用: 30 GiB RAM + 8 GiB zram |
|||
* zram 無し: 32 GiB RAM |
|||
このように zram は、欠点を生じさせずに、RAM により多くの内容を保存できるという利点を常に提供します。 |
|||
| ⚫ | |||
{{Note| |
|||
| ⚫ | |||
| ⚫ | |||
* zram 上のスワップへのハイバネートはサポートされていません。たとえ zram が永久記憶装置上のバッキングデバイスを使うように設定されていたとしてもです。''logind'' は、zram 上のスワップ領域へハイバネートしようとする試みから保護します。 |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
}} |
}} |
||
| ⚫ | |||
| ⚫ | |||
=== 手動で === |
=== 手動で === |
||
32GiB の容量を持ち、通常より高い優先度の、 |
32GiB の容量を持ち、通常より高い優先度の、zstd で圧縮された zram デバイスを (現在のセッション限定で) セットアップするには: |
||
# modprobe zram |
# modprobe zram |
||
# zramctl /dev/zram0 --algorithm zstd --size 32G |
|||
# echo lz4 > /sys/block/zram0/comp_algorithm |
|||
# |
# mkswap -U clear /dev/zram0 |
||
# mkswap --label zram0 /dev/zram0 |
|||
# swapon --priority 100 /dev/zram0 |
# swapon --priority 100 /dev/zram0 |
||
| 46行目: | 42行目: | ||
# modprobe -r zram |
# modprobe -r zram |
||
すべての手順、オプション、および潜在的な問題の詳細な説明は [https://docs.kernel.org/admin-guide/blockdev/zram.html zram モジュールの公式ドキュメント]で見られます。 |
すべての手順、オプション、および潜在的な問題の詳細な説明は [https://docs.kernel.org/admin-guide/blockdev/zram.html zram モジュールの公式ドキュメント] で見られます。 |
||
zram を永続的に設定するには、以下のいずれかのセクションの方法を取ってください。 |
|||
| ⚫ | |||
| ⚫ | |||
以下の例は、1つの udev ルールを使って起動時に自動的に zram 上にスワップをセットアップする方法を示しています。これを行うために、追加のパッケージは必要ないはずです。 |
以下の例は、1つの udev ルールを使って起動時に自動的に zram 上にスワップをセットアップする方法を示しています。これを行うために、追加のパッケージは必要ないはずです。 |
||
| 58行目: | 56行目: | ||
}} |
}} |
||
必要 |
以下の [[udev rules|udev ルール]]を作成してください。必要に応じて {{ic|disksize}} 属性を調整してください: |
||
{{hc|/etc/ |
{{hc|/etc/udev/rules.d/99-zram.rules|2= |
||
| ⚫ | |||
options zram num_devices=2 |
|||
}} |
}} |
||
=== zram-generator を使う === |
|||
以下の例のように [[udev#udev ルールについて|udev ルール]]を作成してください: |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
swap-priority = 100 |
|||
fs-type = swap |
|||
}} |
}} |
||
| ⚫ | |||
fstab に {{ic|/dev/zram}} を追加してください。 |
|||
=== zramswap を使う === |
|||
{{hc|/etc/fstab| |
|||
/dev/zram0 none swap defaults 0 0 |
|||
| ⚫ | |||
/dev/zram1 none swap defaults 0 0 |
|||
=== zramd を使う === |
|||
{{AUR|zramd}} は、デフォルトで zstd 圧縮アルゴリズムを使う zram を自動的にセットアップします。設定は {{ic|/etc/default/zramd}} で変更できます。{{ic|zramd.service}} ユニットを有効化することで、ブート時に zramd を起動できます。 |
|||
== ヒントとテクニック == |
|||
=== 複数の zram デバイス === |
|||
デフォルトでは、{{ic|zram}} モジュールをロードすると単一の {{ic|/dev/zram0}} デバイスが作成されます。 |
|||
複数の {{ic|/dev/zram}} デバイスが必要である場合は、{{ic|num_devices}} [[カーネルモジュールパラメータ]] を使って数を指定するか、[https://docs.kernel.org/admin-guide/blockdev/zram.html#add-remove-zram-devices 後で必要に応じて追加してください]。 |
|||
| ⚫ | |||
zram はディスクスワップとは異なる挙動をするため、システムのスワップを設定することで zram の利点を最大限活用することができます: |
|||
| ⚫ | |||
vm.swappiness = 180 |
|||
vm.watermark_boost_factor=0 |
|||
vm.watermark_scale_factor = 125 |
|||
vm.page-cluster=0 |
|||
}} |
}} |
||
== 参照 == |
|||
| ⚫ | |||
* [[Wikipedia:ja:zram]] |
|||
* https://github.com/pop-os/default-settings/pull/163 |
|||
* https://www.reddit.com/r/pop_os/comments/znh9n6/help_test_a_zram_optimization_for_pop_os/ |
|||
| ⚫ | |||
2023年5月12日 (金) 08:57時点における版
zram (以前は compcache と呼ばれていました) は、RAM 内に圧縮ブロックデバイスを作成するための Linux カーネルモジュールです。つまり、オンザフライのディスク圧縮を用いる RAM ディスクです。zram で作成されたブロックデバイスは、スワップとして使ったり、汎用 RAM ディスクとして使ったりすることができます。zram の最も一般的な2つの使用法は、一時ファイル (/tmp) のストレージとスワップデバイスです。初期の zram には後者の機能しか存在しておらず、ゆえに元の名前は "compcache" ("compressed cache") でした。
スワップとしての使用
最初の段階では、作成された zram ブロックデバイスは RAM を予約したり使用したりしません。ファイルをスワップアウトする必要が生じた場合にのみ、そのファイルは圧縮され、zram ブロックデバイスへ移動されます。zram ブロックデバイスは必要に応じて動的に拡大/縮小します。
例 (システムは 32 GiB RAM を搭載し、zram は (最大で) 16 GiB RAM を使うように設定されており、圧縮比は 1:4 と仮定します):
- 最悪ケース (RAM と zram が完全に”一杯になった”): 16 GiB RAM + 64 GiB zram
- スワップの発生しない通常の使用: 32 GiB RAM + 0 GiB zram
- 軽いスワップが発生する通常の使用: 30 GiB RAM + 8 GiB zram
- zram 無し: 32 GiB RAM
このように zram は、欠点を生じさせずに、RAM により多くの内容を保存できるという利点を常に提供します。
- デフォルトで有効化されている zswap を無効化してください。zram の前に zswap がスワップのキャッシュとして振る舞うことを防ぐためです。また、zram と zswap の両方を有効化すると、zram がほとんど使用されないため、zramctl(8) の統計が不正確になってしまいます。これは、zswap が、スワップアウトされたメモリページを zram への到達前にインターセプトし圧縮してしまうためです。
- zram 上のスワップへのハイバネートはサポートされていません。たとえ zram が永久記憶装置上のバッキングデバイスを使うように設定されていたとしてもです。logind は、zram 上のスワップ領域へハイバネートしようとする試みから保護します。
手動で
32GiB の容量を持ち、通常より高い優先度の、zstd で圧縮された zram デバイスを (現在のセッション限定で) セットアップするには:
# modprobe zram # zramctl /dev/zram0 --algorithm zstd --size 32G # mkswap -U clear /dev/zram0 # swapon --priority 100 /dev/zram0
無効化するには、再起動するか、以下を実行してください:
# swapoff /dev/zram0 # modprobe -r zram
すべての手順、オプション、および潜在的な問題の詳細な説明は zram モジュールの公式ドキュメント で見られます。
zram を永続的に設定するには、以下のいずれかのセクションの方法を取ってください。
udev ルールを使う
以下の例は、1つの udev ルールを使って起動時に自動的に zram 上にスワップをセットアップする方法を示しています。これを行うために、追加のパッケージは必要ないはずです。
明示的に起動時にモジュールをロードしてください:
/etc/modules-load.d/zram.conf
zram
以下の udev ルールを作成してください。必要に応じて disksize 属性を調整してください:
/etc/udev/rules.d/99-zram.rules
ACTION=="add", KERNEL=="zram0", ATTR{comp_algorithm}="zstd", ATTR{disksize}="4G", RUN="/usr/bin/mkswap -U clear /dev/%k", TAG+="systemd"
zram-generator を使う
zram-generator は、zram デバイスを自動的に初期化する systemd-zram-setup@.service ユニットを提供します。ユーザがテンプレートやインスタンスを起動/有効化する必要はありません。zram-generator(8) と zram-generator.conf(5) を参照してください。
例えば、zstd と利用可能な ram 全体を使用する zram スワップデバイスを作成するには、zram-generator をインストールし、/etc/systemd/zram-generator.conf を以下の内容で作成してください:
/etc/systemd/zram-generator.conf
[zram0] zram-size = ram / 2 compression-algorithm = zstd swap-priority = 100 fs-type = swap
再起動し、systemd-zram-setup@zramN.service インスタンスのユニットステータスを見るか zramctl(8) を使用して、設定した /dev/zramN デバイスのスワップ状態を確認してください。
zramswap を使う
zramswapAUR は、システム RAM の 20% のサイズをデフォルトで持つ、高い優先度のスワップをセットアップするための自動化されたスクリプトを提供します。起動毎にこれを自動的に行うには、zramswap.service を有効化してください。
zramd を使う
zramdAUR は、デフォルトで zstd 圧縮アルゴリズムを使う zram を自動的にセットアップします。設定は /etc/default/zramd で変更できます。zramd.service ユニットを有効化することで、ブート時に zramd を起動できます。
ヒントとテクニック
複数の zram デバイス
デフォルトでは、zram モジュールをロードすると単一の /dev/zram0 デバイスが作成されます。
複数の /dev/zram デバイスが必要である場合は、num_devices カーネルモジュールパラメータ を使って数を指定するか、後で必要に応じて追加してください。
zram でのスワップを最適化する
zram はディスクスワップとは異なる挙動をするため、システムのスワップを設定することで zram の利点を最大限活用することができます:
/etc/sysctl.d/99-vm-zram-parameters.conf
vm.swappiness = 180 vm.watermark_boost_factor=0 vm.watermark_scale_factor = 125 vm.page-cluster=0