aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/stack.go
diff options
context:
space:
mode:
authorLudi Rehak <ludi317@gmail.com>2022-06-25 13:27:11 -0700
committerGopher Robot <gobot@golang.org>2022-08-19 16:04:12 +0000
commitf15761b50bb3a2d1bae9b97f147b2d660e2e4853 (patch)
treee90df0f40d2082dbc39d1ee74dee85e67fc8802e /src/runtime/stack.go
parentdee9adc0f73d361d00a4d9230bb3517f2448b3b0 (diff)
downloadgo-f15761b50bb3a2d1bae9b97f147b2d660e2e4853.tar.xz
runtime: fix formula for computing number of padding bytes
In order to prevent false sharing of cache lines, structs are padded with some number of bytes. These bytes are unused, serving only to make the size of the struct a multiple of the size of the cache line. The current calculation of how much to pad is an overestimation, when the struct size is already a multiple of the cache line size without padding. For these cases, no padding is necessary, and the size of the inner pad field should be 0. The bug is that the pad field is sized to a whole 'nother cache line, wasting space. Here is the current formula that can never return 0: cpu.CacheLinePadSize - unsafe.Sizeof(myStruct{})%cpu.CacheLinePadSize This change simply mods that calculation by cpu.CacheLinePadSize, so that 0 will be returned instead of cpu.CacheLinePadSize. Change-Id: I26a2b287171bf47a3b9121873b2722f728381b5e Reviewed-on: https://go-review.googlesource.com/c/go/+/414214 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Michael Pratt <mpratt@google.com> Auto-Submit: Michael Pratt <mpratt@google.com> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Joedian Reid <joedian@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/runtime/stack.go')
-rw-r--r--src/runtime/stack.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/runtime/stack.go b/src/runtime/stack.go
index b94a4a7249..22dc2d4748 100644
--- a/src/runtime/stack.go
+++ b/src/runtime/stack.go
@@ -157,7 +157,7 @@ const (
// There is a free list for each order.
var stackpool [_NumStackOrders]struct {
item stackpoolItem
- _ [cpu.CacheLinePadSize - unsafe.Sizeof(stackpoolItem{})%cpu.CacheLinePadSize]byte
+ _ [(cpu.CacheLinePadSize - unsafe.Sizeof(stackpoolItem{})%cpu.CacheLinePadSize) % cpu.CacheLinePadSize]byte
}
type stackpoolItem struct {