From: Austin Clements Date: Fri, 29 Apr 2016 14:57:06 +0000 (-0400) Subject: [dev.garbage] runtime: revive sweep fast path X-Git-Tag: go1.7beta1~405^2~1 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b3579c095e00f89d8c92c2aa4fb4af222a96f429;p=gostls13.git [dev.garbage] runtime: revive sweep fast path sweep used to skip mcental.freeSpan (and its locking) if it didn't find any new free objects. We lost that optimization when the freed-object counting changed in dad83f7 to count total free objects instead of newly freed objects. The previous commit brings back counting of newly freed objects, so we can easily revive this optimization by checking that count (like we used to) instead of the total free objects count. Change-Id: I43658707a1c61674d0366124d5976b00d98741a9 Reviewed-on: https://go-review.googlesource.com/22596 Run-TryBot: Austin Clements Reviewed-by: Rick Hudson --- diff --git a/src/runtime/mgcsweep.go b/src/runtime/mgcsweep.go index 82537edaaa..b8e33897c1 100644 --- a/src/runtime/mgcsweep.go +++ b/src/runtime/mgcsweep.go @@ -296,7 +296,7 @@ func (s *mspan) sweep(preserve bool) bool { // But we need to set it before we make the span available for allocation // (return it to heap or mcentral), because allocation code assumes that a // span is already swept if available for allocation. - if freeToHeap || nfree == 0 { + if freeToHeap || nfreed == 0 { // The span must be in our exclusive ownership until we update sweepgen, // check for potential races. if s.state != mSpanInUse || s.sweepgen != sweepgen-1 { @@ -309,7 +309,7 @@ func (s *mspan) sweep(preserve bool) bool { atomic.Store(&s.sweepgen, sweepgen) } - if nfree > 0 && cl != 0 { + if nfreed > 0 && cl != 0 { c.local_nsmallfree[cl] += uintptr(nfreed) res = mheap_.central[cl].mcentral.freeSpan(s, preserve, wasempty) // MCentral_FreeSpan updates sweepgen