benchfmt: new benchmark parsing package

This adds a new package for parsing the Go benchmark format. In
contrast with the storage/benchfmt package, which this deprecates, the
new package is a complete implementation of the format including
parsing file-level configuration, benchmark lines, and benchmark
names.

This is the beginning of a substantial redesign of the perf module,
which will culminate in a new benchstat that's substantially more
featureful and modular. These new packages can live next to the
existing packages, so it's not necessary to introduce a v2 of this
module.

The benchfmt API is designed for streaming use and expects the calling
package to transform the results into some other representation. One
such representation is coming in a following CL.

The reader API is also designed to process millions of records per
second on a typical laptop. This may seem unnecessary, but we've seen
data volumes like this in practice.

Change-Id: Ic5af0e936cf75da29372c2bb5747886f11ac7661
Reviewed-on: https://go-review.googlesource.com/c/perf/+/283614
Trust: Austin Clements <austin@google.com>
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
40 files changed
tree: 9f3da672fbbc72e0a882811e0170b254ae82f080
  1. analysis/
  2. benchfmt/
  3. benchstat/
  4. benchunit/
  5. cmd/
  6. internal/
  7. storage/
  8. AUTHORS
  9. CONTRIBUTING.md
  10. CONTRIBUTORS
  11. go.mod
  12. go.sum
  13. LICENSE
  14. PATENTS
  15. README.md
README.md

Go performance measurement, storage, and analysis tools

Go Reference

This subrepository holds the source for various packages and tools related to performance measurement, storage, and analysis.

cmd/benchstat contains a command-line tool that computes and compares statistics about benchmarks.

cmd/benchsave contains a command-line tool for publishing benchmark results.

storage contains the https://perfdata.golang.org/ benchmark result storage system.

analysis contains the https://perf.golang.org/ benchmark result analysis system.

Both storage and analysis can be run locally; the following commands will run the complete stack on your machine with an in-memory datastore.

go install golang.org/x/perf/storage/localperfdata@latest
go install golang.org/x/perf/analysis/localperf@latest
localperfdata -addr=:8081 -view_url_base=http://localhost:8080/search?q=upload: &
localperf -addr=:8080 -storage=http://localhost:8081

The storage system is designed to have a standardized API, and we encourage additional analysis tools to be written against the API. A client can be found in the storage package.

Download/Install

The easiest way to install is to run go install golang.org/x/perf/cmd/...@latest. You can also manually git clone the repository and run go install golang.org/x/perf/cmd/....

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html.

The main issue tracker for the perf repository is located at https://github.com/golang/go/issues. Prefix your issue with “x/perf:” in the subject line, so it is easy to find.