Solaris 动态跟踪指南

fill 策略和 END 探测器

在 DTrace 使用者显式停止跟踪之前,END 探测器通常不会触发。END 探测器一定仅在一个 CPU 中触发,而且是将触发探测器的未定义的 CPU。使用 fill 缓冲区时,如果至少有一个每 CPU 主体缓冲区标记为已填充,便会显式停止跟踪。如果选择了 fill 策略,则 END 探测器可能在有已填充缓冲区的 CPU 中触发。为了适应 fill 缓冲区中的 END 跟踪,DTrace 将计算 END 探测器可能使用的空间的数量,然后从主体缓冲区的大小中减去此空间。如果净大小为负数,DTrace 将拒绝启动,dtrace(1M) 将输出相应的错误消息:


dtrace: END enablings exceed size of principal buffer

预留空间机制可确保,对于任何 END 探测器,整个缓冲区始终有足够的空间。