Table of Contents
The perf dashboard is unmaintained and currently not active
Introduction
Performance Dashboard does continuous monitoring of performance characteristics of the Go implementation. It notifies codereview threads about any significant changes caused by the commit, allows to see performance changes caused by recent commits, allows to investigate changes in detail .
Builders
The dashboard uses two builders: linux-amd64 running Ubuntu 14.04 and windows-amd64 running Windows 8.1. Both builders has the same hardware: 2 x Intel Xeon E5620 @ 2.4GHz, 8 HT cores, 12GB RAM.
Benchmarks
The builders run benchmarks from the x/benchmarks repo:
json: marshals and unmarshals large json object, in several goroutines independently.http: http client and server serving "hello world", uses persistent connections and read/write timeouts.garbage: parses net package using go/parser, in a loop in several goroutines; half of packages are instantly discarded, the other half is preserved indefinitely; this creates significant pressure on the garbage collector.build: does 'go build -a std'.
Metrics
Metrics collected are:
allocated: amount of memory allocated, per iteration, in bytesallocs: number of memory allocations, per iterationcputime: total CPU time (user+sys from time Unix utility output), can be larger than time when GOMAXPROCS>1, per iteration, in nsgc-pause-one: duration of a single garbage collector pause, in nsgc-pause-total: total duration of garbage collector pauses, per iteration, nslatency-50/95/99: request latency percentile, in nsrss: max memory consumption as reported by OS, in bytessys-gc: memory consumed by garbage collector metadata (MemStats.GCSys), in bytessys-heap: memory consumed by heap (MemStats.HeapSys), in bytessys-other: unclassified memory consumption (MemStats.OtherSys), in bytessys-stack: memory consumed by stacks (MemStats.StackSys), in bytessys-total: total memory allocated from OS (MemStats.Sys), in bytestime: real time (essentially the same as std Go benchmarks output), per iteration, in nsvirtual-mem: virtual memory consumption as reported by OS, in bytes
And for build benchmark:
binary-size: size of the go command, in bytesbuild-cputime: CPU time spent on the build, in nsbuild-rss: max memory consumption of the build process as reported by OS, in bytesbuild-time: real time of the build, in ns
Profiles
The dashboard also collects a set of profiles for every commit, they are available from the details page. For usual benchmarks CPU and memory profiles are collected. For build benchmark - perf profile, per-process split of CPU time and per-section size.
Perf Changes View
The view allows to see aggregate information about significant performance changes caused by recent commits.
Rows:
- The first row shows difference between the latest release and tip.
- The rest of the rows show deltas caused by individual commits.
Columns:
- The first column is commit hash.
- Second - number of benchmarks that were executed for the commit to far.
- Third - metric name, or the special 'failure' metric for build/runtime crashes.
- Fourth - negative deltas.
- Fifth - positive deltas.
- The rest describe commit.
You can click on any positive/negative delta to see details about the change.
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