Previous: , Up: Debugging   [Contents][Index]


17.5 プロファイリング

プログラムは正常に機能しているものの、より高速または効率的に実行させたい場合にまず行うべきは、そのプログラムがリソースをどのように使用するか知るためにコードをプロファイル(profile)することです。ある特定の関数の実行が、実行時間のうち無視できない割り合いを占めるようなら、その部分を最適化する方法を探すことを開始できます。

このためにEmacsにはビルトインのサポートがあります。プロファイリングを開始するにはM-x profiler-startをタイプします。プロファイルはプロセッサー使用(processor usage)とメモリー使用(memory usage)、またはその両方を選択できます。何らかの処理を行った後にM-x profiler-reportとタイプすると、プロファイルに選択した各リソースがsummaryバッファーに表示されます。reportバッファーの名前にはそのレポートが生成された時刻が含まれるので、前の結果を消去せずに後で他のレポートを生成できます。プロファイリングが終了したらM-x profiler-stopとタイプしてください(プロファイリングに関連する多少のオーバーヘッドがあるため)。

profiler reportバッファーでは各行に呼び出された関数と、その後にプロファイリングが開始されてから使用したリソース(プロセッサーまたはメモリー)の絶対時間とパーセンテージ時間が表示されます。左側にシンボル‘+’のある行ではRETをタイプして行を展開して、高位レベルの関数に呼び出された関数を確認できます。もう一度RETをタイプすると、元の状態へと行が折り畳まれます。

jmouse-2を押下すると関数の定義にジャンプします。dを押下すると関数のドキュメントを閲覧できます。C-x C-wを使用してプロファイルをファイルに保存できます。=を使用すれば2つのプロファイルを比較することができます。

elpライブラリーは別のアプローチを提案します。使い方はelp.elを参照してください。

benchmarkライブラリーを使用してEmacs Lispフォームのスピードを個別にチェックできます。benchmark.el内の関数benchmark-runbenchmark-run-compiledを参照してください。

configureのオプションに--enable-profilingを使用してビルドすることにより、EmacsをCコードのレベルでプロファイルすることができます。こうしてビルドされたEmacsは、Emacsをexitするときにgprofユーティリティを使用して検証できるファイルgmon.outを生成します。この機能は主にEmacsのデバッグに有用です。このEmacsは実行状態から上述のM-x profiler-…コマンドによりLispレベルで実際にストップします。