Perf в ядре отладки MIPS, не в состоянии включить frame_pointer - PullRequest
2 голосов
/ 20 февраля 2020

Я пытаюсь использовать perf инструмент для MIPS и сталкиваюсь с некоторыми проблемами при получении бэк-стэков.

Как включить FRAME_POINTER для mips? У меня включен DEBUG_KERNEL, но похоже, что -fno-omit-frame-pointer не применяется для арки MIPS в ядре .

enter image description here

Означает ли это, что для MIPS невозможно выполнить разматывание стека на основе указателя кадра с помощью perf?

Я не вижу, чтобы набор инструментов mips жаловался на флаг -fno-omit-frame-pointer

РЕДАКТИРОВАТЬ1

Я могу записывать перф события. Пример выходных данных для отчета о перфекте

enter image description here

Отчет не очень поможет без разматывания стека.

# ./perf --version
perf version 5.6.rc2.gd04712cd3bd7
# uname -a
Linux localhost 3.14.28-1.19 #1 SMP Mon Feb 17 16:48:44 IST 2020 mips GNU/Linux

EDIT2

Обнаружены определенные функции

Auto-detecting system features:
...                         dwarf: [ on  ]
...            dwarf_getlocations: [ on  ]
...                         glibc: [ on  ]
...                          gtk2: [ OFF ]
...                      libaudit: [ on  ]
...                        libbfd: [ OFF ]
...                        libcap: [ OFF ]
...                        libelf: [ on  ]
...                       libnuma: [ OFF ]
...        numa_num_possible_cpus: [ OFF ]
...                       libperl: [ OFF ]
...                     libpython: [ OFF ]
...                     libcrypto: [ OFF ]
...                     libunwind: [ OFF ]
...            libdw-dwarf-unwind: [ on  ]
...                          zlib: [ on  ]
...                          lzma: [ on  ]
...                     get_cpuid: [ OFF ]
...                           bpf: [ OFF ]
...                        libaio: [ on  ]
...                       libzstd: [ OFF ]
...        disassembler-four-args: [ OFF ]

EDIT3

Я вижу, что проверка функций для libunwind не удалась

cat linux-5.6-rc2/tools/build/feature/test-libunwind.make.output
/tmp/ccQnV5jZ.o: In function `main':
test-libunwind.c:(.text+0x1c): undefined reference to `_Umips_create_addr_space'
test-libunwind.c:(.text+0x4c): undefined reference to `_Umips_init_remote'
test-libunwind.c:(.text+0x70): undefined reference to `_Umips_dwarf_search_unwind_table'
collect2: error: ld returned 1 exit status

Если я вижу make-файл для функциональных тестов, связывание libunwind для MIPS не выполняется.

EDIT4

Обычный рабочий процесс

perf record -F 99 -ag -e cycles:u -- sleep 5
perf report

Попытка использовать карлика

# perf record -F 99 -ag --call-graph=dwarf -- sleep 10                                                                                                                                                   
Error:
The sys_perf_event_open() syscall returned with 89 (Function not implemented) for event (cycles).
/bin/dmesg | grep -i perf may provide additional information.

dmesg пусто

...