Autonomously Finding Performance Regressions In The Linux Kernel
Last weekend a few Phoronix benchmarks were underway of the Linux 2.6.32-rc5 kernel when a very significant performance regression was spotted. This regression caused the PostgreSQL server to run at about 18% of the performance found in earlier kernel releases. Long story short, in tracking down this performance regression we have finally devised a way to autonomously locate performance regressions within the Linux kernel and potentially any Git-based project for that matter. Here are a few details.
For some background information on the test that led to this work, the PostgreSQL performance under the Linux 2.6.32-rc1 through the Linux 2.6.32-rc5 (and still in Git master) is in shambles when compared to earlier kernels (tested Linux 2.6.30 and 2.6.31 for comparison). This regression was found using the same kernel configuration with the default options on a clean Ubuntu 9.10 installation. To ensure this wasn't an isolated incident, first this regression was confirmed on an entirely different system -- a dual AMD Opteron system compared to an Intel Atom "nettop" system.
Normally these benchmarks would end up being published on Phoronix as-is and left up to other interested users or developers to track down the problem due to our limited resources and most of this work being done by a lone individual. With the Phoronix Test Suite maturing though, a realization was made. For months it has been a goal to essentially build a Phoronix Test Suite module that would layer our performance profiling / benchmarking software directly atop Git and its git-bisect command. With the Phoronix Test Suite 2.2 "Bardu" work -- and the motivation to track down this significant drop in disk performance -- this was now quite possible with just a few hundred lines of code to create the module that ties the components together.
To cut to the chase, to be introduced with Phoronix Test Suite 2.2 Beta 1 next week will be this module that leverages the Phoronix Test Suite and Git together to create one powerful testing pair. The bisect module in the Phoronix Test Suite makes it possible to track down the triggering chance for any type of regression that can be tested by the Phoronix Test Suite. With the extensible Phoronix Test Suite architecture, you can write a test profile for just about any part of the system, if the included 110+ tests and 40+ test suites do not cover a problem that's encountered.
All that this PTS module needs to know is the starting and end points that return a different state, an accessible repository (Git, currently) to be tested, a Phoronix Test Suit result file that illustrates a performance regression, and an external build script to be written that automatically builds and installs the said code. With that information, the Phoronix Test Suite and the bisect module are able to autonomously locate the performance regression. Right now only Git is supported, but we are working on support for other source code management systems as well. There's even an experimental version of our bisect module that even automates the reboot process and recovery of the Phoronix Test Suite upon reboot.