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


17.5 Profiling

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

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

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

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

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

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

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