These 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:

  • 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

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?

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
ajstarks_deck_generategithub.com/ajstarks/deck/generateBenchmark(Polygon|Arc)
benhoyt_goawkgithub.com/benhoyt/goawk/interpBenchmarkR
bindatagithub.com/kevinburke/go-bindataBenchmark
capnproto2zombiezen.com/go/capnproto2/Benchmark(TextMovementBetweenSegments|Growth_MultiSegment)
cespare_mphgithub.com/cespare/mphBenchmarkBuild
cespare_xxhashgithub.com/cespare/xxhashBenchmarkHashes/xxhash-string,n=10_MB
ericlagergren_decimalgithub.com/ericlagergren/decimal/benchmarksBenchmarkPi_decimal_Go_9
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
ethereum_triegithub.com/ethereum/go-ethereum/trieBenchmark
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
gtank_blake2sgithub.com/gtank/blake2sBenchmarkHash8K
gtank_ed25519github.com/gtank/ed25519Benchmark(IsOnCurve|ScalarMult)
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
k8s_schedulercachek8s.io/kubernetes/pkg/scheduler/cacheBenchmarkList1kNodes30kPods
miniogithub.com/minio/minio/cmdBenchmarkGetObject5MbFS
nelsam_gxui_intervalgithub.com/nelsam/gxui/intervalBenchmark
pilosa_bitmapsbenchmarks in roaring/ subdirectorygithub.com/pilosa/pilosaBenchmarkBitmap_IntersectionCountjaffee@pilosa.com
semvergithub.com/Masterminds/semverBenchmarkValidateVersionTildeFail
spexs2github.com/egonelbre/spexs2/_benchmark/BenchmarkRun/10k/1
uber_zapgo.uber.org/zap/benchmarksBenchmarkAddingFields/(Zap.Sugar|^[ais])
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_whisperv5github.com/ethereum/go-ethereum/whisper/whisperv5Benchmark
kanzigithub.com/flanglet/kanzi/go/src/kanzi/benchmarkBenchmark