]> Cypherpunks repositories - gostls13.git/commit
runtime: don't hold global gcBitsArenas lock over allocation
authorAustin Clements <austin@google.com>
Fri, 16 Dec 2016 20:56:13 +0000 (15:56 -0500)
committerAustin Clements <austin@google.com>
Mon, 6 Mar 2017 18:40:23 +0000 (18:40 +0000)
commit6c4a8d195b627bf216c6cd22e8237c6faf99cad5
tree15da406652c156636ee23c2d4421a74bcb0cd94f
parent4e428907c5d34b31e5d21c17917f70b0d1f0e4f6
runtime: don't hold global gcBitsArenas lock over allocation

Currently, newArena holds the gcBitsArenas lock across allocating
memory from the OS for a new gcBits arena. This is a global lock and
allocating physical memory can be expensive, so this has the potential
to cause high lock contention, especially since every single span
sweep operation calls newArena (via newMarkBits).

Improve the situation by temporarily dropping the lock across
allocation. This means the caller now has to revalidate its
assumptions after the lock is dropped, so this also factors out that
code path and reinvokes it after the lock is acquired.

Change-Id: I1113200a954ab4aad16b5071512583cfac744bdc
Reviewed-on: https://go-review.googlesource.com/34594
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: Rick Hudson <rlh@golang.org>
src/runtime/mheap.go