]> Cypherpunks repositories - gostls13.git/commit
runtime: redo heap bitmap
authorKeith Randall <khr@golang.org>
Fri, 29 Apr 2022 20:21:44 +0000 (13:21 -0700)
committerKeith Randall <khr@google.com>
Mon, 8 Aug 2022 16:57:33 +0000 (16:57 +0000)
commitb589208c8cc6e08239868f47e12c1449cd797bac
treebf4b22045d7dd4e90bdaf1b939bad3978f7d7dda
parente7307034ccdd3c3e482f80b9ea6d4a69bb04d7b6
runtime: redo heap bitmap

Use just 1 bit per word to record the ptr/nonptr bitmap.
Use word-sized operations to manipulate the bitmap, so we can operate
on up to 64 ptr/nonptr bits at a time.

Use a separate bitmap, one bit per word of the ptr/nonptr bitmap,
to encode a no-more-pointers signal. Since we can check 64 ptr/nonptr
bits at once, knowing the exact last pointer location is not necessary.

This cleans up the bitmap implementation significantly, which will
hopefully make it faster. TODO: measure

As a followon CL, we should make the gcdata bitmap an array of
uintptr instead of an array of byte, so we can load 64 bits of it at once.
Similarly for the processing of gc programs.

Change-Id: I18151b1876d9543599800dec51e2a1b19df97d49
Reviewed-on: https://go-review.googlesource.com/c/go/+/407035
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Keith Randall <khr@google.com>
12 files changed:
src/cmd/compile/internal/test/inl_test.go
src/reflect/all_test.go
src/runtime/cgocall.go
src/runtime/cgocheck.go
src/runtime/heapdump.go
src/runtime/malloc.go
src/runtime/mbitmap.go
src/runtime/mcache.go
src/runtime/mcentral.go
src/runtime/mgcmark.go
src/runtime/mheap.go
src/runtime/slice.go