]> Cypherpunks.ru repositories - gostls13.git/commitdiff
runtime: split out pointer/scalar metadata from heapArena
authorMichael Anthony Knyszek <mknyszek@google.com>
Sat, 28 Oct 2023 16:20:04 +0000 (16:20 +0000)
committerGopher Robot <gobot@golang.org>
Thu, 2 Nov 2023 17:24:39 +0000 (17:24 +0000)
We're going to want to fork this data in the near future for a
GOEXPERIMENT, so break it out now.

Change-Id: Ia7ded850bb693c443fe439c6b7279dcac638512c
Reviewed-on: https://go-review.googlesource.com/c/go/+/537978
Reviewed-by: Keith Randall <khr@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>

src/runtime/mbitmap.go
src/runtime/mheap.go

index 20323ff82d6731503ea90d5db1ceb78185a0bdc5..e918b3d48938fa3a1a1b372b055a6bfc6744e9bd 100644 (file)
@@ -46,6 +46,27 @@ import (
        "unsafe"
 )
 
+// heapArenaPtrScalar contains the per-heapArena pointer/scalar metadata for the GC.
+type heapArenaPtrScalar struct {
+       // bitmap stores the pointer/scalar bitmap for the words in
+       // this arena. See mbitmap.go for a description.
+       // This array uses 1 bit per word of heap, or 1.6% of the heap size (for 64-bit).
+       bitmap [heapArenaBitmapWords]uintptr
+
+       // If the ith bit of noMorePtrs is true, then there are no more
+       // pointers for the object containing the word described by the
+       // high bit of bitmap[i].
+       // In that case, bitmap[i+1], ... must be zero until the start
+       // of the next object.
+       // We never operate on these entries using bit-parallel techniques,
+       // so it is ok if they are small. Also, they can't be bigger than
+       // uint16 because at that size a single noMorePtrs entry
+       // represents 8K of memory, the minimum size of a span. Any larger
+       // and we'd have to worry about concurrent updates.
+       // This array uses 1 bit per word of bitmap, or .024% of the heap size (for 64-bit).
+       noMorePtrs [heapArenaBitmapWords / 8]uint8
+}
+
 // addb returns the byte pointer p+n.
 //
 //go:nowritebarrier
index 42318ca04cce8284ec9f07adad439f112f56d91c..62ad5e2f29c4b85e0a55fff6632d7577b42c5370 100644 (file)
@@ -239,23 +239,8 @@ var mheap_ mheap
 type heapArena struct {
        _ sys.NotInHeap
 
-       // bitmap stores the pointer/scalar bitmap for the words in
-       // this arena. See mbitmap.go for a description.
-       // This array uses 1 bit per word of heap, or 1.6% of the heap size (for 64-bit).
-       bitmap [heapArenaBitmapWords]uintptr
-
-       // If the ith bit of noMorePtrs is true, then there are no more
-       // pointers for the object containing the word described by the
-       // high bit of bitmap[i].
-       // In that case, bitmap[i+1], ... must be zero until the start
-       // of the next object.
-       // We never operate on these entries using bit-parallel techniques,
-       // so it is ok if they are small. Also, they can't be bigger than
-       // uint16 because at that size a single noMorePtrs entry
-       // represents 8K of memory, the minimum size of a span. Any larger
-       // and we'd have to worry about concurrent updates.
-       // This array uses 1 bit per word of bitmap, or .024% of the heap size (for 64-bit).
-       noMorePtrs [heapArenaBitmapWords / 8]uint8
+       // heapArenaPtrScalar contains pointer/scalar data about the heap for this heap arena.
+       heapArenaPtrScalar
 
        // spans maps from virtual address page ID within this arena to *mspan.
        // For allocated spans, their pages map to the span itself.