Ubuntu で Zram を有効にして、限られた RAM でのパフォーマンスを向上させる
これは、zram カーネル モジュールを有効にし、RAM が限られている Ubuntu 24.04 PC/ラップトップでシステム パフォーマンスを向上させるためのスワップ デバイスとして使用する方法を示すステップバイステップのチュートリアルです。
ご存知かもしれませんが、Ubuntu には通常、スワップ スペースが含まれています。これは MS Windows の「仮想メモリ」のように機能し、すべてのタスク要求に対して十分な物理 RAM がない場合に追加メモリとしてハードディスクを使用します。
ただし、ディスク上のスワップは遅いため、システム全体のパフォーマンスが低下します。そこで、Linux では、少量の RAM を搭載したコンピュータのパフォーマンスを向上させるために、「zram」および「zswap」カーネル モジュールが導入されました。
ディスク上でスワップを使用する代わりに、zram は RAM 内にスワップ スペースとして使用できるブロック デバイス (最初はメモリを使用せず、動的に拡大または縮小します) を作成します。スワップアウトされるデータを圧縮して、ブロックデバイスに移動します。この場合、より多くのデータに対して物理メモリの使用量が減り、同時にシステムの実行速度が向上します。
スワップ ページに圧縮 RAM キャッシュを提供することで、Ubuntu で zswap を有効にして同様の仕事を行う方法について書きました。ここでは、代わりに、Fedora と Pop!_OS でデフォルトで有効になっている zram を使用する方法を説明します。
注 1: スワップ スペースをほとんど使用しない十分な RAM がある場合、または CPU に制約がある場合は、zram または zswap を使用しないでください。圧縮/解凍により多くの CPU を消費するためです。
注 2: zram は正常に動作するために休止状態を妨げます。ディスクへのスリープが必要な場合は、代わりに zswap を使用してください。
zswap を無効にする (有効な場合)
Zswap により、zram が効果的に使用されなくなります。 Ubuntu マシンで有効になっている場合は、zram を試すために最初に無効にする必要があります。
zswap が有効かどうかを確認するには、ターミナルを開いて (Ctrl+Alt+T)、次のコマンドを実行します。
systool -v -m zswap
コマンドが見つからない場合は、sudo apt install sysfsutils
を実行します。 出力の「enabled=“N”」は、機能が有効になっていないことを意味します。
「enabled=“Y”」と表示されている場合は、以下のコマンドを実行して実行時に zswap を無効にすることができます(再起動するまで機能します)。
echo 0 | sudo tee /sys/module/zswap/parameters/enabled
注: カーネルのドキュメントによると、zswap 内のデータはすぐには解放されません。無効化されるかフォールトされてメモリに戻されるまで待つか、手動でスワップを swapoff
し、(必要に応じて) 再度 swapon
する必要があります。
zswap を永続的に無効にしたい場合は、Grub ブートローダーを編集し、zswap のカーネル パラメータ (存在する場合) を削除してみてください。
sudo nano /etc/default/grub
「GRUB_CMDLINE_LINUX_DEFAULT」から zswap.enabled=1
を削除し、最後に sudo update-grub
を実行して変更を適用します。
オプション 1: 実行時に Zram を有効にする
システムを再起動するか手動で無効にするまで、実行時にカーネル モジュールを試すには、以下の手順を実行してモジュールを手動でロードし、スワップ領域を設定します。
1. まず、キーボードの Ctrl+Alt+T
を押してターミナル ウィンドウを開きます。次に、次のコマンドを実行します。
sudo modprobe zram
このコマンドは zram モジュールをロードし、RAM 内に単一のブロック デバイスを作成します。ただし、すべての構成ファイルは /sys/block/zram0
ディレクトリに保存されます。
ヒント: 必要に応じて、RAM に複数の zram ブロック デバイスを作成できます。たとえば、sudo modprobe zram num_devices=4
を実行すると 4 が作成されますが、構成ファイルは /sys/block/zram{0, 1, 2, 3} にあります。
2. 最後のスクリーンショットでわかるように、zram ブロック デバイスには、/sys/block/zram0
の下に多くの構成ファイルが含まれています。それらには次のものが含まれます。
disksize
- 保存できる非圧縮データの最大値。mem_limit
- 圧縮データの保存に使用できる最大物理メモリ。comp_algorithm
- 圧縮アルゴリズムを設定します。サポートされている値には、lzo
、z4
、lz4hc
、842
、zstd
が含まれます。比較をご覧ください。max_comp_streams
- 同時に実行できる圧縮操作の数。デフォルトは CPU コアの番号です。- 他にも多くの設定オプションがあります。詳細については、カーネルのドキュメントを参照してください。
保存できる非圧縮データの最大サイズ (たとえば 4GiB) を設定するには (数値を適宜置き換えてください)、次のコマンドを使用します。
echo 4G | sudo tee /sys/block/zram0/disksize
圧縮データの保存に使用できる最大メモリ サイズ (たとえば 2GiB) を設定するには (数値を適宜置き換えてください)、次のコマンドを使用します。
echo 2G | sudo tee /sys/block/zram0/mem_limit
また、圧縮アルゴリズムを設定するには、次のコマンドを使用します。
echo lzo | sudo tee /sys/block/zram0/comp_algorithm
同様に、echo
コマンドを使用して、zram ブロック デバイスの他のオプションを構成できます。
3. zram ブロック デバイスを有効にして構成した後、コマンドを実行してデバイスをスワップ領域として設定できます。
sudo mkswap /dev/zram0
最後に、次のコマンドを使用して、より高い優先順位のスワップ領域を有効にします。
sudo swapon --priority 100 /dev/zram0
4. 最後に、swapon
を実行して、現在のスワップ デバイスを特定します (zram は最高の優先順位を持つ必要があります)。そして、以下のコマンドを実行して、zram 統計を確認します。
zramctl
出力では次のようになります。
- DISKSIZE - 保存できる非圧縮データの最大サイズを意味します。
- DATA - 非圧縮データの現在のサイズを意味します (私の場合は 1.1G)。
- COMPR - 1.1 G データが 209.1M に圧縮されました。
- TOTAL - zram が使用する物理メモリの現在のサイズ (メタデータ + 圧縮データ)。
5. (オプション)zram の利点を最大限に活用するには、以下の 4 つのコマンドを使用してシステムのスワップを構成できます。
echo 180 | sudo tee /proc/sys/vm/swappiness
echo 0 | sudo tee /proc/sys/vm/watermark_boost_factor
echo 125 | sudo tee /proc/sys/vm/watermark_scale_factor
echo 0 | sudo tee /proc/sys/vm/page-cluster
これらは Pop!_OS のデフォルトのスワップ設定ですが、私の場合はテストされていません。
(オプション) 実行時に zram を無効にするには、コンピュータを再起動するか、以下の 2 つのコマンドを実行してスワップ スペースを無効にし、zram モジュールをアンロードします。
sudo swapoff /dev/zram0
sudo modprobe --remove zram
オプション 2: 起動時に Zram を有効にする (永続化する)
「オプション 1」の手順は再起動後は持続しません。 zram がマシンでうまく機能する場合は、代わりに次の手順を実行して、zram を永続的にすることができます。
注: 以下の手順では、構成ファイルの編集に nano
コマンド ライン テキスト エディタを使用します。これはほとんどのデスクトップで動作します。選択として、デフォルトの GNOME を使用する 24.04 の場合は gnome-text-editor
、デフォルトの GNOME を使用する 22.04 以前の場合は gedit
、mousepad
に置き換えることができます。 XFCE の場合は xed
、Linux Mint Cinnamon の場合は xed
、またはデスクトップ環境に応じて他のテキスト エディタを使用します。
1. まず、コマンドを実行して、起動時に zram モジュールをロードする構成ファイルを作成 (および編集) します。
sudo nano /etc/modules-load.d/zram.conf
ファイルが開いたら、zram を書き込むだけです。次に、Ctrl+S を押して保存し、Ctrl+X を押して終了します。
ヒント: RAM に複数の zram ブロック デバイスを作成する場合は、以下のコマンドを使用して別のファイルを作成します。
sudo nano /etc/modprobe.d/zram.conf
次に、options zram num_devices=1
と書き込みます (数値は必要に応じて変更します)。
2. 次に、コマンドを実行して zram デバイス オプションを構成するための udev ルール ファイルを作成します。
sudo nano /etc/udev/rules.d/99-zram.rules
ファイルが開いたら、以下の行を追加します (注意: この行には「==」と「=」の両方が含まれています)。
ACTION=="add", KERNEL=="zram0", ATTR{comp_algorithm}="lto", ATTR{disksize}="4G", ATTR{mem_limit}="2G"
ここで、必要に応じて「disksize」、「mem_limit」、「comp_algorithm」の値を変更します。複数の zram デバイスの場合は、KERNEL の異なるデバイス名 (zram1、zram2、…) を含む行を追加します。
3. Arch Linux wiki では、udev ルール + /etc/fstab
を使用して、起動時に zram デバイスを自動的に作成し、スワップとして使用するように指示されています。ただし、Ubuntu 24.04 の私の場合、「スワップ dev-zram0.swap のアクティブ化に失敗しました」という問題が発生します。
代わりに、私の場合は systemd サービスを作成すると、zram ブロックデバイスが自動的にセットアップされ、 スワップとして有効になります。まず、コマンドを実行してサービス ファイルを作成します。
sudo nano /etc/systemd/system/zram.service
ファイルが開いたら、以下の内容を追加して保存します (Ctrl+S、次に Ctrl+X)。
[Unit]
Description=Swap with zram
After=multi-user.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=/sbin/mkswap /dev/zram0
ExecStart=/sbin/swapon -p 100 /dev/zram0
ExecStop=/sbin/swapoff /dev/zram0
[Install]
WantedBy=multi-user.target
ファイルを保存した後、systemctl Enable zram
コマンドを実行してサービスを有効にします。
(オプション) Pop!_OS スワップ構成を使用して zram の利点を最大限に活用したい場合は、コマンドを実行して構成ファイルを作成します。
sudo nano /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
すべてが完了したら、コンピューターを再起動し、swapon
および zramctl
コマンドを実行して確認します。
「オプション 2」を元に戻すには、まず systemctl disable zram
を実行してサービスを無効にしてから、nano
を置き換えて作成したすべてのファイルを削除します。上記のコマンドの rm
を使用します。