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