Solaris 動的トレースガイド

投機のコミット

投機のコミットは、commit() 関数を使って行います。投機バッファーをコミットすると、そのデータが主バッファーにコピーされます。指定した投機バッファーに、主バッファーには収まり切らない量のデータが含まれている場合、データはコピーされず、バッファーの欠落カウントの値が大きくなります。バッファーを複数の CPU 上で投機的にトレースした場合、コミットされた CPU 上の投機データはすぐにコピーされますが、その他の CPU 上の投機データは、commit() の実行後しばらくしてからコピーされます。したがって、ある CPU 上で commit() の実行が開始されてから、投機バッファー内のデータがすべての CPU 上の主バッファーにコピーされるまでには、少し時間がかかります。ただし、クリーンアップレートで指定された時間より長くなることはありません。詳細については、「投機オプションとチューニング」を参照してください。

コミットされた投機バッファーをその後の speculation() 呼び出しで使用することはできません。使用したい場合は、各 CPU の投機バッファーを対応する CPU の主バッファーに完全にコピーする必要があります。同様に、コミットされたバッファーに対するその後の speculate() 呼び出しは、サイレントモードで破棄されます。したがって、その後の commit() 呼び出しや discard() 呼び出しは、何のメッセージも出さずに異常終了します。結局、commit() が含まれる節に、データ記録アクションを含めることはできません。しかし、同じ節に複数の commit() 呼び出しを含めて、複数のバッファーをばらばらにコミットすることは可能です。