runtime: If no split stacks, allocate stacks using mmap on 64-bit systems.
authorIan Lance Taylor <ian@gcc.gnu.org>
Sat, 31 Oct 2015 23:48:19 +0000 (23:48 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Sat, 31 Oct 2015 23:48:19 +0000 (23:48 +0000)
commit2b193803d720f1cb5451af62d0805e7371851578
tree9c767b63079e2f30d1689cd0eade8669a97ec459
parentda235df878ef89ef944328af97cafed56987c8a2
runtime: If no split stacks, allocate stacks using mmap on 64-bit systems.

    When not using split stacks, libgo allocate large stacks for each
    goroutine.  On a 64-bit system, libgo allocates a maximum of 128G for
    the Go heap, and allocates 4M for each stack.  When the stacks are
    allocated from the Go heap, the result is that a program can only create
    32K goroutines, which is not enough for an active Go server.  This patch
    changes libgo to allocate the stacks using mmap directly, rather than
    allocating them out of the Go heap.  This change is only done for 64-bit
    systems when not using split stacks.  When using split stacks, the
    stacks are allocated using mmap directly anyhow.  On a 32-bit system,
    there is no maximum size for the Go heap, or, rather, the maximum size
    is the available address space anyhow.

    Reviewed-on: https://go-review.googlesource.com/16531

From-SVN: r229636
gcc/go/gofrontend/MERGE
libgo/runtime/proc.c