2009-08-06 2 views
2

ミューテックスがOSに与える時間の測定方法は?主な目的は、最も長い時間スレッドをブロックするmutexを検出することです。どのミューテックスがOSに最大の時間を与えるかを検出する方法はありますか?

PS:私はoprofileを試しました。 vmlinux/.poll_idle内で費やされた時間の30%を報告します。これは、アプリがそのコアの100%を占めるように設計されているため、予期せぬことです。したがって、私はいくつかのミューテックスを待っている間にOSに戻され、oprofileはそれをIDLE時間として報告すると考えています。

+0

あなたはもっと具体的になることができますか?私はあなたの目標がいくつかのシステムを最適化することであり、いくつかの利益を得るためにミューテックスを探していることを理解しています。ミューテックスから与えられた時間はどういう意味ですか?いくつかのオペレーティングシステムのコンテキストで、またはオペレーティングシステムのパフォーマンスとスケーラビリティにおいて、自分のアプリケーションからのミューテックスのオーバーヘッドに興味がありますか?どのOS?いくつかのOSには良いツールが付属しているからです。 – Adriaan

+0

どのオペレーティングシステムですか? –

+0

Linux [15 char pad] –

答えて

4

プロファイル。

は実際にに[ほとんど|少なくとも]時間がかかりますか?」という質問が出るときはいつでも、答えは「プロファイルを見つける」です。

+0

このタスクに適切なプロファイラを提案できますか?私はOPが本当に求めていたものだと考えています。たとえば、Oprofileやcallgrindは、おそらくこの種のものを測定するのには役に立ちません。私が間違っていれば訂正してください。 intelとamdのプロファイラーは良いかもしれませんが、私はそれらを試したことはありません。だから私はその質問についても好奇心が強いのです。 – tsg

+0

オペレーティングシステムとコンパイラによって異なります。 –

1

提案されているように、何を測定したいかを決定する前に、経過時間(スレッドがブロックされた時間)、またはユーザー/カーネルの時間(同期を実行するのにかかる時間)。異なるシナリオでは、どちらか一方、または両方を測定することができます。

0

あなたのプログラムは、linuxでOProfileと言っています。次に、結果を除外して、各ミューテックス、またはロックを実行する上位レベルの機能に対して、pthread_mutex_lock()の時間を調べます。 mutexが獲得されるまで、プログラムはロック関数呼び出しの中でブロックするので、その関数で費やされた時間をプロファイリングすると、どのmutexがもっとも高価であるかを知ることができます。

0
start = GetTime(); 
Mutex.Lock(); 
stop = GetTime(); 

elapsedTime = stop - start; 

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

関連する問題