Sample Header Ad - 728x90

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