ウェブサイト検索

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 - 圧縮アルゴリズムを設定します。サポートされている値には、lzoz4lz4hc842zstd が含まれます。比較をご覧ください。
  • 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 以前の場合は geditmousepad に置き換えることができます。 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 を使用します。

関連記事