Solaris 动态跟踪指南

放弃推理

可使用 discard() 函数放弃推理。放弃推理缓冲区时,其中的内容将被丢弃。如果推理仅在调用 discard() 的 CPU 中处于活动状态,则后续对 speculation() 的调用将可以立即使用该缓冲区。如果推理在多个 CPU 中处于活动状态,则在调用 discard() 之后的某个时间,后续 speculation() 将可以使用放弃的缓冲区。在一个 CPU 中执行 discard() 之后到后续推理操作可以使用缓冲区之间的时间肯定不长于清除速率指定的时间。如果在调用 speculation() 时,因为所有推理缓冲区当前都正在被放弃或提交,而没有可用的缓冲区,将会生成与以下示例类似的 dtrace 消息:


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

可以通过调整推理缓冲区的数量或清除速率,来降低所有缓冲区都不可用的可能性。有关详细信息,请参见推理选项和调整