RAM が限られている Ubuntu 24.04 PC で Zswap を有効にする方法
このチュートリアルでは、zswap カーネル モジュールを有効にして、Ubuntu コンピューターまたはラップトップで使用可能な RAM を増やす方法を説明します。
ご存知のとおり、Ubuntu Linux には通常、ディスク上にスワップ領域 (ディスク パーティションまたはスワップ ファイル) が含まれています。休止状態や拡張メモリ空間として使用できます。システムがさらに多くのメモリ リソースを必要とし、RAM がいっぱいになると、メモリ内の非アクティブなページがスワップ スペースに移動されます。
スワップ スペースは、RAM が限られているコンピュータに役立ちます。でも、遅いですよ!スワップの使用量が多すぎると、システム全体のパフォーマンスが低下します。
回避策として、Linux には zram と zswap という 2 つのカーネル モジュールが含まれています。非アクティブなページをメモリからディスク (スワップ領域) に移動する代わりに、データを動的に割り当てられた RAM 領域に圧縮することで同様のことを行います。
データが圧縮されると、必要な物理メモリ容量が減り、RAM がさらに使いやすくなります。一方、RAM 内の圧縮データからの読み取りは、通常、ディスク上のスワップからの読み取りよりも高速であるため、システムのスムーズな実行が維持されます。
zram と zswap
zram は、スワップ スペース (または汎用 RAM ディスク) として機能するブロック デバイスを RAM に作成します。システムが非アクティブなページをスワップアウトする必要がある場合、zram はそれらのページをブロックデバイスに圧縮します。ディスク上のスワップは必要ありません。
zswap は、スワップ ページ用の軽量の圧縮 RAM キャッシュです。スワップアウトに必要なページを圧縮し、RAM のメモリ プールに保存しようとします。圧縮率の低いデータはディスク (スワップ領域) に直接書き込まれます。また、メモリ プールがいっぱいになるか、RAM が使い果たされると、最も最近使用されていないページが解凍されてディスクに書き込まれます (スワップ)。ディスク上にスワップ スペースが必要です。
zram と zswap は両方とも、最初は RAM を使用しません。必要に応じて RAM の使用量を動的に拡大または縮小します。違いは、zram がスワップ領域として優先的に動作するため、休止状態が正常に動作しないことです。一方、zswap は動作するためにディスク上にスワップ領域を必要とします。
zram または zswap の使用は、RAM の容量が少ないコンピュータ、または物理 RAM 容量より多くのメモリを必要とする大規模なアプリやゲームに適しています。
ただし、スワップ領域をほとんど使用しない十分な RAM がある場合、または CPU バウンド (CPU がボトルネックになっている) の場合は、圧縮/解凍により多くの CPU を消費するため、それらを使用しない方がよいでしょう。
オプション 1: 実行時に Zswap を有効にする
休止状態機能のためにスワップが必要な場合は、zswap がより良い選択です。現在のすべての Ubuntu リリースにはデフォルトでカーネル モジュールがロードされており、機能を有効にしてパラメータをいくつか変更するだけで済みます。
1. まず、キーボードの Ctrl+Alt+T
を押してターミナル ウィンドウを開きます。次に、コマンドを実行して現在の zswap モジュールのパラメーターを確認します。
systool -v -m zswap
コマンドが見つからない場合は、sudo apt install sysfsutils
を実行します。 端末出力には、機能が有効になっていないことを意味する「enabled=“N”」と出力されるはずです。
すべてのモジュール パラメーターは、/sys/module/zswap/parameters/
ディレクトリにある構成ファイルによって変更できます。それらには次のものが含まれます。
accept_threshold_percent
– zswap がページがいっぱいになった後に再びページの受け入れを開始する割合のしきい値。 Ubuntu のデフォルトは 90% です。compressor
– 圧縮アルゴリズムを設定します。可能な値には、zstd
、deflate
、lzo
、842
、lz4
、が含まれます。 >lz4hc
。比較をご覧ください。enabled
– 値 0 または 1 を設定して機能を有効または無効にします。exclusive_loads
– ページのロード時に zswap エントリを無効にします。値には 0 または 1 が含まれます。max_pool_percent
– zswap が使用できる物理メモリの最大パーセンテージ。zpool
– 圧縮メモリ プールの管理を制御します。値には、zbud
(2:1 以下の圧縮率)、z3fold
(3:1 以下)、zsmalloc
(カーネル以降のより複雑な方法) が含まれます。 6.3)。
2. zswap を有効にするには、ターミナルでコマンドを実行して、enabled
設定ファイルに「1」を書き込むだけです。
echo 1 | sudo tee /sys/module/zswap/parameters/enabled
また、次のコマンドを使用して、zpool 値を zsmalloc
に変更できます。
echo zsmalloc | sudo tee /sys/module/zswap/parameters/zpool
上記の同様のコマンドを実行して、さらに多くの zswap パラメーターを構成することもできます。確認するには、手順 1 の systool
コマンドを再度実行します。
3. zswap 統計を表示するには、ターミナルで以下のコマンドを実行します。
sudo grep -r . /sys/kernel/debug/zswap
オプション 2: 起動時に zswap を有効にする
前のコマンドは実行時に zswap を有効にしますが、システムの再起動後は永続化されません。
これを永続的にするには、起動時にカーネル パラメータをロードするように Grub ブートローダーを設定できます。
1. まず、ターミナル (Ctrl+Alt+T) を開き、コマンドを実行して Grub の構成ファイルを編集します。
sudo nano /etc/default/grub
ここでは、ほとんどのデスクトップ環境で動作する nano
コマンド ライン テキスト エディタを使用します。デフォルトの GNOME を使用する 24.04 の場合は gnome-text-editor
、22.04 以前の場合は gedit
、またはデスクトップに応じて他のエディタに置き換えることができます。
2. ファイルが開いたら、次のカーネル パラメータを「GRUB_CMDLINE_LINUX_DEFAULT」の値として追加します。
zswap.enabled=1 zswap.zpool=zsmalloc
必要に応じて zswap パラメータを追加または削除し (例: zswap.compressor=lzo
)、空白スペースで区切ることができます。最後に、Ctrl+S を押して保存し、Ctrl+X を押して nano テキスト エディタを終了します。
3. 変更を保存した後、以下のコマンドを実行して Grub ブート メニュー エントリを再生成します。
sudo update-grub
ヒント: Grub カスタマイザーがインストールされている場合は、アプリを起動し、[一般設定] ページに移動してカーネル パラメーターを追加し、最後に [保存] をクリックして変更を適用します。