解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

prelink は、大概は不要

Gentoo Wiki にも載っている prelink ですが、結論から言うと、現在では多くの状況では不要です。

prelink は、それぞれのプログラムに必要な共用ライブラリ(Shared Object)を、動的にロードするのではなく予め組み込んでしまうためのソフトウェアです。 prelink を用いることで、ライブラリ組込み済のプログラムの実行開始は早くなります。

その代わり、そのプログラムのサイズは大きくなりますし、ライブラリを組込む際の処理に時間と負荷がかかりますし、ライブラリやプログラムが更新されたらまた組込み直しをせねばなりません。 こうした処理のために一般的には、 cron で定期的に prelink を実行することになります。

prelink は、 RedHat 発祥のソフトウェアです。 そのことからも想像がつく通り、サーバ用途で便利だったはずです。 常時稼働のシステムで、負荷の少ない時間帯に prelink を実行しておくことで、プログラムの起動やシステム再起動が早くなります。

しかし現在の動向からすると、prelink は時代遅れです。

まず、エンドユーザが用いるような、常時稼働ではないシステムでは、 cronprelink を回すのは定時ではなくなってしまいます。一般的には anacron が頃合いを見計らって実行することになってしまいます。しかし、必要なときだけシステムを起動する状況では、裏で prelink が回るのは邪魔です。

次に、サーバ用途でも、少なからぬサーバでは効果が少なかったり邪魔になってしまう時代になりました。 速いシステムでは、 prelink で得られる効果は小さくなっています。 また、日夜に亘りリクエストを受けるようなサーバであれば、暇な時間帯というのはありません。

現に、 Fedora では prelink はデフォルトではなくなっています。#1183 (Don't enable prelink by default in Fedora) – FESCo

それでも prelink は、一定の状況下では効果的ではありますが、はたしてそうした状況にあるのか否かを検討して導入しないと、 prelink のたびに負荷がかかる、プログラムの実行バイナリが書き換わりサイズも増えるといったデメリットを、予め知らないうちに被ってしまいます。