Failed to run some functions with perf tool in embedded Linux
1
vote
1
answer
139
views
I am working on an embedded Linux system (kernel-5.19.20), and I tried the perf tool in my SOC, found some functions did NOT work.
After run
perf record /test/perf_test
, I got the perf.data
, and perf report
also showed functions list.
I cross-compiled objdump
and addr2line
for my target, then I ran
./perf annotate --addr2line /data/addr2line --objdump /data/objdump
Percent | Source code & Disassembly of perfload for cpu-clock:ppp (33248 samples, percent: local period)
--------------------------------------------------------------------------------------------------------------
:
:
:
: 3 Disassembly of section .text:
:
: 5 0040060c :
: 6 workload2():
0.00 : 40060c: addiu sp,sp,-24
0.00 : 400610: sw s8,20(sp)
0.00 : 400614: move s8,sp
0.00 : 400618: sw zero,12(s8)
0.00 : 40061c: sw zero,8(s8)
0.00 : 400620: b 400698
0.00 : 400624: nop
39.08 : 400628: lw v1,8(s8)
0.00 : 40062c: lw v0,8(s8)
2.07 : 400630: mul v0,v1,v0
0.00 : 400634: lw v1,12(s8)
4.08 : 400638: addu v0,v1,v0
0.00 : 40063c: sw v0,12(s8)
....
Then I tried to make a flamegraph with perf.data
with following commands.
perf script -i perf.data &> perf.unfold
cat perf.unfold | head -20
perfload 1822 1443.361889: 250000 cpu-clock:ppp: 80769534 _raw_spin_unlock+0x3c ([kernel.kallsyms])
perfload 1822 1443.362138: 250000 cpu-clock:ppp: 77eb6a28 __mips_syscall5+0x8 (/lib/ld-linux-mipsn8.so.1)
perfload 1822 1443.362388: 250000 cpu-clock:ppp: 800fe1e0 filemap_map_pages+0x118 ([kernel.kallsyms])
perfload 1822 1443.362639: 250000 cpu-clock:ppp: 77eb75f8 memcpy+0x1c8 (/lib/ld-linux-mipsn8.so.1)
perfload 1822 1443.362945: 250000 cpu-clock:ppp: 800eec8c perf_event_mmap_output+0x218 ([kernel.kallsyms])
perfload 1822 1443.363196: 250000 cpu-clock:ppp: 8001ec38 enable_restore_fp_context+0x208 ([kernel.kallsyms])
perfload 1822 1443.363440: 250000 cpu-clock:ppp: 4005d0 workload1+0x80 (/data/perfload)
perfload 1822 1443.363690: 250000 cpu-clock:ppp: 400584 workload1+0x34 (/data/perfload)
perfload 1822 1443.363939: 250000 cpu-clock:ppp: 4005e8 workload1+0x98 (/data/perfload)
perfload 1822 1443.364189: 250000 cpu-clock:ppp: 4005ec workload1+0x9c (/data/perfload)
perfload 1822 1443.364439: 250000 cpu-clock:ppp: 4005ec workload1+0x9c (/data/perfload)
perfload 1822 1443.364689: 250000 cpu-clock:ppp: 400594 workload1+0x44 (/data/perfload)
perfload 1822 1443.364939: 250000 cpu-clock:ppp: 400588 workload1+0x38 (/data/perfload)
perfload 1822 1443.365189: 250000 cpu-clock:ppp: 400574 workload1+0x24 (/data/perfload)
perfload 1822 1443.365439: 250000 cpu-clock:ppp: 4005d4 workload1+0x84 (/data/perfload)
perfload 1822 1443.365689: 250000 cpu-clock:ppp: 40058c workload1+0x3c (/data/perfload)
perfload 1822 1443.365939: 250000 cpu-clock:ppp: 40058c workload1+0x3c (/data/perfload)
perfload 1822 1443.366189: 250000 cpu-clock:ppp: 40058c workload1+0x3c (/data/perfload)
perfload 1822 1443.366439: 250000 cpu-clock:ppp: 40059c workload1+0x4c (/data/perfload)
perfload 1822 1443.366689: 250000 cpu-clock:ppp: 400598 workload1+0x48 (/data/perfload)
I copied the perf.unfold
to my development host, and ran perl scripts from Greg's website.
stackcollapse-perf.pl ~/shared/perf.unfold &> ~/shared/perf.fold
flamegraph.pl ~/shared/perf.fold > ~/shared/perf.svg
Stack count is low (0). Did something go wrong?
ERROR: No stack counts found
I checked the perf.fold
, its size is 0!!!
The perf
is cross-compiled with following features enabled.
Auto-detecting system features:
... dwarf: [ OFF ]
... dwarf_getlocations: [ OFF ]
... glibc: [ on ]
... libbfd: [ OFF ]
... libbfd-buildid: [ OFF ]
... libcap: [ OFF ]
... libelf: [ on ]
... libnuma: [ OFF ]
... numa_num_possible_cpus: [ OFF ]
... libperl: [ OFF ]
... libpython: [ OFF ]
... libcrypto: [ OFF ]
... libunwind: [ on ]
... libdw-dwarf-unwind: [ OFF ]
... zlib: [ on ]
... lzma: [ OFF ]
... get_cpuid: [ OFF ]
... bpf: [ OFF ]
... libaio: [ on ]
... libzstd: [ OFF ]
The SOC is a MIPS, and I am not sure why flamegraph.pl
failed, it seemed the stack info is empty in perf.data
? Or is there any feature I missed to make the stack unwinding work ? Or perf does NOT support MIPS stack analysis?
Thanks,
Asked by wangt13
(631 rep)
Oct 25, 2024, 12:03 PM
Last activity: Oct 26, 2024, 02:06 AM
Last activity: Oct 26, 2024, 02:06 AM