在计算快速流程运行的时间时,应该使用多少次运行?

时间:2011-01-13 19:24:00

标签: performance optimization statistics analytics timing

让我们说我将运行进程X并查看它需要多长时间。 我将把我运行此过程的日期和时间保存到数据库中。我想知道将什么放入数据库。

进程X几乎总是在1500毫秒以下运行,所以这是一个很短的过程。它通常在500到1500毫秒之间运行,相当大的范围(3倍差异)。

我的问题是,应该将多少“运行”保存到数据库中作为单次运行?

  • 每次运行都保存到数据库中 自己的行?

  • 5运行,平均,然后保存 时间

  • 10次平均运行?

  • 20次运行,删除超过2的任何内容 std偏离了,并保存 那个范围内的一切?

有没有人有任何好的信息支持他们?

6 个答案:

答案 0 :(得分:2)

将每次运行的数据保存到自己的行中。然后您可以使用和分析您喜欢的数据...即,您列出的所有其他选项都可以在事后执行。其他人不可能在不了解更多信息的情况下就如何平均/分析数据得出有意义的结论。

答案 1 :(得分:1)

最快的运行是最准确地仅对您的代码进行计时的运行。

由于操作系统调度程序引入的噪音,所有较慢的运行速度较慢。

您遇到的差异因机器而异,即使在相同的机器上,这组可运行的流程也会产生噪音。

答案 2 :(得分:1)

以上都不是。布兰特虽然很近。你应该保存每一个测量。但不要平均他们。在这种类型的分析中,平均值(算术平均值)可能会非常误导。原因是你的一些测量将比其他测量长得多。这将发生,因为事情可能会干扰您的过程 - 即使在“干净”的测试系统上也是如此。它也可能发生,因为你的过程可能不像你可能的那样具有确定性。

有些人认为只需采集更多样本(运行更多迭代)并对测量值进行平均就可以获得更好的数据。它没有。你跑的越多,你就会越容易遇到一个令人不安的事件,从而使得平均值过高。

更好的方法是尽可能多地进行测量(时间允许)。 100不是一个坏数字,但30-ish就足够了。

然后,按幅度对它们进行排序并绘制图形。请注意,这不是标准分发。计算计算一些简单的统计数据:均值,中位数,最小值,最大值,较低的quaertile,上四分位数。

与某些指导相反,不要“抛弃”在外面的游戏或“异常值”。这些通常是最有趣的测量。例如,您可以建立一个不错的基线,然后查找离场。了解这些偏差将有助于您充分了解您的流程如何运作,sytsem如何影响您的流程,以及什么会干扰您的流程。它经常容易暴露出错误。

答案 3 :(得分:0)

取决于您想要的数据类型。我说最初每次运行一行,然后分析数据,从那里开始。如果要合并,可以存储X次运行的最小值/最大值/平均值。

答案 4 :(得分:0)

http://en.wikipedia.org/wiki/Sample_size

布莱恩是对的 - 你需要调查更多。如果您的代码在“大多数”时间内具有那么大的差异,那么由于其他进程,os分页或其他因素,您的测试环境可能会有很大的波动。如果不是,你似乎有代码路径做了大量不同的工作,并提出一个数字/运行数据来描述这种多模态系统的性能并不会告诉你太多。所以我会说尽可能地隔离你的设置,运行至少30次试验,并了解你的性能曲线是什么样的。完成后,您可以使用该维基百科页面提供一个数字,告诉您每次代码更改需要运行多少次试验,以查看性能是否有某种程度的统计显着性增加/减少。

答案 5 :(得分:0)

虽然说“保存每一次运行”很好,但在你的情况下可能不实用。但是,我认为仅存储平均值会消除太多数据。我喜欢存储十次运行的平均值,但不是仅存储平均值,而是存储最大值和最小值,这样我就可以了解除中心之外的数据传播。

特别是最大和最小信息将告诉您角落案件出现的频率。 1500毫秒的情况是千分之一的异常值吗?或者是经常复发的东西?