]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: increase number of stack orders to 4
authorKeith Randall <khr@golang.org>
Sat, 27 Dec 2014 02:10:59 +0000 (18:10 -0800)
committerKeith Randall <khr@golang.org>
Wed, 7 Jan 2015 20:13:06 +0000 (20:13 +0000)
Cache 2KB, 4KB, 8KB, and 16KB stacks.  Larger stacks
will be allocated directly.  There is no point in cacheing
32KB+ stacks as we ask for and return 32KB at a time
from the allocator.

Note that the minimum stack is 8K on windows/64bit and 4K on
windows/32bit and plan9.  For these os/arch combinations,
the number of stack orders is less so that we have the same
maximum cached size.

Fixes #9045

Change-Id: Ia4195dd1858fb79fc0e6a91ae29c374d28839e44
Reviewed-on: https://go-review.googlesource.com/2098
Reviewed-by: Russ Cox <rsc@golang.org>
src/runtime/malloc2.go

index 8cdf668214b1a20e72da15d8502e0dc744faa45c..54321e9c0883e73bfa9be625da21666fca1fdbf2 100644 (file)
@@ -117,7 +117,17 @@ const (
 
        // Number of orders that get caching.  Order 0 is FixedStack
        // and each successive order is twice as large.
-       _NumStackOrders = 3
+       // We want to cache 2KB, 4KB, 8KB, and 16KB stacks.  Larger stacks
+       // will be allocated directly.
+       // Since FixedStack is different on different systems, we
+       // must vary NumStackOrders to keep the same maximum cached size.
+       //   OS               | FixedStack | NumStackOrders
+       //   -----------------+------------+---------------
+       //   linux/darwin/bsd | 2KB        | 4
+       //   windows/32       | 4KB        | 3
+       //   windows/64       | 8KB        | 2
+       //   plan9            | 4KB        | 3
+       _NumStackOrders = 4 - ptrSize/4*goos_windows - 1*goos_plan9
 
        // Number of bits in page to span calculations (4k pages).
        // On Windows 64-bit we limit the arena to 32GB or 35 bits.