blob: 23c593cdd36d2505cef51d58b9c9295fdcc440b3 [file] [log] [blame] [view]
dr2chase62097252018-09-07 15:00:07 -04001These are benchmarks collected from the community used to measure the effects of changes to the Go core (compiler, runtime, garbage collector, and libraries). They should have the following properties:
dr2chaseb6d26032017-08-29 16:20:54 -04002
3 - they matter; someone cares, perhaps in a dollars-and-cents way, that they run well
4 - they are go-gettable and don't require customized steps for building the benchmark
Austin Clementsf5f45b52017-08-29 17:21:35 -04005 - they run under `go test -bench ...`
dr2chaseb6d26032017-08-29 16:20:54 -04006 - they run relatively quickly, ideally a single "run" takes less than a second (there should perhaps be a separate set of longer-running benchmarks)
7 - their timings are not gratuitously noisy
8 - they run cleanly in a restricted environment, such as a Docker or rkt container
9 - they're not gratuitously redundant with other benchmarks already in the list; we don't need ten microbenchmarks of Go transcendental functions
10
dr2chase62097252018-09-07 15:00:07 -040011**These benchmarks change over time, and that is okay.** Their intended use is for performance testing of proposed changes; is the geometric mean better, were any benchmarks made substantially worse?
12
dr2chaseb6d26032017-08-29 16:20:54 -040013Information for each benchmark includes (or should include):
14
15 - a short name for the benchmark
16 - the path to `go get` the benchmark
17 - a regexp for the benchmark suite excluding individual benchmarks that might be noisy, long-running, or redundant
18 - (ideally) a contact person for questions about the benchmarks
19
Austin Clements7a4d7612017-08-29 17:20:03 -040020 | short name | notes | go get path | benchmark regexp | contact |
dr2chaseb6d26032017-08-29 16:20:54 -040021 | ---------- | ----- | ----------- | ---------------- | ------- |
dr2chase62097252018-09-07 15:00:07 -040022 | ajstarks_deck_generate | | `github.com/ajstarks/deck/generate` | `Benchmark(Polygon\|Arc)` | |
23 | benhoyt_goawk | | `github.com/benhoyt/goawk/interp` | `BenchmarkR` | |
24 | bindata | | `github.com/kevinburke/go-bindata` | `Benchmark` | |
dr2chase2e375032018-01-30 15:09:57 -050025 | capnproto2 | | `zombiezen.com/go/capnproto2/` | `Benchmark(TextMovementBetweenSegments\|Growth_MultiSegment)` | |
dr2chase62097252018-09-07 15:00:07 -040026 | cespare_mph | | `github.com/cespare/mph` | `BenchmarkBuild` | |
27 | cespare_xxhash | | `github.com/cespare/xxhash` | `BenchmarkHashes/xxhash-string,n=10_MB` | |
28 | ericlagergren_decimal | | `github.com/ericlagergren/decimal/benchmarks` | `BenchmarkPi_decimal_Go_9` | |
dr2chaseb6d26032017-08-29 16:20:54 -040029 | ethereum_bitutil | | `github.com/ethereum/go-ethereum/common/bitutil` | `Benchmark(BaseTest2KB\|FastTest2KB\|Encoding4KBVerySparse)` | |
dr2chaseb6d26032017-08-29 16:20:54 -040030 | ethereum_core | | `github.com/ethereum/go-ethereum/core` | `BenchmarkChainRead_full_10k` | |
dr2chaseb6d26032017-08-29 16:20:54 -040031 | ethereum_corevm | | `github.com/ethereum/go-ethereum/core/vm` | `BenchmarkOpDiv128` | |
dr2chasedf9c2b22017-09-22 10:42:31 -040032 | ethereum_ecies | | `github.com/ethereum/go-ethereum/crypto/ecies` | `BenchmarkGenSharedKeyP256` | |
33 | ethereum_ethash | | `github.com/ethereum/go-ethereum/consensus/ethash` | `BenchmarkHashimotoLight` | |
34 | ethereum_sha3 | | `github.com/ethereum/go-ethereum/crypto/sha3` | `BenchmarkSha3_224_MTU` | |
35 | ethereum_storage | | `github.com/ethereum/go-ethereum/swarm/storage` | `BenchmarkJoin_8` | |
dr2chase62097252018-09-07 15:00:07 -040036 | ethereum_trie | | `github.com/ethereum/go-ethereum/trie` | `Benchmark` | |
Sebastien Binetddc9daa2017-08-31 11:01:44 +020037 | gonum_blas_native | | `gonum.org/v1/gonum/blas/gonum` | `Benchmark(DasumMediumUnitaryInc\|Dnrm2MediumPosInc)` | |
dr2chasedf9c2b22017-09-22 10:42:31 -040038 | gonum_community | | `gonum.org/v1/gonum/graph/community/` | `BenchmarkLouvainDirectedMultiplex` | |
Sebastien Binetddc9daa2017-08-31 11:01:44 +020039 | gonum_lapack_native | | `gonum.org/v1/gonum/lapack/gonum` | `BenchmarkDgeev/Circulant10` | |
40 | gonum_mat | | `gonum.org/v1/gonum/mat` | `Benchmark(MulWorkspaceDense1000Hundredth\|ScaleVec10000Inc20)` | |
dr2chasedf9c2b22017-09-22 10:42:31 -040041 | gonum_path | | `gonum.org/v1/gonum/graph/path/` | `Benchmark(AStarUndirectedmallWorld_10_2_2_2_Heur\|Dominators/nested_if_n256)` | |
42 | gonum_topo | | `gonum.org/v1/gonum/graph/topo/` | `Benchmark(TarjanSCCGnp_1000_half\|TarjanSCCGnp_10_tenth)` | |
43 | gonum_traverse | | `gonum.org/v1/gonum/graph/traverse/` | `BenchmarkWalkAllBreadthFirstGnp_(10\|1000)_tenth` | |
dr2chase62097252018-09-07 15:00:07 -040044 | gtank_blake2s | | `github.com/gtank/blake2s` | `BenchmarkHash8K` | |
45 | gtank_ed25519 | | `github.com/gtank/ed25519` | `Benchmark(IsOnCurve\|ScalarMult)` | |
dr2chaseb6d26032017-08-29 16:20:54 -040046 | hugo_helpers | | `github.com/gohugoio/hugo/helpers` | `Benchmark(StripHTML\|ReaderContains)` | |
47 | hugo_hugolib | | `github.com/gohugoio/hugo/hugolib` | `BenchmarkParsePage` | |
48 | hugo_hugolib_sitebuilding | | `github.com/gohugoio/hugo/hugolib` | `BenchmarkSiteBuilding/YAML,num_pages=10,num_tags=10,tags_per_page=20,shortcodes,render-12` | |
dr2chase2e375032018-01-30 15:09:57 -050049 | k8s_api | | `k8s.io/kubernetes/pkg/api/testing` | `BenchmarkEncodeCodecFromInternalProtobuf` | |
dr2chase62097252018-09-07 15:00:07 -040050 | k8s_schedulercache | | `k8s.io/kubernetes/pkg/scheduler/cache` | `BenchmarkList1kNodes30kPods` | |
dr2chasedf9c2b22017-09-22 10:42:31 -040051 | minio | | `github.com/minio/minio/cmd` | `BenchmarkGetObject5MbFS` | |
dr2chase62097252018-09-07 15:00:07 -040052 | nelsam_gxui_interval | | `github.com/nelsam/gxui/interval` | `Benchmark` | |
seebs6b969ae2018-11-19 11:45:53 -060053 | pilosa_bitmaps | benchmarks in `roaring/` subdirectory | `github.com/pilosa/pilosa` | `BenchmarkBitmap_IntersectionCount` | jaffee@pilosa.com |
dr2chasedf9c2b22017-09-22 10:42:31 -040054 | semver | | `github.com/Masterminds/semver` | `BenchmarkValidateVersionTildeFail` | |
55 | spexs2 | | `github.com/egonelbre/spexs2/_benchmark/` | `BenchmarkRun/10k/1` | |
dr2chase62097252018-09-07 15:00:07 -040056 | uber_zap | | `go.uber.org/zap/benchmarks` | `BenchmarkAddingFields/(Zap.Sugar\|^[ais])` | |
57 | uuid | | `github.com/satori/go.uuid/` | `Benchmark(NewV5\|MarshalToString)` | |
dr2chasedf9c2b22017-09-22 10:42:31 -040058
dr2chase2e375032018-01-30 15:09:57 -050059There is a [benchmark runner](https://github.com/dr2chase/bent) that automates downloading, building, and running these benchmarks under various (user-defined) configurations. Benchmarking noise on Linux can be somewhat reduced with [perflock](https://github.com/aclements/perflock).
60
dr2chasedf9c2b22017-09-22 10:42:31 -040061A few have been proposed but have so far failed to make the cut (for fetch, build, or noise problems):
62
63 | short name | notes | go get path | benchmark regexp | contact |
64 | ---------- | ----- | ----------- | ---------------- | ------- |
dr2chase2e375032018-01-30 15:09:57 -050065 | eolian_dsp | | `buddin.us/eolian/dsp` | `Benchmark` | |
dr2chasedf9c2b22017-09-22 10:42:31 -040066 | ethereum_whisperv5 | | `github.com/ethereum/go-ethereum/whisper/whisperv5` | `Benchmark` | |
67 | kanzi | | `github.com/flanglet/kanzi/go/src/kanzi/benchmark` | `Benchmark` | |