]> Cypherpunks repositories - gostls13.git/commit
go/token: make mutex locking in unpack cheaper
authorDaniel Martí <mvdan@mvdan.cc>
Fri, 19 Aug 2022 09:24:08 +0000 (10:24 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Mon, 22 Aug 2022 15:36:25 +0000 (15:36 +0000)
commitbdecfcb5fcc8705df7d2130310cf6b395f24e4c8
treeafd4ab83d3257e56b2064d44a4c0ac7676a1b2e9
parentfc34fdb4154ac40711209e9234639285e071daa9
go/token: make mutex locking in unpack cheaper

I was profiling the cpu usage of go/printer's only benchmark,
and found that token.File.Unpack was one of the top offenders.

It was mainly the deferred unlock that took a big chunk of time,
and to my surprise, reoving the use of defer helped significantly:

name      old time/op    new time/op    delta
Print-16    5.61ms ± 2%    5.38ms ± 1%  -4.04%  (p=0.000 n=10+8)

name      old speed      new speed      delta
Print-16  9.27MB/s ± 2%  9.64MB/s ± 1%  +4.03%  (p=0.000 n=9+8)

name      old alloc/op   new alloc/op   delta
Print-16     332kB ± 0%     332kB ± 0%    ~     (p=0.363 n=10+10)

name      old allocs/op  new allocs/op  delta
Print-16     3.45k ± 0%     3.45k ± 0%    ~     (all equal)

It seems like #38471 is to blame, as the defer prevents Unlock from
being inlined. Add a TODO as a reminder to come back here once the
compiler issue is fixed.

Change-Id: I5a1c6d36a8e8357435a305a1bc0970ee0358b08a
Reviewed-on: https://go-review.googlesource.com/c/go/+/424920
Reviewed-by: Alan Donovan <adonovan@google.com>
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
src/go/token/position.go