diff options
author | Michael Anthony Knyszek <mknyszek@google.com> | 2019-09-16 21:23:24 +0000 |
---|---|---|
committer | Michael Knyszek <mknyszek@google.com> | 2019-11-08 18:00:54 +0000 |
commit | a2cd2bd55d1e932b52f0b7dea45a85e058fc77d5 (patch) | |
tree | 1d58c63c070f9e46bc68dd8c33d11cac61035a86 /src/runtime/runtime2.go | |
parent | 81640ea38dc6577bdf1b206b778b968d341c27eb (diff) | |
download | go-a2cd2bd55d1e932b52f0b7dea45a85e058fc77d5.tar.gz go-a2cd2bd55d1e932b52f0b7dea45a85e058fc77d5.zip |
runtime: add per-p page allocation cache
This change adds a per-p free page cache which the page allocator may
allocate out of without a lock. The change also introduces a completely
lockless page allocator fast path.
Although the cache contains at most 64 pages (and usually less), the
vast majority (85%+) of page allocations are exactly 1 page in size.
Updates #35112.
Change-Id: I170bf0a9375873e7e3230845eb1df7e5cf741b78
Reviewed-on: https://go-review.googlesource.com/c/go/+/195701
Run-TryBot: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/runtime/runtime2.go')
-rw-r--r-- | src/runtime/runtime2.go | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index eba2aed092..fe1147e247 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -555,6 +555,7 @@ type p struct { sysmontick sysmontick // last tick observed by sysmon m muintptr // back-link to associated m (nil if idle) mcache *mcache + pcache pageCache raceprocctx uintptr deferpool [5][]*_defer // pool of available defer structs of different sizes (see panic.go) @@ -611,7 +612,7 @@ type p struct { palloc persistentAlloc // per-P to avoid mutex - // _ uint32 // Alignment for atomic fields below + _ uint32 // Alignment for atomic fields below // Per-P GC state gcAssistTime int64 // Nanoseconds in assistAlloc |