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:
go test -bench ...
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):
go get
the benchmarkshort name | notes | go get path | benchmark regexp | contact |
---|---|---|---|---|
ajstarks_deck_generate | github.com/ajstarks/deck/generate | Benchmark(Polygon|Arc) | ||
benhoyt_goawk | github.com/benhoyt/goawk/interp | BenchmarkR | ||
bindata | github.com/kevinburke/go-bindata | Benchmark | ||
capnproto2 | zombiezen.com/go/capnproto2/ | Benchmark(TextMovementBetweenSegments|Growth_MultiSegment) | ||
cespare_mph | github.com/cespare/mph | BenchmarkBuild | ||
cespare_xxhash | github.com/cespare/xxhash | BenchmarkHashes/xxhash-string,n=10_MB | ||
ericlagergren_decimal | github.com/ericlagergren/decimal/benchmarks | BenchmarkPi_decimal_Go_9 | ||
ethereum_bitutil | github.com/ethereum/go-ethereum/common/bitutil | Benchmark(BaseTest2KB|FastTest2KB|Encoding4KBVerySparse) | ||
ethereum_core | github.com/ethereum/go-ethereum/core | BenchmarkChainRead_full_10k | ||
ethereum_corevm | github.com/ethereum/go-ethereum/core/vm | BenchmarkOpDiv128 | ||
ethereum_ecies | github.com/ethereum/go-ethereum/crypto/ecies | BenchmarkGenSharedKeyP256 | ||
ethereum_ethash | github.com/ethereum/go-ethereum/consensus/ethash | BenchmarkHashimotoLight | ||
ethereum_sha3 | github.com/ethereum/go-ethereum/crypto/sha3 | BenchmarkSha3_224_MTU | ||
ethereum_storage | github.com/ethereum/go-ethereum/swarm/storage | BenchmarkJoin_8 | ||
ethereum_trie | github.com/ethereum/go-ethereum/trie | Benchmark | ||
gonum_blas_native | gonum.org/v1/gonum/blas/gonum | Benchmark(DasumMediumUnitaryInc|Dnrm2MediumPosInc) | ||
gonum_community | gonum.org/v1/gonum/graph/community/ | BenchmarkLouvainDirectedMultiplex | ||
gonum_lapack_native | gonum.org/v1/gonum/lapack/gonum | BenchmarkDgeev/Circulant10 | ||
gonum_mat | gonum.org/v1/gonum/mat | Benchmark(MulWorkspaceDense1000Hundredth|ScaleVec10000Inc20) | ||
gonum_path | gonum.org/v1/gonum/graph/path/ | Benchmark(AStarUndirectedmallWorld_10_2_2_2_Heur|Dominators/nested_if_n256) | ||
gonum_topo | gonum.org/v1/gonum/graph/topo/ | Benchmark(TarjanSCCGnp_1000_half|TarjanSCCGnp_10_tenth) | ||
gonum_traverse | gonum.org/v1/gonum/graph/traverse/ | BenchmarkWalkAllBreadthFirstGnp_(10|1000)_tenth | ||
gtank_blake2s | github.com/gtank/blake2s | BenchmarkHash8K | ||
gtank_ed25519 | github.com/gtank/ed25519 | Benchmark(IsOnCurve|ScalarMult) | ||
hugo_helpers | github.com/gohugoio/hugo/helpers | Benchmark(StripHTML|ReaderContains) | ||
hugo_hugolib | github.com/gohugoio/hugo/hugolib | BenchmarkParsePage | ||
hugo_hugolib_sitebuilding | github.com/gohugoio/hugo/hugolib | BenchmarkSiteBuilding/YAML,num_pages=10,num_tags=10,tags_per_page=20,shortcodes,render-12 | ||
k8s_api | k8s.io/kubernetes/pkg/api/testing | BenchmarkEncodeCodecFromInternalProtobuf | ||
k8s_schedulercache | k8s.io/kubernetes/pkg/scheduler/cache | BenchmarkList1kNodes30kPods | ||
minio | github.com/minio/minio/cmd | BenchmarkGetObject5MbFS | ||
nelsam_gxui_interval | github.com/nelsam/gxui/interval | Benchmark | ||
pilosa_bitmaps | benchmarks in roaring/ subdirectory | github.com/pilosa/pilosa | BenchmarkBitmap_IntersectionCount | jaffee@pilosa.com |
semver | github.com/Masterminds/semver | BenchmarkValidateVersionTildeFail | ||
spexs2 | github.com/egonelbre/spexs2/_benchmark/ | BenchmarkRun/10k/1 | ||
uber_zap | go.uber.org/zap/benchmarks | BenchmarkAddingFields/(Zap.Sugar|^[ais]) | ||
uuid | github.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 name | notes | go get path | benchmark regexp | contact |
---|---|---|---|---|
eolian_dsp | buddin.us/eolian/dsp | Benchmark | ||
ethereum_whisperv5 | github.com/ethereum/go-ethereum/whisper/whisperv5 | Benchmark | ||
kanzi | github.com/flanglet/kanzi/go/src/kanzi/benchmark | Benchmark |