These are benchmarks collected from the community used to measure the effects of changes to the Go core (compiler, runtime, and libraries). They should have the following properties:

  • they matter; someone cares, perhaps in a dollars-and-cents way, that they run well
  • they are go-gettable and don't require customized steps for building the benchmark
  • they run under go test -bench ...
  • they run relatively quickly, ideally a single “run” takes less than a second (there should perhaps be a separate set of longer-running benchmarks)
  • their timings are not gratuitously noisy
  • they run cleanly in a restricted environment, such as a Docker or rkt container
  • they‘re not gratuitously redundant with other benchmarks already in the list; we don’t need ten microbenchmarks of Go transcendental functions

Information for each benchmark includes (or should include):

  • a short name for the benchmark
  • the path to go get the benchmark
  • a regexp for the benchmark suite excluding individual benchmarks that might be noisy, long-running, or redundant
  • (ideally) a contact person for questions about the benchmarks
short namenotesgo get pathbenchmark regexpcontact
capnproto2zombiezen.com/go/capnproto2/Benchmark(TextMovementBetweenSegments|Growth_MultiSegment)
ethereum_bitutilgithub.com/ethereum/go-ethereum/common/bitutilBenchmark(BaseTest2KB|FastTest2KB|Encoding4KBVerySparse)
ethereum_coregithub.com/ethereum/go-ethereum/coreBenchmarkChainRead_full_10k
ethereum_corevmgithub.com/ethereum/go-ethereum/core/vmBenchmarkOpDiv128
ethereum_eciesgithub.com/ethereum/go-ethereum/crypto/eciesBenchmarkGenSharedKeyP256
ethereum_ethashgithub.com/ethereum/go-ethereum/consensus/ethashBenchmarkHashimotoLight
ethereum_sha3github.com/ethereum/go-ethereum/crypto/sha3BenchmarkSha3_224_MTU
ethereum_storagegithub.com/ethereum/go-ethereum/swarm/storageBenchmarkJoin_8
gonum_blas_nativegonum.org/v1/gonum/blas/gonumBenchmark(DasumMediumUnitaryInc|Dnrm2MediumPosInc)
gonum_communitygonum.org/v1/gonum/graph/community/BenchmarkLouvainDirectedMultiplex
gonum_lapack_nativegonum.org/v1/gonum/lapack/gonumBenchmarkDgeev/Circulant10
gonum_matgonum.org/v1/gonum/matBenchmark(MulWorkspaceDense1000Hundredth|ScaleVec10000Inc20)
gonum_pathgonum.org/v1/gonum/graph/path/Benchmark(AStarUndirectedmallWorld_10_2_2_2_Heur|Dominators/nested_if_n256)
gonum_topogonum.org/v1/gonum/graph/topo/Benchmark(TarjanSCCGnp_1000_half|TarjanSCCGnp_10_tenth)
gonum_traversegonum.org/v1/gonum/graph/traverse/BenchmarkWalkAllBreadthFirstGnp_(10|1000)_tenth
hugo_helpersgithub.com/gohugoio/hugo/helpersBenchmark(StripHTML|ReaderContains)
hugo_hugolibgithub.com/gohugoio/hugo/hugolibBenchmarkParsePage
hugo_hugolib_sitebuildinggithub.com/gohugoio/hugo/hugolibBenchmarkSiteBuilding/YAML,num_pages=10,num_tags=10,tags_per_page=20,shortcodes,render-12
k8s_apik8s.io/kubernetes/pkg/api/testingBenchmarkEncodeCodecFromInternalProtobuf
miniogithub.com/minio/minio/cmdBenchmarkGetObject5MbFS
semvergithub.com/Masterminds/semverBenchmarkValidateVersionTildeFail
spexs2github.com/egonelbre/spexs2/_benchmark/BenchmarkRun/10k/1
uuidgithub.com/satori/go.uuid/Benchmark(NewV5|MarshalToString)

There is a benchmark runner that automates downloading, building, and running these benchmarks under various (user-defined) configurations. Benchmarking noise on Linux can be somewhat reduced with perflock.

A few have been proposed but have so far failed to make the cut (for fetch, build, or noise problems):

short namenotesgo get pathbenchmark regexpcontact
eolian_dspbuddin.us/eolian/dspBenchmark
ethereum_triegithub.com/ethereum/go-ethereum/trieBenchmark
ethereum_whisperv5github.com/ethereum/go-ethereum/whisper/whisperv5Benchmark
k8s_schedulercachek8s.io/kubernetes/plugin/pkg/scheduler/schedulercacheBenchmark
kanzigithub.com/flanglet/kanzi/go/src/kanzi/benchmarkBenchmark
uber_zapgithub.com/uber-go/zap/benchmarksBenchmark