「google-perftools」の版間の差分
提供: FreeBSD入門
(ページの作成:「google-perftools とは、C]/C++アプリケーションのパフォーマンスを改善するためのツールです。特に、テンプレートを使...」) |
|||
(同じ利用者による、間の2版が非表示) | |||
行1: | 行1: | ||
− | [[google-perftools]] | + | [[google-perftools]] とは、C/[[C++]]アプリケーションのパフォーマンスを改善するためのツールです。特に、テンプレートを使用した[[C++]]マルチスレッドアプリケーションアプリケーションで使用します。 |
'''読み方''' | '''読み方''' | ||
行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 --> |
2015年9月27日 (日) 01:10時点における最新版
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()を置き換えるだけで、プログラムが高速化されます。