2

ミューテックスによってOSに与えられた時間を測定する方法は? 主な目標は、スレッドを最長時間ブロックするミューテックスを検出することです。

PS: oprofile を試してみました。vmlinux/.poll_idle 内で費やされた時間の 30% がレポートされます。アプリはそのコアの 100% を使用するように設計されているため、これは予期しないことです。したがって、ミューテックスを待っている間に時間がOSに返され、oprofileがそれをIDLE時間として報告しているのではないかと思います。

4

4 に答える 4

3

プロフィール。

質問が「実際に[最も|最小]時間がかかるのは?」という場合はいつでも、答えは常に「調べるプロファイル」です。

于 2009-08-06T12:57:59.933 に答える
1

提案どおり - プロファイルしますが、何を測定するかを決定する前に、経過時間 (スレッドがブロックされた時間) またはユーザー/カーネル時間 (同期の実行にかかった時間) を決定します。さまざまなシナリオで、どちらか一方、または両方を測定したい場合があります。

于 2009-08-06T13:04:02.357 に答える
0

たとえば、Linux でOProfileを使用して、プログラムのプロファイルを作成できます。次に、結果を除外して、pthread_mutex_lock()各ミューテックス、またはロックを実行する上位レベルの関数に費やされた時間を調べます。プログラムは、ミューテックスが取得されるまでロック関数呼び出し内でブロックされるため、その関数で費やされた時間をプロファイリングすると、どのミューテックスが最も高価であるかがわかります。

于 2009-08-06T13:39:33.857 に答える
0
start = GetTime();
Mutex.Lock();
stop = GetTime();

elapsedTime = stop - start;

elaspedTime は、ミューテックスを取得するのにかかった時間です。小さい値よりも大きい場合は、別のスレッドがミューテックスを持っているためです。これは、OS がミューテックスを保持している期間を示すのではなく、別のスレッドがミューテックスを保持していることのみを示します。

于 2009-08-06T15:06:30.377 に答える