mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: count scavenged bits for new allocation for new page allocator
This change makes it so that the new page allocator returns the number of pages that are scavenged in a new allocation so that mheap can update memstats appropriately. The accounting could be embedded into pageAlloc, but that would make the new allocator more difficult to test. Updates #35112. Change-Id: I0f94f563d7af2458e6d534f589d2e7dd6af26d12 Reviewed-on: https://go-review.googlesource.com/c/go/+/195698 Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
73317080e1
commit
e1ddf0507c
5 changed files with 281 additions and 76 deletions
|
|
@ -751,9 +751,10 @@ type PallocBits pallocBits
|
|||
func (b *PallocBits) Find(npages uintptr, searchIdx uint) (uint, uint) {
|
||||
return (*pallocBits)(b).find(npages, searchIdx)
|
||||
}
|
||||
func (b *PallocBits) AllocRange(i, n uint) { (*pallocBits)(b).allocRange(i, n) }
|
||||
func (b *PallocBits) Free(i, n uint) { (*pallocBits)(b).free(i, n) }
|
||||
func (b *PallocBits) Summarize() PallocSum { return PallocSum((*pallocBits)(b).summarize()) }
|
||||
func (b *PallocBits) AllocRange(i, n uint) { (*pallocBits)(b).allocRange(i, n) }
|
||||
func (b *PallocBits) Free(i, n uint) { (*pallocBits)(b).free(i, n) }
|
||||
func (b *PallocBits) Summarize() PallocSum { return PallocSum((*pallocBits)(b).summarize()) }
|
||||
func (b *PallocBits) PopcntRange(i, n uint) uint { return (*pageBits)(b).popcntRange(i, n) }
|
||||
|
||||
// SummarizeSlow is a slow but more obviously correct implementation
|
||||
// of (*pallocBits).summarize. Used for testing.
|
||||
|
|
@ -853,8 +854,12 @@ type ChunkIdx chunkIdx
|
|||
// not in the heap, so is PageAlloc.
|
||||
type PageAlloc pageAlloc
|
||||
|
||||
func (p *PageAlloc) Alloc(npages uintptr) uintptr { return (*pageAlloc)(p).alloc(npages) }
|
||||
func (p *PageAlloc) Free(base, npages uintptr) { (*pageAlloc)(p).free(base, npages) }
|
||||
func (p *PageAlloc) Alloc(npages uintptr) (uintptr, uintptr) {
|
||||
return (*pageAlloc)(p).alloc(npages)
|
||||
}
|
||||
func (p *PageAlloc) Free(base, npages uintptr) {
|
||||
(*pageAlloc)(p).free(base, npages)
|
||||
}
|
||||
func (p *PageAlloc) Bounds() (ChunkIdx, ChunkIdx) {
|
||||
return ChunkIdx((*pageAlloc)(p).start), ChunkIdx((*pageAlloc)(p).end)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue