VTune Amplifier XEとInspector XEでmemcachedの高速化にチャレンジ 3ページ

アプリケーションのパフォーマンス解析に役立つVTune Amplifier XE

 ベンチマークツールの問題が解決したところで、続いて本題となるmemcachedのパフォーマンス解析について紹介していこう。

 プログラムのパフォーマンスチューニングを行う際に、まず確認しておきたいのが、プログラム中のどこがパフォーマンスのボトルネックとなっているか、という点だ。プログラムのどの部分で時間がかかっているかを把握しておかないと、労力をかけたのにパフォーマンスはほとんど向上しなかった、ということが発生しかねない。このようなパフォーマンスのボトルネックとなる個所(「ホットスポット」と呼ばれる)を見つけ出すためのツールが、VTune Amplifier XEだ。

memcachedのコンパイル

 VTune Amplifier XEでの解析を行うには、対象となるプログラムをデバッグ情報付きでコンパイルしておく必要がある。memcachedのコンパイルは一般的なLinux/UNIX向けプログラムと同様、configureおよびmakeを使用して行う。また、memcachedはイベント処理にlibeventというライブラリを使用しており、コンパイルにはlibevent本体および関連ヘッダファイルのインストールが必要である。たとえばRed Hat Enterprise Linux(および互換ディストリビューションであるCentOS)では、次のようにして必要なファイルをインストールできる。

# yum install libevent-devel

 memcachedのソースコードについては、memcached.orgよりダウンロードできる。

$ wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz

 ダウンロードしたファイルは適当なディレクトリに展開し、コンパイル用の適当なディレクトリを作成してconfigureスクリプトおよびmakeを実行する。

$ tar xvzf memcached-1.4.5.tar.gz
$ cd memcached-1.4.5
$ mkdir gcc1
$ cd gcc1
$ ../configure
$ make

 以上を実行すると、configureを実行したディレクトリ内に「memcached」という実行ファイルが作成される。今回はテストのためインストール(make installの実行)は行わず、直接このバイナリを実行してmemcachedを起動することとした。

 memcachedにはさまざまなオプションが用意されているが、今回のテストではシンプルに使用するメモリ容量を指定する「-m」オプションのみを指定することとした。指定する値は「1024m」(1024MB)としている。

$ ./memcached -m 1024m

 なお、コンパイルに使用するコンパイラやコンパイルオプションについてはconfigureスクリプトの引数で指定することで変更できる。たとえばコンパイラにインテル C++ Composer XEを使用し、「-O3 -ipo -g」というオプションを指定する場合は次のようにする。

$ ../configure CC=icc LINK=xild "CFLAGS=-O3 -ipo -g" "CXXFLAGS=-O3 -ipo -g"

 C++ Composer XEでのコンパイルやコンパイルオプションについては、インテル コンパイラーでオープンソースソフトウェアをコンパイルしようという記事で紹介しているので、より詳しくはそちらを参照してほしい。

プロファイリングの実行

 コンパイルが完了したら、続けてVTune Amplifier XEのGUIを起動して各種設定を行う。VTune Amplifier XEのGUIは「/opt/intel/vtune_amplifier_xe_2011/bin32/」以下の「amplxe-gui」コマンドを実行することで起動できる。通常このディレクトリにはパスは通っていないので、明示的にパスを設定するか、次のようにフルパスで実行する必要がある。

$ /opt/intel/vtune_amplifier_xe_2011/bin32/amplxe-gu &

 VTune Amplifier XEのプロファイリング設定は、先に説明したInspector XEでの設定手順とほぼ同じだ。まずメニューの「New」-「Project」で「Create Project」ダイアログを開いき、プロジェクトのディレクトリ名および作成場所を指定してプロジェクトを作成する(図11)。

図11 解析データの保存先などを指定する「Create Project」ダイアログ
図11 解析データの保存先などを指定する「Create Project」ダイアログ

 続いて対象となるプログラムを起動するためのコマンドラインやそのオプション、作業ディレクトリを指定すればプロジェクトの作成は完了だ(図12)。

図12 プロジェクトの設定画面。実行するコマンドラインやオプションなどを設定する
図12 プロジェクトの設定画面。実行するコマンドラインやオプションなどを設定する

 プロファイリングを実行する手順もInspector XEと同様で、ツールバーの「New Analysis」ボタンをクリックし、解析オプションを指定して「Start」ボタンをクリックするだけだ。今回はホットスポットを見つけるのが目的なので、解析設定は「Algorithm Analysis」の「Hotspots」を選択した(図13)。

図13 ホットスポットを調査する「Hotspots」を選択し、「Start」をクリックする
図13 ホットスポットを調査する「Hotspots」を選択し、「Start」をクリックする

 今回対象としているmemcachedはサーバープログラムであり、何らかのリクエストがないと処理は実行されない。そこで、先に紹介したmcbを使用してmemcachedにリクエストを投げることで処理を実行させることとする。リクエストはある程度負荷がかかるものである必要があるため、今回は4スレッドを使用し、平均8096バイトのデータを書き込むリクエストを10万回発生させてテストを行うこととした。mcbのコマンドラインは下記のようになる。

$ ./mcb -c set -t 4 -n 100000 -l 8096

 なお、テストで使用したPC環境は以下の表2のとおりである。

表2 テストで使用した環境
要素 説明
OS CentOS 5.5(32ビット版)
CPU インテル Core i7 920(2.66GHz)
メモリ 3GB

 mcbの実行が完了したら、「Stop」を押してプロファイリングを終了させる。するとデータの解析が行われ、その結果がウィンドウ内に表示される(図14)。

図14 プロファイル結果はグラフィカルに表示される
図14 プロファイル結果はグラフィカルに表示される