]> Cypherpunks repositories - gostls13.git/commit
runtime: pad work.full and pad.empty to avoid false sharing
authorLi <gang.g.li@intel.com>
Mon, 22 May 2023 09:00:40 +0000 (17:00 +0800)
committerGopher Robot <gobot@golang.org>
Wed, 24 May 2023 01:03:09 +0000 (01:03 +0000)
commitbdc5533f391ad60303b16a906668f5112ea0a2a2
tree77c2e05097918470e3b8ecbcbb7985c7d7befed5
parent0c3015191f085fe4941da677d1a7787379bc57d9
runtime: pad work.full and pad.empty to avoid false sharing

With the Garbage collector (GC), we observed a false-sharing between
work.full and work.empty. (referenced most from runtime.gcDrain and
runtime.getempty)

This false-sharing becomes worse and impact performance on multi core
system. On Intel Xeon 8480+ and default GC setting(GC=100), we can
observed top HITM>4% (by perf c2c)caused by it.

After resolveed this false-sharing issue, we can get performance 8%~9.7%
improved. Verify workloads:

DeathStarBench/hotelReservation: 9.7% of RPS improved
https://github.com/delimitrou/DeathStarBench/tree/master/hotelReservation

gRPC-go/benchmark: 8% of RPS improved
https://github.com/grpc/grpc-go/tree/master/benchmark

gRPC-go/benchmark 9 iterations' data with master branch:
master         w/ fs opt.
208862.4 246390.9
221680.0 266019.3
223886.9 248789.7
212169.3 257837.8
219922.4 234331.8
197401.7 261627.7
214562.4 255429.7
214328.5 237087.8
229443.2 230591.3

max 229443.2 266019.3 116%
med 214562.4 248789.7 116%
avg 215806.3 248678.5 115%

Change-Id: Ib386de021cd2dbb802a107f487556d848ba9212d
Reviewed-on: https://go-review.googlesource.com/c/go/+/496915
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
src/runtime/mgc.go