您如何对重复的现实生活性能测量的分布进行数学建模 - “现实生活”意味着您不仅仅是循环有问题的代码,而且它只是在典型用户场景中运行的大型应用程序中的一个简短片段?
我的经验表明,平均执行时间通常会出现峰值,可以使用高斯分布对其进行充分建模。此外,还有一个包含异常值的“长尾”——通常是平均时间的倍数。 (考虑到导致首次执行处罚的因素,这种行为是可以理解的)。
My goal是对合理反映这一点的聚合值进行建模,并且可以根据聚合值进行计算(就像高斯分布一样,根据 N、值之和和平方和计算 mu 和 sigma)。换句话说,重复次数是无限的,但内存和计算要求应最小化。
正态高斯分布无法正确地对长尾进行建模,并且即使只有极小比例的异常值,平均值也会产生很大的偏差。
我在寻找想法,特别是如果之前已经尝试过/分析过的话。我检查了各种分布模型,并且我认为我可以解决一些问题,但我的统计数据已经生锈,我最终可能会得到一个夸大的解决方案。哦,完整的收缩包装解决方案也很好;)
其他方面/想法:有时您会得到“两个驼峰”分布,这在我的场景中是可以接受的,单个 mu/sigma 覆盖这两个分布,但理想情况下可以单独识别。
推断这一点,另一种方法是“浮动概率密度计算”,仅使用有限的缓冲区并自动调整范围(由于长尾,垃圾箱可能不会均匀间隔) - 没有找到任何东西,但有一些关于分布的假设原则上应该是可能的。
Why(既然有人问了)-
对于复杂的流程,我们需要做出保证,例如“只有0.1%的运行超过3秒的限制,平均处理时间为2.8秒”。独立代码段的性能可能与正常的运行时环境有很大不同,涉及不同级别的磁盘和网络访问、后台服务、一天内发生的计划事件等。
这可以通过累积来轻松解决all数据。然而,为了在生产中积累这些数据,产生的数据需要受到限制。对于孤立的代码片段的分析,高斯偏差加上首次运行惩罚是可以的。这对于上面找到的发行版不再适用。
[edit]我已经得到了非常好的答案(最后 - 也许 - 一些时间来解决这个问题)。我正在开始悬赏以寻找更多的意见/想法。