Fedora 33 以降で標準になった ZRAM スワップの容量を拡張する
ZRAM スワップの構成を確認
ブロックデバイス zram0 が SWAP としてマウントされている。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom zram0 251:0 0 970M 0 disk [SWAP] vda 252:0 0 100G 0 disk ├─vda1 252:1 0 1M 0 part ├─vda2 252:2 0 99G 0 part / └─vda3 252:3 0 1G 0 part /boot
複数のスワップ領域が存在する場合は、swapon で優先順位なども分かります。
$ swapon --show
NAME TYPE SIZE USED PRIO /dev/zram0 partition 970M 174M 100
ZRAM スワップの利用状況を表示する。
$ zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT /dev/zram0 lzo-rle 970M 173.6M 55.4M 59.1M 2 [SWAP]
ZRAM スワップの設定変更
$ sudo nano /usr/lib/systemd/zram-generator.conf
標準の設定では使用可能な物理メモリー容量または最大 8GB の設定になっている。
そして、使用可能メモリー容量の 1 倍の設定です。
- /usr/lib/systemd/zram-generator.conf
# This config file enables a /dev/zram0 device with the default settings: # — size — same as available RAM or 8GB, whichever is less # — compression — most likely lzo-rle # # To disable, uninstall zram-generator-defaults or create empty # /etc/systemd/zram-generator.conf file. [zram0] zram-size = min(ram, 8192)
ZRAM スワップの設定を、使用可能な物理メモリー容量の 3 倍に変更する事も可能だが…🤔(推奨しない!)
物理メモリー容量を超えてスワップした場合に、メモリー圧縮しながら更にディスクスワップするので、最悪の場合マシンにログイン不能なほどパフォーマンスが劇的に悪化する😱
- /usr/lib/systemd/zram-generator.conf
[zram0] #zram-size = min(ram, 8192) zram-fraction = 3.0 max-zram-size = 8192
ZRAM スワップの設定は標準のままにする。
- /usr/lib/systemd/zram-generator.conf
[zram0] zram-size = min(ram, 8192)
その代わりに従来のスワップファイルを追加する。
btrfs 上の swap ファイルは nocow(copy on write禁止) フラグを設定して生成する必要がある。
$ sudo truncate -s 0 /var/swap $ sudo chattr +C /var/swap $ sudo fallocate -l 3072M /var/swap $ sudo lsattr /var/swap
---------------C------ /var/swap
$ sudo mkswap /var/swap
スワップ空間バージョン 1 を設定します。サイズ = 3 GiB (3221221376 バイト) ラベルはありません, UUID=c15d187b-3a3b-4b6c-8eb3-fce516ba5121
$ sudo swapon -v /var/swap
swapon: /var/swap: 署名が見つかりました: [ページサイズ=4096, 署名=swap] swapon: /var/swap: ページサイズ=4096, スワップサイズ=3221225472, デバイスサイズ=3221225472 スワップ /var/swap を有効化しています
$ echo '/var/swap none swap sw 0 0' | sudo tee -a /etc/fstab
/var/swap none swap sw 0 0
サービス名を調べる。
$ systemctl | grep systemd-zram
systemd-zram-setup@zram0.service loaded active exited Create swap on /dev/zram0 system-systemd\x2dzram\x2dsetup.slice loaded active active Slice /system/systemd-zram-setup
サービスを再起動する。
$ sudo systemctl restart systemd-zram-setup@zram0
ZRAM スワップ+スワップファイルの容量が増えていることを確認する。(大きい priority が優先される🤔ここでは 1 の zram0 から優先して使われる😻)
$ swapon --show
NAME TYPE SIZE USED PRIO /dev/zram0 partition 964M 295.3M 1 /var/swap file 3G 0B -2
$ zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT /dev/zram0 lzo-rle 964M 295.2M 96.7M 101.6M 2 [SWAP]
$ free
total used free shared buff/cache available Mem: 987588 599640 77528 14828 310420 221952 Swap: 4132856 302364 3830492
Linux スワップの優先度について
参考文献
Dynamically Increase SWAP (ZRAM) Size in Linux
Fedora 33 のプレリリース版を試す
Raspberry Piでメモリを拡張したい時にZramを使う
ZRAM について軽く調べてみた - Qiita
btrfsでswapfile + hibernation - Qiita
r/btrfs - nocow, torrents, and snapshots