Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

powerpc: Use unstripped VDSO image for more accurate profiling data

We are seeing a lot of hits in the VDSO that are not resolved by perf.
A while(1) gettimeofday() loop shows the issue:

27.64% [vdso] [.] 0x000000000000060c
22.57% [vdso] [.] 0x0000000000000628
16.88% [vdso] [.] 0x0000000000000610
12.39% [vdso] [.] __kernel_gettimeofday
6.09% [vdso] [.] 0x00000000000005f8
3.58% test [.] 00000037.plt_call.gettimeofday@@GLIBC_2.18
2.94% [vdso] [.] __kernel_datapage_offset
2.90% test [.] main

We are using a stripped VDSO image which means only symbols with
relocation info can be resolved. There isn't a lot of point to
stripping the VDSO, the debug info is only about 1kB:

4680 arch/powerpc/kernel/vdso64/vdso64.so
5815 arch/powerpc/kernel/vdso64/vdso64.so.dbg

By using the unstripped image, we can resolve all the symbols in the
VDSO and the perf profile data looks much better:

76.53% [vdso] [.] __do_get_tspec
12.20% [vdso] [.] __kernel_gettimeofday
5.05% [vdso] [.] __get_datapage
3.20% test [.] main
2.92% test [.] 00000037.plt_call.gettimeofday@@GLIBC_2.18

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

authored by

Anton Blanchard and committed by
Benjamin Herrenschmidt
24b659a1 a0a4419e

+2 -2
+1 -1
arch/powerpc/kernel/vdso32/vdso32_wrapper.S
··· 6 6 .globl vdso32_start, vdso32_end 7 7 .balign PAGE_SIZE 8 8 vdso32_start: 9 - .incbin "arch/powerpc/kernel/vdso32/vdso32.so" 9 + .incbin "arch/powerpc/kernel/vdso32/vdso32.so.dbg" 10 10 .balign PAGE_SIZE 11 11 vdso32_end: 12 12
+1 -1
arch/powerpc/kernel/vdso64/vdso64_wrapper.S
··· 6 6 .globl vdso64_start, vdso64_end 7 7 .balign PAGE_SIZE 8 8 vdso64_start: 9 - .incbin "arch/powerpc/kernel/vdso64/vdso64.so" 9 + .incbin "arch/powerpc/kernel/vdso64/vdso64.so.dbg" 10 10 .balign PAGE_SIZE 11 11 vdso64_end: 12 12