]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: avoid unnecessary scanblock calls
authorJosh Bleecher Snyder <josharian@gmail.com>
Sat, 7 Apr 2018 04:45:55 +0000 (21:45 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 1 May 2018 13:33:17 +0000 (13:33 +0000)
This is the scanstack analog of CL 104737,
which made a similar change for copystack.

name         old time/op  new time/op  delta
ScanStack-8  41.1ms ± 6%  38.9ms ± 5%  -5.52%  (p=0.000 n=50+48)

Change-Id: I7427151dea2895ed3934f8a0f61d96b568019217
Reviewed-on: https://go-review.googlesource.com/105536
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/mgcmark.go

index 7be28209095c2fe8418419bb9d2cc6df18537007..ce3f63883e452f39e91fffa76b62fcd71a2f3eae 100644 (file)
@@ -839,9 +839,11 @@ func scanframeworker(frame *stkframe, cache *pcvalueCache, gcw *gcWork) {
                        print("runtime: pcdata is ", pcdata, " and ", stkmap.n, " locals stack map entries for ", funcname(f), " (targetpc=", targetpc, ")\n")
                        throw("scanframe: bad symbol table")
                }
-               bv := stackmapdata(stkmap, pcdata)
-               size = uintptr(bv.n) * sys.PtrSize
-               scanblock(frame.varp-size, size, bv.bytedata, gcw)
+               if stkmap.nbit > 0 {
+                       bv := stackmapdata(stkmap, pcdata)
+                       size = uintptr(bv.n) * sys.PtrSize
+                       scanblock(frame.varp-size, size, bv.bytedata, gcw)
+               }
        }
 
        // Scan arguments.
@@ -862,7 +864,9 @@ func scanframeworker(frame *stkframe, cache *pcvalueCache, gcw *gcWork) {
                        }
                        bv = stackmapdata(stkmap, pcdata)
                }
-               scanblock(frame.argp, uintptr(bv.n)*sys.PtrSize, bv.bytedata, gcw)
+               if bv.n > 0 {
+                       scanblock(frame.argp, uintptr(bv.n)*sys.PtrSize, bv.bytedata, gcw)
+               }
        }
 }