我在几篇关于分析应用程序的帖子中看到了这个术语,但我不明白它实际意味着什么以及它如何影响分析结果。
我见过它here for dtrace:
当捕获内核堆栈时,速率也增加到199赫兹 比用户级堆栈便宜得多。奇数编号,99 和199,用于避免与其他活动同步采样 并产生误导性的结果。
-F 99:99赫兹的样品(每秒样品)。我有时会比这更快地采样(高达999赫兹),但这也会花费很多成本。 99 赫兹应该可以忽略不计。此外,价值' 99'而不是' 100'是的 避免锁步采样,这可能会产生偏差的结果。
从我所看到的,所有剖析器都应该避免锁步采样,因为结果可能是"偏斜"和"误导"但我不明白为什么。我想这个问题适用于所有的分析器,但我对linux上的perf感兴趣。
答案 0 :(得分:4)
锁步采样是指分析样本与应用程序中的循环频率相同的情况。结果是样本经常出现在循环中的相同位置,因此它会认为该操作是最常见的操作,并且可能是瓶颈。
如果您试图确定道路是否会出现拥堵,并且每隔24小时对其进行一次采样,则可以进行类比。该样本很可能与流量变化保持同步;如果是在上午8点或下午5点,它将与高峰时间一致,并得出结论:道路非常繁忙;如果是凌晨3点,它将得出结论,根本没有任何流量。
为了准确采样,需要避免这种情况。理想情况下,样本应该比应用程序中的任何周期更频繁,或者以随机间隔,以便在任何特定操作中发生的机会与操作所花费的时间量成比例。但这通常是不可行的,因此下一个最好的事情是使用与程序周期的可能频率不一致的采样率。如果程序中有足够的循环,这应该确保样本在每个循环开始时以不同的偏移量发生。
将此与上述类比相关,每天23小时或每天随机抽样将导致样本最终遇到一天中的所有时间;每23天的样本周期将包括一天中的所有小时。这样可以更全面地了解流量水平。每小时一次采样将在短短几周内提供完整的图像。
我不确定为什么奇数频率可能会确保这一点。它似乎是基于一个假设,即程序操作有固有的频率,这些都是偶数。