Solaris 動的トレースガイド

投機の破棄

投機を破棄するには、discard() 関数を使用します。投機バッファーを破棄すると、その内容が失われます。投機が discard() を呼び出した CPU 上でのみアクティブになっている場合は、破棄された投機バッファーをその後の speculation() 呼び出しですぐに使用できます。投機が複数の CPU 上でアクティブになっている場合は、discard() を呼び出したあと、破棄された投機バッファーをその後の speculation() 呼び出しで使用できるようになるまで、少し時間がかかります。ある CPU 上で discard() が呼び出されたあと、破棄された投機バッファーをその後の speculation で使用できるようになるまでの時間が、クリーンアップレートで指定された時間より長くなることはありません。speculation() を呼び出したときに、すべての投機バッファーが破棄またはコミットされた状態で、使用可能なバッファーがまったく存在しない場合は、次のような dtrace メッセージが表示されます。


dtrace: 905 failed speculations (available buffer(s) still busy)

投機バッファー数やクリーンアップレートをチューニングすれば、すべてのバッファーが同時に使用不能状態になるのを防ぐことができます。詳細については、「投機オプションとチューニング」を参照してください。