Hi all,
I have installed a textual Arch Linux guest (the hypervisor
is KVM) and I am playing with perf and dwarf callchains.
In particular, I am trying to get meaningful stacktraces
for a simple command such as "ls -lR /".
Here is what I did.
* recompile the kernel with
CONFIG_DEBUG_INFO=y
CONFIG_FRAME_POINTER=Y
* recompile the C library with symbols (-g)
* recompile all other dependencies of "ls" (ldd /usr/bin/ls)
with symbols (on my system, that would be libcap, libacl,
libattr)
* recompile the coreutils package with symbols
After that, I executed the following commands:
perf record --call-graph dwarf -g -- ls -lR /
<wait 10s; hit CTRL-C>
perf report --call-graph --stdio
I hit two problems.
Problem n.1: perf report warns me about missing kernel symbols.
No kallsyms or vmlinux with build-id 4c6ab941f31dde04c2a481430218994849927c8d
was found
[ext4] with build id 4c6ab941f31dde04c2a481430218994849927c8d not found,
continuing without symbols
No kallsyms or vmlinux with build-id 21f163b0a8a8b924efdd173b8f83ad723d378958
was found
[drm] with build id 21f163b0a8a8b924efdd173b8f83ad723d378958 not found,
continuing without symbols
No kallsyms or vmlinux with build-id d0bd7dd69886c2dccde18dee760b6d39cc0b5a55
was found[qxl] with build id d0bd7dd69886c2dccde18dee760b6d39cc0b5a55 not
found, continuing without symbols
No kallsyms or vmlinux with build-id 8d13e6f0c4d4f8b4628c8c4bd6c660b0a00576df
was found[ttm] with build id 8d13e6f0c4d4f8b4628c8c4bd6c660b0a00576df not
found, continuing without symbols
...
#
# Samples: 4K of event 'cpu-clock'
# Event count (approx.): 1201250000
#
# Overhead Command Shared Object
Symbol
# ........ ....... ................. .................................
...
7.12% ls [qxl] [k] 0x0000000000009b20 <--- HERE
|
|--4.09%-- 0xffffffffa048c2c2
| |
| |--42.86%-- 0xffffffffa048ee8b
| | 0xffffffffa048ba8f
| | bit_bmove
| | fbcon_redraw_blit.isra.22
| | fbcon_scroll
| | scrup
| | lf
| | do_con_trol
| | do_con_write.part.18
| | con_write
| | do_output_char
| | n_tty_write
| | tty_write
| | vfs_write
| | sys_write
| | system_call_fastpath
| | __GI___libc_write
For example, the 0x0000000000009b20 address should refer to some
function in the qxl module for which no symbol was generated. As far as
I could understand, perf does not seem to be able to extract symbol
information from compressed modules. I had to decompress the qxl.ko.gz
file to get perf report to print the function names.
Is this expected behaviour? How do I get perf to automatically extract
symbols from compressed files?
Problem n.2: sometimes perf prints bogus callchains (in particular
when the various printf() variants are involved).
|--1.46%-- 0xffffffffa048a275
| 0xffffffffa048c110
| 0xffffffffa04909e7
| |
| |--80.00%-- 0xffffffffa0490afa
| | 0xffffffffa048ee8b
| | 0xffffffffa048ba8f
| | bit_bmove
| | fbcon_redraw_blit.isra.22
| | fbcon_scroll
| | scrup
| | lf
| | do_con_trol
| | do_con_write.part.18
| | con_write
| | do_output_char
| | n_tty_write
| | tty_write
| | vfs_write
| | sys_write
| | system_call_fastpath
| | __GI___libc_write
| | |
| | |--50.00%-- vfprintf
| | | 0x0 <---HERE
| | |
| | |--25.00%-- main
| | | __libc_start_main
| | | _start
| | | 0x0 <---HERE
| | |
| | --25.00%-- 0x7facc1df12a0 HERE
To which function would 0x7facc1df12a0 match? It does not even seem to
be in the mapped address space of "ls". I am clueless.
Thanks for your time.
Bye
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html