LoginSignup
1
0

スワップの圧縮手法:zramswapとzswap

Last updated at Posted at 2023-09-18

スワップによる仮想記憶をより効率的に使うための手法に、zramswapとzswapがあります。両者の違いを見ていきましょう。

手法 zramswap zswap
手段 圧縮機能付きRAMディスクをスワップ領域に割り当てる スワップアウトしたページを圧縮しつつメモリ内にキャッシュする
スワップ領域 なくても構わない 必須
使用方法 zram-toolsパッケージをインストール sysfsに書き込み、またはカーネルパラメータで設定
圧縮アルゴリズム lzo|lz4|lz4hc|deflate|842 lz4|deflate|lz4hc|lzo|lzo-rle|842|zstd

zramswap

zramswapを使うには、zram-toolsをインストールします。
swap以外にもzramの使用設定ができるsystemd-zram-generatorというのもあります。

$ sudo apt install zram-tools 

zramの状況表示にはzramctlコマンドを使います。
圧縮アルゴリズム、ディスクサイズ、実データサイズ、圧縮済みデータサイズ、マウント先などが表示されます。

$ zramctl 
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4           3.9G   4K   64B    4K       4 [SWAP]

新しくzramデバイスを作るにはzramctl -fを使います。
スワップに限定されないRAMディスクなので、フォーマットして/tmpあたりにマウントすることができます。

$ sudo zramctl -f -s 1G -a lz4
/dev/zram1
$ zramctl 
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram1 lz4             1G   0B    0B    0B       4 
/dev/zram0 lz4           3.9G   4K   64B    4K       4 [SWAP]

zramデバイスの消去にはzramctl -rコマンドを使います。

$ sudo zramctl -r /dev/zram1
$ zramctl 
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4           3.9G   4K   64B    4K       4 [SWAP]
$ swapon
NAME       TYPE      SIZE USED PRIO
/swapfile  file        8G   0B   -2
/dev/zram0 partition 3.9G   0B  100

/etc/default/zramswapで圧縮アルゴリズムやディスク容量の設定ができます。

/etc/default/zramswap
# Compression algorithm selection
# speed: lz4 > zstd > lzo
# compression: zstd > lzo > lz4
# This is not inclusive of all that is available in latest kernels
# See /sys/block/zram0/comp_algorithm (when zram module is loaded) to see
# what is currently set and available for your kernel[1]
# [1]  https://github.com/torvalds/linux/blob/master/Documentation/blockdev/zram.txt#L86
ALGO=lz4

# Specifies the amount of RAM that should be used for zram
# based on a percentage the total amount of available memory
# This takes precedence and overrides SIZE below
PERCENT=50

# Specifies a static amount of RAM that should be used for
# the ZRAM devices, this is in MiB
#SIZE=1024

# Specifies the priority for the swap devices, see swapon(2)
# for more details. Higher number = higher priority
# This should probably be higher than hdd/ssd swaps.
#PRIORITY=100

zswap

zswapをとりあえず使うには、sysfsによる操作が簡単です。

    grepを使い、/sys/module/zswap/parameters/ディレクトリ内のファイル内を走査し、正規表現/./にマッチする内容のファイルと内容を出力します。
$ grep -r . /sys/module/zswap/parameters/
/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/enabled:N
/sys/module/zswap/parameters/max_pool_percent:20
/sys/module/zswap/parameters/compressor:lzo
/sys/module/zswap/parameters/zpool:zbud
/sys/module/zswap/parameters/accept_threshold_percent:90

圧縮アルゴリズムに高圧縮率のlz4、アロケーターに1つのページファイルに圧縮済みデータを3個詰め込めるz3foldを指定し、zswapを有効化します。

$ echo lz4 |sudo tee /sys/module/zswap/parameters/compressor 
lz4
$ echo z3fold |sudo tee /sys/module/zswap/parameters/zpool
z3fold
$ echo 1 |sudo tee /sys/module/zswap/parameters/enabled 
1

再度grepで、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を使うときは/etc/default/grubを書き換えます。

/etc/default/grub
- GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
+ GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1 zswap.compressor=lz4 zswap.zpool=z3fold"

grubメニューを書き換えます。

$ sudo update-grub

起動時にz3foldモジュールが自動で読み込まれないので、明示的に読み込むようにします。

/etc/initramfs-tools/modules
+ z3fold
+ lz4
+ lz4_compress

そしてupdate-initramfsでinitramfsを書き換えます。

$ sudo update-initramfs -k all -u
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0