您将如何对重复的真实性能测量的分布进行数学建模--“真实生活”意味着您不只是遍历所讨论的代码,而只是在典型用户场景中运行的大型应用程序中的一小段代码?
我的经验表明,通常在平均执行时间附近有一个峰值,可以用高斯分布对其进行充分建模。此外,还有一个包含异常值的“长尾”--通常是平均时间的倍数。(考虑到导致首次执行处罚的因素,这种行为是可以理解的)。
我的目标是对合理反映这一点的聚合值进行建模,并且可以从聚合值计算(就像高斯分布一样,根据N计算µ和sigma,值的和和平方和)。我的目标是建立合理反映这一点的聚合值模型,并且可以从聚合值计算(如)。换句话说,重复的次数是无限的,但内存和计算需求应该最小化。
正态高斯分布不能对长尾进行适当的建模,即使只有很小百分比的异常值,也会有很强的平均值偏差。
我正在寻找的想法,特别是如果这之前已经尝试/分析过的话。我已经检查了各种分布模型,我认为我可以找到一些东西,但我的统计数据生疏了,我可能最终会得到一个过度夸大的解决方案。哦,一个完整的收缩包装的解决方案也很好;)
其他方面/想法:有时你会得到“两个驼峰”分布,这在我的场景中是可以接受的,只有一个mu/sigma可以涵盖这两个方面/想法,但理想情况下应该是单独标识的。
据此推断,另一种方法是“浮动概率密度计算”,它只使用有限的缓冲区,并自动调整到范围(由于长尾,箱子可能不是均匀分布的)-没有发现任何东西,但通过一些关于分布的假设,原则上应该是可能的。
为什么选择(因为有人问过它)-
对于一个复杂的过程,我们需要做出这样的保证:“只有0.1%的运行超过了3秒的限制,平均处理时间是2.8秒”。孤立代码的性能可能与正常的运行时环境有很大的不同,该运行时环境涉及不同级别的磁盘和网络访问、后台服务、一天内发生的预定事件等。
这可以通过积累所有数据来简单地解决。但是,要在生产中积累这些数据,需要限制生成的数据。对于孤立的代码片段的分析,高斯偏差加上第一次运行惩罚是可以的。这不再适用于上面找到的发行版。
编辑我已经得到了非常好的答案(最后--也许--需要一些时间来解决这个问题)。我正在发起一项赏金活动,以寻求更多的投入/想法。
发布于 2009-12-08 22:54:25
通常,当您有一个只能为正的随机值时,对数正态分布是对其建模的好方法。也就是说,您获取每个测量的对数,并假设它是正态分布的。
如果你愿意,你可以认为它有多个驼峰,即两条具有不同均值的法线的总和。这些参数的估计有点棘手,因为对于每个测量,你可能必须估计它属于每个驼峰的概率。这可能比你想要的麻烦更多。
对数正态分布是非常方便和良好的。例如,你不处理它的平均值,你处理它的几何平均值,这与它的中位数是一样的。
顺便说一句,在药物计量学建模中,对数正态分布是普遍存在的,对诸如血容量、吸收和消除速率、体质量等进行建模。
补充:如果你想要一个所谓的浮动分布,那就是经验分布或非参数分布。要对此进行建模,通常将测量结果保存在排序数组中。然后很容易去掉百分位数。例如,中位数就是“中间数”。如果要保存的测量值太多,则可以在获得足够的测量值以获得大致形状后进行某种分类。
添加:有一种简单的方法来判断分布是否为正态分布(或对数正态分布)。获取测量的日志,并将它们放入一个排序的数组中。然后生成QQ图(分位数-分位数)。为此,生成与样本一样多的正态随机数,并对它们进行排序。然后绘制这些点,其中X是正态分布点,Y是对数采样点。结果应该是一条直线。(生成正常随机数的一种非常简单的方法是将+/- 0.5范围内的12个均匀随机数相加。)
发布于 2010-04-02 03:25:40
您描述的问题称为“分布拟合”,与性能测量无关,即这是将适当的分布拟合到任何收集/测量的数据样本的通用问题。
标准流程是这样的:
您可以找到一篇有趣的文章,描述如何使用开源R软件系统here来实现这一点。我认为对你特别有用的可能是函数fitdistr。
发布于 2012-07-13 19:50:31
除了已经给出的答案之外,还可以考虑Empirical Distributions。我有使用经验分布进行多个分布式系统性能分析的成功经验。这个想法非常简单。您需要构建性能度量的直方图。测量应该以给定的精度离散化。当你有直方图的时候,你可以做一些有用的事情:
https://stackoverflow.com/questions/1867426
复制相似问题