Solaris 動的トレースガイド

switch ポリシー

主バッファーには、デフォルトで、switch バッファーポリシーが設定されています。このポリシーでは、CPU 単位のバッファーのペアが割り当てられます。 ペアの一方はアクティブなバッファー、もう一方はアクティブでないバッファーです。DTrace コンシューマがバッファーを読み取ろうとすると、カーネルはまず、アクティブでないバッファーとアクティブなバッファーの切り替えを行います。バッファーの切り替えは、ウィンドウ内のトレースデータが失われる可能性がない状態で行われます。バッファーの切り替えが完了すると、新たにアクティブでなくなったバッファーが DTrace コンシューマにコピーされます。このポリシーにより、コンシューマは常に、自己矛盾のないバッファーを認識するようになります。 1 つのバッファーのトレースとコピーが同時に行われることはありません。この方法で、ウィンドウ内でのトレースの一時停止や、トレース不能状態の発生を回避することもできます。バッファーの切り替えと読み取りのレートは、switchrate オプションにより、コンシューマ側で制御します。 switchrate では、その他のレートオプションと同じく、任意の時間接尾辞を指定できます。デフォルトでは、秒当たりのレートが設定されます。switchrate とその他のオプションの詳細については、第 16 章オプションとチューニング可能パラメータを参照してください。


注 –

主バッファーをユーザーレベルでデフォルトのレート (1 秒に 1 回) より速いレートで処理するときは、switchrate の値を調整してください。主バッファー内の対応するレコードが処理されるときに、ユーザーレベルのアクティビティーを引き起こすアクション (printa()system() など) が処理されます。switchrate の値によって、そのようなアクションが処理されるレートが決まります。


switch ポリシーでは、指定の有効なプローブがアクティブな主バッファー内の使用可能な空間に収まりきらない量のデータをトレースしようとした場合、そのデータが落とされ、CPU 単位の欠落カウントが増分されます。1 回以上欠落が発生すると、dtrace(1M) により、次のようなメッセージが表示されます。


dtrace: 11 drops on CPU 0

合計バッファーサイズより大きいレコードは、バッファーポリシーに関係なく落とされます。欠落の発生を予防するには、bufsize オプションで主バッファーのサイズを大きくするか、switchrate オプションで切り替えレートを上げます。

switch ポリシーでは、アクティブなバッファーから copyin()copyinstr()alloca() にスクラッチ空間が割り当てられます。