mirror of https://github.com/golang/go.git
runtime/pprof: ignore dummy huge page mapping in /proc/self/maps
Change-Id: I72bea1450386100482b4681b20eb9a9af12c7522 Reviewed-on: https://go-review.googlesource.com/41816 Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
parent
d1ac592717
commit
3ddf65015a
|
|
@ -442,12 +442,19 @@ func parseProcSelfMaps(data []byte, addMapping func(lo, hi, offset uint64, file,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
next() // dev
|
next() // dev
|
||||||
next() // inode
|
inode := next() // inode
|
||||||
if line == nil {
|
if line == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
file := string(line)
|
file := string(line)
|
||||||
|
if len(inode) == 1 && inode[0] == '0' && file == "" {
|
||||||
|
// Huge-page text mappings list the initial fragment of
|
||||||
|
// mapped but unpopulated memory as being inode 0.
|
||||||
|
// Don't report that part.
|
||||||
|
// But [vdso] and [vsyscall] are inode 0, so let non-empty file names through.
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: pprof's remapMappingIDs makes two adjustments:
|
// TODO: pprof's remapMappingIDs makes two adjustments:
|
||||||
// 1. If there is an /anon_hugepage mapping first and it is
|
// 1. If there is an /anon_hugepage mapping first and it is
|
||||||
|
|
|
||||||
|
|
@ -191,6 +191,14 @@ ffffffffff600000-ffffffffff601000 r-xp 00000090 00:00 0 [vsysca
|
||||||
7f7d77d41000 7f7d77d64000 00000000 /lib/x86_64-linux-gnu/ld-2.19.so
|
7f7d77d41000 7f7d77d64000 00000000 /lib/x86_64-linux-gnu/ld-2.19.so
|
||||||
7ffc34343000 7ffc34345000 00000000 [vdso]
|
7ffc34343000 7ffc34345000 00000000 [vdso]
|
||||||
ffffffffff600000 ffffffffff601000 00000090 [vsyscall]
|
ffffffffff600000 ffffffffff601000 00000090 [vsyscall]
|
||||||
|
|
||||||
|
00400000-07000000 r-xp 00000000 00:00 0
|
||||||
|
07000000-07093000 r-xp 06c00000 00:2e 536754 /path/to/gobench_server_main
|
||||||
|
07093000-0722d000 rw-p 06c92000 00:2e 536754 /path/to/gobench_server_main
|
||||||
|
0722d000-07b21000 rw-p 00000000 00:00 0
|
||||||
|
c000000000-c000036000 rw-p 00000000 00:00 0
|
||||||
|
->
|
||||||
|
07000000 07093000 06c00000 /path/to/gobench_server_main
|
||||||
`
|
`
|
||||||
|
|
||||||
func TestProcSelfMaps(t *testing.T) {
|
func TestProcSelfMaps(t *testing.T) {
|
||||||
|
|
@ -200,12 +208,15 @@ func TestProcSelfMaps(t *testing.T) {
|
||||||
t.Fatal("malformed test case")
|
t.Fatal("malformed test case")
|
||||||
}
|
}
|
||||||
in, out := tt[:i], tt[i+len("->\n"):]
|
in, out := tt[:i], tt[i+len("->\n"):]
|
||||||
|
if len(out) > 0 && out[len(out)-1] != '\n' {
|
||||||
|
out += "\n"
|
||||||
|
}
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
parseProcSelfMaps([]byte(in), func(lo, hi, offset uint64, file, buildID string) {
|
parseProcSelfMaps([]byte(in), func(lo, hi, offset uint64, file, buildID string) {
|
||||||
fmt.Fprintf(&buf, "%08x %08x %08x %s\n", lo, hi, offset, file)
|
fmt.Fprintf(&buf, "%08x %08x %08x %s\n", lo, hi, offset, file)
|
||||||
})
|
})
|
||||||
if buf.String() != out {
|
if buf.String() != out {
|
||||||
t.Errorf("#%d: have:\n%s\nwant:\n%s", tx, buf.String(), out)
|
t.Errorf("#%d: have:\n%s\nwant:\n%s\n%q\n%q", tx, buf.String(), out, buf.String(), out)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue