sysprofでシステム全体の動作をプロファイリングするPrograming Bible

アプリケーションを最適化するには、どの関数が最もCPU時間を消費しているかを明らかにし、そうした部分のコードの高速化に集中させればよい。ここでは、パフォーマンスのボトルネック調査に利用できるsysprofを紹介しよう。

» 2008年06月04日 04時00分 公開
[Ben Martin,Open Tech Press]
SourceForge.JP Magazine

 アプリケーションのプロファイリングを行うと、どの関数が最もCPU時間を消費しているかが分かる。つまり、最適化の労力はそうした部分のコードの高速化に集中させればよいわけだ。sysprofを使えば、マルチスレッド化またはマルチプロセス化されたアプリケーションや、複数の部分からなる込み入ったサーバアプリケーションなど、マシンで実行中のすべてのアプリケーションをプロファイリングできる。sysprofは、それらアプリケーションの実行時にどれほどの時間がそれぞれのライブラリや関数に使われているかという情報を収集してくれる。

 sysprofはカーネルモジュールと、プロファイリングを実行できるグラフィカルなGTK+インタフェースの双方から構成され、UbuntuopenSUSE 10.3Fedora用のパッケージがそろっている。sysprofを最大限に活用するには、プロファイリングを行うすべてのアプリケーションについてデバッグ情報を用意する必要もある。デバッグ情報がないと、プロファイル情報には共有ライブラリの名前しか表示されず、そのライブラリ内のどの関数が最も時間を消費しているかは分からない。sysprofの柔軟性は非常に高く、配備済みシステムにこうしたデバッグ情報(debuginfo)パッケージを一時的にインストールしてプロファイリングを開始し、システム動作速度低下の原因を探ることができる。

 デバッグ用パッケージのインストール後は、次の2つのステップで起動と実行を行う。まず「modprobe sysprof-module」としてカーネルモジュールを挿入し、続いてsysprofコマンドの実行によってグラフィカルインタフェースを起動して、ツールバーの「Start」ボタンをクリックする。この時点から、マシンのあらゆる動作がsysprofによる監視とプロファイリングの対象となる。

sysprof sysprof

 sysprofによるプロファイル情報の記録が始まったら、プロファイリング対象となるアプリケーションを起動して普段どおりに操作を行う。プロファイルを取りたい作業の実行が済んだら、ツールバーのプロファイルボタンをクリックすると、sysprofによるシステムの監視が中止され、記録されたプロファイルデータを参照可能になる。また、記録されたプロファイルデータの保存や読み込みも可能だ。プロファイル情報はXML形式で保存される。読み込み時に解決が必要なシンボル参照は一切なかったので、このXMLファイルの分析は保存を行ったマシンとは別のマシンでも行えるはずだ。

 sysprofの残りの機能は、記録したプロファイルの分析に関係している。sysprofウインドウは3つの主要セクションに別れており、それらは「Funcions(関数)」、「Callers(呼び出し元)」、「Descendants(子孫)」の各リストになっている。分析の作業は関数リストから始める。デフォルトでは、実行された関数が総実行時間の長いものから順に一覧表示される。このリストには、実行可能なプロセス、共有ライブラリ、カーネル自身の実行時間も表示される。

 いずれかの関数をクリックすると、画面の右側に子孫プロセスのリストが現れる。関数リスト内のプロセスをクリックした場合は、左下の呼び出し元リストに「」と表示される。関数または子孫のリストで、例えば「f」という関数をクリックすると、この関数「f」を呼び出すすべての関数が呼び出し元リストに表示される。

 わたしの環境では「rmmod sysprof_module」の実行後にカーネルのOopsメッセージが出たので、プロダクション環境でのsysprofの使用は避けた方がいいかもしれない。このOopsメッセージはすべてのコンソールに出力されたが、それでもシステムの利用やリブートは普通に行えた。その後モジュールの削除と再挿入のテストを行った際にはOopsはもう発生しなかったが、システムは初回のリブートなしではもはや使えない状態になってしまった。

 幾つか簡単な機能強化を施せば、sysprofはもっと優れたものになるだろう。まず、参照済みのプロファイル情報間を自在に行き来できる戻る/進むのボタンがインタフェースにあると素晴らしい。また、プロファイルの記録がコマンドラインから実行できれば、グラフィカルなクライアントのリモート実行に必要なXライブラリがインストールされていないサーバでもプロファイリングが簡単に行えるようになる。コンソールクライアントがあれば、自動記録も容易になるはずだ。また、残念なことにsysprofはi386およびx86-64アーキテクチャにしか対応していない。ARMプラットフォームでも間違いなく役に立つはずなのだが。

 sysprofはすでに多くのディストリビューションにパッケージングされており、アプリケーションの再コンパイルが不要なので、すぐにでもパフォーマンスのボトルネック調査に利用できる。

Ben Martinは10年以上もファイルシステムに携わっている。博士号を持ち、現在はlibferrisや各種ファイルシステム、検索ソリューションを中心としたコンサルティングサービスを提供している。


Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ