]> Cypherpunks repositories - gostls13.git/commit
runtime/internal/maps: only conditionally clear groups when sparse
authorKeith Randall <khr@golang.org>
Thu, 21 Aug 2025 00:33:14 +0000 (17:33 -0700)
committerKeith Randall <khr@golang.org>
Wed, 10 Sep 2025 22:06:16 +0000 (15:06 -0700)
commitde5d7eccb99088e3ab42c0d907da6852d8f9cebe
tree32579f70bd4ab2a3fe70fd307b5b2f2772e7042f
parent8098b99547e2bb802c976a424e486ba94d3222a8
runtime/internal/maps: only conditionally clear groups when sparse

We only want to do the work of clearing slots
if they are full. But we also don't want to do too
much work to figure out whether a slot is full or not,
especially if clearing a slot is cheap.
 1) We decide group-by-group instead of slot-by-slot.
    If any slot in a group is full, we zero the whole group.
 2) If groups are unlikely to be empty, don't bother
    testing for it.
 3) If groups are 50%/50% likely to be empty, also don't
    bother testing, as it confuses the branch predictor. See #75097.
 4) But if a group is really large, do the test anyway, as
    clearing is expensive.

Fixes #75097

Change-Id: I9191865dd3e0fe887751cffe6082ac27d8d8439c
Reviewed-on: https://go-review.googlesource.com/c/go/+/697876
Reviewed-by: Keith Randall <khr@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Keith Randall <khr@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Youlin Feng <fengyoulin@live.com>
src/internal/runtime/maps/table.go