aboutsummaryrefslogtreecommitdiff
path: root/src/os/exec
diff options
context:
space:
mode:
authorRichard Miller <miller.research@gmail.com>2019-11-19 13:15:28 +0000
committerDavid du Colombier <0intro@gmail.com>2019-11-28 15:16:27 +0000
commit8054b13536fc71d6f8867f90d7614de4064191ba (patch)
tree72cb015442703e0ec00c3689cace8f1c0ef5498a /src/os/exec
parent8a5af7910a9b157c02736c3e0998a587bb8511c1 (diff)
downloadgo-8054b13536fc71d6f8867f90d7614de4064191ba.tar.xz
runtime: on plan9 don't return substitute address for sysReserve
Plan 9 doesn't have a way to reserve virtual memory, so the implementation of sysReserve allocates memory space (which won't be backed with real pages until the virtual pages are referenced). If the space is then freed with sysFree, it's not returned to the OS (because Plan 9 doesn't allow shrinking a shared address space), but it must be cleared to zeroes in case it's reallocated subsequently. This interacts badly with the way mallocinit on 64-bit machines sets up the heap, calling sysReserve repeatedly for a very large (64MB?) arena with a non-nil address hint, and then freeing the space again because it doesn't have the expected alignment. The repeated clearing of multiple megabytes adds significant startup time to every go program. We correct this by restricting sysReserve to allocate memory only when the caller doesn't provide an address hint. If a hint is provided, sysReserve will now return nil instead of allocating memory at a different address. Fixes #27744 Change-Id: Iae5a950adefe4274c4bc64dd9c740d19afe4ed1c Reviewed-on: https://go-review.googlesource.com/c/go/+/207917 Run-TryBot: David du Colombier <0intro@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David du Colombier <0intro@gmail.com>
Diffstat (limited to 'src/os/exec')
0 files changed, 0 insertions, 0 deletions