0

ミリ秒レベルで実行されている広告を監視するツールまたは方法を教えてください。ありがとう。

3 つのスレッドが実行されていて、以下のような情報が必要だとします。

 0 - 20ms  thread1 
20 - 40ms  thread2 
40 - 50ms  thread1 
50 - 70ms  thread3 

注: カーネルをハッキングせずにこの問題を解決することをお勧めします。

編集 :

  1. 2.6.21 Linux カーネルを使用する MIPS プラットフォームで

  2. コマンド TOP はスレッドに関する情報を提供できますが、それほど多くはありません。

4

4 に答える 4

3

適切に構成されたカーネルを使用して、 LTTngを使用してスケジューリング アクティビティを追跡できます (他の多くのことと一緒に!)。

そうは言っても、私はあなたの厄介なリンクを見ました-あなたの本当の問題は、書き込みスレッドが読み取りスレッドをブロックしているようですよね? 検討すべきことの 1 つは、同時読み取りと書き込みをサポートするデータベースを使用することです。または、ロック プロトコルを使用して、読み取りスレッドがアクティブなときに書き込みスレッドをブロックします。

たとえば、ミューテックス、condvar、および want_read 値を持つことができます。各書き込みの前に、書き込みスレッドはミューテックスを取得し、wants_read 値をチェックします。ゼロ以外の場合、condvar でブロックされます。一方、読み取りスレッドは、開始時にミューテックスの下で wants_read をインクリメントし、完了するとデクリメントして condvar でブロードキャストします。これにより、読み取りスレッドが必要なときに安全になるとすぐに、書き込みスレッドがブロックされます。

于 2009-07-29T02:35:48.213 に答える
1

Intel Concurrency Checkerは Windows と Linux で動作します。使っていないので詳しくはわかりませんが、性能測定はしてくれると聞いています。試してみる価値があるかもしれません。

于 2009-07-29T16:31:17.590 に答える
1

コメントで言及した特定の問題については、usleep のないスレッドはスレッドをビジーにし、プロセッサ リソースの多くを消費します。その後、データベース検索の応答が遅くなります。

一般的なこととして、スレッド スケジュール シーケンスを確認したいが、LTTNG のインストールに手間をかけたくない場合は、私が使用したトリックを使用できます。open、close、time with invalid parameter などの単純な syscall をスレッドのキー パスに追加します (これは、printf に比べてオーバーヘッドが低く、printf はスレッド ロックに関係する場合があります)。その後、strace ツールを使用してこれらすべてのスレッドを追跡できます。strace ログを確認すると、他のスレッドがスケジュールされているときにそれらがスケジュールされていることがわかります。次に、スレッドが実行するのに最も時間がかかるのは何か、システムの時間が最もかかるのはどのスレッドかについての一般的な考えを得ることができます。

Lttng は、うまく機能する場合にのみ、このような問題に最適なツールです。

于 2009-07-29T12:03:04.973 に答える
0

Performance Inspectorツールを見てみましょう。

于 2009-07-29T02:50:40.203 に答える