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 getthe 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 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 |
AVX512 Articles AssemblyPolicy Benchmarks Blogs Books BoundingResourceUse CSSStyleGuide ChromeOS CodeReview CodeReviewComments CodeReviewConcurrency CodeTools Comments CommitMessage CommonMistakes CompilerOptimizations Conferences Configuring GoLand for WebAssembly Contributing to gopls CoreDumpDebugging Courses CreatingSubRepository CustomPprofProfiles Darwin DashboardBuilders Deprecated DesignDocuments Diagnostics Download build farm failed logs and debugging DragonFly BSD ErrorValueFAQ Errors ExperienceReports FileTreeDocumentation FreeBSD FromXToGo Frozen Fuzzing trophy case GOPATH Gardening GcToolchainTricks GccgoCrossCompilation GerritAccess GerritBot GithubAccess Go 1.10 Release Party Go 1.6 release party Go 1.8 Release Party Go Community Slides Go Release Cycle Go2 Go2ErrorHandlingFeedback Go2ErrorValuesFeedback Go2GenericsFeedback GoArm GoForCPPProgrammers GoGenerateTools GoGetProxyConfig GoGetTools GoMips GoStrings GoTalks GoUserGroups GoUsers Gomote Gopher HandlingIssues Home HostedContinuousIntegration How to ask for help HowToAsk IDEsAndTextEditorPlugins InstallFromSource InstallTroubleshooting InterfaceSlice InvalidFlag Iota Learn LearnConcurrency LearnErrorHandling LearnServerProgramming LearnTesting Linux LinuxKernelSignalVectorBug Livestreams LockOSThread MacOS12BSDThreadRegisterIssue MethodSets MinimumRequirements MinorReleases Mobile Modules MutexOrChannel NativeClient NetBSD NewSpeakers NoMeToo NoPlusOne NonEnglish OpenBSD PackagePublishing PanicAndRecover PerfDashboard Performance Plan9 Podcasts PortingPolicy PriorDiscussion Projects Proposals ProviderIntegration Questions Quiet Weeks Range RateLimiting ResearchPapers Resolving Problems From Modified Module Path Resources for slog SQLDrivers SQLInterface Screencasts SettingGOPATH SignalHandling SimultaneousAssignment SliceTricks SlowBots Solaris Spectre Spelling Style SuccessStories Switch TableDrivenTests TargetSpecific TestComments TestFailures Timeouts Training Ubuntu Watchflakes WebAccessibilityResourcesAndTips Well known struct tags WhyGo Windows WindowsBuild WindowsCrossCompiling WindowsDLLs X Repositories _Footer cgo golang tools gopherbot gopls integrator FAQ gopls heapdump13 heapdump14 heapdump15 through heapdump17 heapdump15