统计方法,以了解何时执行了足够的性能测试迭代

时间:2015-06-19 13:10:35

标签: language-agnostic statistics performance-testing

我正在对服务进行一些性能/负载测试。想象一下这样的测试功能:

bytesPerSecond = test(filesize: 10MB, concurrency: 5)

使用它,我将填充不同大小和并发级别的结果表。还有其他变量,但你明白了。

测试功能会旋转concurrency个请求并跟踪吞吐量。这个速率从零开始,然后是尖峰和下降,直到它最终稳定在“真实”值上。

然而,这种稳定性可能需要一段时间才能发生,并且有许多输入组合需要评估。

test函数如何决定何时执行足够的样本?通过足够的,我想我的意思是如果测试继续,结果不会超出一定的余地。

我记得刚才读过一篇关于这篇文章的文章(来自其中一位jsperf作者)讨论了一个强大的方法,但我再也找不到这篇文章了。

一种简单的方法是计算滑动值窗口的标准偏差。有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

IIUC,您正在描述estimating the confidence interval of the mean with unknown variance的经典问题。也就是说,假设您有 n 结果, x 1 ,...,x n ,其中每个 x i 是一个你不太了解的过程的样本:不是均值,不是方差,而不是分布的形状。对于某些所需的置信区间,您现在想要 n 是否足够大,以便高概率真实均值在您的均值区间内。

(请注意,在条件相对较弱的情况下,Central Limit Theorem保证样本均值将收敛到正态分布,但要直接应用它,则需要方差。)

因此,在这种情况下,classic solution确定 n 是否足够大,如下所示:

  • 首先计算样本均值μ=Σ i [x i ] / n 。还计算归一化样本方差 s 2 i [(x i - μ) 2 ] /(n - 1)

  • 取决于 n 的大小:

    • 如果 n> 30 ,置信区间近似为μ±z α/ 2 (s /√(n)),如果需要,您可以找到{ {3}}对 z α的解释。

    • 如果 n< 30 ,置信区间近似为μ±t α/ 2 (s /√(n));再次查看here t 值的解释以及表格。

  • 如果信心足够,请停止。否则,请增加 n

答案 1 :(得分:0)

稳定性意味着变化率(导数)为零或接近于零。

  

测试功能可以提升并发请求并跟踪吞吐量。   这个速率从零开始,然后是尖峰和下降直到它最终   稳定“真实”价值。

我会跟踪您过去的吞吐量值。例如,最后的X值左右。根据这个值,我会计算变化率(吞吐量的导数)。如果你的导数接近于零,那么你的测试是稳定的。我会停止测试。

如何找到X?我认为不是常数值,比如10,根据最大测试次数选择一个值可能更合适,例如:

 X = max(10,max_test_count * 0.01)