FedoraでzRAMを最適化:RAMを「拡張」して動作をサクサクにし、ラグを解消する方法

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

クイックスタート:5分でできるzRAMの確認と有効化

Fedoraをメインの開発用PCとして2年間使用してきましたが、パッケージの更新速度には非常に満足しています。ただ、一つだけ自分ですぐに「手を入れて」調整しているのがzRAMです. 古いディスク上のスワップパーティションとは異なり、Fedoraはバージョン33からデフォルトでzRAMを採用しています。まずは自分のPCで有効になっているか、ターミナルを開いて以下のコマンドを入力して確認してみましょう。

zramctl

もし /dev/zram0 という行が圧縮アルゴリズム(通常は lzo-rle)と共に表示されれば、zRAMは既に動作しています。何も表示されない場合は、以下のコマンドで数秒でインストールできます。

sudo dnf install zram-generator -y

次に、/etc/systemd/zram-generator.conf に基本的な設定ファイルを作成します。:

sudo nano /etc/systemd/zram-generator.conf

ファイルに以下の内容を貼り付けてください:

[zram0]
zram-size = ram / 2
compression-algorithm = zstd

保存した後、以下のコマンドを実行して変更を即座に反映させます:

sudo systemctl daemon-reload
sudo systemctl start /dev/zram0

それでは、swapon --show を入力してみましょう。システムの負荷を肩代わりしてくれる新しいスワップ領域が表示されるはずです。

zRAMとは何か?なぜそれがFedoraの「秘密兵器」なのか?

Chromeのタブを50個開き、同時にいくつかのDockerコンテナを立ち上げた時に、PCがフリーズしてイライラしたことはありませんか?それは実メモリ(物理RAM)が枯渇し、システムがデータをハードディスク上のスワップへ追い出そうとしているからです。最高性能のNVMe SSDであっても、書き込み速度は物理RAMの足元にも及びません。ここでzRAMの価値が発揮されます。

データをディスクに書き出す代わりに、zRAMはRAM内に圧縮されたパーティションを作成します。例えば、1GBの生のデータが zstd アルゴリズムによってzRAMに送られると、わずか300MB程度に圧縮されます。つまり、CPUのパワーを利用して、メモリ容量を「魔法のように」増やしているのです。

Fedoraの優れた点は、ディスク上のスワップを使う前にzRAMを優先して使用することです。最近のCPUでは圧縮・展開の処理が非常に高速に行われるため、ハードディスクの読み書きを待つことなく、システムが即座にレスポンスを返してくれます。

高度な設定:プロのようにzram-generatorをチューニングする

Fedoraのデフォルト設定は十分に安全ですが、開発者としてはさらに踏み込んだ設定をしたいところです。実際のハードウェア構成に合わせて zram-generator.conf を最適化しましょう。

1. 最大容量の制御

8GBのRAMを搭載したマシンの場合、zram-size = ram / 2 という設定では4GBの圧縮スワップが作成されます。しかし、zRAMが物理メモリを占有しすぎないようにしたい場合は、min 関数を使って制限をかけることができます:

[zram0]
zram-size = min(ram / 2, 4096)
compression-algorithm = zstd

この設定により、zRAMはRAMの最大50%を使用しますが、4GB(4096MB)を超えることはありません。これにより、優先度の高いタスクのために常に十分な空きRAMを確保できます。

2. 適切な圧縮アルゴリズムの選択

圧縮アルゴリズムの選択は、マシンの快適さに直接影響します:

  • lzo-rle: Fedoraのデフォルト。非常に高速で負荷が低いですが、圧縮率は低めです。古いマシンや2〜4コアのCPUに適しています。
  • zstd: 私の一番のおすすめ。圧縮率が非常に高く、データを1/4程度まで圧縮できます。CPU負荷は少し増えますが、最近の多コアCPUであれば、その価値は十分にあります。
  • lz4: 速度と圧縮率のバランスが良く、ほとんどのユーザーにとって無難な選択肢です。

実用的な比較:物理スワップは残しておくべきか?

「zRAMがあるなら、ハードディスク上のスワップは削除してもいいのか?」という疑問をよく耳にします。結論は、**必要ですが、大きくしすぎないこと**です。

zRAMは現在使用中の「ホット」なデータの処理に非常に優れています。しかし、ハイバネーション(休止状態)機能を使用する場合は、物理RAMの容量よりも大きな物理スワップパーティションが必須になります。ハイバネーションを使わないのであれば、物理RAMとzRAMの両方が一杯になった時の「最後の防波堤」として、2GB程度の物理スワップを残しておくだけで十分です。

スワップの優先度を確認するには、swapon --show を実行します。zRAMの PRIO 値が高く(例:100)、ディスク上のスワップは通常マイナスの値(例:-2)になっているはずです。システムはディスクへの書き込みを検討する前に、常にzRAMを優先して満たそうとします。

Fedoraを仕事用マシンとして使う際の実践的なアドバイス

私はよくVS Codeを開きながら、複数のReactプロジェクトやDockerコンテナを同時に動かしています。zRAMがなければ、私のThinkpadはとっくにフリーズしていたでしょう。以下に、適用すべき2つの小さなコツを紹介します:

Swappiness値を上げる

Swappinessは、カーネルがどのタイミングでスワップを優先的に使用するかを決定します。zRAMを使用する場合、カーネルが自動的にキャッシュを解放するのを待つのではなく、圧縮機能を最大限に活用するために、この値を最大に上げるのが好みです:

sudo sysctl vm.swappiness=100

設定を永続化するには、/etc/sysctl.d/99-zram.conf を作成し、その中に vm.swappiness=100 と記述します。

zramctlで効果を監視する

設定して終わりではありません。時々 zramctl を入力して、DATA(実際のデータ量)と COMPR(圧縮後のデータ量)を確認してみてください。比率が3:1や4:1に達していれば、貴重な数GBのRAMを節約することに成功しています。

NAME       ALGORITHM DISKSIZE  DATA  COMPR  TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd            4G  1.2G   300M   350M      16 [SWAP]

上の例を見ると、1.2GBのデータが実際にはわずか350MBの物理メモリしか消費していません。ソフトウェア的な工夫だけでこれだけの効果が得られるのは、非常に印象的です!

まとめ

FedoraでのzRAMの最適化は決して難しくありませんが、日々の操作感に明らかな違いをもたらします。若手の開発者にとって、このようなメモリ管理の方法を習得することは、個人のPCで重いプロジェクトを扱う際の自信に繋がるはずです。自分のマシンの構成に合わせて、さまざまなアルゴリズムを試して「スイートスポット」を見つけてみてください。zram-generator の設定で困ったことがあれば、下のコメント欄で教えてください。すぐにサポートします。

Share: