如何获得准确的性能指标?(How to get an accurate performance me

2019-10-22 10:18发布

在我们的项目,我们正在试图自动监控测试运行的性能,以确保我们没有在程序随时间的性能有任何显著的变化。

问题是,似乎是在我们拿到的措施一致的5%的变化。 也就是说,同一台机器上使用相同的程序(无需重新编译)运行相同的测试,我们得到的是5%左右不同于运行运行值上。 这是太多了,我们要使用的号码是什么。

我们已经从时序考虑排除设置成本 - 也就是说,从C ++代码本身我们之前抓住了时间和运行时间的关键部分,而不是在操作系统级别做整个程序的时间后, 。 我们也做平均和异常排斥。 问题是,变异看起来也有长期趋势,所以我们之后对方获得重复的时间紧簇,但是一两个小时后的时间基本相同。 (遗憾的是,出于传播测试在几个小时内是不可行的。)测试也正在一个专用的机器上运行,而“没有别的”正在运行就可以了。

我们不太肯定的时序变化是从哪里来的,但它可能与处理器和系统的事 - 有该变异的大小取决于程序运行在什么机器迹象。

有没有人有一个想法,其中这种变化很可能是来自何处,以及如何去除呢? 这些测试专用的机器上运行,所以更改操作系统设置将是可能的。

(由标签表示,这是一个x86的Linux系统上运行的C ++程序,如果这能帮助澄清的事情。)

编辑:回应评论

我们目前的时机方案是使用时钟()函数从C标准库,从之前看在返回值的差额/功能后,我们要测试的。

我们正在测试的代码应该是确定的,而不应涉及强IO。

我知道的情况是“银弹”的回答有点模糊。 我想我更多寻找“这些都是重要的考虑因素,这是为了你应该检查他们,这里是你如何去检查他们每个人”式的答案。

Answer 1:

我很惊讶你有下调至5%的变化。

除非你能摆脱所有的系统上运行的不必要的东西,你会得到高的变化。 这是在顶层。

您的操作系统必须是确定性的。 你需要了解其他任务和线程正在运行并且它们的持续时间。 例如,有时钟中断。 现在,有多少其他的功能链接到这个中断? 做这些的其他功能有什么不同?

是您的系统隔离? 例如,如果系统被连接到一个网络的测量值可能有所不同。

请问您的程序中使用外部资源? 例如硬盘驱动器。 如果程序写入到硬盘驱动器,驱动器将是不确定的。 为文件和文件部分可以在驱动器上移动。 该驱动器可能会变得支离破碎。 这种分割可能会在您的测量造成的差异。

操作系统内存可能会支离破碎。 此外,可执行的内存可能会变得支离破碎。 碎片可能会增加差异。



文章来源: How to get an accurate performance measure?