EN JA
LOCK_PROFILING(9)
LOCK_PROFILING(9) FreeBSD Kernel Developer's Manual LOCK_PROFILING(9)

名称

LOCK_PROFILINGカーネルロックプロファイルのサポート

書式

options LOCK_PROFILING

解説

LOCK_PROFILING カーネルオプションは、ロックの使用と競合の統計を測定して、報告するサポートを追加します。これらの統計は、“獲得ポイント”によって照合されます。獲得ポイントは、ロックが獲得されるところの (ソースファイル名と行番号で識別される) カーネルソースコードの区別される場所です。

それぞれの獲得ポイントについて、次の統計が累算されます:

  • 最も長い時間ロックは、現時点で獲得された後ずっと絶え間なく保持されます。
  • 合計時間ロックは、現時点で獲得された後に保持されます。
  • スレッドが、ロックを獲得するためにウェート (待ち) に費やされた合計時間。
  • 非再帰的な獲得の合計数。
  • 時間ロックの合計数は、スピンまたはスリープを必要とする、この時点に到達したとき、別のスレッドによって既に保持されています。
  • 現時点で獲得された後に保持されている間のロックを獲得するために試みた別のスレッドの時間の合計数。

さらに、保持時間の平均とウェート時間の平均は、それぞれ合計の保持時間と合計のウェート時間と獲得の数から導き出されます。

また、 LOCK_PROFILING カーネルオプションは、プロファイルコードを制御して、モニタするために次の sysctl(8) 変数を追加します:

debug.lock.prof.enable
ロックプロファイルコードを有効にするか、または無効にする。このデフォルトは 0 (オフ) です。
debug.lock.prof.reset
現在のロックプロファイルバッファをリセットします。
debug.lock.prof.stats
単純なテキストでの実際のプロファイル統計。カラムは、左から右に、次の通りです:
max
マイクロ秒単位の最も長い連続した保持時間。
wait_max
マイクロ秒単位の最も長い連続したウェート (待ち) 時間。
total
マイクロ秒単位の合計の (累積) 保持時間。
wait_total
マイクロ秒単位の合計 (累積) ウェート (待ち) 時間。
count
獲得の合計数。
avg
合計保持時間と獲得の数から導き出されたマイクロ秒単位の保持時間の平均。
wait_avg
合計のウェート時間と獲得の数から導き出されたマイクロ秒単位のウェート時間の平均。
cnt_hold
時間ロックの数は、保持され、別のスレッドは、ロックを獲得することを試みました。
cnt_lock
時間ロックのは、この時点に到達したとき、既に保持されています。
name
ソースファイル名と行番号から導き出された獲得ポイントの名前には、括弧で括られたロックの名前が続きます。
debug.lock.prof.rejected
テーブルが満たされた後に無視された獲得ポイントの数。
debug.lock.prof.skipspin
スピンロックのためのロックのプロファイイリングのコードを無効にするかまたは有効にします。これは、デフォルトで 0 (スピンロックのためにプロファイリングを行う) です。
debug.lock.prof.skipcount
およそ N 個のロック獲得のサンプリングを行います。

関連項目

sysctl(8), mutex(9)

歴史

Mutex プロファイルのサポートは FreeBSD 5.0 で登場しました。一般化されたロックプロファイルのサポートは FreeBSD 7.0 で登場しました。

作者

MUTEX_PROFILING のコードは Eivind Eklund <eivind@FreeBSD.org>, Dag-Erling Smørgrav <des@FreeBSD.org>と Robert Watson <rwatson@FreeBSD.org>によって書かれました。 LOCK_PROFILING コードは Kip Macy <kmacy@FreeBSD.org>によって書かれました。このマニュアルページは Dag-Erling Smørgrav <des@FreeBSD.org>によって書かれました。

LOCK_PROFILING オプションは、 struct lock_object のサイズを増加させるので、そのオプションで構築されたカーネルは、それなしで構築されたモジュールで動作しません。

また、 LOCK_PROFILING オプションは、かなり厳しいパフォーマンスに不利な結果をもたらすかもしれない、ミューテックスコードのインライン化を防ぎます。しかしながら、これは、いつもそうであるというわけではありません。 LOCK_PROFILING は、他のプロファイルツールを使用して容易にモニタされるかなりの性能のオーバヘッドを招くかもしれないので、プロファイルツールを LOCK_PROFILING と組み合わせることは推薦されません。

測定は、(同期された TSC のないアーキテクチャで) nanotime(9) で使用してナノ秒単位で行われ、格納されますが、マイクロ秒単位で提示されます。これは、 (長く保持され、そして/または、しばしば取得される) プロファイルに最も関心がある 1 つのロックにまだ十分であるべきです。

結果が機能の間の相互作用によって強く影響されるとき、一般的に、他のデバッグオプションと組み合わせて LOCK_PROFILING を使用するべきではありません、特に、 INVARIANTS が存在しているとき起こる特別のロックのために INVARIANTS で実行されるとき、 LOCK_PROFILING は、通常の uma(9) ロックコンテンション (contention) より高く報告します。同様に、 WITNESS と組み合わせてそれを使用することは、出力のプロファイルで、はるかに高いロック保持時間とコンテンションとなります。

March 7, 2012 FreeBSD