mirror of
https://github.com/golang/go
synced 2024-11-17 10:54:50 -07:00
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>
This commit is contained in:
parent
dee9adc0f7
commit
f15761b50b
@ -200,7 +200,7 @@ type mheap struct {
|
||||
// central is indexed by spanClass.
|
||||
central [numSpanClasses]struct {
|
||||
mcentral mcentral
|
||||
pad [cpu.CacheLinePadSize - unsafe.Sizeof(mcentral{})%cpu.CacheLinePadSize]byte
|
||||
pad [(cpu.CacheLinePadSize - unsafe.Sizeof(mcentral{})%cpu.CacheLinePadSize) % cpu.CacheLinePadSize]byte
|
||||
}
|
||||
|
||||
spanalloc fixalloc // allocator for span*
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user