mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: retype mheap.reclaimCredit as atomic.Uintptr
[git-generate]
cd src/runtime
mv export_test.go export.go
GOROOT=$(dirname $(dirname $PWD)) rf '
add mheap.reclaimCredit \
// reclaimCredit is spare credit for extra pages swept. Since \
// the page reclaimer works in large chunks, it may reclaim \
// more than requested. Any spare pages released go to this \
// credit pool. \
reclaimCredit_ atomic.Uintptr
ex {
import "runtime/internal/atomic"
var t mheap
var v, w uintptr
var d uintptr
t.reclaimCredit -> t.reclaimCredit_.Load()
t.reclaimCredit = v -> t.reclaimCredit_.Store(v)
atomic.Loaduintptr(&t.reclaimCredit) -> t.reclaimCredit_.Load()
atomic.LoadAcquintptr(&t.reclaimCredit) -> t.reclaimCredit_.LoadAcquire()
atomic.Storeuintptr(&t.reclaimCredit, v) -> t.reclaimCredit_.Store(v)
atomic.StoreReluintptr(&t.reclaimCredit, v) -> t.reclaimCredit_.StoreRelease(v)
atomic.Casuintptr(&t.reclaimCredit, v, w) -> t.reclaimCredit_.CompareAndSwap(v, w)
atomic.Xchguintptr(&t.reclaimCredit, v) -> t.reclaimCredit_.Swap(v)
atomic.Xadduintptr(&t.reclaimCredit, d) -> t.reclaimCredit_.Add(d)
}
rm mheap.reclaimCredit
mv mheap.reclaimCredit_ mheap.reclaimCredit
'
mv export.go export_test.go
Change-Id: I2c567781a28f5d8c2275ff18f2cf605b82f22d09
Reviewed-on: https://go-review.googlesource.com/c/go/+/356712
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
a91e976fd2
commit
016d5eea11
3 changed files with 7 additions and 8 deletions
|
|
@ -124,13 +124,12 @@ type mheap struct {
|
|||
// If this is >= 1<<63, the page reclaimer is done scanning
|
||||
// the page marks.
|
||||
reclaimIndex atomic.Uint64
|
||||
|
||||
// reclaimCredit is spare credit for extra pages swept. Since
|
||||
// the page reclaimer works in large chunks, it may reclaim
|
||||
// more than requested. Any spare pages released go to this
|
||||
// credit pool.
|
||||
//
|
||||
// This is accessed atomically.
|
||||
reclaimCredit uintptr
|
||||
reclaimCredit atomic.Uintptr
|
||||
|
||||
// arenas is the heap arena map. It points to the metadata for
|
||||
// the heap for every arena frame of the entire usable virtual
|
||||
|
|
@ -754,13 +753,13 @@ func (h *mheap) reclaim(npage uintptr) {
|
|||
locked := false
|
||||
for npage > 0 {
|
||||
// Pull from accumulated credit first.
|
||||
if credit := atomic.Loaduintptr(&h.reclaimCredit); credit > 0 {
|
||||
if credit := h.reclaimCredit.Load(); credit > 0 {
|
||||
take := credit
|
||||
if take > npage {
|
||||
// Take only what we need.
|
||||
take = npage
|
||||
}
|
||||
if atomic.Casuintptr(&h.reclaimCredit, credit, credit-take) {
|
||||
if h.reclaimCredit.CompareAndSwap(credit, credit-take) {
|
||||
npage -= take
|
||||
}
|
||||
continue
|
||||
|
|
@ -786,7 +785,7 @@ func (h *mheap) reclaim(npage uintptr) {
|
|||
npage -= nfound
|
||||
} else {
|
||||
// Put spare pages toward global credit.
|
||||
atomic.Xadduintptr(&h.reclaimCredit, nfound-npage)
|
||||
h.reclaimCredit.Add(nfound - npage)
|
||||
npage = 0
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue