https://github.com/golang-design/bench
⏱️ Reliable performance measurement for Go programs. All in one design.
https://github.com/golang-design/bench
benchmark benchmarking benchstat perflock
Last synced: about 1 year ago
JSON representation
⏱️ Reliable performance measurement for Go programs. All in one design.
- Host: GitHub
- URL: https://github.com/golang-design/bench
- Owner: golang-design
- License: gpl-3.0
- Created: 2020-11-06T14:15:32.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2021-11-29T17:08:40.000Z (over 4 years ago)
- Last Synced: 2024-10-25T06:35:38.382Z (over 1 year ago)
- Topics: benchmark, benchmarking, benchstat, perflock
- Language: Go
- Homepage: https://golang.design/s/bench
- Size: 60.5 KB
- Stars: 38
- Watchers: 3
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# bench
Reliable performance measurement for Go programs. All in one design.
```
$ go install golang.design/x/bench@latest
```
## Features
- Combine [benchstat](https://pkg.go.dev/golang.org/x/perf/cmd/benchstat), [perflock](https://github.com/aclements/perflock) and more...
- Short command and only run benchmarks
- Automatic performance locking for benchmarks
- Automatic statistic analysis for benchmark results
- Color indications for benchmark results
## Usage
### Enable `bench` Daemon (optional, Linux only)
```sh
$ cd $GOPATH/src/golang.design/x/bench
$ ./install.bash
```
If your init system is supported, this will also configure `bench` to start automatically on boot.
Or you can install and run `bench` daemon manually:
```sh
$ sudo install $GOPATH/bin/bench /usr/bin/bench
$ sudo -b bench -daemon
```
### Default Behavior
```sh
$ bench
```
The detault behavior of `bench` run benchmarks under your current
working directory, and each benchmark will be ran 10 times for further
statistical analysis. It will also try to acquire performance lock from
`bench` daemon to gain more stable results. Furthermore, the benchmark
results are saved as a text file to the working directory and named as
`.txt`.
Example:
```
$ cd example
$ bench
bench: run benchmarks under 90% cpufreq...
bench: go test -run=^$ -bench=. -count=10
goos: linux
goarch: amd64
pkg: golang.design/x/bench/example
BenchmarkDemo-16 21114 57340 ns/op
...
BenchmarkDemo-16 21004 57097 ns/op
PASS
ok golang.design/x/bench/example 17.791s
bench: results are saved to file: ./bench-2020-11-07-19:59:51.txt
name time/op
Demo-16 57.0µs ±1%
$ # ... do some changes to the benchmark ...
$ bench
bench: run benchmarks under 90% cpufreq...
bench: go test -run=^$ -bench=. -count=10
goos: linux
goarch: amd64
pkg: golang.design/x/bench/example
BenchmarkDemo-16 213145 5625 ns/op
...
BenchmarkDemo-16 212959 5632 ns/op
PASS
ok golang.design/x/bench/example 12.536s
bench: results are saved to file: ./bench-2020-11-07-20:00:16.txt
name time/op
Demo-16 5.63µs ±0%
$ bench bench-2020-11-07-19:59:51.txt bench-2020-11-07-20:00:16.txt
name old time/op new time/op delta
Demo-16 57.0µs ±1% 5.6µs ±0% -90.13% (p=0.000 n=10+8)
```
### Options
Options for checking daemon status:
```sh
bench -list
```
Options for statistic tests:
```sh
bench old.txt [new.txt] # same from benchstat
bench -delta-test
bench -alpha
bench -geomean
bench -split
bench -sort
```
Options for running benchmarks:
```sh
bench -v # enable verbose outputs
bench -shared # enable shared execution
bench -cpufreq 90 # cpu frequency (default: 90)
bench -name BenchmarkXXX # go test `-bench` flag (default: .)
bench -count 20 # go test `-count` flag (default: 10)
bench -time 100x # go test `-benchtime` flag (default: unset)
bench -cpuproc 1,2,4,8,16,32,128 # go test `-cpu` flag (default: unset)
```
## License
© 2020 The golang.design Authors