Solaris 動的トレースガイド

投機オプションとチューニング

投機トレースアクションの実行時に投機バッファーがいっぱいになっていると、このバッファーには何のデータも格納されず、欠落カウントの値が大きくなります。この場合、次のような dtrace メッセージが表示されます。


dtrace: 38 speculative drops

投機欠落が起こっても、投機バッファーのコミット時には、バッファーの内容がすべて主バッファーにコピーされます。同様に、破棄された投機バッファーで欠落が発生した場合でも、投機欠落が発生します。投機欠落を防ぐには、specsize オプションを使って、投機バッファーのサイズを大きくします。specsize オプションには、任意のサイズ接尾辞を付けることができます。投機バッファーのサイズ変更ポリシーは、bufresize オプションで指定します。

speculation() の呼び出し時に、投機バッファーが使用不能になっていることもあります。まだコミットされておらず、破棄されてもいないバッファーが存在する場合、次のような dtrace メッセージが表示されます。


dtrace: 1 failed speculation (no speculative buffer available)

この種の投機の失敗を防ぐには、nspec オプションを使って、投機バッファー数を増やします。nspec のデフォルト値は 1 です。

すべての投機バッファーがビジー状態になっている場合も、speculation() は失敗します。この場合、次のような dtrace メッセージが表示されます。


dtrace: 1 failed speculation (available buffer(s) still busy)

ある投機バッファーの commit() が呼び出されたあと、このバッファーの内容がまだすべての CPU でコミットされていないのに speculation() が呼び出されたことがわかります。この種の投機の失敗を防ぐには、cleanrate オプションを使って、CPU のクリーンアップレートの値を大きくします。cleanrate のデフォルト値は 101hz です。


注 –

cleanrate オプションの値は、1 秒あたりの回数で指定する必要があります。接尾辞 hz を使用します。