To develop software with optimal performance, even small performance changes need to be identified. Identifying performance changes is challenging since the performance of software is influenced by non-deterministic factors. Therefore, not every performance change is measurable with reasonable effort. In this work, we discuss which performance changes are measurable at code level with reasonable measurement effort and how to identify them. We present (1) an analysis of the boundaries of measuring performance changes, (2) an approach for determining a configuration for reproducible performance change identification, and (3) an evaluation comparing of how well our approach is able to identify performance changes in the application server Jetty compared with the usage of Jetty's own performance regression benchmarks. Thereby, we find (1) that small performance differences are only measurable by fine-grained measurement workloads, (2) that performance changes caused by the change of one operation can be identified using a unit-test-sized workload definition and a suitable configuration, and (3) that using our approach identifies small performance regressions more efficiently than using Jetty's performance regression benchmarks.
翻译:为了开发具有最佳性能的软件,需要识别甚至微小的性能变更。由于软件性能受到非确定性因素的影响,因此并非每个性能变更都可以以合理的代价测量。在本文中,我们讨论了在代码级别上哪些性能变更可以以合理的测量代价进行测量以及如何识别它们。我们提出了三个方面:(1)测量性能变更边界的分析,(2)确定可复现的性能变更识别配置的方法,(3)通过与使用Jetty自身性能回归基准的比较来评估我们的方法在应用服务器Jetty中识别性能变更的效果。我们发现(1)只有通过细粒度的测量工作负载才能测量微小的性能差异,(2)通过使用适当的配置和类单元测试大小的工作负载定义,可以识别由操作变更引起的性能变更,(3)使用我们的方法比使用Jetty的性能回归基准更高效地识别微小的性能退化。