Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (4,208)  
HandBrake Japanese Language Version  (3,353)  
CrystalDiskInfo  (1,743)  
CotEditor  (1,120)  
CrystalDiskMark  (866)  
Boookends  (788)  
SMPlayer  (642)  
えこでこツール  (599)  
Tera Term  (595)  
10  FFFTP  (579)  
11  Cabos  (530)  
12  BathyScaphe  (494)  
13  ffdshow  (481)  
14  MergeDoc  (464)  
15  ギコナビ  (438)  
More >>

最近ブックマークされた記事

Linuxのパフォーマンスを改善する3つのTips

2007年07月17日 13:08 Federico-Kereki(2007年7月12日(木)) 1 2 3

アプリケーションの読み込み時間を最適化する

 LinuxのプログラムのほとんどはELF(Executable and Linkable Format)形式になっている。ELFでは必要な全ライブラリではなくそれらへのリファレンスだけが含まれていて、実行時のコードのロードの際に解決(リンク)するようになっているため、通常はファイルのサイズが小さくなっている。

 これは古典的な時間/空間トレードオフの問題であり、ELFの場合、プログラムファイルの大きさは小さいが、ロードのために長い時間が必要となっている。同じライブラリを使用するプログラムは数多くあるので、ライブラリを共有することによってメモリ空間も節約することができる。また、小さいプログラムはたいていライブラリをほとんど必要としないので、リンクは通常は短時間で済む。しかし多数のライブラリを使用する大規模なプログラムでは、リンクにかなりの時間がかかることもある。

 そこでもう少しディスク空間を使用しても良いという場合には、prelinkコマンドを使用することにより、リンク作業を前もって行なってプログラムのファイル内にライブラリを一緒に保存しておき、読み込みが終わればすぐに実行可能になるようにしておくことができる。(厳密に言うとこれは正しくなく、実際にはプログラムが読み込まれる際に、プログラムをプレリンクして以来ライブラリが変更されていないかどうかライブラリの確認が行なわれる。しかしこの確認は瞬時に終わる)。

 ただし、プレリンクし始める前に、まずは/etc/prelink.confという設定ファイルにいくつか重要な項目を設定する必要がある。このファイルは、共有ライブラリがある場所をprelinkに伝える。また、プレリンク可能なプログラムすべてをプレリンクする-aオプションを使用する場合に、プレリンクするべきプログラムがある場所をprelinkに伝える。

 /etc/prelink.confの書き方は単純で、コメント(# から始まる行)と空行の他に、以下のような行を追加することができる。

-l someDirectory
-h someOtherDirectory
-b someFilePatternToAvoid

-lの行では、処理するディレクトリを指定する。また-hの行は-lの行と同じだが、ただしシンボリックリンクの追跡も有効にする。-bの行は、処理するべきでない「ブラックリスト」のプログラムを示す(パターンで指定することもできる)。プレリンクすることのできないプログラムが前もって分かっている場合には、-bの行を適切に追加しておくことで、実行時にエラーメッセージが出ないようにすることができる。

 一つのプログラムをプレリンクするには、「prelink プログラム名 」とするだけだ。プログラムをプレリンクすることが可能な場合は(不可能な場合もある)、元のバイナリファイルがより大きな新しい版で上書きされる。また「prelink -a」を実行することで、プレリンク可能なもののすべてをプレリンクすることもできる。この場合、設定ファイルの中の-l-hで指定されたすべてのディレクトリを調べて、見つかったすべてのプログラムをプレリンクする。なお-nオプションをさらに追加して実行すれば「予行演習」をすることもできる。この場合すべての変更の表示だけを行ない実際には変更しないので、実際に実行したときに行なわれるはずのことを前もって確認することができる。

警告:システム上のライブラリの数が多く、メモリの量が少ないときには、prelinkがメモリ量を節約するために-mオプションを追加する必要があるだろう。

 プレリンクしたファイルが気に入らない(あるいはライブラリが新しくなる度に毎回更新するのが面倒になった)ときには、-uオプションを使用してプレリンクしていない元の状態に戻すことができる。したがって「prelink -u プレリンクされているプログラム 」を実行すれば、プレリンクされているプログラムを以前の形式に問題なく戻すことができる。

 プレリンクしたプログラムは他のプログラムとまったく同じように実行することができるが、通常はロードの時間が短縮され、デスクトップの反応速度の向上を体感することができる。結果については異なる見方があるが、私が調べたほとんどの文書では明らかな高速化があると示されていた。今回は以下のような簡単なコマンドで時間を測定してみた。

prelink diff
time diff
prelink -u diff
time diff

 結果は期待の持てるものだった(人間が関わる時間が含まれてしまうのを避けるために、ロードが終わった後すぐに終了するプログラムを試した)。もちろん今回行なったのは非常に小さな例に過ぎないが、一般的な結果も同様のものになるはずだ。

まとめ

 性能の向上は、あらゆる場合において適切で現実的な目標だ。この記事で紹介した3つの案は、それぞれ独立しているが関連した方法であり、Linux PCの全体的な速度を向上させることができる。手元のハードウェアからさらにもう少し魅力を引き出すことができるのは、やはり嬉しいことだ。

Federico Kerekiはウルグアイのシステムエンジニア。20年に渡るシステム開発、コンサルティング、大学講師の経験がある。

Linux.com 原文

関連トピック

最終更新:2009年10月09日 16:01