Prelink

提供: ArchWiki
移動先: 案内検索

ほとんどのプログラムは機能させるのにライブラリを必要とします。ライブラリは、リンカによってコンパイル時にプログラムに統合させたり (静的リンク)、ローダーによってプログラムの実行時に統合させることが可能です (動的リンク)。動的リンクにはコードのサイズが減って管理が楽になるという利点がありますが、プログラムが実行されるたびに、ローダーが該当するライブラリを見つけ出さなければなりません。ライブラリはメモリのあちこちに散らばっているため、性能にペナルティを与えてしまうことになり、必要とするライブラリが増えれば増えるほど、ペナルティも増加します。Prelink はシステムの動的リンカを使用して、再配置によってあらかじめリンクを行っておくことで (実行可能ファイルを "prelink" する) ペナルティを減らします。何らかの理由で、prelink された後にライブラリが変更されなければ、プログラムは実行時にライブラリを探すのに時間を費やす必要はなくなります。

警告: Prelink の使用に対して反対する主張が Fedora バグ #1183 でされています。LWN の記事 のまとめより: "総合して、pre-link はちょっとしたハックであり、わざわざそれを行うほどの効果があるかは不明である"。

インストール

prelinkAUR パッケージをインストールしてください。

設定

全ての設定は /etc/prelink.conf で行います。

ノート: prelink を使用するとプロプライエタリなバイナリがクラッシュすることがあります (Flash, Skype, Nvidia のプロプライエタリドライバーなど)。クラッシュするようなバイナリは /etc/prelink.conf の除外リストに追加することができます。

使用方法

Prelink

次のコマンドは /etc/prelink.conf で指定したディレクトリ内の全てのバイナリを prelink します:

# prelink -amR
警告: ディスクの残り容量が少なくなっている状態でシステム全体を prelink すると、バイナリの一部が切り捨てられて、システムが壊れてしまう可能性があると言われています。filereadelf コマンドを使用してバイナリファイルの状態をチェックしてください。もしくは df -h コマンドで先にハードドライブの残り容量を確認してください。

除外リスト

議論ページより:

/etc/prelink.conf
# Skype
-b /usr/lib32/skype/skype
-b /usr/lib/skype/skype

# Flash Player Plugin
-b /usr/lib/mozilla/plugins/libflashplayer.so

# NVIDIA
-b /usr/lib/libGL.so*
-b /usr/lib32/libGL.so*
-b //usr/lib/libOpenCL.so*
-b //usr/lib32/libOpenCL.so*
-b /usr/lib32/vdpau/
-b /usr/lib/vdpau/
-b /usr/lib/xorg/modules/drivers/nvidia_drv.so
-b /usr/lib/xorg/modules/extensions/libglx.so*
-b /usr/lib/libnvidia-*
-b /usr/lib32/libnvidia-*

# Catalyst
-b /usr/lib/libati*
-b /usr/lib/fglrx*
-b /usr/lib/libAMDXvBA*
-b /usr/lib/libGL.so*
-b /usr/lib/libfglrx*
-b /usr/lib/xorg/modules/dri/fglrx_dri.so
-b /usr/lib/xorg/modules/drivers/fglrx_drv.so
-b /usr/lib/xorg/modules/extensions/fglrx/
-b /usr/lib/xorg/modules/linux/libfglrxdrm.so
-b /usr/lib/xorg/modules/extensions/libglx.so

prelink の削除

全てのバイナリから prelink を削除:

# prelink -au

毎日実行される cron ジョブ

アップデートが行われても速度を保つために cron ジョブの設定が推奨されています (他のディストリのパッケージに含まれています)。/etc/cron.daily/prelink として保存してください:

/etc/cron.daily/prelink
#!/bin/bash
[[ -x /usr/bin/prelink ]] && /usr/bin/prelink -amR &>/dev/null

そして所有権とパーミッションの設定をしてください:

# chmod 755 /etc/cron.daily/prelink

また、AUR にある prelink-systemdAUR パッケージは上記の cron スクリプトと同じ効果を持つ systemd タイマーユニットをインストールします。

KDE

KDE に prelink のことを教えることで高速に起動することができます。全てのユーザーに適用されるように以下を設定すると良いでしょう:

/etc/profile.d/kde-is-prelinked.sh
export KDE_IS_PRELINKED=1

そして所有権とパーミッションの設定をしてください:

# chmod 755 /etc/profile.d/kde-is-prelinked.sh

参照