mirror of
https://github.com/golang/go
synced 2024-11-12 00:30:22 -07:00
runtime: sample large heap allocations correctly
Remove an unnecessary check on the heap sampling code that forced sampling
of all heap allocations larger than the sampling rate. This need to follow
a poisson process so that they can be correctly unsampled. Maintain a check
for MemProfileRate==1 to provide a mechanism for full sampling, as
documented in https://golang.org/pkg/runtime/#pkg-variables.
Additional testing for this change is on cl/129117.
Fixes #26618
Change-Id: I7802bde2afc655cf42cffac34af9bafeb3361957
GitHub-Last-Rev: 471f747af8
GitHub-Pull-Request: golang/go#29791
Reviewed-on: https://go-review.googlesource.com/c/158337
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
This commit is contained in:
parent
c077c74312
commit
dc889025c7
@ -1012,7 +1012,7 @@ func mallocgc(size uintptr, typ *_type, needzero bool) unsafe.Pointer {
|
||||
}
|
||||
|
||||
if rate := MemProfileRate; rate > 0 {
|
||||
if size < uintptr(rate) && int32(size) < c.next_sample {
|
||||
if rate != 1 && int32(size) < c.next_sample {
|
||||
c.next_sample -= int32(size)
|
||||
} else {
|
||||
mp := acquirem()
|
||||
|
5
src/runtime/testdata/testprog/memprof.go
vendored
5
src/runtime/testdata/testprog/memprof.go
vendored
@ -21,7 +21,10 @@ var memProfBuf bytes.Buffer
|
||||
var memProfStr string
|
||||
|
||||
func MemProf() {
|
||||
for i := 0; i < 1000; i++ {
|
||||
// Force heap sampling for determinism.
|
||||
runtime.MemProfileRate = 1
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
fmt.Fprintf(&memProfBuf, "%*d\n", i, i)
|
||||
}
|
||||
memProfStr = memProfBuf.String()
|
||||
|
Loading…
Reference in New Issue
Block a user