runtime: don't flush local_tinyallocs

This change makes local_tinyallocs work like the rest of the malloc
stats and doesn't flush local_tinyallocs, instead making that the
source-of-truth.

Change-Id: I3e6cb5f1b3d086e432ce7d456895511a48e3617a
Reviewed-on: https://go-review.googlesource.com/c/go/+/246967
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
This commit is contained in:
Michael Anthony Knyszek 2020-07-23 22:16:46 +00:00 committed by Michael Knyszek
parent a5088e76f1
commit cca3d1e553
4 changed files with 14 additions and 11 deletions

View file

@ -339,7 +339,7 @@ func ReadMemStatsSlow() (base, slow MemStats) {
// Add in frees. readmemstats_m flushed the cached stats, so
// these are up-to-date.
var largeFree, smallFree uint64
var tinyAllocs, largeFree, smallFree uint64
for _, p := range allp {
c := p.mcache
if c == nil {
@ -349,6 +349,9 @@ func ReadMemStatsSlow() (base, slow MemStats) {
largeFree += uint64(c.local_largefree)
slow.Frees += uint64(c.local_nlargefree)
// Collect tiny allocation stats.
tinyAllocs += uint64(c.local_tinyallocs)
// Collect per-sizeclass stats.
for i := 0; i < _NumSizeClasses; i++ {
slow.Frees += uint64(c.local_nsmallfree[i])
@ -357,7 +360,7 @@ func ReadMemStatsSlow() (base, slow MemStats) {
smallFree += uint64(c.local_nsmallfree[i]) * uint64(class_to_size[i])
}
}
slow.Frees += memstats.tinyallocs
slow.Frees += tinyAllocs
slow.Mallocs += slow.Frees
slow.TotalAlloc = slow.Alloc + largeFree + smallFree