21

コードにロック競合ポイントがあるかどうかを確認するために、pthread ミューテックスをプロファイリングする方法を知りたいです。(論争の的となるコードが好きな人はいますよね? :) 私はここで述べたように、コードのより一般的なプロファイリングを行う方法を知っています。しかし、問題のある領域があるかどうかを確認するためにミューテックス ロックの競合に関するメトリック/統計情報を提供する、ミューテックス ロックをプロファイルできるツールまたはオプションがあるかどうかを知りたいです。

背景とコンテキストは次のとおりです。

最近、Cavium Octeon CPU を使用した組み込み C++ プロジェクトに取り組みました。Octeon SDK は、スピンロックを使用してミューテックス スタイルの同期を実装します。Octeon のドキュメントを調べたところ、スピンロックのプロファイルを作成して、ロックが使用可能になるのを待っている間に各スピンロックが何回スピンしなければならなかったかを確認できる方法を見つけました。これを使用するには、条件付きコンパイルを実行する必要があり、スピンロックがスピンするたびにカウンターがインクリメントされ、スピナーの待機値を照会できました。そこで、スピンロックをカプセル化し、システムで使用されるすべてのスピンロックのスピンロック スピナー待機値をダンプする機能を追加しました。実際の値はあまり意味がありませんでしたが、残りの値と比較して非常に高い値がいくつかあり、それらの競合を減らすことに焦点を当てました.

スピンごとの単なるカウンターであるため、これはおそらくスピンロックにとって非常に簡単であることはわかっていますが、関連する pthread のマニュアルページとヘッダーファイルを読んでも、似たようなものは見つかりませんでした.pthread ミューテックスに利用できるものはありますか?

各ロックの前後に時間をかけるようなハックなことをする必要は本当に避けたいです。

PS: ミューテックスの複数形は何ですか? ミューテックス、ミューテックス、ミューテックス、ムーティ??? ミューテックスは私には正しく聞こえませんでした。

4

5 に答える 5

15

valgrindツールdrdを使用すると、エラーを報告する前にロックを待機する時間の制限を指定できます。

このサイトは、あなたが探しているツールのようなものdrdと呼ばれる独自のツールについて言及し、また言及しています。mutraceそれはあなたに伝えます:

  • ミューテックスがロックされた回数
  • ミューテックス所有スレッドが変更された回数
  • ミューテックスが競合した回数 (ロック要求が行われたときに既にロックされている)
  • ミューテックスがロックされていた期間に関するさまざまな統計

例えば

mutrace: 10 most contended mutexes:

 Mutex #   Locked  Changed    Cont. tot.Time[ms] avg.Time[ms] max.Time[ms]       Type
      35   368268      407      275      120,822        0,000        0,894     normal
       5   234645      100       21       86,855        0,000        0,494     normal
      26   177324       47        4       98,610        0,001        0,150     normal
      19    55758       53        2       23,931        0,000        0,092     normal
      53      106       73        1        0,769        0,007        0,160     normal
      25    15156       70        1        6,633        0,000        0,019     normal
       4      973       10        1        4,376        0,004        0,174     normal
      75       68       62        0        0,038        0,001        0,004     normal
       9     1663       52        0        1,068        0,001        0,412     normal
       3   136553       41        0       61,408        0,000        0,281     normal
     ...      ...      ...      ...          ...          ...          ...        ...

mutrace: Total runtime 9678,142 ms.
于 2012-06-01T15:29:22.897 に答える
3

あなたはあなたのOSについて言及していませんでした。Linux の場合、この種のプロファイリングにはLTTをかなり使用しました。次の 2 つのモードで役立ちます。

  1. パフォーマンス プロファイリング -- たとえば、システムを N 秒間標準的に使用してプロファイリングし、データを分析します。

  2. 例外プロファイリング -- たとえば、「フライト レコーダー」モードで 24 時間実行し (アクティビティの最後の N 秒間を記録)、例外的な条件でフライト レコーダーの停止をトリガーします。翌朝来て、データを分析します。

私は何年もの間、文句なしに「ミューテックス」をミューテックスの複数形として使用し、見てきました。;>

于 2012-06-01T15:21:12.947 に答える
3

同じユースケースを探しているときに「mutrace」を見つけました。私はまだそれを使用していませんでした。valgrind のように実行時間に影響を与えないので良さそうです。

于 2012-08-14T07:15:21.603 に答える
2

Intel VTune も試してみてください。各同期プリミティブの待機時間と待機カウントもコール スタックと共に報告します。このドキュメントを調べて、これが探しているものかどうかを確認してください http://software.intel.com/sites/products/documentation/hpc/amplifierxe/en-us/2011Update/lin/start/analyzing_locks_linux.pdf

于 2012-06-05T10:53:37.370 に答える
0

6年以上経ちましたが、参考までに、ミューテックスの競合を示すオフCPUタイムトレースの別のリンクを追加したいと思います. http://www.brendangregg.com/offcpuanalysis.html

于 2018-12-04T06:33:41.387 に答える