E4rat

提供: ArchWiki
2017年1月18日 (水) 21:40時点におけるKusakata (トーク | 投稿記録)による版 (同期)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

e4rat は e4 'reduced access time' (ext4 ファイルシステムのみ) の略語で、Andreas Rid と Gundolf Kiefer によるプロジェクトです。e4rat range of tools は e4rat-collect, e4rat-realloc, e4rat-preload から成り立っています。

現在のバージョンは 0.2.3 です。

プロセス

古典的な bootchart を見ると、ブートプロセスの間にディスクも CPU も完全には使われていないことに気づくかもしれません。e4rat はブートプロセスでディスクと CPU をフルに使うようにして、起動時間を劇的に縮めます。3つの段階に分かれています:

  • e4rat-collect - 特定時間ファイルを収集します (デフォルトは120秒ですが変更することも可能です)
  • e4rat-realloc - ファイルを再配置します
  • e4rat-preload - ファイルをプリロードします

利益を得る人、得ない人

X を起動して、多数のプログラムを開くような、典型的なシングルユーザーセットアップで e4rat は大変効果があることが証明されています。サーバーセットアップで CLI で起動するような場合、起動時間の短縮はあまり効果があらわれないでしょう。SSD ドライブを使っている場合も利益はあまりありません、可動部がないためディスクの遅延が(ほとんど)ないためです - Ureadahead はチェックする価値があるかもしれません。

ノート: (ureadahead のユーザーへ) e4rat の公式マニュアル には ureadahead が e4rat と衝突すると書かれています。この記述は Ubuntu では正しいですが、Arch Linux では e4rat と ureadahead を一緒に使っても問題なく動作します。ただし起動時間はあまり短縮されません。

備えあれば憂いなし。パーティションに入っているデータを消失したくないのならばバックアップを取っておきましょう。

インストール

AUR から e4ratAUR をインストールしてください。

ノート:
  • ビルドするために、最初に staticlibs オプションを明示的に有効にして auditABS からリビルドする必要があります。デフォルトの audit パッケージをインストールするだけではビルドエラーが発生します。
  • audit を使うには audit をサポートしたカーネルが必要です。カーネルコンフィグで audit (CONFIG_AUDIT) と audit のシステムコールのサポート (CONFIG_AUDITSYSCALL) を有効にしてください。カーネル/コンパイル/Arch Build System も参照。また、カーネルパラメータに audit=1 を追加してください。

使用方法

それでは本題に入ります:

e4rat-collect

e4rat にファイルのリストを収集させるために init=/sbin/e4rat-collectカーネルパラメータに追加します。例:

kernel /vmlinuz-linux root=/dev/disk/by-label/ARCH init=/sbin/e4rat-collect ro 5

これは一度だけやれば十分なので、grub のコマンドラインなどにこのコマンドを追加すれば良いでしょう。

起動時に e4rat-collect はデフォルトで120秒間システムを監視します。なので起動したら、2分の間に、X にログインして、お気に入りのブラウザやメールクライアントを開いたりしてください。それらの活動すべてが記録されます。デフォルトの120秒を変更したいときは /etc/e4rat.conf を編集してください。手動で e4rat-collect を停止するには次を入力:

e4rat-collect -k

もしくは:

pkill e4rat-collect

ちゃんと起動して規定の時間待機したら /var/lib/e4rat/startup.log ファイルを見て下さい。

そして忘れずにブートローダーの設定ファイルから e4rat-collect コマンドを取り除いておきましょう (grub のコマンドラインに追加した場合は必要ありません)。

e4rat-realloc

e4rat-collect を実行したら、root でログインして次を実行:

e4rat-realloc /var/lib/e4rat/startup.log

startup.log ファイルに記述されたファイルの数によってしばらく時間がかかります。systemctl isolate rescue でレスキューモードに移行することで (Systemd#ターゲット表)、multiuser.target ではフリーにならない inode やブロックも再配置することができます。

ノート:
  • It may be worthwhile to repeat the reallocation step multiple times before exiting or rebooting in order to further reduce the fragmentation count. Simply re-run the command a few times to see if this is possible on the your setup. If so you'll see the count number reduced after a few runs. This is perfectly safe and shouldn't cause any issues with booting.
  • SysV スタイルの init システムを使っている場合、e4rat-realloc を実行する前に sudo init 1 を使ってランレベル 1 に切り替える必要があります。

e4rat-preload

init=/sbin/e4rat-preload を永続的にカーネルパラメータに追加してください。

e4rat と init システム

e4rat-collect はデフォルトで実行時に /sbin/init を置き換えます。systemd のデフォルト環境では、このファイルは /lib/systemd/systemd のシンボリックリンクになっています。他のプロセス (例: /usr/bin/busybox) を PID 1 に指定する必要がある場合、/etc/e4rat.conf を編集して init パラメータを設定することで変更することが可能です:

init /usr/bin/busybox

これによって同一のブートシーケンスで e4rat-preloadbootchart の両方を起動することができます。

e4rat-lite

複数の改善がなされている e4rat の代替です。元の e4rat パッケージで発生する問題が解決するかもしれません。e4rat-lite-gitAUR パッケージでインストールできます。

e4rat-lite を使う

e4rat-lite のコマンドは e4rat と全く同じです。違うのはパスだけです:

  • collect: init=/usr/bin/e4rat-lite-collect
  • realloc: /usr/bin/e4rat-lite-realloc
  • preload: init=/usr/bin/e4rat-preload

Bootchart

Bootchart を使うことでシステムの起動グラフを生成できます。CPU やディスクの使用量を視覚的に確認することができます。必須ではありませんが、e4rat によるブートプロセスの変化を確認できます。

bootchart

警告: 公式の bootchart パッケージは廃止されており、グラフを生成するために必要な bootchart-render コマンドが含まれていません。bootchart2 を使うことを推奨します。

このバージョンの bootchartディスプレイマネージャが立ち上がるとすぐにログの記録を停止します。以下のように上書きすることでログを停止しないようにすることができます:

ログを続行するには以下のように /etc/bootchartd.conf を変更:

AUTO_STOP_LOGGER="no"

手動で停止するには次を実行:

# bootchartd stop

e4rat-preload と bootchart の両方を実行するには grub の kernel 行に以下を追加:

init=/sbin/bootchartd bootchart_init=/sbin/e4rat-preload

bootchart2

e4rat と共に bootchart2AUR を動作させるには /sbin/bootchartd2 を編集して次の行を:

init="/sbin/init"

以下のように置き換えて下さい:

init="/sbin/e4rat-preload"

上記の設定で Bootchart2 による情報を使って起動時間を測定できます。

bootchart2 を停止する時間は /etc/bootchartd2.conf ファイルを編集することで簡単に設定できます。特定のアプリケーションが起動したときに Bootchart2 のログを止めるには以下のように設定してください:

EXIT_PROC="kdm_greet xterm konsole gnome-terminal metacity mutter compiz ldm icewm-session enlightenment"

もしくは、上記の行を空にすることで手動でログを停止することもできます。

チャートを生成するには次のコマンドを実行: pybootchartgui -i

トラブルシューティング

startup.log が作られない

  • auditd サービスを無効にする
  • ヒントがないか次を確認
$ dmesg | grep e4rat
  • e4rat.conf の verbose と loglevel を31にまで増やす
  • e4rat のかわりに e4rat-lite を使用する

e4rat が誤って ext2 ファイルシステムと認識する

rootfstype=ext4 をブートローダーのカーネルパラメータに追加してください。

/var/lib/e4rat/startup.log にアクセスできない

This suggests that you have /var on a separate partition which is not yet mounted during boot. You need move your startup.log to an accessible partition (/etc/e4rat/ is just fine) and adjust your /etc/e4rat.conf to reflect this change:

startup_log_file /etc/e4rat/startup.log

うるさいブートメッセージを削除する

起動中の e4rat-preload のメッセージがうっとうしい場合は、/etc/e4rat.conf で verbose を 1 に減らします。

参照