mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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>
This commit is contained in:
parent
c444ec3085
commit
81640ea38d
4 changed files with 552 additions and 0 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue