Prelink (日本語) - ArchWiki

# Prelink (日本語)

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

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

## インストール

prelink は公式リポジトリからインストールできます。

## 設定

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

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

## 使用方法

### Prelink

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

    # prelink -amR

Warning: ディスクの残り容量が少なくなっている状態でシステム全体を prelink すると、バイナリの一部が切り捨てられて、システムが壊れてしまう可能性があると言われています。`file` や `readelf` コマンドを使用してバイナリファイルの状態をチェックしてください。もしくは `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

## KDE

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

    /etc/profile.d/kde-is-prelinked.sh

    export KDE_IS_PRELINKED=1

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

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

## 参照

- Prelink man page
- Gentoo Linux Prelink ガイド
- ELF Prelinking and what it can do for you

Category:

- System administration (日本語)