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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to