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

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

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

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

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

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

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

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

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

решение1

Хорошо, на самом деле все нормально, если запустить perf на отладочном ядре, когда загружено только обычное ядро.

Кстати, ядро ​​было установлено с помощью этого руководства для 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 - только для трассировки вызовов):

- 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, не выровняется, то я определенно это увижу — функции для выборок ядра не будут иметь смысла (просто какие-то случайные данные вместо настоящего имени).

Связанный контент