aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/mgc.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/mgc.go')
-rw-r--r--src/runtime/mgc.go45
1 files changed, 4 insertions, 41 deletions
diff --git a/src/runtime/mgc.go b/src/runtime/mgc.go
index 87b6a748e1..38f343164c 100644
--- a/src/runtime/mgc.go
+++ b/src/runtime/mgc.go
@@ -131,6 +131,7 @@ package runtime
import (
"internal/cpu"
"internal/goarch"
+ "internal/goexperiment"
"internal/runtime/atomic"
"internal/runtime/gc"
"unsafe"
@@ -717,7 +718,7 @@ func gcStart(trigger gcTrigger) {
throw("p mcache not flushed")
}
// Initialize ptrBuf if necessary.
- if p.gcw.ptrBuf == nil {
+ if goexperiment.GreenTeaGC && p.gcw.ptrBuf == nil {
p.gcw.ptrBuf = (*[gc.PageSize / goarch.PtrSize]uintptr)(persistentalloc(gc.PageSize, goarch.PtrSize, &memstats.gcMiscSys))
}
}
@@ -1233,14 +1234,7 @@ func gcMarkTermination(stw worldStop) {
})
}
if debug.gctrace > 1 {
- for i := range pp.gcw.stats {
- memstats.lastScanStats[i].spansDenseScanned += pp.gcw.stats[i].spansDenseScanned
- memstats.lastScanStats[i].spanObjsDenseScanned += pp.gcw.stats[i].spanObjsDenseScanned
- memstats.lastScanStats[i].spansSparseScanned += pp.gcw.stats[i].spansSparseScanned
- memstats.lastScanStats[i].spanObjsSparseScanned += pp.gcw.stats[i].spanObjsSparseScanned
- memstats.lastScanStats[i].sparseObjsScanned += pp.gcw.stats[i].sparseObjsScanned
- }
- clear(pp.gcw.stats[:])
+ pp.gcw.flushScanStats(&memstats.lastScanStats)
}
pp.pinnerCache = nil
})
@@ -1301,38 +1295,7 @@ func gcMarkTermination(stw worldStop) {
print("\n")
if debug.gctrace > 1 {
- var (
- spansDenseScanned uint64
- spanObjsDenseScanned uint64
- spansSparseScanned uint64
- spanObjsSparseScanned uint64
- sparseObjsScanned uint64
- )
- for _, stats := range memstats.lastScanStats {
- spansDenseScanned += stats.spansDenseScanned
- spanObjsDenseScanned += stats.spanObjsDenseScanned
- spansSparseScanned += stats.spansSparseScanned
- spanObjsSparseScanned += stats.spanObjsSparseScanned
- sparseObjsScanned += stats.sparseObjsScanned
- }
- totalObjs := sparseObjsScanned + spanObjsSparseScanned + spanObjsDenseScanned
- totalSpans := spansSparseScanned + spansDenseScanned
- print("scan: total ", sparseObjsScanned, "+", spanObjsSparseScanned, "+", spanObjsDenseScanned, "=", totalObjs, " objs")
- print(", ", spansSparseScanned, "+", spansDenseScanned, "=", totalSpans, " spans\n")
- for i, stats := range memstats.lastScanStats {
- if stats == (sizeClassScanStats{}) {
- continue
- }
- totalObjs := stats.sparseObjsScanned + stats.spanObjsSparseScanned + stats.spanObjsDenseScanned
- totalSpans := stats.spansSparseScanned + stats.spansDenseScanned
- if i == 0 {
- print("scan: class L ")
- } else {
- print("scan: class ", gc.SizeClassToSize[i], "B ")
- }
- print(stats.sparseObjsScanned, "+", stats.spanObjsSparseScanned, "+", stats.spanObjsDenseScanned, "=", totalObjs, " objs")
- print(", ", stats.spansSparseScanned, "+", stats.spansDenseScanned, "=", totalSpans, " spans\n")
- }
+ dumpScanStats()
}
printunlock()
}