]> Cypherpunks repositories - gostls13.git/commit
runtime: speed up stack copying
authorJosh Bleecher Snyder <josharian@gmail.com>
Wed, 10 May 2017 17:19:43 +0000 (10:19 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Wed, 14 Jun 2017 05:28:24 +0000 (05:28 +0000)
commitaafd96408feef0785d32fd3e1c5a67d4159a98e7
tree38bc0efb8c9769aceeab83d7dfd1b67bd58740e0
parent2f7fbf8851e4c45f7e0d207836a3c7a97eaa1823
runtime: speed up stack copying

I was surprised to see readvarint show up in a cpu profile.

Use a few simple optimizations to speed up stack copying:

* Avoid making a copy of the cache.entries array or any of its elements.
* Use a shift instead of a signed division in stackmapdata.
* Change readvarint to return the number of bytes consumed
  rather than an updated slice.
* Make some minor optimizations to readvarint to help the compiler.
* Avoid called readvarint when the value fits in a single byte.

The first and last optimizations are the most significant,
although they all contribute a little.

Add a benchmark for stack copying that includes lots of different
functions in a recursive loop, to bust the cache.

This might speed up other runtime operations as well;
I only benchmarked stack copying.

name                old time/op  new time/op  delta
StackCopy-8         96.4ms ± 2%  82.7ms ± 1%  -14.24%  (p=0.000 n=20+19)
StackCopyNoCache-8   167ms ± 1%   131ms ± 1%  -21.58%  (p=0.000 n=20+20)

Change-Id: I13d5c455c65073c73b656acad86cf8e8e3c9807b
Reviewed-on: https://go-review.googlesource.com/43150
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/stack_test.go
src/runtime/symtab.go