mirror of
https://github.com/golang/go
synced 2024-11-14 05:50:27 -07:00
cmd/link: reduce Wasm initial memory size
Currently, for Wasm, the linker sets the initial memory size to the size of global data plus 16 MB. The intention is that it covers the global data and runtime initialization without growing the linear memory. However, the code accounts only the data "section", not the bss "section", therefore the extra 16 MB is actually used to cover bss variables. Also, as seen on the previous CL, the runtime actually didn't use the extra space, which means the program can start without that space. This CL corrects the global data size calculation, and reduces the extra to 1 MB. Currently the runtime's allocation pattern at startup is that it allocates a few pages for the page allocator's metadata, the an 8 MB reservation for the first 4 MB size, 4 MB aligned heap arena (it may be possible to reduce that, but we'll leave that for later). Here we use 1 MB extra space to cover the small allocations, but let the runtime allocate the heap arena, so the linker code and the runtime's allocator are not tightly coupled. For #69018. Change-Id: I39fe1172382ecc03f4b537e43ec710af8075eab3 Reviewed-on: https://go-review.googlesource.com/c/go/+/621636 Reviewed-by: Michael Knyszek <mknyszek@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
4510586f93
commit
24bc473173
@ -365,9 +365,8 @@ func writeTableSec(ctxt *ld.Link, fns []*wasmFunc) {
|
|||||||
func writeMemorySec(ctxt *ld.Link, ldr *loader.Loader) {
|
func writeMemorySec(ctxt *ld.Link, ldr *loader.Loader) {
|
||||||
sizeOffset := writeSecHeader(ctxt, sectionMemory)
|
sizeOffset := writeSecHeader(ctxt, sectionMemory)
|
||||||
|
|
||||||
dataSection := ldr.SymSect(ldr.Lookup("runtime.data", 0))
|
dataEnd := uint64(ldr.SymValue(ldr.Lookup("runtime.end", 0)))
|
||||||
dataEnd := dataSection.Vaddr + dataSection.Length
|
var initialSize = dataEnd + 1<<20 // 1 MB, for runtime init allocating a few pages
|
||||||
var initialSize = dataEnd + 16<<20 // 16MB, enough for runtime init without growing
|
|
||||||
|
|
||||||
const wasmPageSize = 64 << 10 // 64KB
|
const wasmPageSize = 64 << 10 // 64KB
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user