問題タブ [callgrind]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
valgrind - callgrind は正確に何を収集しますか
サンプリングですか、それとも実行されたすべての命令を記録していますか?
実行中の関数をキャプチャするだけですか、それとも行番号も持っていますか?
profiling - _CPU_ 1ではなく、この関数で費やされる_real_時間(syscallの待機を含む)を測定するためにどのプロファイラーを使用する必要がありますか
アプリケーションは計算を行いませんが、I / O、ファイルの読み取り、ネットワークの使用を行います。プロファイラーに表示してほしい。
私は、callgrindのように、問題ごとにclock_gettimeを呼び出すようなものを期待しています。
または、アプリケーションを中断するoprofileのように(スリープ中またはソケット/ファイルなどを待機している間)、アプリケーションが何をしているのかを確認します。
「read」、「connect」、「nanosleep」、「send」、特に「fsync」(およびそのすべての呼び出し元)を太字にします(計算を実行する文字列や数値関数などではありません)。
プラットフォーム:GNU / Linux @ i386
profiling - Callgrind main()を含むコストは100%よりはるかに小さい
Linuxで実行されているいくつかの非常に単純なC++プログラムのプロファイルを作成しました。それらすべてのmain()の包括的コストは、100%からはほど遠い、3.83%のようなものです。callgrindを正しく使用していますか?以下に貼り付けたcallgrind_annotate
withの出力があります。--inclusive=yes
このプログラムはヒープと呼ばれ、単純なヒープソートを実行します。私が使用したコマンドは
次に、入力します
出力:
c++ - C++でのコード実行のロギング
gprofとcallgrindを何度も使用してきましたが、大規模な(車全体をロードするCADプログラムのように)プログラムを処理する場合、これらを効率的に使用できないという(明らかな)結論に達しました。たぶん、C / C ++ MACROの魔法を使って、どういうわけか単純な(しかし素晴らしい)ロギングメカニズムを構築できるのではないかと思っていました。たとえば、次のマクロを使用して関数を呼び出すことができます。
関数呼び出しの前後にクロッキング/タイミングを追加して、CALL_FUNで呼び出されるすべての関数のタイミングを調整することができます。
変数t0、t1は、グローバルロギングオブジェクトで見つけることができます。そのロギングオブジェクトは、 CALL_FUNを介して呼び出された各関数の呼び出しグラフを保持することもできます。その後、そのオブジェクトを(特別にフォーマットされた)ファイルに書き込んで、他のプログラムから解析することができます。
それで、ここに私の(最初の)質問があります:このアプローチは扱いやすいと思いますか?はいの場合、それをどのように強化できますか?そうでない場合は、時間を測定してコールグラフを記録するためのより良い方法を提案できますか?
同僚は、この問題に対処するための別のアプローチを提案しました。これは、各関数(ログに記録する必要がある)に特定のコメントを付けることです。次に、makeプロセス中に、特別なプリプロセッサを実行し、各ソースファイルを解析し、ログに記録する関数ごとにログロジックを追加し、新しく追加された(解析)コードを使用して新しいソースファイルを作成し、代わりにそのコードをビルドする必要があります。CALL_FUN ...マクロ(私の提案)をあちこちで読むのは最善のアプローチではないと思います。彼のアプローチはこの問題を解決するでしょう。では、このアプローチについてどう思いますか?
PS:私はC / C ++マクロの落とし穴に精通していないので、これが別のアプローチを使用して開発できる場合は、そう言ってください。
ありがとうございました。
linux - CentosLinux5.5でcallgrindを使用する方法
callgrindプロファイラーを使用してC++プログラムのプロファイリングを試みています。Intel32ビットプロセッサのLinuxCentosバージョン5.5でValgrindバージョン3.6,1を使用しています。プログラムのプロファイルを作成しようとすると、次のエラー(以下に表示)が発生し続けます。私はすでにLinuxgprofを使用しましたが、有用なプロファイリング情報を提供しませんでした。何が間違っているのか、どのような回避策を使用すべきかを教えてください。ありがとうございました
valgrind --tool = callgrind --dump-instr = yes --simulate-cache-yes --collect-jumps = yes ./MatchUpAccurate.exe -input /home/frankc/DQTTest5/MatchUpTest/TestData/mdata2003.dbf -fileloc / home / frankc / DQTTest5 / MatchUpTest / TestData -version 15
== 25558 ==コールグラフ生成キャッシュプロファイラーであるCallgrind、== 25558 == Copyright(C)2002-2010、and GNU GPL'd、by Josef Weidendorfer et al。、== 25558 == Using Valgrind-3.6 .1およびLibVEX; 著作権情報の場合は-hを指定して再実行します。==25558==コマンド:./ MatchUpAccurate.exe -input /home/frankc/DQTTest5/MatchUpTest/TestData/mdata2003.dbf -fileloc / home / frankc / DQTTest5 / MatchUpTest / TestData -version 15、== 25558 ==、== 25558 ==インタラクティブな制御を行うには、「callgrind_control -h」を実行します。、memcpy、BB#486126、
Callgrind:jumps.c:164(new_jcc):アサーション'(0 <= jmp)&&(jmp <= from-> bb-> cjmp_count)' failed。、== 25558 == at 0x3801E4C8:report_and_quit(m_libcassert.c: 193)、== 25558 == by 0x3801E69C:vgPlain_assert_fail(m_libcassert.c:267)、== 25558 == by 0x3800FCD9:vgCallgrind_get_jcc(jumps.c:164)、== 25558 == by 0x38003534:vgCallgrind_p :217)、== 25558 == by 0x38001FDB:vgCallgrind_setup_bbcc(bbcc.c:844)、== 25558 == by 0x629B9E93:???、
スケジュールされたステータス:、running_tid = 1、
スレッド1:status = VgTs_Runnable、== 25558 == at 0xB64A30:memcpy(in /lib/libc-2.5.so)、== 25558 == by 0xC845D3:__pthread_initialize_minimal(in /lib/libpthread-2.5.so)、= = 25558 == by 0xC84217:??? (/lib/libpthread-2.5.so内)、== 25558 == by 0xC83DA7:??? (/lib/libpthread-2.5.so内)、== 25558 == by 0xAE2162:call_init(in /lib/ld-2.5.so)、== 25558 == by 0xAE228F:_dl_init(in /lib/ld-2.5 .so)、== 25558 == by 0xAD484E:??? (/lib/ld-2.5.so内)、
注:ソースディストリビューションのFAQも参照してください。これには、いくつかの一般的な問題の回避策が含まれています。特に、プログラムの問題を特定した後にValgrindが中止またはクラッシュした場合、それらの問題を修正するとValgrindの中止が防止される可能性があります。または、特にm_mallocfree.cで発生した場合は、クラッシュします。
それでも問題が解決しない場合は、このバグをwww.valgrind.orgに報告してください。
バグレポートで、上記のすべてのテキスト、valgrind、バージョン、および使用しているOSとバージョンを送信します。ありがとう。
c - callgrind を使用して、最も負荷の高い関数を特定する
ファイルで callgrind を使用したところ、callgrind の出力が得られました。次に、callgrind_annotate を使用して結果を読みやすい形式で取得し、それをテキスト ファイルに出力しました。この新しいファイルを解読して、どの機能が最も集中しているかを調べるにはどうすればよいですか? 左の Ir 列は何ですか? Ir は何の略ですか?
qt - Callgrind に Qt プロジェクトのソース コードへのアクセスを許可するにはどうすればよいですか?
Qt Creator を使用してデバッグ モードで Qt プロジェクトをビルドし、Callgrind を実行してプロファイリング データを生成し、それを Cachegrind にロードしてみました。Qt クラスのプロファイリング情報しか表示されないことに気付いたので、重要なフラグをオンにするのを忘れていたに違いないと考えました。
Qt Creator のqmake
コマンドは次のようになります。
1 つのファイルのコンパイル出力の例:
フラグがあるので、-g
デバッグ情報が利用できるはずです。実行可能ファイルで実行gdb
し、ランダムなソースコードをl
.
私が使用した Callgrind コマンドは次のとおりです。
ここで何が欠けていますか?
linux - 2 つの callgrind/valgrind プロファイルの違いを調べるツールはありますか?
さまざまなオプションで実行したときにプログラムのパフォーマンスがどのように変化するかを理解しようとしています.1.8 の係数を説明したいと思います. callgrind
[valgrind] のツールでプロファイリングを行っており、 kcachegrindを使用して結果を視覚化しています。しかし、私は本当に違いを見たいと思っています。プログラムを見つけましたcg_diff
が、callgrind プロファイルでは機能せず、cachegrind プロファイルでしか機能しません。これは収集するにはコストがかかりすぎます。
2 つのプロファイルの違いを視覚化するツールを知っている人はいますか?
valgrind - Callgrind を使用してマルチプロセス アプリケーションの単純なコールグラフを生成する方法は?
Valgrind Callgrind に問題があります。
アプリケーションのコール グラフを生成する必要がありますが、このアプリケーションは複数のプロセスを起動します。Valgrind の --trace-children=yes オプションを使用しましたが、いくつかの異なる callgrind 出力ファイルが生成されます。
これらのファイルを組み合わせて、呼び出しグラフを 1 つだけにする方法はありますか? 複数のファイルを結合するツールさえあれば完璧ですが、何も見つかりませんでした。
ありがとうございました
c++ - メインプログラムを再コンパイルせずに共有オブジェクトをプロファイリング
私は現在、PostgreSQL にロードするための共有ライブラリを開発しています (C 言語関数として、こちらを参照してください)。ここで、PostgreSQL 自体を再コンパイルせずに、このライブラリの関数をプロファイリングしたいと思います。
私はcallgrindを使ってみました
これにより、PostgreSQL 自体のプロファイリング情報が得られますが、関心のある共有ライブラリをログに記録できません。
も試しsprof
ましたが、それを機能させる方法がわかりません。
どんなアイデアでも高く評価されます。
PS: デバッガーでアプリケーションを一時停止することはお勧めしません。関数の実行時間が 0.01 秒をはるかに下回る場合、より詳細な結果が必要です。