Linux PCのRAMが少ない場合のパフォーマンス向上にZswapを使用する

正直に言うと、私たちの中には頻繁にアップグレードしない者もいます。あるいは、少なくともLinuxユーザーとして、古いノートパソコンやコンピュータを再利用することを好みます。多くのディストリビューションは、少ないRAM(ランダムアクセスメモリ)を搭載したシステム上で快適に動作します。しかし、ブラウザはそれほど寛大ではなく、インターネットの進化に伴い、ますます多くのメモリを必要とします。
LXDEデスクトップ環境搭載のシステムは、起動後に150MBのRAMしか消費しないかもしれませんが、Chromium、Chrome、またはFirefoxは、タブをいくつか開くとすぐに数百メガバイト、さらには数ギガバイトのRAMを消費します。
そして、そうなったときに起こるのです!ハードディスクがガリガリと音を立て始めます。音楽が途切れます。別のアプリケーションに切り替えると、画面に表示されるまでに数十秒かかります。マウスカーソルの動きも遅くなるかもしれません。これがディスクスラッシングの影響です。
ディスクスラッシングとは?
まず、スワップについて理解する必要があります。自由なRAMが不足すると、オペレーティングシステムが長い間アクセスしていないアプリケーションデータがスワップ領域に移動されます。これは通常、物理的なストレージデバイスにあります。こうすることで、オペレーティングシステムは、現在プログラムが必要とするメモリスペースを解放できます。このようにして、過去1時間アクセスしていないブラウザのタブは、ハードディスクにスワップされる可能性があります。これにより、GIMP画像編集ソフトが実行できるようになります。閉じた後にその古いタブに戻ると、オペレーティングシステムはそれをメモリに戻します(ディスクから読み込み、ランダムアクセスメモリにコピーします)。

このメカニズムは、小さなデータ量のスワップにはうまく機能します。しかし、たとえば、利用可能なRAMが2GBしかなく、すべてのプログラムが4GBを必要とする場合、オペレーティングシステムは絶えずスワップしなければなりません。メモリからディスク、ディスクからメモリ、そして再び戻すデータの移動は、特にハードディスクを使用している場合は非常に遅いです。そのような状況では、ストレージデバイスは要求を迅速に処理できなくなります。要するに、ディスクスラッシングが発生すると、すべてが非常に遅くなります。
SSDドライブはスワップに最適
インターネット上にはまだ広まっている神話があります。「SSDにスワップを設定するな。デバイスを壊す!」これは数年前には真実でしたが、今ではそうではありません。実際、SSDドライブにスワップを設定すると素晴らしい結果が得られます。コンピュータが、良好なランダム読み書きパフォーマンス(少なくとも300MB)を持つSSDデバイスを含む場合、そこでスワップパーティションを設定し、この記事の残りの部分は無視します。オペレーティングシステムが1GBのデータをスワップする必要があるとき、それにかかる時間は5秒未満です。一方、ハードディスクでは1分以上かかります。
Linuxでディスクスラッシングを大幅に減らす方法

幸いなことに、RAMに保存されたデータのほとんどは非常に圧縮しやすいです。つまり、メモリに保存されている200MBのデータを圧縮すると、サイズを100MBに減らすことができます。その結果、システムはスワップ時にディスクに書き込むデータ量を大幅に減らさなければならなくなります。
たとえば、プログラムに切り替えるのに30秒待つ代わりに、15秒待たなければならないと想像してください。それは明らかな改善です。しかし、実際には、速度の向上ははるかに重要です(10秒未満待つことになるかもしれません)。なぜなら、私たちが使用するツールはそれよりも洗練されているからです。それは、圧縮できない部分だけをディスクに送信し、残りは予約されたメモリ部分に保持します。その内部の詳細を読みたい場合は、公式のLinuxカーネルページを確認してください。
zswapを使用することで得られる利点を簡単に説明すると、メモリが不足したときのひどい遅延の代わりに、数秒間続く許容できる軽度の遅延を体験することになります(数十秒や数分の代わりに)。
Debianベースのディストリビューション(Ubuntu、Linux Mintなど)でzswapを有効にする方法
ターミナルアプリケーションを開き、次のコマンドを実行してGrubブートローダーのテンプレート設定ファイルを編集します:
sudoedit /etc/default/grub
カーソルキーを使って、「GRUB_CMDLINE_LINUX_DEFAULT」で始まる行に移動します。引用符内に次のテキストを追加します:
zswap.enabled=1
たとえば、GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"という行は、GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1"になります。
ファイルを保存するには、Ctrl + Xを押し、その後「y」を続けてEnterを押します。
以前に編集したテンプレートに基づいて新しいGrub設定ファイルを生成します:
sudo update-grub
再起動すると、zswapモジュールが自動的に有効になります。
FedoraおよびOpenSUSEでzswapを有効にする方法
ここでの手順は、前のセクションと似ていますが、いくつかの変更があります。Grubテンプレート設定ファイルを編集します。
sudoedit /etc/default/grubGRUB_CMDLINE_LINUXで始まる行の引用符内にzswap.enabled=1を追加します。

ファイルを保存するには、Ctrl + Xを押し、その後「y」を続けてEnterを押します。
コンピュータがBIOSまたはUEFIシステムから起動するかどうかに応じて、Grub設定ファイルは異なるパスで生成されます。現在の場所を見つけるには、次のコマンドを入力します:
sudofind/boot/-name grub.cfg
ここで出力されるパスを次のコマンドで使用します。たとえば、私たちのケースでは見つかったパスは「/boot/grub2/grub.cfg」だったので、「-o」の後に追加します:
sudo grub2-mkconfig -o/boot/grub2/grub.cfgコンピュータを再起動します。再起動後、モジュールが有効かどうかを確認します:
cat/sys/module/zswap/parameters/enabled出力が「Y」であれば、モジュールは正常に動作しています。
Arch Linuxでzswapを有効にする方法
systemd-swapパッケージをインストールします:
sudo pacman -Sy systemd-swap
このパッケージを起動時に動作させるようにします:
sudo systemctl enable systemd-swap再起動せずに今すぐ開始します:
sudo systemctl start systemd-swapすべてが期待通りに動作しているか確認するには、zswapモジュールが有効かどうかを確認します:
cat/sys/module/zswap/parameters/enabled
出力が「Y」であれば、モジュールがアクティブです。
異なるディストリビューションでzswapを有効にする方法
一般的に言って、起動時にzswapを有効にするのは、カーネルパラメータにzswap.enabled=1を追加することと同じくらい簡単です。ほとんどのディストリビューションはデフォルトでGrub2をブートローダーとして使用しています。異なるブートローダーを使用している場合は、ブート時に渡すカーネルパラメータを保存する設定ファイルを見つけ、zswap.enabled=1を追加パラメータとして追加してください。
特定の使用ケースに対してパフォーマンスが向上するかどうかを確認するために試すことができる別のパラメータは、zswap.max_pool_percent=20です。最後の数字を変更することで調整できます。たとえば、zswap.max_pool_percent=50に変更します。
これを、zswap.enabled=1を追加する同じカーネルパラメータに追加します。RAMが少ないシステムに対しては、50%を超えないことをお勧めします。それ以上になると、悪影響を及ぼす可能性があります。
結論
古いシステムで頻繁にRAMが不足して、ディスクスラッシングの煩わしい影響を受けていた場合、今後はすぐに違いを感じて感謝することができるでしょう。ひどい遅延の代わりに、オペレーティングシステムが大量のデータをディスクにスワップする必要があるときに数秒間持続する軽度で一時的な遅延を体験します。その間もコンピュータを全く使用できなかった状況でも、作業を続けることができるでしょう。