diff options
author | Michael Anthony Knyszek <mknyszek@google.com> | 2019-09-18 17:51:16 +0000 |
---|---|---|
committer | Michael Knyszek <mknyszek@google.com> | 2019-11-08 18:00:45 +0000 |
commit | 81640ea38dc6577bdf1b206b778b968d341c27eb (patch) | |
tree | 529fd2da22bb25e38bdd4e1d7e81f6e7e84d0498 /src/runtime/export_test.go | |
parent | c444ec308506463bd4ab3226c6aab55746347780 (diff) | |
download | go-81640ea38dc6577bdf1b206b778b968d341c27eb.tar.gz go-81640ea38dc6577bdf1b206b778b968d341c27eb.zip |
runtime: add page cache and tests
This change adds a page cache structure which owns a chunk of free pages
at a given base address. It also adds code to allocate to this cache
from the page allocator. Finally, it adds tests for both.
Notably this change does not yet integrate the code into the runtime,
just into runtime tests.
Updates #35112.
Change-Id: Ibe121498d5c3be40390fab58a3816295601670df
Reviewed-on: https://go-review.googlesource.com/c/go/+/196643
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/runtime/export_test.go')
-rw-r--r-- | src/runtime/export_test.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index 48628370db4..b1ebfba0d11 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -684,6 +684,25 @@ func (d *PallocData) Scavenged() *PallocBits { // Expose fillAligned for testing. func FillAligned(x uint64, m uint) uint64 { return fillAligned(x, m) } +// Expose pageCache for testing. +type PageCache pageCache + +const PageCachePages = pageCachePages + +func NewPageCache(base uintptr, cache, scav uint64) PageCache { + return PageCache(pageCache{base: base, cache: cache, scav: scav}) +} +func (c *PageCache) Empty() bool { return (*pageCache)(c).empty() } +func (c *PageCache) Base() uintptr { return (*pageCache)(c).base } +func (c *PageCache) Cache() uint64 { return (*pageCache)(c).cache } +func (c *PageCache) Scav() uint64 { return (*pageCache)(c).scav } +func (c *PageCache) Alloc(npages uintptr) (uintptr, uintptr) { + return (*pageCache)(c).alloc(npages) +} +func (c *PageCache) Flush(s *PageAlloc) { + (*pageCache)(c).flush((*pageAlloc)(s)) +} + // Expose chunk index type. type ChunkIdx chunkIdx @@ -694,6 +713,9 @@ type PageAlloc pageAlloc func (p *PageAlloc) Alloc(npages uintptr) (uintptr, uintptr) { return (*pageAlloc)(p).alloc(npages) } +func (p *PageAlloc) AllocToCache() PageCache { + return PageCache((*pageAlloc)(p).allocToCache()) +} func (p *PageAlloc) Free(base, npages uintptr) { (*pageAlloc)(p).free(base, npages) } |