Commit 3ddf6501 authored by Russ Cox's avatar Russ Cox

runtime/pprof: ignore dummy huge page mapping in /proc/self/maps

Change-Id: I72bea1450386100482b4681b20eb9a9af12c7522
Reviewed-on: https://go-review.googlesource.com/41816Reviewed-by: default avatarMichael Matloob <matloob@golang.org>
parent d1ac5927
...@@ -443,11 +443,18 @@ func parseProcSelfMaps(data []byte, addMapping func(lo, hi, offset uint64, file, ...@@ -443,11 +443,18 @@ func parseProcSelfMaps(data []byte, addMapping func(lo, hi, offset uint64, file,
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 ...@@ -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) { ...@@ -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)
} }
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment