「適応型ロック」は、クリティカルセクションに対する相互排他ロックです。このロックは、ほとんどのカーネルコンテキストで獲得可能です。また、コンテキスト制限がほとんどないので、Solaris カーネル内の同期プリミティブの大部分に対応しています。これらのロックは、競合に対する動作に適応性があります。 スレッドは、獲得しようとする適応型ロックがすでに所有されているとき、ロックを所有しているスレッド (所有スレッド) が CPU 上で実行中であるかどうかを確認します。所有スレッドが別の CPU 上で実行中であれば、このスレッド (ロックを獲得しようとしているスレッド) は「スピン」します。所有スレッドが実行中でなければ、「ブロック」されます。
適応型ロック関連の lockstat プローブは、表 18–1 に示すとおり 4 種類あります。これらの各プローブの arg0 には、適応型ロックに相当する kmutex_t 構造体へのポインタが格納されます。
表 18–1 適応型ロックプローブ
adaptive-acquire |
適応型ロックの獲得後すぐに起動する保持イベントプローブ。 |
adaptive-block |
保持されている適応型相互排他ロックでブロックされたスレッドが再起動し、この相互排他ロックを獲得したあと起動する競合イベントプローブ。adaptive-acquire と adaptive-block の両方が有効なときは、adaptive-block のほうが先に起動します。1 回のロック獲得で adaptive-block と adaptive-spin の両方のプローブが起動することもあります。adaptive-block の arg1 には、スリープ時間 (ナノ秒単位) が入ります。 |
adaptive-spin |
保持されている適応型相互排他ロックでスピンしたスレッドが、この相互排他ロックを正常に獲得したあと起動する競合イベントプローブ。adaptive-acquire と adaptive-spin の両方が有効なときは、adaptive-spin のほうが先に起動します。1 回のロック獲得で adaptive-block と adaptive-spin の両方のプローブが起動することもあります。adaptive-spin の arg1 には、「スピン時間」が入ります。スピン時間とは、ロックが獲得されるまでスピンループで消費されたナノ秒数を示す値です。 |
adaptive-release |
適応型ロックの解放後すぐに起動する保持イベントプローブ。 |