Загрузка отладочного ядра для perf

Я пытаюсь сделать некоторые тесты производительности, я обнаружил, что большинство накладных расходов - это insde ядра (kernel.kallsyms).

Поэтому мне нужно ядро ​​с отладочными символами и извлеченным vmlinuz для запуска отчета perf с опцией -k.

Я установил отладочный пакет ядра из ddebs, но я не уверен, как загрузить ядро. Я запускаю update-grub2, но ядро ​​не появилось в списке..

Я проверил пакет и обнаружил, что ядро ​​установлено в / usr / lib / debug - есть его библиотеки (libc и т. Д.) И модули ядра.

Теперь я не могу найти способ загрузки ядра во время загрузки.

Я предполагаю, что мне нужно быть запущенным ядром с отладочными символами для правильной работы perf с опцией -k - иначе адреса памяти не будут отображаться правильно - верно?

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

1 ответ

Хорошо, на самом деле это нормально работает с ядром отладки, когда загружено только нормальное ядро.

Кстати, ядро ​​было установлено с этим руководством для systemtap: https://wiki.ubuntu.com/Kernel/Systemtap

Я заметил несколько вещей - ядро ​​отладки уже извлечено - имя vmlinux, а не vmlinuz и его большое..

Во-вторых, когда я загружаю его в GDB, я вижу точно такое же число, и время сборки совпадает с моим загруженным неотладочным ядром:

uname -a
Linux delo 3.13.0-55-generic #94-Ubuntu SMP Thu Jun 18 00:27:10 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

и GDB (на основе этого:

(gdb) print init_uts_ns.name
$1 = {sysname = "Linux", '\000' <repeats 59 times>, nodename = "(none)", '\000' <repeats 58 times>, 
release = "3.13.0-55-generic", '\000' <repeats 47 times>, version = 
"#94-Ubuntu SMP Thu Jun 18 00:27:10 UTC 2015", '\000' <repeats 21 times>, 
machine = "x86_64", '\000' <repeats 58 times>, domainname = "(none)", '\000' <repeats 58 times>}

Я имею в виду часть № 94... то же самое.

Когда я запускаю записанный перф с:

perf report -g -k /usr/lib/debug/boot/vmlinux-3.13.0-55-generic

это действительно работает нормально - я вижу символы ядра, переведенные в реальные функции (-g только для calltrace):

- 3,18%  app  [kernel.kallsyms]  [k] copy_user_enhanced_fast_string
 - copy_user_enhanced_fast_string
  - 98,98% system_call 
     -syscall 
       68,60% 0xbeef0100
       31,40% 0xbeee0100 
  + 0,54% generic_file_aio_read 

кто-то сказал мне, что когда ядро ​​загрузится и ядро, используемое perf, не выровняется, я определенно это увижу - функции к образцам ядра не будут иметь смысла (только некоторые случайные данные вместо реального имени).

Другие вопросы по тегам