]> Cypherpunks.ru repositories - gostls13.git/commit
runtime: prepare arenas for use incrementally
authorMichael Anthony Knyszek <mknyszek@google.com>
Mon, 16 Nov 2020 21:57:32 +0000 (21:57 +0000)
committerMichael Knyszek <mknyszek@google.com>
Mon, 15 Mar 2021 20:20:51 +0000 (20:20 +0000)
commitbd6aeca9686d5e672ffda1ea0cfeac7a3e7a20a4
treeb79edac5b7bc53fbc20aaf5521ca466ab6f06bac
parenta9cfd55e2b09735a25976d1b008a0a3c767494f8
runtime: prepare arenas for use incrementally

This change moves the call of sysMap from (*mheap).sysAlloc into
(*mheap).grow, so we only sysMap what we're going to use in the near
future (thanks to the curArena mechanism). The purpose of this change is
to better support systems with strict overcommit rules which generally
accept reserved memory but not prepared memory (see malloc.go for exact
descriptions of these states).

This move requires changing linearAlloc to only optionally map memory.
In one case, with mheap.heapArenaAlloc, we do want it to map memory. But
now in the other case, with mheap.arena, we don't, because we want grow
to take care of it.

The risk with this change is we may make more syscalls than before on
systems with 64 MiB arenas, but because heap growth is relatively rare
this is unlikely to be a noticable issue. We also bound the amount of
syscalls made by only extending curArena (and thus mapping) by
pallocChunkPages*pageSize which is 4 MiB.

Fixes #42612.

Change-Id: I736df696afe78ddb1a747a896caa0db8726027e5
Reviewed-on: https://go-review.googlesource.com/c/go/+/270537
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
src/runtime/export_test.go
src/runtime/malloc.go
src/runtime/mheap.go