Gandharv Kumar Garg | cc35bb9 | 2019-07-13 10:30:06 +0530 | [diff] [blame] | 1 | *The perf dashboard is unmaintained and currently not active* |
| 2 | |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 3 | # Introduction |
| 4 | |
Jason Buberel | 2cf8fc7 | 2015-09-13 18:54:46 -0700 | [diff] [blame] | 5 | [Performance Dashboard](http://build.golang.org/perf) 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](http://build.golang.org/perf), allows to investigate changes [in detail](http://build.golang.org/perfdetail?commit=fb3d6c1631c3f3141f33a01afb4c0a23ef0ea2cf&commit0=82f48826c6c79a3d5697d5e06cac8451f3dc3c7f&kind=builder&builder=linux-amd64-perf&benchmark=http) . |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 6 | |
| 7 | # Builders |
| 8 | |
| 9 | 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. |
| 10 | |
| 11 | # Benchmarks |
| 12 | |
nathany | 5d5229b | 2014-12-10 22:28:24 -0800 | [diff] [blame] | 13 | The builders run benchmarks from the [x/benchmarks](https://golang.org/x/benchmarks) repo: |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 14 | * ` json `: marshals and unmarshals large json object, in several goroutines independently. |
| 15 | * ` http `: http client and server serving "hello world", uses persistent connections and read/write timeouts. |
| 16 | * ` 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. |
| 17 | * ` build `: does 'go build -a std'. |
| 18 | |
| 19 | # Metrics |
| 20 | |
| 21 | Metrics collected are: |
| 22 | * ` allocated `: amount of memory allocated, per iteration, in bytes |
| 23 | * ` allocs `: number of memory allocations, per iteration |
| 24 | * ` cputime `: total CPU time (user+sys from time Unix utility output), can be larger than time when GOMAXPROCS>1, per iteration, in ns |
| 25 | * ` gc-pause-one `: duration of a single garbage collector pause, in ns |
| 26 | * ` gc-pause-total `: total duration of garbage collector pauses, per iteration, ns |
| 27 | * ` latency-50/95/99 `: request latency percentile, in ns |
| 28 | * ` rss `: max memory consumption as reported by OS, in bytes |
| 29 | * ` sys-gc `: memory consumed by garbage collector metadata (` MemStats.GCSys `), in bytes |
| 30 | * ` sys-heap `: memory consumed by heap (` MemStats.HeapSys `), in bytes |
| 31 | * ` sys-other `: unclassified memory consumption (` MemStats.OtherSys `), in bytes |
| 32 | * ` sys-stack `: memory consumed by stacks (` MemStats.StackSys `), in bytes |
| 33 | * ` sys-total `: total memory allocated from OS (` MemStats.Sys `), in bytes |
| 34 | * ` time `: real time (essentially the same as std Go benchmarks output), per iteration, in ns |
| 35 | * ` virtual-mem `: virtual memory consumption as reported by OS, in bytes |
| 36 | |
| 37 | And for build benchmark: |
| 38 | * ` binary-size `: size of the go command, in bytes |
| 39 | * ` build-cputime `: CPU time spent on the build, in ns |
| 40 | * ` build-rss `: max memory consumption of the build process as reported by OS, in bytes |
| 41 | * ` build-time `: real time of the build, in ns |
| 42 | |
| 43 | # Profiles |
| 44 | |
| 45 | The dashboard also collects a set of profiles for every commit, they are available from the [details page](http://build.golang.org/perfdetail?commit=fb3d6c1631c3f3141f33a01afb4c0a23ef0ea2cf&commit0=82f48826c6c79a3d5697d5e06cac8451f3dc3c7f&kind=builder&builder=linux-amd64-perf&benchmark=http). For usual benchmarks [CPU](http://build.golang.org/log/b023711522ca6511f2c9bfb46cdfb511fd77e967) and [memory](http://build.golang.org/log/06bd072aa0dec4936a05b7aa13b9f906b6989865) profiles are collected. For build benchmark - [perf profile](http://build.golang.org/log/34c4f0c7b7ea3521e5356b91775a026607e72d44), [per-process split of CPU time](http://build.golang.org/log/da517b4f6892af8a6b4900dbe58311b665ced00f) and [per-section size](http://build.golang.org/log/fc4287d6a9e280bf35c572c038dbc4414d60bcf8). |
| 46 | |
| 47 | # Perf Changes View |
| 48 | |
| 49 | The [view](http://build.golang.org/perf) allows to see aggregate information about significant performance changes caused by recent commits. |
| 50 | |
| 51 | Rows: |
| 52 | * The first row shows difference between the latest release and tip. |
| 53 | * The rest of the rows show deltas caused by individual commits. |
| 54 | |
| 55 | Columns: |
| 56 | * The first column is commit hash. |
| 57 | * Second - number of benchmarks that were executed for the commit to far. |
| 58 | * Third - metric name, or the special 'failure' metric for build/runtime crashes. |
| 59 | * Fourth - negative deltas. |
| 60 | * Fifth - positive deltas. |
| 61 | * The rest describe commit. |
| 62 | |
| 63 | You can click on any positive/negative delta to see details about the change. |