Go Wiki: 性能测试

这些是由社区收集的性能测试,用于衡量 Go 核心(编译器、运行时、垃圾回收器和库)更改的影响。它们应具备以下属性:

  • 它们很重要;有人关心它们运行得是否良好,也许是以金钱衡量的。
  • 它们是可 `go get` 获取的,并且不需要自定义步骤来构建性能测试。
  • 它们可以在 `go test -bench ...` 下运行。
  • 它们运行相对较快,理想情况下单次“运行”不到一秒(也许应该有一套单独的、运行时间更长的性能测试)。
  • 它们的计时不会有不必要的噪声。
  • 它们可以在受限的环境中干净地运行,例如 Docker 或 rkt 容器。
  • 它们与其他列表中已有的性能测试没有不必要的冗余;我们不需要十个 Go 超越函数微基准测试。

这些性能测试会随着时间而变化,这是可以接受的。 它们的预期用途是针对拟议的更改进行性能测试;几何平均值是否更好,是否有任何性能测试变得非常糟糕?

每个性能测试的信息包括(或应包括):

  • 性能测试的简短名称
  • 用于 `go get` 该性能测试的路径
  • 一个用于性能测试套件的正则表达式,排除可能存在噪声、运行时间长或冗余的单个性能测试。
  • (理想情况下)一个用于询问有关性能测试的联系人
简短名称 注释 go get 路径 性能测试正则表达式 联系人
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 位于 `roaring/` 子目录下的性能测试 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)

有一个 性能测试运行器,它可以自动下载、构建和在各种(用户定义的)配置下运行这些性能测试。在 Linux 上,可以使用 perflock 来在一定程度上减少性能测试的噪声。

一些性能测试已被提议但迄今未能通过(由于获取、构建或噪声问题)。

简短名称 注释 go get 路径 性能测试正则表达式 联系人
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

此内容是 Go Wiki 的一部分。