user stories¶
Project: OpenBLAS
Current benchmarking setup: One set of benchmarks is on codspeed, runs in each PR;
The other set of equivalent asv benchmarks, runs via a cron job github action on
cloud machines provisioned via cirun.io.
Contact: Evgeni
Who uses benchmarks here¶
Contributor and Reviewer check regressions on a PR. Maintainer manually checks the cron job history to find regressions.
Check/quantify a performance impact of a pull request¶
A contributor wants to check that their pull request does not introduce regressions, or that it improves performance.
Today: codspeed integration runs
on each pull request, and reports results back to a PR. Was reporting back, until
a token expired, that is.
Pain: There is essentially no useful signal: OpenBLAS performance improvements
come from low-level kernels specific to hardware architecture; codspeed does not
offer any control of the hardware.
Actually check/quantify a performance impact of a pull request¶
A contributor wants to check that their pull request does not introduce regressions, or that it improves performance.
Today: A contributor runs a bespoke benchmark on their local machine, copy-pastes the results into the GitHub interface. See, for example, https://github.com/OpenMathLib/OpenBLAS/pull/5986 Pain: The benchmark collection is just a collection of (mostly) C programs; there is no automation, and running benchmarks is manual; results are not stored anywhere; there is no provenance, no regression tracking. Just some numbers from somebody's machine, copy-pasted free-form into a pull request comment.
Track regressions over time¶
A maintainer wants to monitor performance, find regressions and track them back to the origin.
Today: An asv benchmark suite
runs on a weekly cron schedule on cloud instances of several architectures (x86, arm)
via github actions, on self-hosted runners provisioned via cirun. Results are uploaded
to the standard asv static website view at https://www.openmathlib.org/BLAS-Benchmarks/.
Raw results are uploaded along with a view, and an example notebook for custom analysis
is provided in the benchmark source,
https://github.com/OpenMathLib/BLAS-Benchmarks/blob/main/analyze.results.example.ipynb
Pain: asv views are limited and inflexible, especially for jobs of varying
computational complexity; custom views are hard to incorporate into the asv-built
website; asking questions beyond the narrow asv remit (which is to track performance
over time only) requires manual work and is difficult to track over time.
What must not break¶
- setting up web views does not require frontend work
- ability to deploy on a wide range of hardware
- ability to control compilation options, threading, versions of dependencies
Wishes¶
- custom views for parametrized benchmarks ("track the threshold for matmul's
O(N**3)scaling") - cross-benchmark comparison ("track perfomance of
dgemmon a graviton3 vs x86_64, over time, on the same plot") - have a unified syntax for writing benchmarks (here,
codspeedvsasv)
Scale and constraints¶
- for a volunteer project with limited funding: weekly cron runs, a dozen of benchmarks only;
- scarce resources for maintenance, no dedicated perfomance engineer role.
- need access to various hardware types