From: Michael Anthony Knyszek Date: Wed, 7 Sep 2022 20:14:46 +0000 (+0000) Subject: runtime: make mheap.pagesInUse an atomic.Uintptr X-Git-Tag: go1.20rc1~1106 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5a379654952f8103d801cbccb5112c3e9976b104;p=gostls13.git runtime: make mheap.pagesInUse an atomic.Uintptr This change fixes an old TODO that made it a uint64 because it would make alignment within mheap more complicated. Now that we don't have to worry about it since we're using atomic types as much as possible, switch to using a Uintptr. This likely will improve performance a tiny bit on 32-bit platforms, but really it's mostly cleanup. Change-Id: Ie705799a111ccad977fc1f43de8b50cf611be303 Reviewed-on: https://go-review.googlesource.com/c/go/+/429221 Reviewed-by: Keith Randall Reviewed-by: Keith Randall Auto-Submit: Michael Knyszek TryBot-Result: Gopher Robot Run-TryBot: Michael Knyszek --- diff --git a/src/runtime/mheap.go b/src/runtime/mheap.go index 610011863b..cd4634448c 100644 --- a/src/runtime/mheap.go +++ b/src/runtime/mheap.go @@ -100,13 +100,11 @@ type mheap struct { // accounting for current progress. If we could only adjust // the slope, it would create a discontinuity in debt if any // progress has already been made. - pagesInUse atomic.Uint64 // pages of spans in stats mSpanInUse - pagesSwept atomic.Uint64 // pages swept this cycle - pagesSweptBasis atomic.Uint64 // pagesSwept to use as the origin of the sweep ratio - sweepHeapLiveBasis uint64 // value of gcController.heapLive to use as the origin of sweep ratio; written with lock, read without - sweepPagesPerByte float64 // proportional sweep ratio; written with lock, read without - // TODO(austin): pagesInUse should be a uintptr, but the 386 - // compiler can't 8-byte align fields. + pagesInUse atomic.Uintptr // pages of spans in stats mSpanInUse + pagesSwept atomic.Uint64 // pages swept this cycle + pagesSweptBasis atomic.Uint64 // pagesSwept to use as the origin of the sweep ratio + sweepHeapLiveBasis uint64 // value of gcController.heapLive to use as the origin of sweep ratio; written with lock, read without + sweepPagesPerByte float64 // proportional sweep ratio; written with lock, read without // Page reclaimer state @@ -1379,7 +1377,7 @@ HaveSpan: atomic.Or8(&arena.pageInUse[pageIdx], pageMask) // Update related page sweeper stats. - h.pagesInUse.Add(int64(npages)) + h.pagesInUse.Add(npages) } // Make sure the newly allocated span will be observed @@ -1529,7 +1527,7 @@ func (h *mheap) freeSpanLocked(s *mspan, typ spanAllocType) { print("mheap.freeSpanLocked - span ", s, " ptr ", hex(s.base()), " allocCount ", s.allocCount, " sweepgen ", s.sweepgen, "/", h.sweepgen, "\n") throw("mheap.freeSpanLocked - invalid free") } - h.pagesInUse.Add(-int64(s.npages)) + h.pagesInUse.Add(-s.npages) // Clear in-use bit in arena page bitmap. arena, pageIdx, pageMask := pageIndexOf(s.base())