title: Benchmarks

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