aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/mksizeclasses.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2021-03-12 16:58:10 -0800
committerMatthew Dempsky <mdempsky@google.com>2021-03-13 04:53:32 +0000
commita8a85281caf21831ee51ea8c879cbba94bcce256 (patch)
tree0cd1ff549dbdd3904d7580ae719228f4f4d82ad4 /src/runtime/mksizeclasses.go
parent8e725f8452ac0ece548837a95d125bc67b9d8828 (diff)
downloadgo-a8a85281caf21831ee51ea8c879cbba94bcce256.tar.xz
runtime: fix documented alignment of 32KiB and 64KiB size classes
As Cherry pointed out on golang.org/cl/299909, the page allocator doesn't guarantee any alignment for multi-page allocations, so object alignments are thus implicitly capped at page alignment. Change-Id: I6f5df27f269b095cde54056f876fe4240f69c5c7 Reviewed-on: https://go-review.googlesource.com/c/go/+/301292 Reviewed-by: Cherry Zhang <cherryyz@google.com> Trust: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/runtime/mksizeclasses.go')
-rw-r--r--src/runtime/mksizeclasses.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/runtime/mksizeclasses.go b/src/runtime/mksizeclasses.go
index ddbf1bf7fe..b1b10e9e02 100644
--- a/src/runtime/mksizeclasses.go
+++ b/src/runtime/mksizeclasses.go
@@ -239,7 +239,7 @@ func computeDivMagic(c *class) {
func printComment(w io.Writer, classes []class) {
fmt.Fprintf(w, "// %-5s %-9s %-10s %-7s %-10s %-9s %-9s\n", "class", "bytes/obj", "bytes/span", "objects", "tail waste", "max waste", "min align")
prevSize := 0
- var minAligns [32]int
+ var minAligns [pageShift + 1]int
for i, c := range classes {
if i == 0 {
continue
@@ -249,6 +249,10 @@ func printComment(w io.Writer, classes []class) {
tailWaste := spanSize - c.size*(spanSize/c.size)
maxWaste := float64((c.size-prevSize-1)*objects+tailWaste) / float64(spanSize)
alignBits := bits.TrailingZeros(uint(c.size))
+ if alignBits > pageShift {
+ // object alignment is capped at page alignment
+ alignBits = pageShift
+ }
for i := range minAligns {
if i > alignBits {
minAligns[i] = 0