建模性能测量的分布

pet*_*hen 18 algorithm math statistics performance

您将如何在数学上模拟重复实际性能测量的分布 - "真实生活"意味着您不仅仅是循环使用相关代码,而且它只是在典型用户场景中运行的大型应用程序中的一小段内容?

我的经验表明,你通常在平均执行时间周围有一个峰值,可以用高斯分布充分建模.此外,还有一个包含异常值的"长尾" - 通常是平均时间的倍数.(考虑到导致首次执行惩罚的因素,这种行为是可以理解的).

我的目标是模拟合理地反映这一点的聚合值,并且可以从聚合值计算(例如高斯,从N计算mu和sigma,值的总和和平方和).换句话说,重复次数是无限的,但应尽量减少存储器和计算要求.

正态高斯分布不能适当地对长尾进行建模,并且即使非常小的异常值也会使平均偏差很大.

我正在寻找想法,特别是如果之前已经尝试/分析过.我已经检查了各种发行版模型,我想我可以解决一些问题,但我的统计数据是生锈的,我可能最终得到一个夸张的解决方案.哦,一个完整的收缩包装解决方案也可以;)

其他方面/想法:有时你得到"两个驼峰"的分布,这在我的场景中是可以接受的,其中一个mu/sigma覆盖两者,但理想情况下将单独识别.

推断这个,另一种方法是"浮动概率密度计算",它只使用一个有限的缓冲区并自动调整到范围(由于长尾,箱可能没有均匀间隔) - 没有找到任何东西,但有一些关于分配的假设原则上应该是可能的.


为什么(因为有人问) -

对于复杂的过程,我们需要做出保证,例如"只有0.1%的运行超过3秒的限制,平均处理时间为2.8秒".隔离代码片段的性能可能与正常运行时环境有很大不同,后者涉及不同级别的磁盘和网络访问,后台服务,一天内发生的预定事件等.

这可以通过累积所有数据来平凡地解决.但是,为了在生产中积累这些数据,需要限制所产生的数据.对于孤立的代码片段的分析,高斯偏差加上第一次运行罚分是可以的.对于上面找到的分布,这不再起作用了.

[编辑]我已经得到了很好的答案(最后 - 也许 - 一段时间来研究这个问题).我正在寻找更多的投入/想法.

Mik*_*vey 6

通常,当您具有只能为正的随机值时,对数正态分布是对其进行建模的好方法.也就是说,您获取每个测量的日志,并假设它是正态分布的.

如果你愿意,你可以考虑拥有多个驼峰,即两个法线具有不同均值的总和.估计参数有点棘手,因为对于每次测量,您可能必须估计其属于每个驼峰的概率.这可能比你想要打扰更多.

对数正态分布非常方便且表现良好.例如,你没有处理它的平均值,你处理它的几何平均值,这与它的中位数相同.

顺便说一句,在药物建模中,对数正态分布无处不在,可以对血容量,吸收和消除率,体重等进行建模.

增加:如果你想要你称之为浮动分布的东西,那就称为经验分布或非分布分布.要对其进行建模,通常可以将测量值保存在已排序的数组中.然后很容易挑出百分位数.例如,中位数是"中间数".如果您有太多的测量值要保存,那么在有足够的测量值来获得一般形状后,您可以进行某种分类.

补充:有一种简单的方法可以判断分布是否正常(或对数正态).获取测量的日志并将它们放入已排序的数组中.然后生成QQ图(分位数 - 分位数).要做到这一点,请生成与样本一样多的正常随机数,然后对它们进行排序.然后只绘制点,其中X是正态分布点,Y是对数样本点.结果应该是一条直线.(生成正常随机数的一种非常简单的方法是将+/- 0.5范围内的12个均匀随机数加在一起.)