valgrindのcallgrindツールを使用したマルチスレッド性能分析

2171 ワード

valgrindはオープンソースの性能分析利器です.ドキュメントに基づいて、メモリの漏洩などの問題をチェックしたり、関数の呼び出し図を生成したりすることができます.この2つの機能で十分魅力的です.
本稿では、valgrindのcallgrindツールを使用してパフォーマンス分析を行う方法について説明します.
分析プロセス
callgrindツールを使用してパフォーマンス分析データを生成する
コマンドのフォーマットは次のとおりです.
valgrind --tool=callgrind ./exproxy

ここで./exproxyは私たちが分析するプログラムです.実行が完了すると、現在のディレクトリの下にファイルが生成されます.ファイル名は「callgrind.out.プロセス番号」です.例えば、callgrind.out.31113.daemonプロセスのデバッグはkill-9で停止しないでください.
デバッグしたプログラムがマルチスレッドである場合は、コマンドラインにパラメータ-separate-threads=yesを追加することもできます.これにより、スレッドごとにパフォーマンス分析ファイルが個別に生成されます.次のようになります.
valgrind --tool=callgrind --separate-threads=yes ./exproxy

生成されたファイルはcallgrindを除く.out.31113のほか、サブスレッドのファイルもいくつか追加されます.ファイル名は次のとおりです.
callgrind.out.31113-01    callgrind.out.31113-02    callgrind.out.31113-03
callgrindで生成したパフォーマンスデータをdotフォーマットデータに変換
gprof 2 dotを使用することができる.pyスクリプトは、callgrindで生成された性能分析データをdot形式のデータに変換します.dotを使用して分析データを図形化するのに便利です.
スクリプトはここでダウンロードできます.スクリプトの使用方法は次のとおりです.
python gprof2dot.py -f callgrind -n10 -s callgrind.out.31113 > valgrind.dot

dotを使用してデータを画像に生成する
コマンドのフォーマットは次のとおりです.
dot -Tpng valgrind.dot -o valgrind.png

https://github.com/jrfonseca/gprof2dot
https://www.tuicool.com/articles/nUZJBb2