「google-perftools」の版間の差分

提供: FreeBSD入門
移動: 案内検索
(コンパイルなしでtcmallocによる高速化)
行49: 行49:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
=== コンパイルなしでtcmallocによる高速化 ===
 
=== コンパイルなしでtcmallocによる高速化 ===
 +
LD_PRELOADでlibtcmalloc.soを指定して malloc() を使っているプログラムを実行するとmallocがtcmallocに置き換わり、高速化されます。1つ目は、置き換えて実行した例です。2-3番目のtime ./malloc は、通常のmalloc()関数を使用しています。
 +
libtcmallo.so に置き換えてる例は、malloc()を使用している実行時間があきらかに違います。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ time LD_PRELOAD=/usr/local/lib/libtcmalloc.so ./malloc
 
$ time LD_PRELOAD=/usr/local/lib/libtcmalloc.so ./malloc
行66: 行68:
 
sys    0m0.259s
 
sys    0m0.259s
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
このように、LD_PRELOADでmalloc()を置き換えるだけで、プログラムが高速化されます。
  
 
== 関連項目 ==
 
== 関連項目 ==
 
* [[Cライブラリ]]
 
* [[Cライブラリ]]
 
<!-- vim: fileencoding=utf-8 filetype=mediawiki -->
 
<!-- vim: fileencoding=utf-8 filetype=mediawiki -->

2014年2月23日 (日) 23:52時点における版

google-perftools とは、C/C++アプリケーションのパフォーマンスを改善するためのツールです。特に、テンプレートを使用したC++マルチスレッドアプリケーションアプリケーションで使用します。

読み方

google-perftools
ぐーぐる ぱーふ つーるず

概要

google-perftools には、以下のツールがあります。

  • tcmalloc(TCMalloc, Thread-Caching Malloc)を提供します。
  • ヒープチェッカー
  • ヒーププロファイラ
  • CPUプロファイラ

TCMalloc

TCMallocは、mallocよりも高速なメモリ割り当てを実現するライブラリです。 簡単にtcmallocを使用して、プログラムを高速化できます。

インストール

FreeBSDにインストールする場合

ports コレクションからインストールする場合

cd /usr/ports/devel/google-perftools
sudo make install clean

pkgコマンドでインストールする場合

sudo pkg install google-perftools

portinstallコマンドでインストールする場合

sudo portinstall /usr/ports/devel/google-perftools

ソースコード

tcmalloc.c

#include <google/tcmalloc.h>
int
main(int argc, char *argv[])
{
        int *p;
        int i;
        for(i = 0; i < 500000; i++) {
                p = (int *) tc_malloc ( sizeof(int) * 5000);
                tc_free(p);
        }
        return 0;
}

コンパイル

cc -ltcmalloc tcmalloc.c -I/usr/local/include -L/usr/local/lib -o tcmalloc

使い方

tcmalloc()とmalloc()の比較

500000回 malloc/free を繰り返した例です。

time ./tcmalloc
        0.02 real         0.02 user         0.00 sys
time ./malloc
        0.52 real         0.25 user         0.26 sys

コンパイルなしでtcmallocによる高速化

LD_PRELOADでlibtcmalloc.soを指定して malloc() を使っているプログラムを実行するとmallocがtcmallocに置き換わり、高速化されます。1つ目は、置き換えて実行した例です。2-3番目のtime ./malloc は、通常のmalloc()関数を使用しています。 libtcmallo.so に置き換えてる例は、malloc()を使用している実行時間があきらかに違います。

$ time LD_PRELOAD=/usr/local/lib/libtcmalloc.so ./malloc
 
real    0m0.031s
user    0m0.030s
sys     0m0.001s
$ time ./malloc
 
real    0m0.514s
user    0m0.269s
sys     0m0.245s
$ time ./malloc
 
real    0m0.509s
user    0m0.250s
sys     0m0.259s

このように、LD_PRELOADでmalloc()を置き換えるだけで、プログラムが高速化されます。

関連項目