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 选项的值。请使用 hz 后缀。