機械翻訳について

Lockstatプロバイダ

lockstatプロバイダは、ロックの使用状況および競合の調査に使用できるプローブを提供します。

lockstatプローブ

すべてのlockstatプローブについて、モジュール名はvmlinuxで、関数名は空の文字列です。

ロックは次のように分類されます:

  • スピン: これは、競合がある場合にスピン待機です。

  • アダプティブ: 競合がある場合は、スピン待機またはブロックのいずれかです。

  • Readers-writer

次のプローブは、ロックが取得または解放されると起動します:

  • spin-acquire.

  • spin-release.

  • adaptive-acquire.

  • adaptive-release.

  • rw-acquire.

  • rw-release.

ロックの競合が発生し、プローブが有効になっている場合は、ロックが取得される前に次のプローブが起動します:

  • spin-spin.

  • adaptive-block, adaptive-spin. 使用される待機に応じて、一方のプローブが起動するか、もう一方のプローブが起動します。

  • rw-spin.

最後に、adaptive-acquire-errorプローブは、適応ロックの取得中にエラーが発生しました。

lockstatプローブの引数

次の表に、lockstatプローブの引数の型を示します。 argNは実装固有です。 args[]を使用して、プローブ引数にアクセスします。

表9-6 lockstatプローブの引数

プローブ args[0] args[1] args[2]

adaptive-acquire

struct mutex *

-

-

adaptive-acquire-error

struct mutex *

int

-

adaptive-block

struct mutex *

uint64_t

-

adaptive-release

struct mutex *

-

-

adaptive-spin

struct mutex *

uint64_t

-

rw-acquire

struct rwlock *

int

-

rw-release

struct rwlock *

int

-

rw-spin

struct rwlock *

uint64_t

int

spin-acquire

spinlock_t *

-

-

spin-release

spinlock_t *

-

-

spin-spin

spinlock_t *

uint64_t

-

ノート:

args[0]には、問題のロックへのポインタがあります。 競合が発生した場合に起動するプローブは、uint64_t args[1](ナノ秒単位の待機時間)をレポートします。 rwプローブは、RW_READERまたはRW_WRITERのいずれかのintもレポートします。 最後に、adaptive-acquire-errorは、ゼロ以外のエラーでintを報告します。

lockstatの例

次の例は、lockstatプロバイダによって公開されるプローブの使用を示しています。

アダプティブ・アク・ワイアとスピン・アク・ワイア

次のDソース・コードを入力し、whatlock.dという名前のファイルに保存します:

lockstat:::spin-acquire,
lockstat:::adaptive-acquire
/pid == $target/
{
  @locks[probename] = count();
}

sudo dtrace -qs whatlock.d -c dateを使用して、dateコマンドでプログラムを実行します。 Dの出力は次のようになります:

 adaptive-acquire                                                  6
 spin-acquire                                                    134

dateコマンドで非常に多くのロックが取得されることは驚くべきことです。 多数のロックは、Oracle Liuxカーネルなどのスケーラブルなシステムに必要なファイングレイン・ロックの自然なアーティファクトです。

lockstatの安定性

lockstatプロバイダは、DTraceの安定性メカニズムを使用してその安定性を記述します。 これらの値を次の表に示します。

要素 名前の安定性 データの安定性 依存クラス

プロバイダ

発展中

発展中

ISA

モジュール

非公開

非公開

不明

関数

非公開

非公開

不明

名前

発展中

発展中

ISA

引数

発展中

発展中

ISA