4

Linuxでのミューテックス、セマフォなどのロックとロック解除などの同期操作のプロファイルを作成したいと思います。

私はそれらがfutexを使用して実装されていることを知っているので、futexのロックとロック解除のプロファイルを作成するだけで十分かもしれません(ここで間違っている場合は修正してください)。futex操作は通常ユーザースペースで発生するため、私の質問はそれをどのようにプロファイリングするかです。これをプロファイリングできるツールはありますか?

私は基本的に、futexと周波数をロックする関数を知ることに興味があります。

4

1 に答える 1

2

あなたはvalgrindに興味があるかもしれません、そしてそれはツールcallgrindです。

valgrind --trace-children=yes --tool=callgrind -v ./program

それは、とりわけ、各関数で経過した時間の量とともに、詳細なコールグラフをファイルに生成します。

次に、データを視覚化するための優れたUIであるkcachegrindを使用してこれらすべてを確認できます。

kcachegrind

これにより、pthread_mutex_lock()(またはその他)を呼び出したすべての関数と、その中で上位の関数を時間の割合で確認できます...

callgrindの最も関連性のある部分は、最もCPU時間を費やした関数を調べるだけでよいため、シングルスレッドプログラムのボトルネックを簡単に見つけることができることです。

マルチスレッドプログラムでは、何かを長時間待機する関数(ミューテックス)は正常な状態であるため、より困難です。

valgrindのツールHelgrindを使用することもできます。これは、ミューテックスの使用におけるエラー(潜在的なデッドロックまたは潜在的なデータ競合)を見つけるのに役立ちます。

同期とデータアクセスの直列化可能性の適合性を分析することにより、同期関数への呼び出しと読み取り/書き込みデータを分析して、潜在的な問題(1000000を超える1回発生する可能性のある問題)を検出すると思います。(繰り返します:私は推測します)。

valgrind --tool=helgrind --suppressions=$PWD/supp --gen-suppressions=yes --db-attach=yes --track-lockorders=no ./program

そしてvalgrindのコア機能:メモリリークのチェック:

valgrind --leak-check=yes -v --db-attach=yes ./program
于 2011-09-30T17:15:16.373 に答える