リモートデバッガ/プロファイラを利用したデバッグ&性能解析 3ページ

インテル VTune パフォーマンス・アナライザーを使用したプロファイリング

 アプリケーションの不具合や意図しない動作など、問題点を調べる際にデバッガは有用である。いっぽう、アプリケーションのパフォーマンスチューニングの際に有用なツールが「プロファイラ」と呼ばれるものだ。プロファイラはプログラムのどの部分がどれだけ実行されているのか、またどの関数がどの関数を呼んでいるのかなど、プログラムの実行状況を測定するツールである。

 インテル Atom プロセッサー向け インテル アプリケーション・ソフトウェア開発ツール・スイートには、「インテル VTune パフォーマンス・アナライザー」(以下、VTune)というプロファイラが付属しており、こちらを利用することでGUI画面でアプリケーションの実行状況やボトルネックになっている部分の検出など、パフォーマンスの解析を行える(図7)。

図7 インテル VTune パフォーマンス・アナライザー
図7 インテル VTune パフォーマンス・アナライザー

 VTuneの機能詳細については「パフォーマンス解析ツール「VTune」でアプリケーションを高速化」という記事で詳しく解説しているが、インテル Atom プロセッサー向け インテル アプリケーション・ソフトウェア開発ツール・スイートに付属するVTuneはクロスプラットフォーム開発とテスト、MIDのチューニングに向けた機能限定版であり、そのためインストールや設定方法などが若干異なっている点に注意してほしい。具体的には、インテル Atom プロセッサー向け インテル アプリケーション・ソフトウェア開発ツール・スイートに付属するVTuneではサンプルデータの取得方法として「Intel VTune Performance Analyzer Sampling Collector」のみをサポートしており、GUIでのサンプリングデータ取得操作は行えない。それ以外、たとえばサンプリング結果の閲覧・分析などについては単独版のVTuneと同様に行える。

リモートマシンへの「Intel VTune Performance Analyzer Sampling Collector」のインストール

 インテル Atom プロセッサー向け インテル アプリケーション・ソフトウェア開発ツール・スイートに付属するVTuneでは、「Intel VTune Performance Analyzer Sampling Collector」と呼ばれるサンプリングツールをリモートマシンにインストールし、これを実行してサンプルデータを取得するのだが、Intel VTune Performance Analyzer Sampling Collectorのインストールにはカーネルモジュールのコンパイルが必要で、若干面倒である。そこで、初めにMoblin環境に向けてIntel VTune Performance Analyzer Sampling Collectorのインストールと、これらカーネルモジュールのコンパイルを行う手順を解説しておこう。

 Intel VTune Performance Analyzer Sampling Collectorのインストーラおよびファイル一式は、インテル Atom プロセッサー向け インテル アプリケーション・ソフトウェア開発ツール・スイートの配布アーカイブ内「rpm」ディレクトリ内に「vtune91u5_target.tar.gz」ファイルとして格納されている。まずはこのファイルをリモートマシンにSCPなどを使用してコピーする。

$ cd rpm
$ scp vtune91u5_target.tar.gz <リモートマシンのIPアドレス>:

 続いてリモートマシン側でこのアーカイブを展開し、含まれるインストールスクリプト(install-vtune-sep.sh)を実行する。

$ tar xvzf vtune91u5_target.tar.gz
$ cd vtune91u5_target
$ ./install-vtune-sep.sh
NOTE:  super-user or "root" privileges are required in order to continue.
Please enter "root" Password:

The following product will be installled:

    Intel(R) VTune(TM) Performance Analyzer 9.1u5 sampling utility for Linux

Press ENTER to review the end user license agreement or Ctrl-C to exit ...
 :
 :

 インストールスクリプトを実行すると、初めにルートパスワードが要求される。これを入力し、あとは指示に従ってインストール作業を進めて行こう。インストールの完了後、デフォルトでは「/opt/intel/vtune」以下にIntel VTune Performance Analyzer Sampling Collector一式が格納されているはずだ。

 なお、デフォルト設定ではインストール作業の最後にカーネルモジュールのコンパイルが行われるのだが、GCCやカーネルヘッダーなど必要なツールやファイルがない場合コンパイルは行われない。この場合、後述する方法で別途カーネルモジュールのコンパイルやインストールを行う必要がある。

 また、サンプリングの実行は、インストール時に指定したグループ(デフォルトでは「users」)に所属しているユーザーで行う必要がある。「/etc/group」ファイルを編集し、サンプリングを実行するユーザーをそのグループに所属させておこう。

$ sudo vim /etc/group
 :
 :
nobody:x:99:
users:x:100:  ←この行の最後にサンプリングを実行するユーザー名を追加する
utmp:x:22:
utempter:x:35:
ntp:x:38:
slocate:x:21:
 :
 :

カーネルモジュールのコンパイルとインストール

 Intel VTune Performance Analyzer Sampling Collectorのインストール時にカーネルモジュールをコンパイルしなかった場合、別途カーネルモジュールを用意する必要がある。これにはさまざまな方法があるが、ここではMoblin SDKに付属するMoblinのルートファイルシステムを利用し、chrootを使用してクロスコンパイルを行う例を紹介する。なお、下記ではMoblin SDKを‾/moblin-sdk-0.10以下にインストールした場合を想定している。それ以外のディレクトリにインストールしている場合は、適宜環境に合わせてこれを変更してほしい。

 まず、Intel VTune Performance Analyzer Sampling CollectorのアーカイブをMoblinルートファイルシステム以下にコピーしておく。

$ cp vtune91u5_target.tar.gz ‾/moblin-sdk-0.10/moblin-cross-toolchain/i586-moblin-linux/sys-root/root

 次にMoblin SDK内のMoblinルートファイルシステムが格納されたディレクトリに移動し、procおよびdevディレクトリを作成して/procおよび/devにバインドしておく。

$ cd ‾/moblin-sdk-0.10/moblin-cross-toolchain/i586-moblin-linux/sys-root
$ mkdir proc
$ mkdir dev
$ sudo mount --bind /dev dev
$ sudo mount --bind /proc proc

 また、chroot環境からネットワーク接続が利用できるよう、「resolv.conf」ファイルをコピーしておく。

$ sudo cp /etc/resolv.conf etc/

 以上を実行したのち「sudo chroot」を実行すると、Moblin SDKのルートファイルシステムを仮想的にルートディレクトリとする環境(以下、chroot環境と呼ぶ)に入ることができる。

$ sudo chroot .

 次に、chroot環境内にIntel VTune Performance Analyzer Sampling Collectorをインストールする。基本的な手順はリモートマシンへのインストールと同じだ。ただし、カーネルモジュールのコンパイルはここでは行わないようにしよう。

# cd /root
# tar xvzf vtune91u5_target.tar.gz
# cd vtune91u5_target
# ./install-vtune-sep.sh

 もしカーネルモジュールに必要なツールが不足している場合、適宜yumコマンドでインストールする。また、chroot環境にインストールされているカーネルヘッダーのバージョンと、ホスト側のカーネルバージョンは一致している必要がある。もし異なっている場合は、適宜必要なカーネルヘッダー等をインストールしておこう。

# yum install <インストールするパッケージ>

 カーネルモジュールのコンパイルは、Intel VTune Performance Analyzer Sampling Collectorのインストールディレクトリ以下の「vdk/src」ディレクトリで行う。「build-driver」というコンパイル用スクリプトが用意されているので、これに適切な引数を与えて実行すれば良い。

# cd /opt/intel/vtune/vdk/src/
# ./build-driver --kernel-file=/boot/vmlinuz-2.6.31.6-17.1.moblin2-netbook --kernel-version=2.6.31.6-17.1.moblin2-netbook --system-map-file=/boot/System.map-2.6.31.6-17.1.moblin2-netbook --kernel-src-dir=/usr/src/kernels/2.6.31.6-17.1.moblin2-netbook/

 なお、上記の例ではカーネルのバージョンが「2.6.31.6-17.1.moblin2-netbook」の場合の例である。実際に試してみる場合は、カーネルのバージョンに合わせて引数を適宜変更してほしい。

 build-driverスクリプトを実行し、指示に従って設定を確認するとコンパイル作業が行われ、指定したカーネルに対応したカーネルモジュール(vtune_drv-x32-<カーネルバージョン>smp.ko)が作成される。chroot環境を終了し、作成したモジュールをリモートマシン環境にコピーしよう。

# exit
$ sudo umount proc
$ sudo umount dev
$ scp /opt/intel/vtune/vdk/src/vtune_drv*.ko root@<リモートマシンのIPアドレス>:/opt/intel/vtune/vdk/src/

 リモートマシン環境でカーネルモジュールをロードするには、Intel VTune Performance Analyzer Sampling Collectorに付属する「insmod-vtune」というスクリプトを実行すれば良い。

$ cd /opt/intel/vtune/vdk/src
$ sudo ./insmod-vtune

 最後に、「lsmod」コマンドを実行してロードされたモジュールを確認しておこう。コンパイルしたカーネルモジュールが正しくロードされていれば、「vtune_drv」というモジュールが表示されるはずだ。

$ lsmod
Module                  Size  Used by
vtune_drv             211432  0
uvcvideo               50788  0
battery                10012  0
rt2860sta             430588  0
eeepc_laptop           11724  0